RSS Feed

Articles associés au tag ‘xdoclet’

JOnAS XDoclet – accéder à l’interface locale des EJBs

8 September 2006 par SeB Pas de commentaire »

Vous générez vos EJBs avec XDoclet et les déployez dans JOnAS ? Et vous n’arrivez à pas accéder à l’interface locale ?

Dès que vous faites un appel à la méthode :

MyEJBServiceUtil.getLocalHome();

L’exception suivante est levée :

javax.naming.NameNotFoundException: MyEJBServiceLocal 	at
	com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:95) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:355) 	at
	org.objectweb.carol.jndi.spi.AbsContext.lookup(AbsContext.java:140) 	at
	org.objectweb.carol.jndi.spi.AbsContext.lookup(AbsContext.java:150) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:351) 	at
	org.objectweb.carol.jndi.spi.MultiContext.lookup(MultiContext.java:118) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:351) 	at
	com.company.project.ejb.MyEJBServiceUtil.lookupHome(MyEJBServiceUtil.java:22) 	at
	com.company.project.ejb.MyEJBServiceUtil.getLocalHome(MyEJBServiceUtil.java:64) 	at
	com.company.project.ejb.MyEJBServiceBean.myService(MyEJBServiceBean.java:112) 	at
	org.objectweb.jonas_gen.com.company.project.ejb.JOnASMyEJBService_69323337Remote.myService(JOnASMyEJBService_69323337Remote.java:56) 	at
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 	at
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 	at
	java.lang.reflect.Method.invoke(Method.java:585) 	at
	sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294) 	at
	org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143) 	at
	sun.rmi.transport.Transport$1.run(Transport.java:153) 	at
	java.security.AccessController.doPrivileged(Native Method) 	at
	sun.rmi.transport.Transport.serviceCall(Transport.java:149) 	at
	sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466) 	at
	sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) 	at
	java.lang.Thread.run(Thread.java:595)

En fait, JOnAS ne permet pas de configurer la référence JNDI de votre interface locale. Cette référence est obligatoirement égale à la référence JNDI de l’interface distante à laquelle il est ajouté la chaîne de caractère _L. Ainsi, si la référence distante JNDI de votre EJB est MyEJBService, la référence locale est MyEJBService_L.

Donc, pour cet exemple, les tags XDoclet à positionner sont :

/* * @ejb.bean
 *      name="MyEJBService"
 *      type="Stateless"
 *      view-type="local"
 *      jndi-name="MyEJBService"
 *      local-jndi-name="MyEJBService_L"
 * @jonas.bean
 *      ejb-name="MyEJBService"
 *      jndi-name="MyEJBService"
 */

Maintenant, vous êtes capable de récupérer l’interface locale d’un EJB généré avec XDoclet et déployé sous JOnAS.

 

XDoclet – support des generics pour les EJBs

25 July 2006 par SeB 3 commentaires »

Vous utilisez XDoclet pour générer vos EJBs ? Vous avez essayé d’utiliser les generics dans le prototype des méthodes des EJBs ? Dans ce cas, vous avez sûrement rencontré l’erreur suivante :

