Accéder au contenu principal

Transformez vos applications Java en applications Web avec WebSwing


J’ai longtemps cherché un moyen simple pour développer des applications Web en Java se rapprochant de Swing. J’ai ainsi essayé OpenLazlo (arrêté, mais toujours téléchargeable), Echo2 & 3 (plus très dynamique) et Vaadin dont j’ai déjà parlé dans un billet précédent. Celui qui se rapproche le plus du développement d’une application Swing reste incontestablement Vaadin. Cependant, les classes utilisées sont tout de même différentes de Swing. Il y a donc un effort de portage de l’application existante qui peut être relativement conséquent.
J’ai récemment trouvé l’application WebSwing, une application Open Source qui permet de transformer instantanément vos applications Java en application Web. Quand je dis instantanément, cela veut dire, sans aucune modification du code existant. Il faut juste indiquer l’application à exécuter, ainsi que les librairies nécessaires.

Installation de WebSwing

L’installation de WebSwing est relativement simple. Il suffit de télécharger le binaire à l’adresse : http://webswing.org/#!/downloads
Une fois le fichier zip décompressé, sous Windows, exécutez le fichier webswing.bat (webswing.sh) sous Unix.
  C:\webswing-2.4>java -jar webswing-server.war -j jetty.properties  
 ########################Server Configuration ################################  
 host=localhost  
 http=true  
 httpPort=8080  
 https=true  
 httpsPort=8443  
 truststore=ssl/truststore.jks  
 truststorePassword=***  
 keystore=ssl/keystore.jks  
 keystorePassword=***  
 configFile=null  
 usersFile=null  
 allowedCorsOrigins=*  
 ########################Server Configuration End#############################  
 2017-03-13 11:04:52.529:INFO:oejs.Server:jetty-8.1.14.v20131031  
 2017-03-13 11:04:52.560:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/ftoure/Downloads/2017/03.Mars/webswing-2.4/webswing-server.war!/ to C:\Users\ftoure\Downloads\2017\03.Mars\webswing-2.4\tmp\release\webapp  
 2017-03-13 11:05:00.936:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet  
 2017-03-13 11:05:02.031:INFO:/:Initializing Shiro environment  
 mars 13, 2017 11:05:04 AM org.glassfish.jersey.server.ApplicationHandler initialize  
 INFOS: Initiating Jersey application, version Jersey: 2.6 2014-02-18 21:52:53...  
 2017-03-13 11:05:07.552:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:8080  
 2017-03-13 11:05:07.781:INFO:oejus.SslContextFactory:Enabled Protocols [TLSv1, TLSv1.1, TLSv1.2] of [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]  
 2017-03-13 11:05:10.781:INFO:oejs.AbstractConnector:Started SslSelectChannelConnector@localhost:8443  
Vous pouvez vous connecter soit sur http://localhost:8080 ou sur https://localhost:8443


La console d’administration permet de configurer ou visualiser les applications. Par défaut, l’application est livrée avec la démo classique de Swing SwingSet, mais j’ai voulu essayer avec une « vieilles » application basée sur Memoranda, un agenda qui sauvegarde les données dans des fichiers textes. Je l’ai adapté pour sauvegarder les données dans une base de données.
Dans « General Settings », on configure le nom de l’application, ainsi que l’icône affichée sur la première page.


Dans Java settings, on configure la classe Main de l’application à exécuter, ainsi que les librairies, ou le répertoire où elles se trouvent.


Une fois l’application configurée, on peut la lancer depuis la fenêtre principale.


Dans ce cas-ci, l’application s’exécute en mode fenêtre. Il faut donc mettre la fenêtre en mode plein écran pour occuper toute la page Web.
Pour avoir un rendu encore meilleur, il est également possible de proposer une version sous forme d’Applet de l’application. L’applet occupe ainsi tout l’espace de la page Web. Quel intérêt ? Pour certaines applications, cela permet d’éviter d’avoir à installer Java sur chaque poste utilisateur. Cela marche tant qu’il n’est pas nécessaire d’avoir accès à des ressources PC locales telles que la sauvegarde en local (généralement interdite pour une applet), l’accès au microphone, etc.

Comment ça marche ?

L’application est livrée en Open Source, ce qui permet de regarder un peu mieux son fonctionnement. Elle est livrée sous forme de War avec un Jetty 8 embarqué, ce qui permet de la déployer sans avoir à installer un serveur Java tel que Tomcat préalablement. Personnellement j’aime assez ce type de déploiement lorsque le nombre d’utilisateurs est limité. Git/Gerrit utilise un principe similaire et permet de déployer assez simplement un serveur Git incluant un outil de revue de code. Le serveur Web démarre ensuite l’application en mode graphique et redirige l’affichage graphique DirectDraw vers une classe propriétaire. C’est cet copie d’écran qui est affichée dans la page Web. L’affichage reste fluide pour la plupart des applications. Les déplacements d’objets sont cependant moins bien pris en compte.

Conclusion

