JPA 1.0 provider (OpenJPA 1.2.2) on jboss-as-7.1.0.Alpha2-SNAPSHOT result in ClassCastException
vmariusvv Oct 6, 2011 4:48 AMHi,
I'm trying to run a application that has JPA 1.0, EJB 3.0 on jboss-as-7.1.0.Alpha2-SNAPSHOT.
I've build a module for OpenJPA 1.2.2 with dependencies on geromino specs:
org.apache.openjpa module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.openjpa">
<resources>
<resource-root path="openjpa-1.2.2.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.apache.geronimo.specs.geronimo-jpa_1_0_spec"/>
<module name="org.apache.geronimo.specs.geronimo-jta_1_1_spec"/>
<module name="org.apache.commons.collections" slot="3.2"/>
<module name="org.apache.commons.lang" slot="2.1"/>
<module name="org.apache.commons.pool" />
<module name="net.sourceforge.serp" />
</dependencies>
</module>
org.apache.geronimo.specs.geronimo-jpa_1_0_spec module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.geronimo.specs.geronimo-jpa_1_0_spec">
<dependencies>
<!-- This dep is for javax.naming -->
<module name="javax.api" export="true"/>
</dependencies>
<resources>
<resource-root path="geronimo-jpa_1.0_spec-1.1.2.jar"/>
<!-- Insert resources here -->
</resources>
</module>
org.apache.geronimo.specs.geronimo-jta_1_1_spec module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.geronimo.specs.geronimo-jta_1_1_spec">
<dependencies>
<!-- This dep is for javax.naming -->
<module name="javax.api" export="true"/>
</dependencies>
<resources>
<resource-root path="geronimo-jta_1.1_spec-1.1.1.jar"/>
<!-- Insert resources here -->
</resources>
</module>
org.apache.geronimo.specs.geronimo-ejb_3_0_spec" module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.geronimo.specs.geronimo-ejb_3_0_spec">
<dependencies>
<!-- This dep is for javax.naming -->
<module name="javax.api" export="true"/>
<module name="org.apache.geronimo.specs.geronimo-annotation_1_0_spec" export="true"/>
<module name="org.apache.geronimo.specs.geronimo-interceptor_3_0_spec" export="true"/>
<module name="org.apache.geronimo.specs.geronimo-jta_1_1_spec" export="true"/>
</dependencies>
<resources>
<resource-root path="geronimo-ejb_3.0_spec-1.0.1.jar"/>
<!-- Insert resources here -->
</resources>
</module>
org.apache.geronimo.specs.geronimo-annotation_1_0_spec module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.geronimo.specs.geronimo-annotation_1_0_spec">
<dependencies>
<!-- This dep is for javax.naming -->
<module name="javax.api" export="true"/>
</dependencies>
<resources>
<resource-root path="geronimo-annotation_1.0_spec-1.1.1.jar"/>
<!-- Insert resources here -->
</resources>
</module>
org.apache.geronimo.specs.geronimo-interceptor_3_0_spec module:
<module xmlns="urn:jboss:module:1.0" name="org.apache.geronimo.specs.geronimo-interceptor_3_0_spec">
<dependencies>
<!-- This dep is for javax.naming -->
<module name="javax.api" export="true"/>
</dependencies>
<resources>
<resource-root path="geronimo-interceptor_3.0_spec-1.0.1.jar"/>
<!-- Insert resources here -->
</resources>
</module>
net.sourceforge.serp module:
<module xmlns="urn:jboss:module:1.0" name="net.sourceforge.serp">
<resources>
<resource-root path="serp-1.13.1.jar"/>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.junit" slot="3.8.1"/>
</dependencies>
</module>
After this I modified the following files:
standalone.xml:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<ear-subdeployments-isolated>
false
</ear-subdeployments-isolated>
<global-modules>
<module name="org.apache.openjpa" slot="main"/>
</global-modules>
</subsystem>
jboss-deployement-structure.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>
<exclusions>
<module name="javax.annotation.api" />
<module name="javax.ejb.api" />
<module name="javax.interceptor.api" />
<module name="javax.persistence.api" />
<module name="javax.transaction.api" />
</exclusions>
<dependencies>
<module name="org.apache.geronimo.specs.geronimo-annotation_1.0_spec" />
<module name="org.apache.geronimo.specs.geronimo-ejb_3.0_spec" />
<module name="org.apache.geronimo.specs.geronimo-interceptor_3.0_spec" />
<module name="org.apache.geronimo.specs.geronimo-jpa_1.0_spec" />
<module name="org.apache.geronimo.specs.geronimo-jta_1.1_spec" />
<module name="org.apache.openjpa" />
</dependencies>
</deployment>
</jboss-deployment-structure>
persistence.xml:
<properties>
............
<property name="jboss.as.jpa.providerModule" value="org.apache.openjpa"/>
</properties>
But on deployment I receive the following stack trace:
11:16:42,439 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC00001: Failed to start service jboss.deployment.unit."Project.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."Project.ear".INSTALL: Failed to process phase INSTALL of deployment "Project.ear"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121) [jboss-as-server-7.1.0.Alpha2-SNAPSHOT.jar:7.1.0.Alpha2-SNAPSHOT]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: java.util.ServiceConfigurationError: javax.persistence.spi.PersistenceProvider: Provider org.apache.openjpa.persistence.PersistenceProviderImpl could not be instantiated: java.lang.ClassCastException
at java.util.ServiceLoader.fail(ServiceLoader.java:207) [:1.6.0_26]
at java.util.ServiceLoader.access$100(ServiceLoader.java:164) [:1.6.0_26]
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353) [:1.6.0_26]
at java.util.ServiceLoader$1.next(ServiceLoader.java:421) [:1.6.0_26]
at org.jboss.as.jpa.processor.PersistenceUnitDeploymentProcessor.lookupProvider(PersistenceUnitDeploymentProcessor.java:417)
at org.jboss.as.jpa.processor.PersistenceUnitDeploymentProcessor.addPuService(PersistenceUnitDeploymentProcessor.java:247)
at org.jboss.as.jpa.processor.PersistenceUnitDeploymentProcessor.handleEarDeployment(PersistenceUnitDeploymentProcessor.java:194)
at org.jboss.as.jpa.processor.PersistenceUnitDeploymentProcessor.deploy(PersistenceUnitDeploymentProcessor.java:103)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115) [jboss-as-server-7.1.0.Alpha2-SNAPSHOT.jar:7.1.0.Alpha2-SNAPSHOT]
... 5 more
Caused by: java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2990) [:1.6.0_26]
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345) [:1.6.0_26]
... 11 more
Probably this is because of a ClassLoader isolation, maybe I need to exclude more APIs. Is my config ok ?
Thanks,
Marius