Comment déployer une application SWT via WebStart

LFE

Ce document est destiné à expliquer comment déployer une application Java utilisant SWT via WebStart.
Cet article couvre (brièvement, je le reconnais) les sujets suivants :
l'écriture d'une première application SWT minimaliste, mais parfaitement fonctionnelle ;
la technique pour obtenir un certificat développeur permettant de signer des applications Java ;
la création d'un JAR avec Eclipse ;
la signature des JAR ;
la configuration d'un serveur web afin de pouvoir déployer des applications Java via WebStart ;
le déploiement de l'application via WebStart.

- Titre : Comment déployer une application SWT via WebStart

- Auteur : LFE

- Parution : 21 décembre 2002

- Mise à jour : 21 février 2020

- Licence : Ce document est issu de https://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- Avant-propos

- I. Obtention d'un certificat permettant de signer les applications

- I-A. Enregistrement auprès de Thawte

- I-B. Obtenir un certificat développeur

- II. Une application SWT minimale

- II-A. L'application

- II-B. La création des JAR

- III. Installation d'un serveur web

- III-A. Installation

- III-B. Configuration

- IV. Déploiement de l'application

- IV-A. Préparation de la distribution sur le serveur

- IV-B. Déploiement de l'application

- IV-C. Déploiement de SWT

- V. Test de l'application

Avant-propos

Ce document est la compilation de différentes ressources en langue anglaise ainsi que du fruit de mes premières expériences avec Java, SWT et WebStart.

Travaillant actuellement sous Windows, cet article est écrit en tenant compte principalement de cet OS. Toutefois, les modifications à apporter pour l'appliquer à Linux me semblent minimes et feront plus que probablement l'objet d'une mise à jour ultérieure.

La version de Java utilisée est la J2SE 1.4.2_03.

L'EDI utilisé est Eclipse 2.1.2.

Les applications déployées via Webstart devant être signées, la première étape est donc d'obtenir un certificat permettant la signature du code. Cette étape sera décrite dans la première partie de ce tutoriel.

La seconde partie sera consacrée à l'écriture d'une application SWT minimale, et à la préparation du déploiement de celle-ci.

La troisième partie traitera de l'installation d'un serveur web et à la configuration de celui-ci afin de permettre le déploiement d'application Java via WebStart.

La quatrième et dernière partie sera consacrée au déploiement proprement dit de l'application.

I - Obtention d'un certificat permettant de signer les applications

Pour cela, j'ai pris un certificat auprès de Thawte Freemail.

Ce certificat est gratuit et permet la signature du code, ce qui répond tout à fait à nos besoins présents.
De plus, il est possible de faire certifier son identité, ce qui rend donc ce certificat tout à fait officiel.

I-A - Enregistrement auprès de Thawte

L'enregistrement est relativement simple, mais faites attention à ce que vous faites, cette opération ne pouvant être effectuée qu'une seule et unique fois.

Sur la page community channel, sélectionnez le bouton Join.
Vont suivre une série d'écrans à remplir scrupuleusement (pour rappel, ce certificat peut être utilisé pour authentifier votre identité) :

- Termes et conditions de la certification personnelle ;

- Enregistrement dans le système de certification personnelle ;

- Information d'identification principale ;

- Préférences personnelles ;

- Mot de passe de certification personnelle ;

- Définition des questions et numéro de téléphone pour le mot de passe ;

- Confirmation des informations d'enregistrement ;

- Message email envoyé.

Arrivé à cette étape, vous devriez recevoir un e-mail en provenance de Thawte vous permettant de poursuivre la procédure d'enregistrement.
Il s'agit d'un 'ping mail', c'est-à-dire la confirmation de la validité de votre adresse e-mail.
Attention, il est obligatoire de poursuivre la procédure dans les 48 heures.

Après avoir recopié le Probe et le ping contenu dans l'e-mail, la procédure d'enregistrement se termine.
Une page vous indiquant que votre nom d'utilisateur a été créé avec succès doit apparaître.

Lorsque vous cliquez sur le bouton next, vous devez entrer votre nom d'utilisateur et votre mot de passe afin d'accéder au service de gestion de vos certificats.

I-B - Obtenir un certificat développeur

Pour obtenir un certificat développeur, il faut sélectionner la seconde option sur la page des demandes de certificats : Developers of New Security Applications ONLY. Cliquez sur le bouton test.

Sur l'écran suivant, sélectionnez l'option Paste-in CSR Certificate Enrollment et cliquez sur le bouton test. L'écran suivant ne présente pas d'intérêt particulier, cliquez sur le bouton next.
Dans cet écran, sélectionnez votre adresse e-mail et cliquez sur le bouton next.
L'écran suivant ne présente pas d'intérêt particulier, cliquez sur le bouton next.
Nous nous retrouvons dans un écran demandant soit d'accepter les extensions par défaut, soit de les configurer. Dans le cas présent, Sélectionnez accept.

