Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction à Java Web Start

Introduction à Java Web Start

Ce support de cours présente une introduction de Java Web Start : pour faciliter le déploiement d'applications Java. Dans un premier temps une présentation est faite sur la manière de construire une archive JAR et de la signer, puis, présentation de la technologie Java Web Start en détaillant le format JNLP.

3c4219fa12e875f02a81d5957876de8e?s=128

Mickael BARON

June 18, 2007
Tweet

More Decks by Mickael BARON

Other Decks in Programming

Transcript

  1. Java pour le développement de clients lourds Mickaël BARON -

    2007 (Rév. Juin 2011) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr Déploiement d’applications Java avec Java Web Start
  2. 2 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    Creative Commons Contrat Paternité Partage des Conditions Initiales à l'Identique 2.0 France http://creativecommons.org/licenses/by-sa/2.0/fr Licence
  3. 3 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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/
  4. 4 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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 …)
  5. 5 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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 courant jar 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
  6. 6 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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.0 Created-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
  7. 7 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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)
  8. 8 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  9. 9 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    Déploiement : JAR † Exemple : manipulation des ressources à partir d’un JAR package monpackage; public AfficheImage extends JFrame { getContentPane().setLayout(new BorderLayout()); getContentPane().add(BorderLayout.CENTER, new Jlabel( 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 Jlabel(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
  10. 10 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  11. 11 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  12. 12 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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 »
  13. 13 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  14. 14 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  15. 15 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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 »
  16. 16 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  17. 17 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  18. 18 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  19. 19 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  20. 20 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  21. 21 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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>
  22. 22 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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)
  23. 23 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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>
  24. 24 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  25. 25 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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
  26. 26 Déploiement JWS - M. Baron - Page keulkeul.blogspot.com @mickaelbaron

    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>