8 février 2007
Pour rappel, les EJB3 sont le résultat du mariage entre les EJB2 et Hibernate et XDoclet Hibernate Annotation.
Lorsque les développeurs travaillent avec Hibernate, ils prennent vite l’habitude d’utiliser le HQL pour les requêtes statiques et l’API Criteria pour les requêtes dynamiques[1]. Cependant, le passage d’Hibernate aux EJB3 Entities provoque quelques frustrations. En effet, mis à part le JPQL[2] qui est l’équivalent du HQL chez Hibernate, il n’y a aucune API pour générer dynamiquement des requêtes sur les EJB3 Entities ! :-/
Faut-il attendre les EJBs 3.1 ou 4 ? Au moins de quelqu’un nous sorte de son châpeau une petite API Criteria pour les EJB3…
Notes
[1] Comme expliqué dans SQL natif, HQL ou API Criteria ?">le comparatif SQL, HQL et API Criteria.
[2] Pour lequel il existe un tutorial et une documentation de référence du language.
ejb hibernate java
Publié dans J2EE | Aucun commentaire »
27 juillet 2006
En utilisant WTP 1.5 et Eclipse 3.2, lors du déploiement de modules EJBs dans JOnAS, il arrive de rencontrer cette erreur dans la console JOnAS :
2006-07-26 09:46:10,105 :
Server.start :
Le serveur JOnAS 'jonas' est démarré sur rmi/jrmp 2006-07-26 09:47:03,589 :
EarServiceImpl.unDeployEarMBean :
Error when trying to get the canonical file from C:/JONAS_4_7_5/apps/autoload/myproject-ear.earSyntaxe du nom de fichier, de répertoire ou de volume incorrecte C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear is using DTDs, WsGen needs Schema only : META-INF/jonas-ejb-jar.xml use a DTD. Only XML Schema are accepted for J2EE 1.4 webservices 2006-07-26 09:47:05,261 :
EJBServiceImpl.checkGenIC :
JOnAS version was not found in the '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' manifest file. Auto-generating container classes...
GenIC for JOnAS 4.7.5: 'MyService' generation ... No javac command was found at 'C:Program FilesJavajre1.5.0_07..binjavac'. Check that you are using a JDK and not a JRE. 2006-07-26 09:47:06,402 :
Cmd.run :
exception java.io.IOException:
CreateProcess: "C:/Program Files/Java/jre1.5.0_07/../bin/javac" -classpath C:/DOCUME~1/MYUSERLOCALS~1/Temp/genic6738.tmp;/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar;;C:/JONAS_4_7_5/conf;C:/JONAS_4_7_4/conf;C:/JONAS_4_7_5/lib/commons/j2ee/connector-1_5.jar;C:/JONAS_4_7_5/lib/commons/j2eeejb-2_1-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/emb-jsr86-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-jaf.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-mail.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-providers.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jacc-1_0.jar;C:/JONAS_4_7_5/lib/commons/j2ee/javax77.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jaxr-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jaxrpc.jar;C:/JONAS_4_7_5/lib/commons/j2eejms.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jsp-2_0.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jsr88-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jta-spec1_0_1.jar;C:/JONAS_4_7_5/lib/commons/j2ee/saaj.jar;C:/JONAS_4_7_5/lib/commons/j2ee/servlet-2_4.jar;C:/JONAS_4_7_5/lib/commons/j2ee/wsdl4j.jar;C:/JONA”
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at org.objectweb.common.Cmd.run(Cmd.java:147)
at org.objectweb.jonas_ejb.genic.GenIC.compilClasses(GenIC.java:887)
at org.objectweb.jonas_ejb.genic.GenIC.main(GenIC.java:425)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.objectweb.jonas_ejb.genic.wrapper.GenicServiceWrapper.callGenic(GenicServiceWrapper.java:68)
at org.objectweb.jonas.server.J2EEServerMBean.callGenic(J2EEServerMBean.java:450)
at org.objectweb.jonas.server.J2EEServerMBean.deployLocalFile(J2EEServerMBean.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:454)
at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(Unknown Source)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at org.objectweb.jonas.container.EJBServiceImpl.checkGenIC(EJBServiceImpl.java:1771)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:803)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
GenIC fatal error: Failed when compiling the generated classes via java compiler 2006-07-26 09:47:06,418 :
J2EEServerMBean.deployLocalFile :
Cannot generate classes for this application : '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar. Problems when invoking main method from GenIC:
java.lang.RuntimeException:
Failed when compiling the generated classes via java compiler'. 2006-07-26 09:47:06,496 :
JFactory.checkJonasVersion : failed to find class org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home java.lang.ClassNotFoundException: org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.objectweb.jonas_ejb.container.JFactory.checkJonasVersion(JFactory.java:981)
at org.objectweb.jonas_ejb.container.JFactory.init(JFactory.java:191)
at org.objectweb.jonas_ejb.container.JFactory.<init>(JFactory.java:168)
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:83)
at org.objectweb.jonas_ejb.container.JStatelessFactory.<init>(JStatelessFactory.java:83)
at org.objectweb.jonas_ejb.container.JContainer.addBean(JContainer.java:237)
at org.objectweb.jonas.container.EJBServiceImpl.createContainer(EJBServiceImpl.java:815)
at org.objectweb.jonas.container.EJBServiceImpl.deployJars(EJBServiceImpl.java:1477)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:929)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2006-07-26 09:47:06,496 :
EJBServiceImpl.deployJars : Error when deploying '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' javax.ejb.EJBException: MyService Cannot load org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:98)
at org.objectweb.jonas_ejb.container.JStatelessFactory.<init>(JStatelessFactory.java:83)
at org.objectweb.jonas_ejb.container.JContainer.addBean(JContainer.java:237)
at org.objectweb.jonas.container.EJBServiceImpl.createContainer(EJBServiceImpl.java:815)
at org.objectweb.jonas.container.EJBServiceImpl.deployJars(EJBServiceImpl.java:1477)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:929)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source) Caused by:
java.lang.ClassNotFoundException: org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:96)
... 19 more 2006-07-26 09:47:06,496 :
EJBServiceImpl.deployJars : Undeploy ejb-jar of the ear application 2006-07-26 09:47:06,496 : EJBServiceImpl.deployJars : Cannot remove the non-existant container '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' 2006-07-26 09:47:06,496 : EarServiceImpl.deployEar :
Error during the deployment of the jars files of the Ear file C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear':
Error during the deployment: javax.ejb.EJBException: MyService Cannot load org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home 2006-07-26 09:47:06,496 : EarServiceImpl.deployEarMBean : Cannot deploy file 'C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear'
Comme l’explique à juste titre le message d’erreur, la tâche Ant qui génère les EJBs est lancée par le JRE au lieu du JDK[1]. Et c’est pourquoi l’outil GenIC ne trouve pas le programme javac.
Le problème peut être résolu en lancant votre serveur d’applications[2] avec le JDK au lieu du JRE Pour celà, il faut procéder ainsi :
- Vérifier la configuration du JDK dans Eclipse
- Aller dans Windows -> Preferences… -> Java -> Installed JREs
- S’il n’y a aucun JDK dans la liste des Installed JRE, en ajouter un soit avec Add… soit avec Search…
- Configurer le serveur d’applications JOnAS avec WTP
- Aller dans Windows -> Preferences… -> Server -> Installed Runtimes
- Sélectionner le serveur d’applications utilisé[3] et cliquer sur Edit…
- Modifier le JRE en sélectionnant un JDK, puis cliquer sur Finish et enfin sur OK
Pour que la modification soit effective, il faut redémarrer le serveur d’application bien entendu. Maintenant vos petits EJBs peuvent être déployés !
Notes
[1] Il semble que ce soit un bug de Ant !?
[2] Ici JOnAS.
[3] Dans mon cas, c’est JOnAS v4.
eclipse ejb jonas
Publié dans J2EE | 2 commentaires »
25 juillet 2006
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 :


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.
ejb xdoclet
Publié dans J2EE | 2 commentaires »