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 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 : Mais également plusieurs optimisations :

Déployer une application

Pour utiliser la technologie JWS, il faut :

Principe de fonctionnement

Le fonctionnement de JWS est proche de celui des applettes. Les seules différences sont la présence d'un fichier de lancement au format JNLP, et le fait que l'application est installée sur le poste client.

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 :

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.

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>
	

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 : Bien entendu, après installation les deux premières méthodes fonctionnent toujours. L'application ne sera pas installée plusieurs fois.

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 :

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 :

L'utilisation de l'API est relativement simple comme le montre ce morceau de code :

	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 : En effet, en utilisant l'API JNLP, les demandes d'autorisations sont ponctuelles, en fonction des actions de l'utilisateur. Ainsi, l'utilisateur se sent plus en confiance et hésitera moins à utiliser une application lambda.

Conclusion

Pour conclure, je dirai que JWS est simple et rapide à mettre en place dans le sens où : Ainsi, dès lors que vous avez développé une application Java, je pense qu'il ne faut pas hésiter à utiliser cette technologie. Elle peut apporter une certaine valeur ajoutée à l’application et permettre de toucher un public plus large puisque, rappelons-le, un simple clique suffit pour lancer pour utiliser l’application avec JWS. Cela peut contribuer à une plus forte popularité d’un logiciel. Par ailleurs, en développant une applette et en la déployant avec JWS, il est possible de développer, à la fois, une application Web et une application Standalone. Enfin, la technologie est gratuite et peut ainsi convenir à des entreprises qui n’ont pas, ou peu, de moyens.