Tôi có một lỗi lạ xuất hiện mỗi lần tôi muốn triển khai ứng dụng của mình. Tôi đang sử dụng IntelliJ IDEA 2016.3.Không thể xây dựng ngoại lệ Hibernate SessionFactory từ hư không
Ứng dụng của tôi là ứng dụng Java WEB sử dụng JSF, EJB và JPA (Hibernate). Tất cả các libs được tải xuống bởi IDEA (không có Maven trong dự án này), tất cả các phụ thuộc đều được gửi kèm với tệp .war. Tôi đang triển khai để TomEE 7.0.2 trên Windows 10
Dưới đây là tác phẩm của tôi cấu hình có liên quan trong việc triển khai: 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>
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>
Và stacktrace của tôi:
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
Đây chỉ là một phần nhỏ đề cập đến ngoại lệ. Dưới đây là full stacktrace & server logs
Tất cả nội dung cơ sở dữ liệu và ánh xạ JPA đều OK. Kiểm tra kỹ lưỡng và tinh chế để hoàn thiện. Trong thực tế, tôi đã có thể chạy ứng dụng của tôi trên máy chủ Tomcat 8.5.6, nhưng nó không hỗ trợ EJB, vì vậy tôi cần TomEE.
Xâm phạm gốc ở đây là java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app
. Nó xuất hiện trong tất cả các dự án Hibernate-JPA của tôi (ngay cả các bài kiểm tra đơn giản chỉ với một thực thể và không có không gian để báo lỗi), vì vậy tôi tin rằng đây là loại vấn đề cấu hình phía máy chủ thực sự.
Tuy nhiên tôi không thể tìm thấy bất kỳ đầu mối nào về ngoại lệ này, không phải trên StackOverflow cũng như trên internet.
Tôi rất mong nhận được sự giúp đỡ của bạn, rất vui khi nhận được bất kỳ trợ giúp và lời khuyên nào.
Cảm ơn câu hỏi - Tôi gặp vấn đề tương tự ở đây bằng cách nâng cấp từ TomEE 7.0.1 sang TomEE 7.0.2, Hibernate 5.2.4 – rzo