Développons en Java 2.30 | |
Copyright (C) 1999-2022 Jean-Michel DOUDOUX | (date de publication : 15/06/2022) |
|
Niveau : | Supérieur |
Technologie legacy Ce chapitre est conservé pour des raisons historiques |
Développée avec la plate-forme Java 2, Java Web Start est une technologie qui permet le déploiement d'applications autonomes à travers le réseau. Elle permet l'installation d'une application grâce à un simple clic dans un navigateur. JWS a été inclus dans le J2RE 1.4. Pour les versions antérieures du J2RE, il est nécessaire de télécharger JWS et de l'installer sur le poste client.
JWS est le résultat des travaux de la JSR-56. La documentation de cette technologie est à l'url :
https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/.
JWS permet la mise à jour automatique de l'application si une nouvelle version est disponible sur le serveur et assure une mise en cache locale des applications pour accélérer leur réutilisation ultérieure.
La sécurité des applications exécutées est assurée par l'utilisation du bac à sable (sandbox) comme pour une applet, dès lors, pour certaines opérations il est nécessaire de signer l'application.
JWS utilise et implémente une API et un protocole nommé Java Network Lauching Protocol (JNLP).
Le grand avantage de Java Web Start est qu'il est inutile de modifier une application pour qu'elle puisse être déployée avec cette technologie (à condition que les fichiers contenant des ressources soient accédés en utilisant la méthode getResource() du classloader).
L'application doit être packagée dans un fichier jar qui sera associé sur le serveur à un fichier particulier de lancement.
L'utilisation d'une application grâce à JWS implique la réalisation de plusieurs étapes :
Attention : à partir de Java 9, Java Web Start et le protocole JNLP sont deprecated. Oracle l'a retiré de son JDK à partir de Java 11. |
Ce chapitre contient plusieurs sections :
L'application doit être packagée sous la forme d'un fichier .jar.
Il est possible de fournir une petite icône pour représenter l'application : celle-ci doit avoir une taille de 64 x 64 pixels au format Gif ou JPEG.
L'exemple de cette section crée un certificat et signe l'application avec ce dernier.
Exemple : |
C:\java\>keytool -genkey -keystore mes_cles -alias cle_de_test
Tapez le mot de passe du Keystore : test
Mot de passe de Keystore trop court, il doit compter au moins 6 caractères
Tapez le mot de passe du Keystore : erreur keytool : java.lang.NullPointerExcep
tion
C:\java\>keytool -genkey -keystore mes_cles -alias cle_de_test
Tapez le mot de passe du Keystore : mptest
Quels sont vos prénom et nom ?
[Unknown] : jean michel
Quel est le nom de votre unité organisationnelle ?
[Unknown] : test
Quelle est le nom de votre organisation ?
[Unknown] : test
Quel est le nom de votre ville de résidence ?
[Unknown] : Metz
Quel est le nom de votre état ou province ?
[Unknown] : France
Quel est le code de pays à deux lettres pour cette unité ?
[Unknown] : fr
Est-ce CN=jean michel, OU=test, O=test, L=Metz, ST=France, C=fr ?
[non] : oui
Spécifiez le mot de passe de la clé pour <cle_de_test>
(appuyez sur Entrée s'il s'agit du mot de passe du Keystore) :
C:\java\>
C:\java\>keytool -selfcert -alias cle_de_test -keystore mes_cles
Tapez le mot de passe du Keystore : mptest
C:\java\>keytool -list -keystore mes_cles
Tapez le mot de passe du Keystore : mptest
Type Keystore : jks
Fournisseur Keystore : SUN
Votre Keystore contient 1 entrÚe(s)
cle_de_test, 12 nov. 2003, keyEntry,
Empreinte du certificat (MD5) : 9E:5A:61:CC:D8:88:02:59:1D:3B:41:C9:CA:26:1D:BD
C:\java>jarsigner -keystore mes_cles -signedjar MonJarSigne.jar MonApp.jar cle_d
e_test
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
C:\java>dir
Le volume dans le lecteur C s'appelle SW_Preload
Le numéro de série du volume est 043F-2ED6
Répertoire de C:\java
30/08/2009 11:44 <REP> .
30/08/2009 11:44 <REP> ..
30/08/2009 11:38 1 259 mes_cles
15/08/2009 23:58 15 793 MonApp.jar
30/08/2009 11:44 17 247 MonJarSigne.jar
3 fichier(s) 34 299 octets
0 Rép(s) 70 055 645 184 octets libres |
Ce fichier au format XML permet de décrire l'application.
La racine de ce document XML est composée du tag <jnlp>. Son attribut codebase permet de préciser l'URL où sont stockés les fichiers indiqués par l'attribut href.
Le tag <information> permet de fournir des précisions qui seront utilisées par le gestionnaire d'applications sur le poste client. Ce tag possède plusieurs noeuds enfants :
Nom du tag |
Rôle |
title |
Le nom de l'application |
vendor |
Nom de l'auteur de l'application |
homepage |
Préciser une page HTML qui contient des informations sur l'application grâce à son attribut href |
description |
Une description de l'application. Il est possible de préciser plusieurs types de descriptions grâce à l'attribut kind. Les valeurs possibles sont : one-line, short et tooltip. Pour utiliser plusieurs descriptions, il faut utiliser plusieurs tags Description avec l'attribut kind adéquat |
offline-allowed |
Ce tag précise que l'application peut être exécutée dans un mode déconnecté. L'avantage de ne pas préciser ce tag est de s'assurer que la dernière version de l'application est toujours utilisée mais cela nécessite obligatoirement une connexion pour toute exécution. |
icon |
Permet de préciser une URL vers une image de 64 x 64 pixels au format gif ou JPEG grâce à l'attribut href |
Le tag <security> permet de préciser des informations concernant la sécurité.
Nom du tag |
Rôle |
all-permissions |
Indique que l'application a besoin de tous les droits pour s'exécuter. L'application doit alors être obligatoirement signée. Si ce tag n'est pas précisé alors l'application s'exécute dans le bac à sable : elle possède donc les mêmes restrictions qu'une applet au niveau de la sécurité |
Le tag <resources> permet de préciser des informations sur les ressources utilisées par l'application. L'attribut os permet de préciser des paramètres pour un système d'exploitation particulier.
Nom du tag |
Rôle |
j2se |
Précise les JRE qui peuvent être utilisés par l'application. Les valeurs utilisables par l'attribut version sont 1.2, 1.3 et 1.4. Il est possible de préciser un numéro de version particulier ou d'utiliser le caractère * pour préciser n'importe quel numéro de release. L'ordre des différentes valeurs fournies est important. |
jar |
Précise un fichier .jar qui est utilisé par l'application |
nativelib |
Précise une bibliothèque utilisée par l'application qui contient du code natif |
property |
Précise une propriété système qui sera utilisable par l'application. L'attribut name précise le nom de la propriété et l'attribut value précise sa valeur |
Le tag <application-desc> précise, grâce à son attribut main-class, la classe qui contient la méthode main().
Nom du tag |
Rôle |
argument |
Préciser des arguments à l'application tels qu'ils pourraient être fournis sur une ligne de commandes |
Exemple : |
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost/" href="MonApplication.jnlp">
<information>
<title>Mon Application</title>
<vendor>Jean Michel</vendor>
<homepage href="http://localhost/"/>
<description>Mon application</description>
<description kind="short">une application de test</description>
<offline-allowed/>
</information>
<security>
</security>
<resources>
<j2se version="1.4"/>
<jar href="MonApplication.jar"/>
</resources>
<application-desc main-class="fr.jmdoudoux.dej.jnlp.MonApplication" />
</jnlp> |
Le serveur qui va fournir les fichiers doit être configuré pour qu'il associe le type MIME « application/x-java-jnlp-file » avec l'extension .jnlp
Par exemple sous IIS 5, il faut utiliser l'option propriété du menu contextuel du site. Dans l'onglet « En-Tête http », cliquez sur le bouton « Types de fichiers ». Dans la boîte de dialogue « Type de fichiers », cliquez sur le bouton « Nouveau type » si l'association n'est pas présente dans la liste. Une boîte de dialogue permet de saisir l'extension et le type MIME
Le type MIME permet au navigateur de connaître l'application qui devra être utilisée lors de la réception des données du serveur web.
Hormis le code mininum requis par la norme HTML, la seule chose indispensable est un lien dont l'URL pointe vers le fichier .jnlp sur le serveur web.
Exemple : |
<html>
<head>
<title>Mon Application</title>
</head>
<body>
<H1>Mon Application</H1>
<a href="http://localhost/Monapplication.jnlp">Lancez MonApplication</a>
</body>
</html> |
Il faut ouvrir un navigateur et saisir l'URL de la page contenant le lien vers le fichier jnlp
Java Web Start se lance
Si le fichier jnlp contient une erreur alors un message d'erreur est affiché.
Cliquez sur « Détails » pour obtenir des informations sur l'erreur.
Si l'application nécessite un accès au système et que le fichier jar n'est pas signé alors un message d'erreur est affiché :
Si la classe précisée n'est pas trouvée dans le fichier jar indiqué alors un message d'erreur est affiché
Dans cet exemple, pour résoudre le problème il faut indiquer le nom pleinement qualifié de la classe.
Au premier démarrage réussi d'une application, JWS demande si l'on souhaite créer un raccourci sur le bureau.
En cliquant sur le bouton «Oui», JWS crée ce raccourci sur le bureau.
Exemple de raccourci : |
"C:\Program Files\Java\j2re1.4.2_02\javaws\javaws.exe"
"@C:\Documents and Settings\administrateur\Application Data\
Sun\Java\Deployment\javaws\cache\indirect\indirect31560.ind" |
L'application se lance
Comme pour les applets, par mesure de sécurité, un petit libellé en bas des fenêtres est affiché indiquant que la fenêtre est issue de l'exécution d'une application Java.
Pour lancer le gestionnaire d'applications, il suffit de double cliquer sur l'icône de « Java Web Start » sur le bureau.
Le gestionnaire d'applications permet de gérer les applications en local : il permet de lancer les applications déjà téléchargées sur le poste et de les mettre à jour.
Plusieurs petites icônes peuvent apparaître selon le contexte
: une mise à jour de l'application est téléchargeable sur le serveur
: l'application peut être exécutée sans connexion au réseau
: l'application est mise en cache en local
: l'application n'est pas signée
Pour lancer l'application, il suffit de sélectionner l'application concernée et de cliquer sur le bouton « Démarrer ».
Dans les préférences, sur l'onglet « Avancé », cocher la case « Afficher la console Java »
Il permet aussi de configurer JWS. Par exemple, en cas de problème, il est possible de demander de consigner une trace d'exécution dans un fichier journal. Celui-ci est particulièrement utile lors du débogage.
Il est possible d'enregistrer les actions dans un fichier de log. Pour cela, il faut cocher la case « Consigner les sorties » et cliquer sur le bouton « Choisir le nom du fichier journal » pour sélectionner ou saisir le nom du fichier.
Exemple : |
Java Web Start 1.4.2_02 Console, démarrée Thu Nov 13 13:54:36 CET 2003
Environnement d'exécution Java 2 : version 1.4.2_02 par Sun Microsystems Inc.
Consignation dans le fichier : C:\Documents and Settings\admin\Mes documents\journal_jws.txt
Java Web Start 1.4.2_02 Console, démarrée Thu Nov 13 13:54:41 CET 2003
Environnement d'exécution Java 2 : version 1.4.2_02 par Sun Microsystems Inc.
Consignation dans le fichier : C:\Documents and Settings\admin\Mes documents\journal_jws.txt
Java Web Start 1.4.2_02 Console, démarrée Thu Nov 13 13:55:14 CET 2003
Environnement d'exécution Java 2 : version 1.4.2_02 par Sun Microsystems Inc.
Consignation dans le fichier : C:\Documents and Settings\admin\Mes documents\journal_jws.txt
java.lang.NullPointerException
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.continueLaunch(Unknown Source)
at com.sun.javaws.Launcher.handleApplicationDesc(Unknown Source)
at com.sun.javaws.Launcher.handleLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source) |
|
La suite de ce chapitre sera développée dans une version future de ce document |
|