2016-11-26 12 views
5

से हाइबरनेट सत्र फैक्टरी अपवाद बनाने में असमर्थ मुझे हर बार जब मैं अपना आवेदन तैनात करना चाहता हूं तो मुझे एक अजीब त्रुटि दिखाई दे रही है। मैं IntelliJ IDEA 2016.3 का उपयोग कर रहा हूं।कहीं भी

मेरा एप्लिकेशन जेएसएफ, ईजेबी और जेपीए (हाइबरनेट) का उपयोग कर जावा वेब एप्लिकेशन है। सभी libs आईडीईए (इस परियोजना में कोई मेवेन) द्वारा डाउनलोड किए गए थे, सभी निर्भरताओं को .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&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> 

और मेरे स्टैकट्रेस:

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 

यह अपवाद का उल्लेख करने वाला एक छोटा सा हिस्सा है। यहां full stacktrace & server logs

सभी डेटाबेस सामग्री और जेपीए मानचित्रण ठीक हैं। डबल-चेक और पूर्णता के लिए परिष्कृत। असल में, मैं अपने ऐप को टॉमकैट 8.5.6 सर्वर पर चलाने में सक्षम था, लेकिन यह ईजेबी का समर्थन नहीं करता है, इसलिए मुझे टॉमई की जरूरत है।

यहां रूट उत्तेजना java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app है। यह मेरी सभी हाइबरनेट-जेपीए परियोजनाओं में दिखाई देता है (यहां तक ​​कि केवल एक इकाई के साथ सरल परीक्षण और त्रुटि के लिए कोई जगह नहीं), इसलिए मेरा मानना ​​है कि यह वास्तविक सर्वर-साइड-कॉन्फ़िगरेशन प्रकार की समस्या है।

हालांकि मुझे इस अपवाद के बारे में कोई जानकारी नहीं मिली और न ही स्टैक ओवरव्लो और न ही इंटरनेट पर।

मैं आपकी मदद के लिए तत्पर हूं, मुझे कोई मदद और सलाह लेने में खुशी होगी।

+2

प्रश्न के लिए धन्यवाद - मुझे अपग्रेड करके यहां एक ही समस्या का अनुभव है टॉमई 7.0.1 से टॉमई 7.0.2 तक, हाइबरनेट 5.2.4 – rzo

उत्तर

7

आप अपने persistence.xml में जोड़ सकते हैं

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

या

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

अगर आप CDI/जेपीए एकीकरण

संपादित की जरूरत नहीं है: पहले एक कर देगा कारखाना बनाया रनटाइम पर पहले उपयोग पर और दूसरा एक सीडीआई अक्षम करें। दोनों कार्य कारणों से आपको सीडीआई की आवश्यकता नहीं होती है जब जेपीए स्टार्टअप के दौरान शुरू किया जाता है (टोमी सीडीआई शुरू करने से पहले फैक्ट्री बनाता है सीडीआई इस पर भरोसा कर सकता है - चिकन अंडे की समस्या)

+1

क्या आप कृपया अपना उत्तर संपादित कर सकते हैं और विस्तार से समझा सकते हैं कि दोनों गुणों के बीच क्या अंतर है और/या अपाचे टॉमई परियोजना द्वारा आधिकारिक दस्तावेज के लिए एक लिंक प्रदान करते हैं? अग्रिम में Thx। – MWiesner

+2

'tomee.jpa.factory.lazy' मेरे लिए काम करता है। और मुझे openejb/openjpa पसंद नहीं है। –

संबंधित मुद्दे