Ego*_*r B 6 java hibernate jpa exception
每次我想部署我的应用程序时,都会出现一个奇怪的错误.我正在使用IntelliJ IDEA 2016.3.
我的应用程序是使用JSF,EJB和JPA(Hibernate)的Java WEB应用程序.所有的库都是由IDEA下载的(在这个项目中没有Maven),所有依赖项都附带.war文件.我正在Windows 10上部署到TomEE 7.0.2.
以下是部署中涉及的配置文件:resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<Resource id="my_internet_shop_db" type="javax.sql.DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/my_internet_shop?autoReconnect=true&useSSL=true
UserName root
Password alpine
validationQuery = SELECT 1
JtaManaged true
</Resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
persistence.xml中
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="my_internet_shop" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>my_internet_shop_db</jta-data-source>
<class>Objects.Order.CartEntity</class>
<class>Objects.User.ContactEntity</class>
<class>Objects.Order.OrderEntity</class>
<class>Objects.Product.ProductEntity</class>
<class>Objects.Section.SectionEntity</class>
<class>Objects.Service.ServiceEntity</class>
<class>Objects.User.UserEntity</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/my_internet_shop"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="alpine"/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
我的堆栈跟踪:
org.apache.openejb.OpenEJBException: org.apache.openejb.OpenEJBRuntimeException: javax.persistence.PersistenceException: [PersistenceUnit: my_internet_shop] Unable to build Hibernate SessionFactory: javax.persistence.PersistenceException: [PersistenceUnit: my_internet_shop] Unable to build Hibernate SessionFactory
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:872)
... 65 more
Caused by: org.apache.openejb.OpenEJBRuntimeException: javax.persistence.PersistenceException: [PersistenceUnit: my_internet_shop] Unable to build Hibernate SessionFactory
at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate(ReloadableEntityManagerFactory.java:136)
at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.<init>(ReloadableEntityManagerFactory.java:105)
at org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:157)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:866)
... 65 more
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: my_internet_shop] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:951)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:151)
at org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(EntityManagerFactoryCallable.java:122)
at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate(ReloadableEntityManagerFactory.java:134)
... 68 more
Caused by: org.hibernate.HibernateException: Could not access BeanManager ListenerFactory class [org.hibernate.jpa.event.internal.jpa.ListenerFactoryBeanManagerStandardImpl] to handle CDI extensions
at org.hibernate.jpa.event.spi.jpa.ListenerFactoryBuilder.buildBeanManagerListenerFactory(ListenerFactoryBuilder.java:96)
at org.hibernate.jpa.event.spi.jpa.ListenerFactoryBuilder.buildStandardBeanManagerListenerFactory(ListenerFactoryBuilder.java:59)
at org.hibernate.jpa.event.spi.jpa.ListenerFactoryBuilder.buildListenerFactory(ListenerFactoryBuilder.java:42)
at org.hibernate.jpa.event.spi.JpaIntegrator.integrate(JpaIntegrator.java:135)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:493)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878)
... 71 more
Caused by: java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:287)
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:263)
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:298)
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:60)
at org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:51)
at org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:185)
at org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:203)
at org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$1.findBm(EntityManagerFactoryCallable.java:105)
at org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$1.invoke(EntityManagerFactoryCallable.java:96)
at com.sun.proxy.$Proxy70.toString(Unknown Source)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at org.hibernate.jpa.event.internal.jpa.ListenerFactoryBeanManagerStandardImpl.<init>(ListenerFactoryBeanManagerStandardImpl.java:60)
at org.hibernate.jpa.event.internal.jpa.ListenerFactoryBeanManagerStandardImpl.fromBeanManagerReference(ListenerFactoryBeanManagerStandardImpl.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.hibernate.jpa.event.spi.jpa.ListenerFactoryBuilder.buildBeanManagerListenerFactory(ListenerFactoryBuilder.java:80)
... 77 more
Run Code Online (Sandbox Code Playgroud)
这只是提到例外的一小部分.以下是完整的堆栈跟踪和服务器日志
所有数据库内容和JPA映射都可以.经过双重检查,精制至完美.事实上,我能够在Tomcat 8.5.6服务器上运行我的应用程序,但它不支持EJB,所以我需要TomEE.
这里的根本重复是java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app
.它出现在我的所有Hibernate-JPA项目中(即使是只有一个实体且没有错误空间的简单测试),所以我认为这是真正的服务器端配置问题.
但是,我无法在StackOverflow和互联网上找到任何有关此异常的线索.
我期待着你的帮助,很乐意得到任何帮助和建议.
您可以添加persistence.xml
<property name="tomee.jpa.factory.lazy" value="true" />
Run Code Online (Sandbox Code Playgroud)
要么
<property name="tomee.jpa.cdi" value="false" />
Run Code Online (Sandbox Code Playgroud)
如果您不需要CDI/JPA集成
编辑:第一个将使工厂在运行时首次使用时创建,第二个将禁用cdi.这两项工作都会导致您在启动期间初始化JPA时不需要CDI(在启动cdi之前创建工厂因为cdi可以依赖它 - 鸡蛋问题)