2014-05-14 8 views
8

Ich verwende JBoss 7.1.3.Final. Ich möchte mein eigenes Hibernate 4.3.0.Final Gläser und die JPA 2.1 spec JAR-Dateien in meinem WAR verpacken. Es ist keine Option, die Hibernate (oder andere) Modul in JBoss zu ersetzen.Wie exlude ich die JBoss javax.persistence Modul zur Verfügung gestellt?

Wie schließe ich die JPA 2.1 von meinem WAR?

habe ich versucht, dies in meinem Platzierung WEB-INF/jboss-deployment-structure.xml:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
     <dependencies> 
      <module name="org.codehaus.jackson.jackson-core-asl" /> 
      <module name="org.codehaus.jackson.jackson-mapper-asl" /> 
      <module name="org.slf4j" /> 
      <module name="com.mysql" /> 
      <module name="org.joda.time" /> 
      <module name="org.apache.velocity" /> 
      <module name="org.bouncycastle" slot="main" export="true" /> 
     </dependencies> 
     <exclusions> 
      <module name="org.apache.log4j" /> 
      <module name="org.hibernate" /> 
      <module name="javax.persistence" /> 
      <module name="javax.persistence.api" /> 
     </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

aber irgendwie wird die JPA 2.1 geladen und meine WAR Einsatz stirbt mit dieser Ausnahme ...

14:49:46,640 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ebook]] (MSC service thread 1-2) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/infrastructure.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) [spring-context-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:915) [spring-context-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) [spring-context-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:388) [spring-web-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293) [spring-web-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.17.Final.jar:] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.17.Final.jar:] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:89) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [classes.jar: 1.6.0_65] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [classes.jar:1.6.0_65] 
    at java.lang.Thread.run(Thread.java:695) [classes.jar:1.6.0_65] 
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) [hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) [hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399) [hibernate-core-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) [hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150) [hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67) [hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:287) [spring-orm-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) [spring-orm-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    ... 20 more 

Das sind meine Maven Anstands:

  <dependency> 
        <groupId>org.hibernate.javax.persistence</groupId> 
        <artifactId>hibernate-jpa-2.1-api</artifactId> 
        <version>1.0.0.Draft-16</version> 
      </dependency> 

      <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-validator</artifactId> 
        <version>4.3.0.Final</version> 
        <exclusions> 
          <exclusion> 
            <groupId>org.slf4j</groupId> 
            <artifactId>slf4j-api</artifactId> 
          </exclusion> 
        </exclusions> 
      </dependency> 
      <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-entitymanager</artifactId> 
        <version>4.3.0.Final</version> 
      </dependency> 

Jeder Hinweis, wie ich meine WAR restrukturieren kann, ist ap genervt. Ich habe überprüft, dass keine ältere Version der JPA 2.0-Spezifikation (über mvn-Abhängigkeit: tree) geladen wird.

Edit:

Unten ist, wie ich meine Datenquelle im Frühjahr bin konfigurieren. Beachten Sie das Fehlen einer persistence.xml Datei:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="packagesToScan" value="org.mainco.subco" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
    </property> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaPropertyMap" ref="jpaPropertyMap" /> 
</bean> 

<util:map id="jpaPropertyMap"> 
    <entry key="hibernate.show_sql" value="false" /> 
    <entry key="hibernate.hbm2ddl.auto" value="validate"/> 
    <entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 
    <entry key="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /> 
    <entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> 
    <entry key="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/> 
    <entry key="hibernate.cache.use_second_level_cache" value="true" /> 
    <entry key="hibernate.cache.use_query_cache" value="false" /> 
    <entry key="hibernate.generate_statistics" value="false" /> 
</util:map> 
+0

Überprüfen Sie die Datei persistence.xml. Sie können Ihren Provider dort auflisten ' org.eclipse.persistence.jpa.PersistenceProvider' setzt Eclipse-Link als Provider. – amitsalyan

+0

Hallo, ich benutze keine persistence.xml-Datei, stattdessen nutzt Spring die Möglichkeit, Pakete automatisch zu scannen. In Anbetracht dessen, wie würde ich versuchen, was Sie vorschlagen? – Dave

+3

Zuerst "Ich möchte meine eigenen Hibernate 4.3.0.Final Jars und die JPA 2.1 spec JARs in meinem WAR" "Dann" "Wie schließe ich die JPA 2.1 von meinem WAR aus?" Was willst du? – djb

Antwort

5

Wenn Sie nicht in der Lage sind zu ausschließen Jboss bereitgestellt Modul javax.persistence.api, die ich in meinem jboss-eap-6.1 gefunden durch WEB-INF/jboss-Deployment-structure.xml in Ihrer wAR-Datei, ich schlage vor, Sie zu deaktivierenJPA Erweiterungsmodul in standalone.xml oder Standalone-ha.xml welches Sie verwenden

<extension module="org.jboss.as.jmx"/> 
<!--<extension module="org.jboss.as.jpa"/> comment this one--> 
<extension module="org.jboss.as.jsf"/> 
<extension module="org.jboss.as.logging"/> 

Früher, während wir Jersey-webservice in Jboss-Server zu integrieren versucht, wir haben Probleme mit Jboss RESTEasy zur Verfügung gestellt. Resteasy and JAX-RS are automically loaded into your deployment's classpath, if and only if you are deploying a JAX-RS Application.

So war ich erfolgreich Trikot webservice Sperrung integrieren folgende Erweiterungsmodul in standalone.xml

<!--<extension module="org.jboss.as.jaxrs"/> --> 

Sobald Sie Jboss-Server mit kommentierten Erweiterungsmodul starten Es aus der Konfigurationsdatei also verschwinden standalone.xml. Ich würde vorschlagen Sie einen Versuch zu geben, wenn Jboss gebündelt Bibliothek doesnot Ihre Anforderung erfüllen und Sie sind nicht in der Lage es von WEB-INF/jboss-Deployment-structure.xml zu deaktivieren. Vielen Dank.

+0

Entschuldigung, die Frage war, wie kann ich das alles in meiner WAR-Datei tun, ohne die JBoss-Umgebung ändern zu müssen. – Dave

+1

haben Sie versucht, das jpa-Subsystem von jboss-deployment-structure.xml auszuschließen. Aber ich bin mir nicht sicher, ob es funktioniert. ** ** – gyanu

2

Ja, Sie können die Erweiterung deaktivieren, indem Sie sie auskommentieren, aber auch das folgende Subsystem wie folgt aus standalone.xml entfernen.

<!-- <subsystem xmlns="urn:jboss:domain:jpa:1.1"> 
    <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/> 
</subsystem> --> 
0

Sie auch einfach das Problem lösen kann, indem die JPA api JAR-Datei zu ersetzen, die bei jboss7/modules/javax/Persistenz/api/main mit 'Hibernate-JPA-2.1-api' auch mit Aktualisierungsmodul befindet .xml im Verzeichnis mit dem Namen der 2.1-API-Datei.

-1

Ersetzen mit Hibernate-jpa-2.1-api - Arbeitete perfekt.