Nous en sommes maintenant à l'étape de création de la paire de clés privée/clé publique.
Cette opération se fait à l'aide de l'outil keytool. Nous devons générer une clé RSA. Pendant cette manipulation, il sera demandé d'entrer votre nom. En lieu et place, il FAUT mettre le code spécifié dans la page sur le site de Thawte. Cela devrait ressembler à ceci : JjzGMskneen6NW13.

Ouvrez une console et tapez les commandes suivantes dedans.

Génération de la clé privée (RSA)

keytool -genkey -keyalg RSA -keystore keystore

l'écran devrait ressembler à ce qui suit, suivant les réponses que vous avez données aux questions.

Si l'option -keystore <nom-du-keystore> n'est pas spécifiée, il sera créé dans le fichier .keystore dans le répertoire home de l'utilisateur.

Il faut ensuite exporter la clé afin de pouvoir effectuer la demande de certificat.

exportation de la clé

keytool -certreq -keystore keystore -file csr.txt

Il faut maintenant copier le contenu de ce fichier dans le formulaire de demande de certificat.
Une fois cette copie faite, cliquez sur next et ensuite finish sur l'écran suivant.

Après l'envoi de la demande de certificat, cliquez sur next pour revenir à la page principale de gestion des certificats ou vous pourrez suivre l'état d'avancement de la demande. Un e-mail de confirmation de la demande vous a été envoyé.

Lorsque le certificat a été attribué, vous devriez recevoir un e-mail de confirmation. Cette étape peut prendre un certain temps.

Il faut maintenant télécharger le certificat et l'importer dans le keystore. Pour cela, cliquez sur le certificat désiré. En bas de la page, cliquez sur le bouton fetch.
Sélectionnez la partie entre -----BEGIN PKCS #7 SIGNED DATA----- et -----END PKCS #7 SIGNED DATA-----, ces deux lignes y compris et copiez-le dans un fichier texte.

Le format de certificat fourni par Thawte n'est pas directement importable dans le keystore, il faut donc d'abord le fixer. Téléchargez le jar suivant http://www.dallaway.com/acad/webstart/thawtecleaner.jar (copie locale).
Il faut ensuite corriger le certificat téléchargé :

corriger le certificat téléchargé

java -jar thawtecleaner.jar cert.txt

Un fichier cert.txt.clean a été créé et il peut être importé dans le keystore.

importation du certificat dans le keystore

keytool -import -file cert.txt.clean -trustcacerts -keystore keystore

Nous voilà donc détenteurs d'un certificat valide permettant de signer des applications, pour une durée d'un an, période après laquelle il est renouvelable.

Voir aussi la FAQ : Comment signer une applet ?

II - Une application SWT minimale

Pour le besoin de cet article, il s'agira simplement d'une frame avec un label.

II-A - L'application

Application minimale SWT

package com.developpez.testSWT;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

public class MainForm {

public static void main(java.lang.String[] args) {

try {
Display display = new Display();
Shell shell = new Shell(display);
Label label = new Label(shell, SWT.NONE);

label.setText("Hello World !!");

shell.pack();
label.pack();
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
label.dispose();
display.dispose();

} catch (Throwable exception) {
exception.printStackTrace(System.out);
}
}

}

Pour pouvoir fonctionner, une application a besoin de deux éléments :

- swt.jar : le jar contenant le code de SWT ;

- swt-win32-2135.dll : la dll d'interface entre SWT et le système d'exploitation.

La méthode la plus simple est de recopier ces deux éléments dans la racine du projet.
swt.jar se trouve dans le répertoire C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\ws\win32
swt-win32-2135.dll se trouve dans le répertoire C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86

La structure du projet doit ressembler à ceci :

II-B - La création des JAR

Il suffit de lancer l'assistant de création de JAR et de suivre les différentes étapes.

Une fois que l'assistant a terminé, il faut faire une modification au fichier manifest qui a été créé. Il faut lui ajouter la ligne suivante qui indique que le fichier swt.jar est requis.

ajout au fichier manifest

Class-Path: swt.jar

Nous pouvons maintenant tester notre application SWT indépendante.
Recopiez les fichiers swt.jar et swt-win32-2135.dll dans le répertoire où se trouve le jar créé lors de l'exportation et double-cliquez dessus. Notre application devrait se lancer sans aucun problème.

Nous disposons maintenant d'une application SWT indépendante.

III - Installation d'un serveur web

Le serveur choisi est Apache, version 2.0.48 au moment de la rédaction de cet article.

Le but n'étant pas d'expliquer l'installation complète d'Apache, mais d'avoir finalement un serveur web permettant de tester le déploiement d'application Java via WebStart, nous n'expliquerons ici que les étapes nécessaires.
Les spécialistes d'Apache voudront donc bien ne pas m'en tenir rigueur.

III-A - Installation

La première étape est de télécharger le serveur web : Téléchargement.
La version choisie est celle pour Win32, MSI Installer.

L'installation est très simple :

- lancer l'installation ;

- accepter la licence ;

