我已将我的项目从 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。
谢谢