2011-08-24 9 views
10

मैं इस स्टैक ट्रेस जब मैं तैनात मेरी हाइबरनेट एप्लिकेशनcreateEntityManager org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus

java.lang.NullPointerException 
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:72) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:114) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1197) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:170) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:112) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:107) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1] 
    at com.mycompany.myapp.common.persistence.HibernateUtil.<clinit>(HibernateUtil.java:53) [classes:] 
    at com.mycompany.myapp.common.businessobjects.ServerSettings.GetServerSettings(ServerSettings.java:247) [classes:] 
    at com.mycompany.myapp.common.servlet.SecurityFilter.init(SecurityFilter.java:55) [classes:] 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3245) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3836) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765) 
    at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26] 
    at java.lang.Thread.run(Thread.java:680) [:1.6.0_26] 

यह एक मार रहा है हो रही है पर java.lang.NullPointerException फेंकता कक्षा में मेरी हाइबरनेट में एनपीई, लाइन 53 एक ऐसी रेखा है जो एक EntityManager बनाता है - ऐसा लगता है कि createEntityManager() एक शून्य को वापस कर रहा है। कोड की तरह

private static EntityManagerFactory entityManagerFactory = null; 
private static EntityManager entityManager = null; 

static { 
    try { 

     entityManagerFactory = Persistence.createEntityManagerFactory("primary"); 
     entityManager = entityManagerFactory.createEntityManager(); 

मेरे persistence.xml लग रहा है

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="primary"> <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 

    <properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
    <property name="hibernate.ejb.interceptor.session_scoped" value="com.mycompany.myapp.common.persistence.BusinessObjectInterceptor"/> 
      </properties> 

कोई भी विचार

क्यों createEntityManager() एनपीई देने की तरह लग रहा है?

उत्तर

13

स्टैकट्रैस स्पष्ट रूप से इंगित करता है कि हाइबरनेट जेटीए लेनदेन में शामिल नहीं हो सकता है। इसके अलावा, <jta-data-source> और Persistence.createEntityManagerFactory() का हास्य अजीब लग रहा है - जेटीए-सक्षम EntityManager आमतौर पर एप्लिकेशन सर्वर द्वारा बनाया जाता है और इसे जेएनडीआई के माध्यम से प्राप्त किया जाता है।

यदि आप वास्तव में जेटीए के बजाय संसाधन-स्थानीय लेनदेन का उपयोग करना चाहते हैं, तो आपको इसके बजाय <non-jta-data-source> घोषित करने की आवश्यकता है।

+0

में इस संपत्ति के बारे में पाया मैं इसे सराहना करते हैं - आपकी सलाह मुझे इस त्रुटि के माध्यम से काम करने की अनुमति दी। धन्यवाद! – user619804

+1

यह सभी जेबॉस संस्करणों <= 6 में कैसे काम करता है? हमारे यहां एक ही संयोजन है और यह विफल रहता है क्योंकि हमने इसे जेबॉस 7.0.1 पर तैनात किया है। –

+0

हाइबरनेट 4.0.0.बीटा में एक बग लगता है। यहां एक बग रिपोर्ट दर्ज की गई थी: https://hibernate.onjira.com/browse/HHH-6522 –

30

आप हाइबरनेट 4 का उपयोग और एक EntityManagerFactory मैन्युअल रूप से (या SessionFactory) बनाने के लिए प्रयास कर रहे हैं <jta-datasource> रूप में घोषित किया है, वहाँ एक संपत्ति है कि आप अपने persistence.xmlhibernate.transaction.jta.platform कहा जाता है पर सेट करना होगा है। JBoss 7

<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 

पर उपयोग करने के लिए मैं Hibernate Docs

+1

अच्छा !! यह मेरे लिए एक ही त्रुटि हल हो गया। मैंने वैकल्पिक रूप से 'JBossStandAloneJtaPlatform' कार्यान्वयन का उपयोग किया। संभावित मूल्य यहां 'प्रत्यक्ष ज्ञात उप-वर्गों' के अंतर्गत दिखाए जाते हैं: 'https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/service/jta/platform/internal/AbstractJtaPlatform.html –

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

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