Java 弹簧&x2B;Jboss:查找时为实体管理器引发NullPointerException
我正在尝试配置spring框架、JPA和Jboss。所以我写了一个用于测试的端到端链,它只是基于实体查找实体。请查找下面的代码Java 弹簧&x2B;Jboss:查找时为实体管理器引发NullPointerException,java,hibernate,spring-mvc,jpa,jboss,Java,Hibernate,Spring Mvc,Jpa,Jboss,我正在尝试配置spring框架、JPA和Jboss。所以我写了一个用于测试的端到端链,它只是基于实体查找实体。请查找下面的代码 try { /** * intentionally breaking code into two for testing * */ AbstractJpaEntity entity = null; /** * below
try {
/**
* intentionally breaking code into two for testing
* */
AbstractJpaEntity entity = null;
/**
* below line of code throws exception
* 1) Type, id & em, none of them found null at run-time
* */
if(em.find(type, id)!=null){
entity = em.find(type, id);
}
return entity;
} catch (NoResultException nre) {
throw new WalletException("no entity found", nre);
}
因此,每当执行上述代码时,em.find(type,id)抛出空指针异常。我尝试调试,发现id和type具有预期的定义值,甚至em具有以下值:-
这表示xml中定义的持久化单元已正确加载,同样表示服务器启动日志。令人恼火的是,即使没有任何内容为null,但仍然会引发null指针异常。stacktrace如下所示:-
[org.apache.catalina.core.ContainerBase.[jboss.web].[default host]./AltSurvey].[rest]]
(http--0.0.0.0-34567-2)Servlet的Servlet.service()
异常:java.lang.NullPointerException位于
org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1207)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:176)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.EntityManagerImpl.(EntityManagerImpl.java:89)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:125)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:120)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
[rt.jar:1.7.0_67]at
invoke(NativeMethodAccessorImpl.java:57)
[rt.jar:1.7.0_67]at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[rt.jar:1.7.067]位于java.lang.reflect.Method.invoke(Method.java:606)
[rt.jar:1.7.0_67]at
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.InvokeProxy方法(AbstractEntityManagerFactoryBean.java:376)
[spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:517)
[spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
com.sun.proxy.$Proxy37.createEntityManager(未知源)位于
org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:234)
[spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
com.sun.proxy.$Proxy47.find(未知源)位于
com.alt.survey.common.db.dao.AbstractJpaDao.findById(AbstractJpaDao.java:84)
[类别:]
看起来可疑的是,持久性单元最后一次为空:-
我已经检查了与配置相关的所有XML。但无法怀疑出现异常的任何原因。我正在攻击下面的XML:-
persistence.xml
<persistence-unit name="TalentPactFormEngine_New"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/TalentPactFormEngine_New</jta-data-source>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.default_schema" value="dbo" />
<property name="hibernate.generate_statistics" value="true" />
<property name="hibernate.cache.use_second_level_cache"
value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.cache.infinispan.cachemanager"
value="java:jboss/infinispan/hibernate" />
</properties>
</persistence-unit>
org.hibernate.ejb.HibernatePersistence
java:/jdbc/TalentPactFormEngine\u新
真的
启用\u选择性
hibernateJpaConfig.xml
<bean id="surveyDataSource" class="org.apache.commons.dbcp.BasicDataSource"
scope="singleton" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</bean>
<bean id="entityManagerFactory" depends-on="surveyDataSource"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="surveyDataSource" />
<property name="persistenceXmlLocation" value="classpath:persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
ApplicationContext.xml
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<!-- <property name="jndiName" value="java:/jdbc/TalentPactFormEngine_New"
/> -->
<property name="environment" ref="remoteEnv" />
</bean>
<jee:jndi-lookup id="wcDataSource"
jndi-name="java:/jdbc/TalentPactFormEngine_New" resource-ref="false"
environment-ref="remoteEnv" expected-type="javax.sql.DataSource" />
<util:properties id="remoteEnv">
<prop key="java.naming.provider.url">http://survey.peoplestrong.com:34567
</prop>
<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
<prop key="jnp.disableDiscovery">true</prop>
</util:properties>
http://survey.peoplestrong.com:34567
org.jboss.naming:org.jnp.interfaces
org.jnp.interfaces.NamingContextFactory
真的
最后是JBoss服务器的单机版
<datasource jta="true" jndi-name="java:/jdbc/TalentPactFormEngine_New" pool-name="TalentPactFormEngine_New" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:jtds:sqlserver://192.168.0.226:1433/talentpactformengine_new</connection-url>
<driver>net.sourceforge.jtds</driver>
<security>
<user-name>bla</user-name>
<password>blabla</password>
</security>
</datasource>
jdbc:jtds:sqlserver://192.168.0.226:1433/talentpactformengine_new
net.sourceforge.jtds
布拉
布拉布拉
无法找到NullPointer异常的原因,任何类型的帮助都将非常有用。正如您在的src代码中所看到的那样 事务管理器必须为空
final int status = transactionManager.getStatus();
检查事务管理器的配置。我所述问题的@Xoce根本原因和您共享的链接可能重复,这两种情况完全不同。无论如何,谢谢你的关注。让我知道我能找到解决办法。