Interblocage Eclipse(R) dispose d'un excellent ensemble d'outils tels que le débogueur. Un débogueur permet à un utilisateur de contrôler un programme pendant son exécution. Utiliser un débogueur pour comprendre le fonctionnement d'un programme est un bon moyen de trouver des bogues potentiels. Le débogueur peut être attaché à distance à une JVM s'exécutant dans le Wrapper et vous pouvez voir étape par étape ce qui se passe. Dans l'exemple suivant, vous verrez à quel point le débogueur est facile à configurer.

Solution

Télécharger le Java Service Wrapper

Dans cet exemple, nous utiliserons la dernière version disponible du Wrapper : 3.5.26. Veuillez télécharger le Wrapper pour votre plateforme et enregistrez-le quelque part sur votre disque. Par exemple : /home/tanuki/wrapper-3.5.26/

Télécharger le code source Java

Le code source du Java Service Wrapper est accessible via SourceForge. Veuillez télécharger le code source ici télécharger pour la version que vous venez de télécharger à l'étape précédente. Dans cet exemple, nous utiliserons le code source de la version 3.5.26.

Extrayez les fichiers quelque part sur votre machine, par exemple : /home/tanuki/wrapper_3.5.26_src

NOTE

Le code source Java est le même pour toutes les éditions (Community, Standard et Professional) du Wrapper.

Fichiers Eclipse

Créez les deux fichiers suivants (utilisés par Eclipse) dans le dossier : /home/tanuki/wrapper_3.5.26_src/src/java

.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="."/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
.project
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>wrapper-code</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>

Eclipse

Importez le code source Java dans Eclipse :

  • Démarrez Eclipse
  • Cliquez sur Fichier
  • Continuez sur Importer
  • Sélectionnez Général > Projets existants dans l'espace de travail
  • Allez sur Suivant
  • Sélectionnez le dossier /home/tanuki/wrapper_3.5.26_src/src/java
  • Cliquez sur Terminer

Dès que le dossier est importé, vous verrez une erreur dans Eclipse. Pour la corriger, effectuez les étapes suivantes :

  • Supprimez l'extension .in du fichier org.tanukisoftware.wrapper.WrapperInfo.java.in
Ouvrez le fichier et appliquez les modifications suivantes :
  • Remplacez @version.root@ par 3.5.26
  • Remplacez @build.date@ par 20131212
  • Remplacez @build.time@ par 1200

Mon application

Dans Eclipse, nous allons créer une application "MyApplication" qui sera lancée par le Java Service Wrapper. Le dossier de ce projet est /home/tanuki/workspace/MyApplication.

Créez une classe my.app.test.HelloWorld.

HelloWorld.java
package my.app.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.tanukisoftware.wrapper.WrapperManager;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Enter your name: ");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String name = "";

        try {
            name = br.readLine();
        } catch (IOException ioe) {
            System.out.println("Could not read your name!");
            System.exit(1);
        }

        System.out.println("Hello, " + name + "!");

        String version = WrapperManager.getVersion();
        System.out.println("Wrapper Version: " + version);
    }
}

Eclipse affichera quelques erreurs concernant le WrapperManager. Pour les résoudre, ouvrez les Propriétés de MyApplication et ajoutez wrapper-code au chemin de compilation.

Lier le Java Service Wrapper à MyApplication

Ouvrez le fichier /home/tanuki/wrapper-3.5.26/conf/wrapper.conf et définissez les propriétés suivantes :

wrapper.conf
# information to run MyApplication
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# set the path to your application
wrapper.java.classpath.3=/home/tanuki/workspace/MyApplication/bin
wrapper.app.parameter.1=my.app.test.HelloWorld

# set the Wrapper in debug mode
wrapper.java.additional.1=-Xdebug
wrapper.java.additional.2=-Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=y

NOTE

Le port 8001 sera utilisé plus tard par Eclipse.

Dans cet exemple, nous utilisons la méthode d'intégration 1 pour intégrer MyApplication avec le Java Service Wrapper.

Exécuter le Java Service Wrapper

Exécutez le Java Service Wrapper à l'aide de la commande suivante :

Application d'exemple TestWrapper
bin/testwrapper console console

Vous verrez que le processus semble figé.

en attente d'un débogueur
Listening for transport dt_socket at address: 8001
En fait, le Wrapper attend qu'un débogueur soit attaché.

Exécuter le débogueur

Dans Eclipse, suivez les étapes pour créer un débogueur distant :

  • Sélectionnez dans le menu Déboguer->Configurations de débogage...->Application Java distante.
  • Créez une nouvelle configuration de lancement.
  • Définissez un nom (par exemple "RemoteWrapper")
  • Sélectionnez le projet wrapper-code.
  • Définissez l'hôte sur localhost.
  • Définissez le port sur 8001 (même valeur que celle définie dans wrapper.conf)
  • Cliquez sur l'onglet Source
  • Cliquez sur Ajouter, sélectionnez Projet Java et choisissez à la fois MyApplication et wrapper-code.
  • Enfin, cliquez sur Déboguer

À partir de ce moment, le débogueur Eclipse est lié à MyApplication et au Wrapper ! Si vous regardez le terminal, vous verrez que MyApplication s'exécute. De retour dans le code source, vous pouvez ajouter un point d'arrêt et déboguer l'application. Vous pourrez voir quelle ligne est exécutée.