-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Lien entre entities dans deux jars
PostPosted: Tue Sep 02, 2008 3:36 am 
Beginner
Beginner

Joined: Mon Jan 10, 2005 7:14 am
Posts: 32
Bonjour,

Sur un projet utilisant Hibernate en mode JPA, j'ai besoin de créer un un lien@ManyToOne entre des entities situés dans deux jars différents. Mais il semble qu'il n'arrive pas à créer ce lien. J'ai l'exception suivante au démarrage du serveur (un OpenEJB utilisé pour des tests unitaires) :

Code:
org.apache.openejb.OpenEJBException: createApplication.failed [C:\Documents\t4-core-commons\core\target\classes]: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on t4.core.commons.reasonInstruction.internal.Reason.process references an unknown entity: t4.core.utils.process.internal.Process: @OneToOne or @ManyToOne on t4.core.commons.reasonInstruction.internal.Reason.process references an unknown entity: t4.core.utils.process.internal.Process
   at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:592)
   at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:338)
   at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:250)
   at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:149)
   at org.apache.openejb.OpenEJB.init(OpenEJB.java:288)
   at org.apache.openejb.OpenEJB.init(OpenEJB.java:267)
   at t4.core.commons.test.OpenEjbBootstrap.startAndDeployResources(OpenEjbBootstrap.java:22)
   at t4.core.commons.test.OpenEjbSeamTest.startJbossEmbeddedIfNecessary(OpenEjbSeamTest.java:59)
   at org.jboss.seam.mock.AbstractSeamTest.startSeam(AbstractSeamTest.java:914)
   at t4.core.commons.test.OpenEjbSeamTest.startSeam(OpenEjbSeamTest.java:35)
   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 org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
   at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:398)
   at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:145)
   at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:82)
   at org.testng.SuiteRunner.privateRun(SuiteRunner.java:262)
   at org.testng.SuiteRunner.run(SuiteRunner.java:191)
   at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:808)
   at org.testng.TestNG.runSuitesLocally(TestNG.java:776)
   at org.testng.TestNG.run(TestNG.java:701)
   at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:77)
   at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92)
   at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
   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 org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:334)
   at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:980)
Caused by: org.apache.openejb.OpenEJBException: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on t4.core.commons.reasonInstruction.internal.Reason.process references an unknown entity: t4.core.utils.process.internal.Process: @OneToOne or @ManyToOne on t4.core.commons.reasonInstruction.internal.Reason.process references an unknown entity: t4.core.utils.process.internal.Process
   at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:459)
   ... 31 more
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on t4.core.commons.reasonInstruction.internal.Reason.process references an unknown entity: t4.core.utils.process.internal.Process
   at org.hibernate.cfg.FkSecondPass.doSecondPass(FkSecondPass.java:56)
   at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:428)
   at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:286)
   at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
   at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1233)
   at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154)
   at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:869)
   at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:407)
   at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
   at org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:183)
   at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:454)
   ... 31 more


Quelqu'un sait s'il y a des limitations dans Hibernate (ou JPA ?) pour ce genre de config ?

Merci d'avance


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 02, 2008 9:33 am 
Beginner
Beginner

Joined: Mon Jan 10, 2005 7:14 am
Posts: 32
J'ai trouvé une partie de la réponse.
Dans le fichier persistence.xml, on peut définir une liste de classes supplémentaires pour une unité de persistence avec des tags class. Ca donne quelque chose comme ça :

Code:
<persistence-unit name="t4Seam">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <jta-data-source>java:/jdbc/t4Seam</jta-data-source>
   <class>t4.core.utils.process.internal.Process</class>
   <class>t4.core.utils.process.internal.ProcessFeature</class>
   <class>t4.core.utils.process.internal.ProcessSetting</class>
   <class>t4.core.utils.process.internal.ProcessTemplate</class>
   <class>t4.core.utils.right.internal.Role</class>
   <class>t4.core.utils.right.internal.ProcessRight</class>
   <properties>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="false"/>
   </properties>
</persistence-unit>


Il suffit ensuite que le jar contenant les entities soit dans le classpath et ça fonctionne.

Sauf qu'au niveau maintenance c'est pas terrible : si je rajoute des entities supplémentaires dans l'autre jar, il faut que je les rajoute à la main dans le persistence.xml pour qu'elles soient connues de ma persistence unit. Je voudrais donc plutôt donner un jar et laisser Hibernate y rechercher les entities. D'après ce que j'ai compris, c'est ce que permet de faire la propriété jar-file. Ca donne quelque chose comme ça :

Code:
<persistence-unit name="t4Seam">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <jta-data-source>java:/jdbc/t4Seam</jta-data-source>
   <jar-file>t4-core-utils-core-1.0-SNAPSHOT.jar</jar-file>
   <properties>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="false"/>
   </properties>
</persistence-unit>


Mais je n'arrive pas à faire fonctionner cette config car je ne vois pas ce qu'il faut donner comme valeur à jar-file. L'idéal serait que Hibernate recherche dans le classpath, mais ça ne semble pas être le cas puisque le chemin du jar est un chemin relatif à la racine du jar contenant la persistence unit. Le problème, c'est que j'utilise Maven pour gérer les dépendances et du coup le jar n'est pas accessible par un chemin relatif. Quelqu'un a une idée sur comment résoudre ce problème ?

Merci d'avance ;)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.