无法从任何地方构建Hibernate SessionFactory异常 [英] Unable to build Hibernate SessionFactory exception from nowhere

查看:2786
本文介绍了无法从任何地方构建Hibernate SessionFactory异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a strange error appearing every time i want to deploy my application. I'm using IntelliJ IDEA 2016.3.

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

My application is Java WEB application using JSF, EJB and JPA (Hibernate). All libs were downloaded by IDEA (no Maven in this project), all dependencies are shipped with .war file. I'm deploying to TomEE 7.0.2 on Windows 10.

这是我在部署中涉及的配置文件:resources.xml

Here are my configuration files involved in deploying: 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&amp;useSSL=true
        UserName root
        Password alpine
        validationQuery = SELECT 1
        JtaManaged true
    </Resource>
</resources>

persistence.xml

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>

我的堆栈跟踪:

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

这是只是一小部分提到了例外。以下是全堆栈跟踪&服务器日志

This is just a small part mentioning the exception. Here are the full stacktrace & server logs

所有数据库和JPA映射都可以。双重检查和精致到完美。事实上,我能够在Tomcat 8.5.6服务器上运行我的应用程序,但它不支持EJB,所以我需要TomEE。

All of the database stuff and JPA mapping are OK. Double-checked and refined to perfection. In fact, i was able to run my app on Tomcat 8.5.6 server, but it doesn't support EJB, so i need TomEE.

这里的根本原因是 java.lang.IllegalStateException:在没有初始化上下文的线程上,也可以在映射已部署的应用程序的类加载器上执行。它出现在我所有的Hibernate-JPA项目中(即使只有一个实体的简单测试,也没有错误的空间),所以我相信这是真正的服务器端配置问题。

The root excpetion here is java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app. It appears in all of my Hibernate-JPA projects (even simple tests with only one entity and no space for error), so I believe this is the real server-side-configuration kind of problem.

但是,我无法在StackOverflow和互联网上找到任何关于此异常的线索。

However i wasn't able to find any clue about this exception neither on StackOverflow nor on the internet.

我期待您的帮助,很高兴得到任何帮助和建议。

I'm looking forward for your help, would be glad to get any help and advice.

推荐答案

你可以添加你的persistence.xml

you can add in your persistence.xml

<property name="tomee.jpa.factory.lazy" value="true" />

<property name="tomee.jpa.cdi" value="false" />

如果您不需要CDI / JPA集成

if you don't need CDI/JPA integration

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

edit: first one will make the factory created on first use at runtime and second one just disable cdi. Both work cause you don't need CDI when JPA is initialized during startup (tomee creates the factory before starting cdi cause cdi can rely on it - chicken egg problem)

这篇关于无法从任何地方构建Hibernate SessionFactory异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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