Re: Patouille ear, ejb, web-services et Glassfish

[email protected] Thu, 31 Mar 2011 15:50:40 +0000
Newsgroups gmane.comp.java.french.general
Message-ID <1320890039-1301586641-cardhu_decombobulator_blackberry.rim.net-622297453-@b12.c11.bise7.blackberry>
Tu peux montrer l'annotation utilisee pour specifier le binding jndi de ton objet ?
---- Envoyé avec BlackBerry® d'Orange ----

-----Original Message-----
From: Nicolas Delsaux <[email protected]>
Date: Thu, 31 Mar 2011 17:46:43 
To: * liste Java<[email protected]>
Subject: Re: Patouille ear, ejb, web-services et Glassfish

2011/3/31 Nicolas Delsaux <[email protected]>:
> Salut,
> malgré la simplification de JEE, j'ai l'impression d'être encore trop
> bête pour comprendre.
> J'essaye de faire un EJB/web-service qui soit embarqué dans un EAR, le
> tout avec maven (je sais pas si ça joue, mais ça peut, alors je
> préfère le dire).
> A priori, tout va bien : je crée mon EJB, je lui mets les bonnes
> annotations, j'ai ma palanquée de modules maven pour créer le war et
> l'ear qui va le contenir, quand je compile, ça compile sans problème.
> Je me retrouve donc avec un EAR que j'uploade dans mon glassfish (oui,
> je sais, à terme, il faudra sans doute faire en sorte que ce soit
> automatiquement uploadé grâce à maven, mais pour l'instant
> j'expérimente).
> Quand j'uploade mon EAR, Glassfish l'accepte sans problème, la preuve :
>
> E:\java-ext\glassfish3>bin\asadmin list-components --long=true
> --subcomponents --resources
> NAME                        TYPE                          STATUS
> application-ear-0.0.1-SNAPSHOT  <ear, ejb, webservices, web>  enabled
>  ejb-entities-0.0.1-SNAPSHOT.war  <WebModule>
> Command list-components executed successfully.
>
> Seulement, dans mon war ejb-entities, j'ai un ejb qui s'appelle
> TemplateEJB, qui devrait apparaître, non ?
> Et si il n'appraît pas, d'où est-ce que ça peut venir ?
>

Bon, je me réponds, essentiellement parce que je pense que ça va
plaire (ou pas) à Alexis ;-)

Donc, j'ai pas mal galéré là-dessus, et finallement, j'ai essayé une
autre méthode.
J'ai créé le fameux web-service HelloWorld :

@WebService
public class Hello {
	public String hello(String world) {
		return "Salut, "+world+" !";
	}
}


Lui, pas de problème, je le déploie bien dans Glassfish, et je peux
même tester le web-service avec la super page magique de Glassfish
(très pratique, cette page).

ejb-entities-0.0.1-SNAPSHOT.war	[ejb, jpa, web,
webservices]	----------- 	----------- 	Launch
ejb-entities-0.0.1-SNAPSHOT.war		default	Servlet	
ejb-entities-0.0.1-SNAPSHOT.war		jsp	Servlet	
ejb-entities-0.0.1-SNAPSHOT.war		TemplateEJB	StatelessSessionBean	
ejb-entities-0.0.1-SNAPSHOT.war		Hello	Servlet	View Endpoint

Donc, ensuite, j'en fais un EJB stateless en rajoutant @Stateless.
Et là, surprise :

ejb-entities-0.0.1-SNAPSHOT.war	[ejb, jpa, web,
webservices]	----------- 	----------- 	Launch
ejb-entities-0.0.1-SNAPSHOT.war		default	Servlet	
ejb-entities-0.0.1-SNAPSHOT.war		jsp	Servlet	
ejb-entities-0.0.1-SNAPSHOT.war		TemplateEJB	StatelessSessionBean	
ejb-entities-0.0.1-SNAPSHOT.war		Hello	StatelessSessionBean

Vous voyez comme Hello est devenu un StatelessSessionBean sans
possibilité d'interaction ?

Heureusement, un tour dans les logs m'indique qu'Hello est quand même déployé :

EJB Endpoint deployed application-ear-0.0.1-SNAPSHOT listening at address at
http://le_nom_windows_de_ma_machine_qui_m_a_soule_pendant_deux_heures:8080/HelloService/Hello

Bon, par contre, il semble que je perde la possibilité de le tester.
Mais alors, vous vous dites que mon autre EJB est bien déployé ...
Ben c'est une autre salade.
En fouillant encore dans les logs, je suis tombé là-dessus :

[#|2011-03-31T17:13:16.637+0200|WARNING|glassfish3.1|com.sun.xml.ws.transport.http.servlet.ServletAdapter|_ThreadID=20;_ThreadName=Thread-1;|Container
org.glassfish.webservices.JAXWSContainer@9bd714 doesn't support class
com.sun.xml.ws.api.server.Module|#]

C'est louche, hein ?
Et en bonus, ça semble correspondre à un vieux bug relatif à uen
classe de ce "pauvre" Koshuke :
http://www.docjar.com/docs/api/com/sun/xml/ws/api/server/Module.html

Alors maintenant je fais quoi ? Ben j'en sais rien.
Me dites pas que je vais devoir faire des classes non EJB pour uy
reproduire les méthodes des EJBs en les injectant, parce que ça va me
faire de la peine.

-- 
Nicolas Delsaux