Buildfile: C:/projects/workspace-mycompany/.metadata/.plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/tempAnt.xml
init:
ejbdoclet:
[ejbdoclet] (XDocletMain.start                   47  ) Running <deploymentdescriptor/>
[ejbdoclet] Generating EJB deployment descriptor (ejb-jar.xml).
[ejbdoclet] Error parsing File C:/projects/workspace-mycompany/myproject-ejb/ejbModule/com/mycompany/myproject/ejb/MyServiceBean.java:Encountered "<" at line 288, column 56.
[ejbdoclet] Was expecting one of: [ejbdoclet] <IDENTIFIER> ...
[ejbdoclet] "[" ... [ejbdoclet] "." ...
[ejbdoclet] (XDocletMain.start                   47  ) Running <remoteinterface/>
[ejbdoclet] Generating Remote interface for 'com.mycompany.myproject.ejb.MyServiceBean'.
[ejbdoclet] (TemplateEngine.invokeMethod         547 ) Invoking method failed: xdoclet.modules.ejb.intf.InterfaceTagsHandler.extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt
[ejbdoclet] java.lang.reflect.InvocationTargetException
[ejbdoclet] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ejbdoclet] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[ejbdoclet] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[ejbdoclet] at java.lang.reflect.Method.invoke(Unknown Source)
[ejbdoclet] at xdoclet.template.TemplateEngine.invoke(TemplateEngine.java:641)
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:540)
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620)
[ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475)
[ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348)
[ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415)
[ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562)
[ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596)
[ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487)
[ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48)
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468)
[ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105)
[ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364)
[ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341)
[ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
[ejbdoclet] Caused by: java.lang.NullPointerException
[ejbdoclet] at xdoclet.modules.ejb.EjbTagsHandler.extendsFromFor(EjbTagsHandler.java:895)
[ejbdoclet] at xdoclet.modules.ejb.intf.InterfaceTagsHandler.extendsFrom(InterfaceTagsHandler.java:698)
[ejbdoclet] ... 29 more
[ejbdoclet] xdoclet.template.TemplateException: Invoking method in class xdoclet.modules.ejb.intf.InterfaceTagsHandler failed: extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt, exception: null
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:548)
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620)
[ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475)
[ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348)
[ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415)
[ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562)
[ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596)
[ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487)
[ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48)
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468)
[ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105)
[ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364)
[ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341)
[ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
[ejbdoclet] (XDocletMain.start                   53  ) Running XDoclet failed.
[ejbdoclet] (XDocletMain.start                   54  ) <<Running XDoclet failed.>>
[ejbdoclet] xdoclet.template.TemplateException: Invoking method in class xdoclet.modules.ejb.intf.InterfaceTagsHandler failed: extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt, exception: null
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:548)
[ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620)
[ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475)
[ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348)
[ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415)
[ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562)
[ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596)
[ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487)
[ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48)
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468)
[ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105)
[ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364)
[ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341)
[ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
[ejbdoclet] C:projectsworkspace-mycompany.metadata.pluginsorg.eclipse.jst.j2ee.ejb.annotations.xdoclettempAnt.xml:69: XDoclet failed.
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:471)
[ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105)
[ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364)
[ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341)
[ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
[ejbdoclet] Caused by: xdoclet.XDocletException: Running XDoclet failed.
[ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:788)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596)
[ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487)
[ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48)
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468)
[ejbdoclet] ... 12 more
[ejbdoclet] - - - Nested Exception - - -
[ejbdoclet] xdoclet.XDocletException: Running XDoclet failed.
[ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:788)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679)
[ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596)
[ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487)
[ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48)
[ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468)
ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105)
[ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364)
[ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341)
[ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
BUILD FAILED C:projectsworkspace-mycompany.metadata.pluginsorg.eclipse.jst.j2ee.ejb.annotations.xdoclettempAnt.xml:69: Unexpected error Total time: 6 seconds

Comme l’équipe de XDoclet ne semble pas travailler sur le sujet[1], Nicolas Leroux s’est penché sur le problème et propose une version modifiée de XDoclet 1.2 et 1.3 supportant les generics.

D’après l’auteur, cette version fonctionne sous JBoss IDE 3.1. Personnellement, je l’ai intégré dans Eclipse 3.2 avec WTP 1.5. Pour celà, il faut remplacer[2] les fichiers présents dans le répertoire lib de XDoclet xdoclet-1.2.3.jar, xdoclet-ejb-module-1.2.3.jar et xjavadoc-1.1.jar par xdoclet-1.3-08012006-lunatech.jar et xdoclet-ejb-module-1.3-08012006-lunatech.jar et xjavadoc-1.5-29012006-lunatech.jar. Il faut également ajouter le JAR de Dom4j 1.6.1 dans le répertoire lib de XDoclet.

Attention, Eclipse n’indique plus qu’il trouve les bibliothèques de XDoclet comme ci-dessous :

Configuration de XDoclet dans Eclipse

Configuration de XDoclet dans Eclipse

De plus, le build automatique de XDoclet ne semble plus fonctionner. Cependant, en lancant le build XDoclet manuellement, les EJBs sont correctement générés.Mise à jour du 27/07/06 : en renommant les JAR modifiés avec leur nom original dans XDoclet, tout fonctionne correctement dans Eclipse avec WTP.

Avec cette personnalisation, vous pouvez maintenant bénéficier des avantages des generics lorsque vous développerez vos EJBs.

Notes

[1] Elle est peut-être trop occupée par XDoclet 2.

[2] Pour celà, il faut renommer la version modifiée avec les noms de la version originale.

lire la suite…