createEntityManager throws java.lang.NullPointerException at org.mise en veille prolongée.moteur.des transactions.interne.jta.JtaStatusHelper.getStatus
Je suis de cette trace de la pile pour le déploiement de mon application hibernate
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]
Il est de frapper un NPE dans mon HibernateUtil classe, la ligne 53 est une ligne qui crée un EntityManager - il ressemble à createEntityManager() retourne une valeur null. Le code ressemble à
private static EntityManagerFactory entityManagerFactory = null;
private static EntityManager entityManager = null;
static {
try {
entityManagerFactory = Persistence.createEntityManagerFactory("primary");
entityManager = entityManagerFactory.createEntityManager();
Mon persistence.xml ressemble
<?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>
Des idées pourquoi createEntityManager() en donnant les NPE?
OriginalL'auteur user619804 | 2011-08-24
Vous devez vous connecter pour publier un commentaire.
Stacktrace indique clairement qu'Hibernate ne peut pas rejoindre transaction JTA. En outre, la combinaison de
<jta-data-source>
etPersistence.createEntityManagerFactory()
semble étrange - JTA-capableEntityManager
est généralement créé par le serveur d'application et obtenue via JNDI.Si vous voulez vraiment utiliser les ressources locales transactions plutôt que de JTA, vous devez déclarer
<non-jta-data-source>
à la place.Comment cela a fonctionné dans tous les JBoss versions <= 6? Nous avons la même combinaison ici et il ne parvient pas depuis que nous avons déployé pour JBoss 7.0.1.
Semble être un bug dans le Hibernate 4.0.0.La bêta. Un rapport de bug a été déposée ici: hibernate.onjira.com/browse/HHH-6522
Personne n'a essayé avec la dernière nightly builds? Je suis toujours de voir ce problème avec la construire à partir de la nuit dernière (21.11.2011)
FWIW JTA et createEntityManagerFactory est "raisonnable" chose à faire ... vous pouvez utiliser autonome JTA fournisseurs de JavaSE. Sûr que ce n'est pas l'utilisation la plus courante de cas, mais toujours valable
OriginalL'auteur axtavt
Si vous êtes en utilisant Hibernate 4 et essayer de créer un
EntityManagerFactory
manuellement (ouSessionFactory
) a déclaré que<jta-datasource>
, il y a une propriété, vous devez définir sur votrepersistence.xml
appeléhibernate.transaction.jta.platform
.Pour l'utilisation de JBoss 7
J'ai trouvé à propos de cette propriété à Hibernate Docs
JBossStandAloneJtaPlatform
mise en œuvre. Les valeurs possibles sont présentées ici sousDirect Known Subclasses:
: docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/service/...OriginalL'auteur André