从JBoss AS 7.1.1迁移到EAP 6.2时,导致弹簧定义的entityManagerFactory加载时失败 [英] When migrating from JBoss AS 7.1.1 to EAP 6.2 causes spring-defined entityManagerFactory to fail when loading

查看:83
本文介绍了从JBoss AS 7.1.1迁移到EAP 6.2时,导致弹簧定义的entityManagerFactory加载时失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用JPA 2.1和Spring 4.0.2开发一个应用程序. Jboss服务器提供了一个JNDI数据源.

I'm developing an application using JPA 2.1 with spring 4.0.2. Jboss server provides a JNDI Datasource.

为了避免使用persistence.xml文件,我已经在services.xml中定义了这个EntityManager:

I've defined this entityManager in services.xml in order to avoid the use of a persistence.xml file:

<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>

虽然在Jboss 7.1.1中此方法工作正常,但更改为EAP 6.2却无法初始化服务:

Althought this worked fine in Jboss 7.1.1 when changing to EAP 6.2 it fails to initialize the service:

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

我在想些什么?我已经尝试过在此配置中进行一些更改,但似乎没有任何效果.也许JBoss EAP 6.2不正确支持LocalContainerEntityManagerFactoryBean吗?

I'm msising something? i've tried several changes in this configuration but nothing seems to work. Maybe LocalContainerEntityManagerFactoryBean is not right supported on JBoss EAP 6.2?

推荐答案

最后,我遇到了问题:在较旧版本的项目中,有一个persistence.xml定义的内容在JBoss中已经部署了好几天,即使是干净的部署也是如此.做了(我想这是因为文件系统故障).这使JBoss加载器与在persistence.xml和services.xml中定义的entityManager混淆.

Finally i got the problem: In a older version of the project there was a persistence.xml defined that was deployed in JBoss for days, even when a clean deploy was made (i guess this was beacause a file system malfunction). This make the JBoss loader to mess up with entityManagers defined in both persistence.xml and services.xml.

这篇关于从JBoss AS 7.1.1迁移到EAP 6.2时,导致弹簧定义的entityManagerFactory加载时失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