introduction à java web start : déploiement d'applications java
DESCRIPTION
Dans un premier temps une présentation est faite sur la manière de fabriquer une archive JAR et de la signer, puis, présentation de la technologie Java Web Start en détaillant le format JNLP.TRANSCRIPT
Java pour le développement de clients lourds
Mickaël BARON - 2007 (Rév. Juin 2011)mailto:[email protected] ou mailto:[email protected]
Déploiement d’applications Java avec Java Web Start
2Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Creative Commons
Contrat Paternité
Partage des Conditions Initiales à l'Identique
2.0 France
http://creativecommons.org/licenses/by-sa/2.0/fr
Licence
3Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déroulement du cours Déploiement avec JWS
Ceci est une alerte Ceci est une astuce
� Pédagogie du cours
� Présentation des concepts liés au déploiement
� Illustration avec de nombreux exemples
� Des bulles d’aide tout au long du cours
� Pré-requis
� Connaissance de Java
� Structuration du cours
� Archive JAR et sécurité
� Fichier JNLP
� Informations complémentaires sur JWS
� http://java.sun.com/products/javawebstart/
� http://lfe.developpez.com/Java/SWT/WebStart/
� http://jsorel.developpez.com/tutoriels/java/jws1/
4Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : introduction
� Le déploiement permet la distribution du logiciel sur le poste client
� Deux aspects caractérisent le déploiement d’un logiciel
� le support permettant de stocker le code binaire et les ressources
� la technique utilisée pour le transport et la mise à jour
� L’API de Java fournit un ensemble de technologies adapté aux besoins du déploiement
� Le support se fait directement dans les fichiers « class » ou dans des fichiers « jar » contenant des fichiers « class »
� La technique de transport se fait par la technologie Java Web Start
� Le déploiement doit pouvoir également assurer un niveau de sûreté lors de l’exécution sur le poste client (autoriser ou pas l'accès aux fichiers du client …)
5Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : JAR
� La solution du support par JAR est souhaitable puisqu’elle permet
� Un transport plus rapide (un fichier contre plusieurs)
� Le document HTML est plus simple à modifier (pour les Applets)
� Contient toutes les ressources dont le logiciel à besoin
� Pour créer une archive JAR
� Utilisation de l’outil jar
� Pour créer un fichier .jar contenant tous les fichiers du répertoire
courantjar cvf hello.jar .
Création Mode Verbose
Nom archive
Le . indique le répertoire courant
Les IDE actuels permettent la
création des JAR par des interfaces
utilisateurs
6Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : JAR
� Utilisation pour la création (suite)
� Utilisation d’un fichier (MANIFEST.MF) qui précise un ensemble d’attributs pour exécuter dans de bonnes conditions l’application
� L’attribut Main-class permet de connaître la classe principale à exécuter
� Création du jar avec un fichier manifeste :
�Utilisation pour l’exécution
Manifest-Version: 1.0Created-By: 1.4.1_01 (Sun Microsystems Inc.)Main-class: HelloWorld
MANIFEST.MF
jar cvfm hello.jar MANIFEST.MF .
java –jar hello.jar La classe HelloWorld est chargée par l’intermédiaire du fichier MANIFESTE.MF Cette option permet d’exécuter à
partir d’une archive du code java
7Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : JAR
� La manipulation des ressources (tout ce qui ne représente pas du code Java) à partir d’une archive JAR est différente que la solution sans JAR
�les fichiers de localisation,
�les images et les sons,
�les fichiers de configuration
� Créer une URL à partir du code suivant
URL ma_res = this.getClass().getClassLoader().getResource (String path)
L’utilisation des packages pour tout projet est
recommandée
URL ma_ressource = this. getClass().getResource (String path)
Récupère la classe qui a été chargée (contient la
méthode main) (1)
A partir du chemin de la ressource création d’une URL
Autre manière plus rapide (2)
8Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : JAR
� Localiser les ressources à partir du package principale et
descendre jusqu’au répertoire contenant les ressources (path)
� Exemples de chemin (contenu de path)
�rootpackage/resources/images (1)
�/autrerootpackage/secondpackage/informations/localisation (2)
�/rootpackage/resources/images (2)
� A partir de l’objet URL construit possibilité de créer toute sorte
d’objet fonction du type de ressource
� Image, ImageIcon, …
Cette solution fonctionne même si votre application n’est pas distribuée sous forme de JAR
Avec la solution (2) ne pas oublier le caractère « / » en début de la chaîne du chemin de la ressource
9Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : JAR
� Exemple : manipulation des ressources à partir d’un JARpackage monpackage;public AfficheImage extends JFrame {
getContentPane().setLayout(new BorderLayout());getContentPane().add(BorderLayout.CENTER, new Jlabe l(new ImageIcon( "monpackage/usercogn.gif" )));
JButton mon_coco = new JButton(new ImageIcon( "monpackage/go.gif" ));
mon_coco.addActionListener(this);getContentPane().add(BorderLayout.SOUTH, mon_coco);pack(); setVisible(true);
}
Code qui ne fonctionne pas si l’application est déployée dans un JAR
NullPointerException
package monpackage;public AfficheImage extends JFrame {
...
getContentPane().add(BorderLayout.CENTER, new Jlabe l(new ImageIcon(getClass().getResource("/monpackage/usercogn.gif") ));
JButton mon_coco = new JButton(new ImageIcon(getClass().getResource("/monpackage/go.gif") ));
mon_coco.addActionListener(this);...
} Préférez largement cette seconde solution pour gérer les ressources
10Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : sécurité
� Une application Java distante ou de type « riche » s’exécute
dans un bac à sable
� Tant que l’application est dans le bac à sable elle ne peut pas
accéder aux éléments « à risque » de la machine du client
�Fichiers systèmes
�Données personnelles
�Périphériques à risques
� Pour sortir du bac à sable c’est-à-dire si votre application a
besoin d’un accès sur votre machine vous devez utiliser une
application signée. Exemples :
� Accès au répertoire « mes images » du client pour un logiciel de
développement photos
� Accès aux ressources d’un périphérique
11Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : sécurité
� Signer une application correspond à signer de façon digitale
l’archive JAR contenant l’application
� Un fichier signé a besoin d’un « keystore » (clé du magasin)
qui est un fichier issu du développeur et qui prouve que le
fichier JAR vient de la bonne personne
� Des clés professionnelles existent comme VeriSign ou
Thawte mais peuvent être générées gratuitement par l’outil
« keytool »
keytool -genkey -keystore mykeystore -alias mykey
Génère une clé du magasin appelée « mykeystore »
Contient la clé « mykey »C’est la clé
Fonctionnement identique pour les applications déployer par JWS
12Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : sécurité
� L’outil « keytool » demande sous la forme d’un questionnaire différents éléments comme : mot de passe, nom, organisation, …
� Une fois la clé définie vous pouvez signer vos archives JAR en utilisant l’outil « jarsigner »
� Si le fichier JAR est signé un certificat de sécurité doit être validé par l’utilisateur
jarsigner -keystroke mykeystroke file.jar mykey
Signe le fichier « file.jar » avec la clé « mykey » contenu dans « mykeystroke »
13Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : sécurité
Le propriétaire de l’application
� Certificat de sécurité proposé avant l’exécution de l’application
Les informations relatives au propriétaire de
l’application
14Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : Java Web Start
� Java Web Start (JWS) permet le déploiement d’applications
en locale à travers le réseau (stand-alone)
� JWS permet l’installation d’une application dite « client
lourd » grâce à un simple lien hypertexte d’une page web
� Java Web Start est le fruit des travaux réalisés sur la JSR-56
� Page officielle du projet : http://java.sun.com/products/javawebstart
� Il est inutile de modifier une application déjà développée pour
qu’elle puisse être utilisée avec Java Web Start
15Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : Java Web Start
� Les avantages de cette technologie sont
� mise à jour automatique de l’application si une nouvelle version est
disponible
� assure une mise en cache locale des applications pour accélérer leur
réutilisation ou si la machine client n’est pas connectée
� sécurité des applications assurée par l’utilisation du bac à sable (voir
section précédente)
� Toute application déployer avec JWS est une application dite
client « lourd/riche »
16Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : Java Web Start
� Java Web Start utilise et implémente une API et un protocole
appelés Java Network Lauching Protocol (JNLP)
� Pour utiliser cette technologie il faut définir un fichier de
description XML décrivant l’application à exécuter (JNLP)
� Cette technologie est disponible sur toutes les plateformes
qui supportent Java (apparu depuis la version JSEE 1.4)
� L’utilisation de JWS implique la réalisation de trois étapes
�packager l’application dans un fichier JAR (section précédente)
�créer le fichier de lancement au format « jnlp »
�copier les deux fichiers sur le serveur web
17Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : Java Web Start
� Page Java Web Start officielle
�http://java.sun.com/products/javawebstart
�http://java.sun.com/javase/6/docs/technotes/guides/deployment
�Démos : http://java.sun.com/products/javawebstart/demos.html
� Ressources sur JNLP et JWS
�Java One 2006 (http://developpers.sun.com/learning/javaoneonline
�TS-3212, TS-3133, TS-7904
� http://today.java.net/pub/a/today/2005/09/01/webstart.html
�http://webstartfaq.com
18Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Déploiement : Java Web Start
� Implémentation de la spécification JNLP par Sun : l’outil
s’appelle Java Web Start
Liste des applications disponibles
Détails de l’application sélectionnée
Exécuter en mode hors-ligne ou pas
19Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� Le fichier JNLP est un document XML qui débute et se termine
par la balise <jnlp> … </jnlp>
� Cette balise contient trois attributs (obligatoires)
� String spec : version de la spécification de JNLP. La valeur défaut est
« 1.0+ ». Le « + » oblige à utiliser une version égale ou supérieure
� String codeBase : URL qui pointe sur le fichier décrit par href
� String href : nom du fichier JNLP
� La balise <jnlp> contient également un ensemble de sous
balises
� <information> : utilisée une ou plusieurs fois
� <security> : n’est pas obligatoire
� <resources> : utilisée zéro ou plusieurs fois
� <application-desc> ou <applet-desc> : l’un ou l’autre
20Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� Exemple (1) : fichier JNLP d’une application déployée par JWS
<?xml version ="1.0" encoding ="utf-8"?><!-- Fichier JNLP de notre première application --><jnlp
spec ="1.5+" codebase ="http://my_company.com/jaws/apps" href ="application.jnlp"><information> ...<security> ...<resources> ...<application-desc> ...
</jnlp>
C’est un fichier XML
On utilise ici une version 1.5 supérieure de la spécification JNLP
URL de l’application JWS
Nom du fichier JNLP
Les autres sous balises
21Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� La balise <information> permet de donner des informations concernant différents aspects
� La balise <information> peut-être répétée plusieurs fois en fonction de la valeur de l’attribut os de <information>
� <title> : le titre de l’application (obligatoire)
� <vendor> : le nom du concepteur (obligatoire)
� <homepage> : contient dans l’attribut href le chemin (relatif) des différentes ressources pour l’aide (optionnel)
� <description> : donne une description de l’application (optionnel). Elle contient un attribut kind qui définit comment est présentée la description
�one-line : dans une table
�short : dans un paragraphe
�tooltip : dans une bulle d’aide
Si kind n’est pas spécifié utilisation de la valeur par défaut définie par le corps de la balise <description>
22Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� La balise <information> permet de donner des informations
concernant différents aspects (suite)
� <icon> : décrit les URL pour les différentes images qui sont utilisées
(optionnel)
�pendant le chargement de l’application
�par l’outil Java Application Cache Viewer
�par les raccourcis
Elle nécessite un attribut href (obligatoire) qui permet de donner le
chemin de l’image (relatif)
L’attribut kind="splash" peut-être utilisé pour afficher un écran
« splash » (optionnel)
� <offline-allowed> : indique si l’application peut-être lancée hors-ligne.
Si elle est précisée l’application est exécutable hors-ligne sinon elle ne
l’est pas (optionnel)
23Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� Exemple (2) : fichier JNLP d’une application déployée par JWS
<information > <title >Simple Application JWS< /title ><vendor >Micka ël BARON< /vendor ><homepage href ="docs/help.html"/><description >Ma Simple Application JWS< /description > <description kind ="short">Une petite application
montrant la capacité à déployer des JWS.</description > <icon href ="images/myimage.jpg"/><icon kind ="splash" href="images/splashimage.gif"/><offline-allowed/ ><association mime-type ="application-x/appliJWS-file"
extensions ="MyApplication"> </information ><information os ="linux">
<title >Simple Application JWS on Linux < /title ><homepage href="docs/linuxhelp.html">
</information >
24Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� La balise <security> permet de donner des informations concernant la sécurité (optionnel)
�<all-permissions> : l’application aura les accès à la machine client et au réseau local en fonction des sécurité de l’application (optionnel)
� La balise <resources> est utilisée pour spécifier toutes les ressources telles que les classes Java, les librairies natives et les propriétés
� <jar> : spécifie dans l’attribut href les fichiers JAR utilisés dans l’application
� <j2se> : spécifie dans l’attribut version la version minimum de la machine virtuelle
� La balise <application-desc> est utilisée pour paramétrer l’exécution d’une application (optionnel)
�l’attribut main-class spécifie la classe principale (obligatoire)
�<argument> donne des valeurs aux arguments
25Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� Exemple (3) : fichier JNLP d’une application déployer par JWS
<security > <all-permissions/ >
</security><resources >
<jar href="lib/autrelib.jar"/> </resources > <application-desc main-class ="monpackage.maclasse"/>
Balise pour la sécurité donne l’autorisation après acception du certificat (voir sécurité)
Balise pour les ressources
Description de la classe principale contenu dans le fichier « autrelib.jar »
Possibilité de déployer des applications (clients lourds), applets (clients riches) et des bibliothèques
26Déploiement JWS - M. Baron - Page
keul
keul
.blo
gspo
t.com
Java Web Start : fichier JNLP
� Exemple : déploiement d’une application qui affiche une image <?xml version="1.0" encoding="utf-8"?><jnlp spec="1.0+" codebase="http://.../~keulkeul/" href="helloworldjws.jnlp"><information>
<title> Ma Première Application Java Web Start </title><vendor> Mickael BARON </vendor><homepage href="http://localhost/~keulkeul" /><description>
Mon Application qui affiche uniquement une image</description><offline-allowed/><icon href="images/macosxlogo.gif" />
</information><security></security><resources>
<j2se version="1.4" /><jar href="MonJar.jar" />
</resources><application-desc
main-class="monpackage.HelloWorldImage" /></jnlp>