Ce type d’application montre un moyen simple et rapide de transformer une application classique Java Swing en application Web. Elle vient en complément (ou concurrence) des Applets Java et de Java Web Start (Java Network Launching Protocol). Chacune de ces approches à ses avantages et ses inconvénients. Les Applets tournent généralement directement dans le Navigateur Web et n’ont pas besoin d’une installation préalable. Elles doivent préférablement être légères pour éviter des temps de chargement trop longs. Il faut par ailleurs que Java soit installé sur le poste client et que la sécurité soit configurée pour permettre à l’application de s’exécuter.
Java Web Start nécessite la mise en place d’un serveur Web dédié à partir duquel le fichier de configuration JNLP de l’application sera chargé. Dans ce fichier est indiqué l’adresse à partir de laquelle les librairies sont téléchargées, ainsi que la classe main à exécuter. Une fois téléchargé, les fichiers sont mis en cache et l’application est exécutée sur le poste client. Le browser Web dans ce cas ci ne sert que d’intermédiaire pour lancer l’application. Il est nécessaire d’avoir une version de Java sur le poste client. Les mises à jour ne sont faites que sur le serveur et le client vérifie la nouvelle version à chaque lancement. Il faut cependant parfois vider complètement le cache pour prendre en compte les nouvelles libraries.
La solution WebSwing peut avoir du sens pour un nombre limité d’accès simultanés (quelque dizaines dans le cadre d’une application métier par exemple). Cela permet de simplifier la mise à jour des applications et ne nécessite pas l’installation de Java sur le poste client. Pour des solutions nécessitant plus de connexions, l’utilisation d’un framework Web en Javascript (bootstrap, angularjs), PHP, Python (django) ou Java (Vaadin ou Primefaces) est généralement préférable.

Commentaires

Posts les plus consultés de ce blog

Utilisez votre tablette Android comme second écran pour Linux (Raspberry Pi, MK908II)

Les tablettes Android atteignent désormais des prix qui défient toute concurrence. On trouve désormais des modèles à 39 € TTC en super marché, soit à peine plus cher que le Raspberry PI, mais avec un écran. Ces modèles souvent mono-core 1Ghz ou 1,4 Ghz avec 512 ou 1Go de mémoire ne sont très probablement pas utilisables pour une utilisation régulière sur Internet et ne sont en aucun point comparables à leur équivalent de marque (Samsung, Sony, LG, HTC, Lenovo, etc). Plusieurs tutoriels indiquent comment connecter utiliser une tablette Android comme second écran ( http://www.linux-magazine.com/Online/Blogs/Productivity-Sauce/Use-an-Android-Device-as-Screen-and-Input-for-Raspberry-Pi ). Ces méthodes utilisent généralement l'USB Tethering qui n'est malheureusement disponible que sur les téléphones ou tablettes avec un accès mobile (3G ou 4G) inclus. Dans ce billet, je vais vous montrer comment se connecter à une tablette en utilisant le mode Debug adb (Android Debug Bridge...

Ardublock ou S4A pour développer graphiquement

Si vous n'aimez pas le développement en C, ou C# sur les micro-contrôleurs, vous pouvez vous essayer au développement graphique avec Ardublock. Historique Cet environnement de développement est issu d' OpenBlocks développé par le MIT qui se positionne lui même dans la suite du langage Logo de Seymour Papert . Le langage Logo est un langage issu de l'Intelligence Artificielle dans les années 1970 dont l'objectif était de faciliter l'apprentissage de la programmation à de jeunes enfants par le biais du pilotage d'une tortue munie d'un crayon. Les ordres étaient relativement simples : avance de 90 cm, tourne à droite de 90°, etc. Ceci, permettait de réaliser des dessins assez simple, de piloter un petit robot et d'apprendre la programmation. C'était cependant un langage textuel. Exemple pour tracer un carré : POUR CARRE REPETE 4 [AV 100 TD 90] FIN   Son digne successeur, le langage Scratch désormais intégré à l'image Raspbian du Raspberry Pi...

Hack du RoboSapien en Infra-Rouge

Mon fils a eu un RoboSapien V1 il y a une dizaine d'années. Il prenait la poussière sur le haut d'une armoire, jusqu'à ce que j'ai envie de le ramener à la vie. Il était temps, les piles étaient en train de commencer à couler et vu le nombre de servo moteurs qu'il contient, ses jours étaient comptés. Mais non, j'ai réussi à contenir mon irrésistible envie de tout démonter et j'ai décidé de passer par la télécommande Infrarouge pour le piloter. Le protocole est assez similaire de celui d'une télécommande infrarouge classique avec cependant quelques petites différences. Il est correctement expliqué sur les sites http://www.aibohack.com/robosap/ir_codes.htm et http://www.markcra.com/robot/ir_codes.php . Je vais traduire en français pour ceux qui auraient un peu de difficulté. Il existe des librairies Arduino, mais comme d'habitude, pas toujours de librairie en C#. Voici les choses importantes à connaitre sur le protocole : Le protocole envoie...