0

我已将我的项目从 glassfish2.2.1 迁移到 JBoss eap-6.0。迁移到 Jboss 后,我遇到了以下问题

17:38:45,581 错误 [org.jboss.msc.service.fail](ServerService 线程池 -- 62)MSC000001:无法启动服务 jboss.persistenceunit。“unbrand.ear#entityManager”:org.jboss.msc.service .StartException in service jboss.persistenceunit."unbrand.ear#entityManager": javax.persistence.PersistenceException: [PersistenceUnit: entityManager] Unable to build EntityManagerFactory at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java :100) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 的 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_23] [rt.jar:1.6.0_23] 在 java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_23] 在 org.jboss.threads.JBossThread.run(JBossThread.爪哇:122)

原因:javax.persistence.PersistenceException: [PersistenceUnit: entityManager] 无法在 org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) 在 org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java: 890) 在 org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:197) 在 org.jboss.as.jpa.service .PersistenceUnitServiceImpl.access$500(PersistenceUnitServiceImpl.java:57) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:96) ... 还有 4 个

原因: org.hibernate.cache.CacheException: 在 org.hibernate.internal.SessionFactoryImpl 的 org.hibernate.cache.infinispan.entity.EntityRegionImpl.buildAccessStrategy (EntityRegionImpl.java:33)不支持访问类型 [nonstrict-read-write] .(SessionFactoryImpl.java:345) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1746) 在 org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:94) 在 org.hibernate.ejb.Ejb3Configuration。 buildEntityManagerFactory(Ejb3Configuration.java:905) ... 还有 9 个

如果您以粗体检查日志,它正在使用 infinispan 缓存,这就是它导致问题 Unsupported access type [nonstrict-read-write] 的原因,因为 infinispan 不支持这个。

但是我的persistence.xml 我已经配置了ehcache。下面是我的persistence.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com /xml/ns/persistence/persistence _1_0.xsd"
version="1.0"> org.hibernate.ejb.HibernatePersistence jdbc/ejb/unbrand Casinomodule.core.audit.AuditTrail

     <!-- <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"/> -->
     <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
     <property name="hibernate.cache.use_query_cache" value="true"/>
     <property name="hibernate.query.jpaql_strict_compliance" value="false"/>
     <property name="hibernate.session_factory_name" value="HibernateSession"/>
     <property name="hibernate.bytecode.use_reflection_optimizer" value="true"/>


     <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
     <property name="hibernate.cache.use_second_level_cache" value="true"/>

  </properties>    </persistence-unit> </persistence>

不知道为什么 jboss 采用 infinispan 而不是 Ehcache。

谢谢

4

1 回答 1

0

好的,我找出问题所在。

这是由于旧的 Maven 依赖和我在我的 persistence.xml 文件中添加的属性引起的。

下面是maven依赖:

 <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>4.1.9.Final</version>
      </dependency>

下面是我的 persistence.xml 文件中添加的新属性。

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory"/>

发生这种情况是因为我使用的是 JBoss eap-6.0。它也使用休眠作为 JPA 提供程序,它使用休眠 4.1.9.Final 版本。之前在我的 Maven 中,我将休眠的依赖项设置为 3.4.6

于 2013-03-04T07:41:59.377 回答