2011-08-24 5 views
10

Ben dağıtırken ben bir vuruyorcreateEntityManager 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] 

benim hazırda uygulaması bu yığın izlemesi alıyorum at java.lang.NullPointerException atar HibernateUtil sınıfımda NPE, 53 satırı bir EntityManager oluşturan bir satırdır - createEntityManager() bir null döndürüyor gibi görünüyor. Kod

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

static { 
    try { 

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

Benim persistence.xml benziyor NPE veren

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

Herhangi fikirler neden createEntityManager() gibi görünüyor?

cevap

13

Stacktrace, Hazırda bekletme işleminin JTA işlemine katılamayacağını açıkça gösterir. Üstelik, <jta-data-source> ve Persistence.createEntityManagerFactory() numaralı telefonların kontrolü, garip - JTA özellikli EntityManager'u genellikle uygulama sunucusu tarafından oluşturulmakta ve JNDI üzerinden elde edilmektedir.

Aslında JTA yerine kaynak yerel işlemleri kullanmak istiyorsanız, bunun yerine <non-jta-data-source> bildirmeniz gerekir.

+0

bu özellik hakkında bulundu - tavsiyeleriniz bana bu hata ile çalışmak için izin verdi. Teşekkür ederim! – user619804

+1

Bu nasıl oldu da tüm JBoss sürümlerinde <= 6 çalıştı? Burada aynı kombinasyona sahibiz ve JBoss 7.0.1'e dağıtdığımız için başarısız oluyor. –

+0

Hazırda bekletme 4.0.0.Beta'da bir hata görünüyor. Burada bir hata raporu yayımlandı: https://hibernate.onjira.com/browse/HHH-6522 –

30

Eğer Hibernate 4 kullanıyorum ve bir elle EntityManagerFactory (veya SessionFactory) oluşturmaya çalışıyorsanız <jta-datasource> olarak ilan, size persistence.xmlhibernate.transaction.jta.platform denilen ayarlanmış gereken bir özellik vardır. JBoss 7

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

üzerinde kullanmak için ben bunu takdir Hibernate Docs

+1

Nice !! Bu benim için aynı hatayı çözdü. Alternatif olarak 'JBossStandAloneJtaPlatform' uygulamasını kullandım. Mümkün olan değerler burada "Doğrudan Bilinen Alt Sınıflar" altında gösterilir: https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/service/jta/platform/internal/AbstractJtaPlatform.html –