2014-05-08 25 views
2

我正在開發一個使用JPA 2.1和Spring 4.0.2的應用程序。 Jboss服務器提供了一個JNDI數據源。當從JBoss AS 7.1.1遷移到EAP 6.2導致彈簧定義的entityManagerFactory在加載時失敗

<jee:jndi-lookup id="projectDataSourceTaget" jndi-name="${jndi.datasourceName}" 
    expected-type="javax.sql.DataSource" /> 
<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    depends-on="flyway"> 
    <property name="jpaVendorAdapter"> 
     <bean 
     class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.xxx" /> 
    <property name="persistenceUnitName" value="projectEntityManager" /> 
    <property name="jtaDataSource" ref="projectDataSourceTaget" /> 
    <property name="jpaProperties"> 
     <props> 
     <prop key="hibernate.transaction.manager_lookup_class"> 
      org.hibernate.transaction.JBossTransactionManagerLookup 
     </prop> 
     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
     <!-- validate | update | create | create-drop --> 
     <prop key="hibernate.hbm2ddl.auto">validate</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.format_sql">false</prop> 
     <prop key="org.hibernate.envers.use_revision_entity_with_native_id">false</prop> 
     <prop key="javax.persistence.transactionType">JTA</prop> 
     </props> 
    </property> 
    </bean> 

Althought這在JBoss中7.1.1的罰款改爲EAP 6.2失敗時:

我在services.xml中,以避免使用persistence.xml文件的定義了這個的EntityManager初始化服務:

17:27:17,061 WARN [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (ServerService Thread Pool -- 48) HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections 
17:27:17,079 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 48) MSC000001: Failed to start service jboss.persistenceunit."Project.war#Project": org.jboss.msc.service.StartException in service jboss.persistenceunit."Project.war#Project": javax.persistence.PersistenceException: [PersistenceUnit: Project] Unable to build EntityManagerFactory 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_60-ea] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_60-ea] 
    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_60-ea] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1] 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: GaIA] Unable to build EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:924) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    ... 4 more 
Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:98) 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:174) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:76) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132) 
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1822) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1780) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914) 
    ... 9 more 

我是msising的東西?我已經嘗試了幾次這個配置的變化,但似乎沒有任何工作。也許LocalContainerEntityManagerFactoryBean在JBoss EAP 6.2上不被支持?

+0

哦,如果忘記了一些春天的配置文件的一部分。 $ {jndi.datasourceName}的值由自動訪問的屬性文件填充,原因是:'code' 'code ' 而且ENV_CONFIG是一個定義良好的環境變量。正如我所說的,它在JBoss AS 7.1.1中完美運行,但EAP 6.2似乎並沒有以同樣的方式工作。 –

回答

2

最後我得到了這個問題:在項目的一個較老的版本中,有一個persistence.xml被定義,在JBoss中被部署了好幾天,即使做了一個乾淨的部署(我猜這是因爲文件系統故障) 。這使得JBoss加載器與在persistence.xml和services.xml中定義的entityManagers混淆。

相關問題