2016-11-26 16 views
5

Mam dziwny błąd pojawiający się za każdym razem, gdy chcę wdrożyć moją aplikację. Używam IntelliJ IDEA 2016.3.Nie można zbudować wyjątku Hibernacja wyjątku SessionFactory z nikąd

Moja aplikacja to aplikacja Java WEB wykorzystująca JSF, EJB i JPA (Hibernate). Wszystkie biblioteki zostały pobrane przez IDEA (no Maven w tym projekcie), wszystkie zależności są dostarczane z plikiem .war. Jestem wdrażania do TomEE 7.0.2 na Windows 10.

Oto moje pliki konfiguracyjne uczestniczące we wdrażaniu: 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

<?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> 

i mój StackTrace:

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 

To tylko niewielka część z podaniem wyjątku. Oto wszystkie dane bazy danych i odwzorowanie JPA są w porządku. Podwójnie sprawdzony i dopracowany do perfekcji. W rzeczywistości mogłem uruchomić moją aplikację na serwerze Tomcat 8.5.6, ale nie obsługuje ona EJB, więc potrzebuję TomEE.

Wykluczenie z korzenia tutaj to java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app. Pojawia się we wszystkich moich projektach Hibernate-JPA (nawet proste testy z tylko jedną jednostką i bez miejsca na błędy), więc uważam, że jest to prawdziwy problem z konfiguracją po stronie serwera.

Jednak nie byłem w stanie znaleźć żadnej wskazówki na temat tego wyjątku ani w StackOverflow, ani w Internecie.

Z niecierpliwością czekam na Waszą pomoc, chętnie skorzystam z wszelkiej pomocy i porady.

+2

Dzięki za pytanie - doświadczam tych samych problemów przez uaktualnienie od TomEE 7.0.1 do TomEE 7.0.2, Hibernate 5.2.4 – rzo

Odpowiedz

7

można dodać w swoim persistence.xml

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

lub

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

jeśli nie trzeba CDI/WZP integracja

edit: pierwszy uczyni fabryka stworzona przy pierwszym użyciu w czasie wykonywania, a drugi po prostu wyłącza cdi. Obie te czynności powodują, że nie potrzebujesz CDI, gdy JPA jest inicjowany podczas uruchamiania (tomee tworzy fabrykę przed uruchomieniem cdi, ponieważ cdi może na niej polegać - problem jaj kurzych)

+1

Czy możesz edytować odpowiedź i wyjaśnić bardziej szczegółowo, jaka jest różnica między obiema właściwościami i/lub podać link do oficjalnej dokumentacji projektu Apache TomEE? Z góry. – MWiesner

+2

'tomee.jpa.factory.lazy' działa dla mnie. I nie lubię openejb/openjpa. –

Powiązane problemy