Java Web Start (JWS)
Présentation
La technologie Java Web Start (JWS) permet de déployer une application Java ou une applette sur un poste client, indépendamment du système d'exploitation utilisé. Le déploiement comprend :- Le téléchargement des données depuis le serveur Web sur lequel est placée l’application.
- L’installation, l’exécution et la désinstallation des applications déployées sur la machine cliente.
- L’intégration dans le système d’exploitation de l’utilisateur avec, par exemple, la création d’un raccourci sur le bureau (uniquement sur Windows).
- Un mécanisme de mises à jour automatiques configurable. Par défaut, à chaque lancement d’une application, JWS vérifie si une nouvelle version est disponible sur le serveur Web et la télécharge si c’est le cas.
Le déploiement s’effectue à l’initiative du client. Pour déployer l’application avec JWS sur plusieurs postes de travail, il est nécessaire d'avoir accès à chaque poste client.
Pour déployer et installer une application sur un ensemble de machines du parc informatique sans avoir à se déplacer sur chaque machine, il faudra utiliser une autre technologie comme, par exemple,
Microsost SMS (uniquement sur Windows).
Avantages
JWS offre un certain nombre d’avantages :- La portabilité. C’est une technologie Java permettant de fonctionner sur de nombreux systèmes d’exploitation munis d'une Machine Virtuelle Java (JVM).
- La maintenance. Grâce au mécanisme de mises à jour automatiques, l’administrateur n’a plus besoin de se déplacer, lors d'une nouvelle version de l’application, sur chaque poste client. Il a simplement à modifier la version mise à disposition sur le serveur Web distant et tous les clients en bénéficieront.
- De la même manière que les applettes, JWS offre une exécution des applications sécurisées (Voir le chapitre sur la Sécurité).
- Aucune modification du code n'est nécessaire. Le déploiement de l'application n'a strictement aucun impact sur le code.
- Lors d’une mise à jour, seuls les fichiers modifiés sont téléchargés grâce à un mécanisme de comparaison d'archives (via l'outil « jardiff ») (et non pas les archives dans leur intégralité).
- Seules les archives nécessaires à l’application sont téléchargées. Il est possible, par exemple, de mettre à disposition une archive qui fonctionne sous Linux, et une archive Windows. Le client ne téléchargera que l’archive correspondant à son propre système d’exploitation.
- Les applications sont également mises en cache ce qui permet, à la fois, d’accélérer les lancements et de permettre leurs exécutions ultérieures sans connexion internet.
Déployer une application
Pour utiliser la technologie JWS, il faut :- Créer un fichier de lancement au format JNLP et le mettre à disposition sur un serveur Web.
- Configurer le navigateur pour qu'il associe les fichiers d'extension JNLP avec le client JWS.
- Paramétrer le serveur Web pour qu'il réponde aux requêtes HTTP, de téléchargement du fichier JNLP, avec le bon Type MIME.
- Cependant, il est bon de préciser que ce format est directement reconnu par la majorité des serveurs et navigateurs récents. Il est donc rare d'avoir à effectuer ces deux dernières étapes.
- Mettre à disposition les archives de l’application sur un serveur Web.
- JWS est pris en charge par tous types de serveur Web, le choix est donc vaste (Apache, Tomcat, Glassfish, etc.).
Principe de fonctionnement
Le fichier JNLP
Le fichier de lancement est téléchargé par le client et interprété par le client JWS. Il permet de décrire l'application, de la configurer puis de l'exécuter. Son édition est relativement simple. En effet, ce fichier, d'extension "jnlp", est au format XML. Il doit cependant répondre à une structure définie par un schéma XML ou une DTD.Structure
Ainsi, la balise racine doit impérativement être <JNLP>. Cette balise racine possède différents attributs comme « spec » pour indiquer la version du fichier JNLP. La grammaire de ce fichier a évolué au cours du temps. C'est pourquoi, pour bénéficier des derniers attributs et/ou balises, il faut choisir la dernière spécification (au moment de la rédaction de ce site, c'est la 6.0). Enfin, l'attribut obligatoire « codebase » sert à préciser le chemin absolu du dossier racine contenant l'application. Dans l'exemple, le codebase pointe sur le dossier WebContent du projet Tomcat "TestJWS".<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd"> <jnlp spec="6.0+" codebase="http://localhost:8080/TestJWS"> <information> (...) </information> <security> (...) </security> <update /> <resources> (...) </resources> <application-desc> (...) </application-desc> <applet-desc> (...) </applet-desc> </jnlp>Bien que cela ne soit pas obligatoire, la DTD est précisée en deuxième ligne. Elle active la complémentation automatique sous Eclipse (CTRL + ESPACE). De plus, elle permet de vérifier si le fichier est bien formé sans avoir à lancer une exécution.
Comme nous pouvons le voir, le fichier JNLP est composé de plusieurs parties distinctes :
- La partie « informations » décrit l'application.
- La partie « sécurité » spécifie les droits de l'application.
- La partie « update » permet de configurer le mécanisme de mises à jour.
- La partie « resources » énumère les ressources dont l'application a besoin.
- Les parties « application-desc » et « applet » décrivent comment lancer l'application.
Informations
<information> <title>Nom de l’application</title> <shortcut><desktop /></shortcut> <homepage href="http://.../expose.html"/> <description> (...) </description> <icon kind="splash" href="img/ig2k_logo.png" /> <offline-allowed /> </information>
<information> regroupe, comme son nom l'indique, différentes informations permettant de décrire l'application. Celles-ci permettront d'identifier l'application et seront principalement utilisées à l'exécution et par le gestionnaire d'application.
- <title> précise le nom de l'application.
- <shortcut> permet de proposer la création d'un raccourci à la première exécution (uniquement sous Windows). Avec <desktop>, celui-ci sera placé sur le bureau.
- <homepage>, si l'application possède un site Internet.
- <description> donne des précisions sur ce que fait l'application
- <icon> permet de représenter l'application par une icône ou une image. Ici, avec l'attribut splash, c'est l'image de chargement (splash screen) qui est modifiée plutôt que d'avoir le fameux "Java Loading" par défaut.
- <offline-allowed> autorise l’exécution de l’application sans connexion internet.
Sécurité / Update / Resources
<security> <all-permissions /> </security> <update check=“always" policy="prompt-update"/> <resources> <java version="1.6+" max-heap-size="64m"/> <jar href="Mstsc_version_JWS.jar" main="true" download="eager"/> </resources>
- <security> permet d’obtenir des droits supplémentaires. Dans l'exemple ci-dessous, toutes les permissions sont demandées. Dans ce cas, il va falloir signer numériquement l'application.
- <update> offre la possibilité de configurer sur le mécanisme de mises à jour. Dans l'exemple, avec les attributs et valeurs "check=always" et "policy=always", nous garantissons que l’utilisateur aura toujours la dernière version et nous le forçons même à l’avoir.
- <ressource> permet de spécifier la version de java et passer des arguments à la JVM. A partir de la balise </jar>, elle permet également de lister les différentes archives nécessaires à l’application.
Application
Enfin, il s'agit maintenant de donner des paramètres d'exécution. JWS permet de déployer une applette en utilisant <application-desc> ou une application classique avec <applet-desc>.<application-desc main-class="MaClassePrincipale"> <argument>arg1</argument> <argument>arg2</argument> </application-desc> Ou bien … <applet-desc main-class="MonApplet" name="test" width="320" height="240"> <param name="key1" value="value1" /> <param name="key2" value="value2" /> </applet-desc>
Bien entendu, comme pour tout programme, il n'est pas obligatoire de préciser des arguments. En revanche, il est indispensable de préciser la taille et le nom d'une applette. En outre, dans les deux cas, il faut impérativement préciser la classe principale à exécuter.
Application
Voici un exemple complet d'un fichier de lancement :<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd"> <jnlp spec="6.0+" codebase="http://localhost:8080/TestJWS"> <information><!-- Décris l'application --> <title>Lancer Mstsc.exe</title> <shortcut><desktop /><menu submenu="Mon application" /></shortcut> <homepage href="http://etudiant.univ-mlv.fr/~rmarti01/expose.html"/> <description>Exemple policy tool avec JWS pour démarrer MSTSC.exe</description> <description kind="short">Permet d'exécuter MSTSC.exe</description> <icon href="img/ig2k_logo.png"/><!-- --> <icon kind="splash" href="img/ig2k_logo.png" /> <offline-allowed/> </information> <security><!-- Nécessite la signature numérique des archives --> <all-permissions /> </security> <resources><!-- Les ressources dont l'application a besoin --> <java version="1.6+" max-heap-size="64m"/> <jar href="Mstsc_version_JWS.jar" main="true" download="eager"/> </resources> <application-desc main-class="MaClassePrincipale"><!-- Décris comment lancer l'application --> <argument>arg1</argument><argument>arg2</argument> </application-desc> </jnlp>
Lancer une application Java Web Start
Pour exécuter une application JWS, il faut tout simplement un client JWS. Depuis la version 1.4, c'est un composant de l'environnement d'exécution Java (JRE) qui s'installe en même temps que celui-ci.Il existe quatre méthodes pour lancer une application JWS :
- Si l’application n’a pas encore été déployée sur la machine cliente, il est possible de :
- Passer par son navigateur et cliquer un lien qui pointe sur un fichier JNLP.
- Utiliser la commande javaws en ligne de commandes, et donner en argument l'adresse d'un fichier JNLP.
- Ensuite, lorsque l’application est installée, l'exécution peut s'effectuer à partir :
- Du gestionnaire d’application.
- D’un raccourci créé sur le bureau ou dans le menu "démarrer" si l’application a demandé la création d’un raccourci (disponible uniquement sous Windows).
Voici un exemple qui permet d'exécuter la calculette Windows : Démarrer l'application
Le gestionnaire d'application
Voici le gestionnaire d’application fournit pas le client JWS :Il est accessible en ligne de commande avec javaws –viewer, ou graphiquement depuis le panneau de configuration Java. Il nous permet de visualiser les différentes applications déployées et permet de les exécuter ou de les désinstaller. Il nous montre également plusieurs informations, comme le nom de l’application et le type. Dans le cas présent, il y a une applette et une application déployées sur la machine.
Sécurité
Les applications JWS sont soumises aux mêmes règles de sécurité que les applettes. Elles s’exécutent dans un environnement restreint, la « sandbox » leur empêchant d'accéder aux fichiers, périphériques du client ou encore d’effectuer des connexions réseaux. Pour étendre les droits, les solutions sont par conséquent les mêmes :
- Modifier les politiques de sécurité de la machine cliente.
- Signer numériquement les archives de l’application.
En revanche, JWS propose une nouvelle solution. Elle consiste à utiliser l’API JLNP disponible dans le dossier lib de la JRE sous le nom « javaws.jar ». Elle propose un ensemble de classes offrant la possibilité d’étendre ponctuellement les droits de l’application sans avoir à la signer numériquement, ni même en modifiant les politiques de sécurité. Selon la documentation, il y a onze services, mais je n’en cite que trois ici :
- ClipBoardService permet d’accéder au presse-papier
- FileOpenService et FileSaveService pour accéder aux fichiers, respectivement en lecture et écriture.
- PrintService donne accès à l’imprimante de l'utilisateur.
FileOpenService fos = (FileOpenService) ServiceManager.lookup("javax.jnlp.FileOpenService"); FileContents[] fcs = fos.openMultiFileDialog(null, null); for (FileContents file : fcs) System.out.println(file.getName()); // lecture possible
Dans cet exemple, dès lors que l'utilisateur a accepté l'avertissement de sécurité, une boite de dialogue lui permet de sélectionner plusieurs fichiers dont il aura autorisé l'accès en lecture.
Avertissement de sécurité liée à l'utilisation de l'API JNLP
Cette solution alternative vient palier aux inconvénients des deux autres solutions :- La signature numérique est complexe à mettre en place. En outre, elle a le défaut majeur d'autoriser toutes les permissions que certains utilisateurs peuvent refuser par manque de confiance.
- Le changement des politiques de sécurité nécessite de configurer la machine cliente. Il faut donc y avoir accès ce qui est rarement le cas et cela peut devenir fastidieux.
Conclusion
Pour conclure, je dirai que JWS est simple et rapide à mettre en place dans le sens où :- Il n'y a qu'un seul de fichier de configuration à écrire.
- Aucune modification du code de l'application n'est nécessaire.