- accepter les options par défaut.

Après quelques minutes, nous voici donc avec un serveur web actif sur la machine locale.
Si en entrant l'adresse suivante dans un navigateur http://localhost/, nous obtenons une page indiquant que l'on vient d'installer un serveur Apache, c'est que tout se passe bien.

III-B - Configuration

Dans le fichier suivant : C:\Program Files\Apache Group\Apache2\conf\httpd.conf, nous allons, par facilité, modifier l'emplacement des documents.

modification de l'emplacement des documents sous Apache

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"

Nous allons le remplacer par :

modification de l'emplacement des documents sous Apache

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/htdocs"

Il faut ensuite déplacer le répertoire htdocs de C:\Program Files\Apache Group\Apache2 vers C:\

Nous allons maintenant enregistrer le type de fichier jnlp dans les types mime reconnus par Apache. Pour cela nous allons mettre à jour le fichier C:\Program Files\Apache Group\Apache2\conf\httpd.conf\mime.types en lui ajoutant la ligne suivante :

ajout de jnlp aux types mime reconnus

application/x-java-jnlp-file  jnlp

La dernière étape est d'arrêter et de redémarrer Apache pour que les modifications apportées soient prises en compte.

Nous voilà maintenant avec un serveur web prêt pour déployer des applications Java via WebStart.

IV - Déploiement de l'application

IV-A - Préparation de la distribution sur le serveur

La première étape est de créer l'arborescence suivante :

IV-B - Déploiement de l'application

Dans le répertoire c:\htdocs\WebStart\testSWT, créer un fichier index.html et y mettre le code suivant :

index.html

<html>
<body>
<a href="testSWT.jnlp">test SWT</a>
</body>
</html>

Dans le même répertoire, créer un fichier testSWT.jnlp et y mettre le code suivant :

fichier de déploiement de l'application

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost/WebStart/testSWT" href="testSWT.jnlp">
<information>
<title>test de lancement de jar (SWT) signes avec Thawte freemail</title>
<vendor>LFE</vendor>
<homepage href="http://localhost/WebStart/testSWT/index.html"/>
<description>application de test de deploiement de jar (SWT) signes avec freemail</description>
<description kind="short">test WS jar (SWT) signes</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.4+"/>
<jar href="testSWT.jar"/>
<extension name="swt" href="swt/swt.jnlp"/>
</resources>
<application-desc main-class="com.developpez.testSWT.MainForm"/>
</jnlp>

Il faut maintenant recopier le fichier testSWT.jar dans le répertoire c:\htdocs\WebStart\testSWT et le signer

signature du fichier testSWT.jar

jarsigner.exe -keystore keystorexxx -verbose -certs testSWT.jar mykey

Par défaut, si aucun alias n'est spécifié lors de la création de la clé, il vaut mykey par défaut.

Il est possible de vérifier que la signature s'est bien faite :

signature du fichier testSWT.jar

jarsigner.exe -verbose -keystore keystorexxx -verify testSWT.jar

Voici la copie d'écran d'une signature et de son contrôle :

IV-C - Déploiement de SWT

Dans le répertoire C:\htdocs\WebStart\testSWT\swt\ws\win32, recopiez le fichier swt.jar

Dans le répertoire C:\htdocs\WebStart\testSWT\swt, créez un fichier swt.jnlp et mettez-y le code suivant :

fichier de déploiement de swt

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost/WebStart/testSWT/swt/" href="swt.jnlp">
<information>
<title>librairies SWT</title>
<homepage href="http://www.eclipse.org/swt"/>
<description>Librairies SWT</description>
<offline-allowed/>
<vendor>http://www.eclipse.org/swt</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources os="Windows" arch="x86">
<jar href="ws/win32/swt.jar"/>
<nativelib="swt" href="os/win32/x86/swtNativeLib.jar"/>
</resources>
<component-desc />
</jnlp>

Le fichier swt.jar doit aussi être signé de la même façon :

signature du fichier testSWT.jar

jarsigner.exe -keystore keystorexxx -verbose -certs swt.jar mykey

La dernière étape est de fournir la dll swt-win32-2135.dll. Comme WebStart ne permet que de déployer des jar signés, il faut donc encapsuler cette dll dans un jar que nous appellerons swtNativeLib.jar.

La méthode la plus simple est d'utiliser l'assistant d'exportation de jar d'Eclipse pour le créer. Il faut ensuite le copier dans C:\htdocs\WebStart\testSWT\swt\os\win32\x86.

À nouveau, il ne faut pas oublier de le signer.

L'application et ses dépendances sont maintenant prêtes à être déployées.

V - Test de l'application

Dans un navigateur, spécifiez l'adresse suivante http://localhost/WebStart/testSWT/ et cliquez sur le lien test SWT, ce qui doit lancer le téléchargement de l'application via WebStart.

L'écran suivant devrait s'afficher pendant le téléchargement avant de laisser place à un avertissement de sécurité.

Cet avertissement peut être ignoré sans problème.