-
1. Re: How to add a class and all its parents and dependencies ?
charlee_ch Jun 5, 2012 10:50 PM (in response to aogier)1 of 1 people found this helpfulHi,
The JavaArchive has no method for adding the dependencies. You may use the WebArchive or EnterpriseArchive by using the method named "addAsLibraries()". If you are in the Maven environment, the Shrinkwrap Resolver will help you as the following link: -
http://www.davidsalter.com/2012/04/using-the-shrinkwrap-maven-resolver-for-arquillian-tests.html
https://community.jboss.org/wiki/HowToIAddMavenArtifactsToMyShrinkWrapArchives
I hope this may help.
Regards,
Charlee Ch.
-
2. Re: How to add a class and all its parents and dependencies ?
aogier Jun 6, 2012 5:44 AM (in response to charlee_ch)Thank you for that reply Charlee, it helps me to go a step further, but I'm not done yet.
Here is now what I'm doing :
@Deployment public static Archive<?> createDeployment() { final MavenDependencyResolver resolver = DependencyResolvers.use(MavenDependencyResolver.class).loadMetadataFromPom("pom.xml"); return ShrinkWrap.create(WebArchive.class) .addClass(AService.class) .addAsLibraries(resolver.artifact("my.company:myproject-services:1.0-SNAPSHOT").resolveAsFiles()) .addAsResource("test-persistence.xml", "META-INF/persistence.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); }
My problem is now that JBoss loads me 2 persistence units definitions as myproject-services depends on myproject-orm which contains the @Entity classes but also "persistence.xml" which points to another PU that the one defined in my "test-persistence.xml"...
Do you know a way to avoid the "persistence.xml" from myproject-orm to be include in the ShrinkWrap Archive, but all the classes & dependencies of that project to still be included ?
PS : Here is the JBoss stack
11:18:10,235 INFO [org.jboss.as.jpa] (MSC service thread 1-16) JBAS011401: Read persistence.xml for test 11:18:10,237 INFO [org.jboss.as.jpa] (MSC service thread 1-16) JBAS011401: Read persistence.xml for myproject 11:18:10,245 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed to start service jboss.deployment.unit."2036359f-2a79-4e03-b752-0b3100399f44.war".DEPENDENCIES: org.jboss.msc.service.StartException in service jboss.deployment.unit."2036359f-2a79-4e03-b752-0b3100399f44.war".DEPENDENCIES: Failed to process phase DEPENDENCIES of deployment "2036359f-2a79-4e03-b752-0b3100399f44.war" at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_26] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_26] at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26] Caused by: java.lang.IllegalArgumentException: JBAS011470: Persistence unitName was not specified and there are 2 persistence unit definitions in application deployment "2036359f-2a79-4e03-b752-0b3100399f44.war". Either change the application to have only one persistence unit definition or specify the unitName for each reference to a persistence unit. at org.jboss.as.jpa.container.PersistenceUnitSearch.resolvePersistenceUnitSupplier(PersistenceUnitSearch.java:69) at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.getPersistenceUnit(JPAAnnotationParseProcessor.java:284) at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.getBindingSource(JPAAnnotationParseProcessor.java:220) at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.processField(JPAAnnotationParseProcessor.java:151) at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.processPersistenceAnnotations(JPAAnnotationParseProcessor.java:118) at org.jboss.as.jpa.processor.JPAAnnotationParseProcessor.deploy(JPAAnnotationParseProcessor.java:90) at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] ... 5 more
-
3. Re: How to add a class and all its parents and dependencies ?
charlee_ch Jun 6, 2012 8:03 AM (in response to aogier)Hi Anthony,
Please correct me, if I'm wrong. I understand that the "my.company:myproject-services:1.0-SNAPSHOT" contains its own "persistence.xml". Since it is a ready packaged jar file, I thought that the Shrinkwrap cannot exclude the resources inside it.
I'm not familiar with JBoss. I understand that you may use the @PersistenceContext/@PersistenceUnit injection with without any parameter by default. Since you have 2 persistence units, the JBoss may confuse which the persistence unit should be used is. You may need to mention the using unit name explicitly as the following: -
{code:java}
@PersistenceUnit(unitName = "...")
private EntityManagerFactory emf;
{code}
and/or
{code:java}
@PersistenceContext(unitName = "...")
private
EntityManager em;
{code}
I also search the term "JBAS011470" via google and found the useful information here: - https://community.jboss.org/message/642505 They also mention to specify the unit name expliclitly for each @PersistenceContext and @PersistenceUnit as well.
I hope this may help.
Regards,
Charlee Ch.