无法从无处构建Hibernate SessionFactoryexception

每次我想部署我的应用程序时,都会出现一个奇怪的错误。 我正在使用IntelliJ IDEA 2016.3。

我的应用程序是使用JSF,EJB和JPA(Hibernate)的Java WEB应用程序。 所有的库都是由IDEA下载的(在这个项目中没有Maven),所有依赖项都附带.war文件。 我正在Windows 10上部署到TomEE 7.0.2。

以下是部署中涉及的配置文件:resources.xml

   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   

persistence.xml中

    org.hibernate.jpa.HibernatePersistenceProvider my_internet_shop_db Objects.Order.CartEntity Objects.User.ContactEntity Objects.Order.OrderEntity Objects.Product.ProductEntity Objects.Section.SectionEntity Objects.Service.ServiceEntity Objects.User.UserEntity             

我的堆栈跟踪:

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

这只是提到例外的一小部分。 以下是完整的堆栈跟踪和服务器日志

所有数据库内容和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和互联网上找到任何关于此exception的线索。

我期待着你的帮助,很乐意得到任何帮助和建议。

您可以添加persistence.xml

  

要么

  

如果您不需要CDI / JPA集成

编辑:第一个将使工厂在运行时首次使用,第二个将禁用cdi。 这两项工作都会导致您在启动期间初始化JPA时不需要CDI(在启动cdi之前创建工厂因为cdi可以依赖它 – 鸡蛋问题)