Introduction à Java Web Start : déploiement d'applications Java

1

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 of Introduction à Java Web Start : déploiement d'applications Java

Page 1: Introduction à Java Web Start : déploiement d'applications Java

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

Page 2: Introduction à Java Web Start : déploiement d'applications Java

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

Page 3: Introduction à Java Web Start : déploiement d'applications Java

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/

Page 4: Introduction à Java Web Start : déploiement d'applications Java

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 …)

Page 5: Introduction à Java Web Start : déploiement d'applications Java

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

Page 6: Introduction à Java Web Start : déploiement d'applications Java

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

Page 7: Introduction à Java Web Start : déploiement d'applications 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)

Page 8: Introduction à Java Web Start : déploiement d'applications Java

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

Page 9: Introduction à Java Web Start : déploiement d'applications Java

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

Page 10: Introduction à Java Web Start : déploiement d'applications Java

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

Page 11: Introduction à Java Web Start : déploiement d'applications Java

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

Page 12: Introduction à Java Web Start : déploiement d'applications Java

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 »

Page 13: Introduction à Java Web Start : déploiement d'applications Java

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

Page 14: Introduction à Java Web Start : déploiement d'applications Java

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

Page 15: Introduction à Java Web Start : déploiement d'applications Java

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 »

Page 16: Introduction à Java Web Start : déploiement d'applications Java

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

Page 17: Introduction à Java Web Start : déploiement d'applications Java

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

Page 18: Introduction à Java Web Start : déploiement d'applications Java

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

Page 19: Introduction à Java Web Start : déploiement d'applications Java

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

Page 20: Introduction à Java Web Start : déploiement d'applications Java

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

Page 21: Introduction à Java Web Start : déploiement d'applications Java

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>

Page 22: Introduction à Java Web Start : déploiement d'applications Java

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)

Page 23: Introduction à Java Web Start : déploiement d'applications Java

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 >

Page 24: Introduction à Java Web Start : déploiement d'applications Java

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

Page 25: Introduction à Java Web Start : déploiement d'applications Java

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

Page 26: Introduction à Java Web Start : déploiement d'applications Java

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>