Bonjour,

Dans un projet Maven, un module construit et déploie un ear dans Glassfish 3.1.
Un autre module produit un autre code et durant la phase de test surefire de Maven, souhaite appeler les services d'un des EJBs précédemment déployés.

Initialement, l'exécution échoue sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Caused by: java.lang.RuntimeException: 
Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory
Un classique, car les jars clients gf-client.jar, appserv-rt.jar que l'on emploie habituellement ne sont pas dans le classpath.

Mais voilà: avec la version 3.1 de Glassfish, il ne servirait à rien de les y mettre puisqu'ils sont vides, ou presque: il ne contiennent aucune des classes utiles à l'invocation des EJBs depuis un client.

La procédure officielle consiste maintenant à se faire générer un environnement pour applications clientes, par le biais de la commande appclient du répertoire bin de Glassfish. Celui-ci produit un jar, appclient.jar.
Mais ce jar n'est pas intégrable en tant que tel. Il s'agit plutôt d'un zip, à dézipper quelque-part. Là, il produit un environnement qui a cet aspect:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
- appclient
----- glassfish
---------- bin
---------- domains
---------- lib
---------- modules
----- javadb
----- mq
qui permet ensuite de lancer une application cliente en substitution d'une commande Java.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
C:\Logiciels\appclient\glassfish\bin>appclient
Usage :
        appclient [ <classfile> | -client <appjar> ]
                [-mainclass <appClass-name>|-name <display-name>]
                [-xml <xml>]
                [-textauth] [-user <username>] [-password <password>|-passwordfile <password-file>]
 
                [-targetserver host[:port][,host[:port]...]
                [app-args]
or :
        appclient [ <valid JVM options and valid ACC options> ]
                [ <appClass-name> | -jar <appjar> ]
                [app args]
Voilà qui est une manière de faire.
Les jars ne sont plus nécessaires (nous ignorons lesquels et combien doivent s'associer au client pour démarrer l'application: Glassfish s'en occupe tout seul) mais alors...

... moi, je suis dans la phase de test de Maven.
pour que ses tests unitaires fonctionnent, il ne doit plus les lancer via une commande Java, mais appclient, donc, cette fois.

Comment puis-je lui le demander?

En vous remerciant,

Grunt.