私は正確な問題を反映していない多くの同様の質問を探しています。誰かがすでにこの問題を解決したことを見落とした場合は、私に知らせてください。EntityManagerは@PersistenceContextのステートレスセッションBeanに挿入されていません
私は現在、Wildfly 10.1上で古いEJB CMP BeanをJPAに移行しています。 ここでの問題は、ステートレスセッションBeanのentitymanagerに@PersistenceContextが挿入されておらず、EntityManagerのNULLが残っていることです。私はEntityManagerFactoryを使ってこれを回避しようとしました。
サーバー側からのpersistence.xml、EJB2セッションBeanコードも含まれています。
助けてください。
public class CAAFAdminServiceBean implements SessionBean {
@PersistenceContext(unitName = "PFJPAEMJTA")
private EntityManager em1;
// For some reason, em1 is not initialized by EJB container though this is Session bean, ideally it should be.
// Hence calling getEntityManager() to create EntityManager from its Factory.
private EntityManager em = null;
public void ejbCreate() {
em = getEntityManager();
// Set same object in the Util class so that same can be referenced anywhere.
CAAFEntityUtil.setEntityManager(em);
}
private EntityManager getEntityManager() {
if (em1 == null) {
if (em == null) {
PerfLog perflog = new PerfLog(new PerfLogEJBCalledCategory(this.getClass(), "getEntityManager"));
String status = PerfLog.FAIL;
try {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PFJPAEMJTA");
em1 = em = entityManagerFactory.createEntityManager();
status = PerfLog.SUCCESS;
return em;
} finally {
perflog.end(status);
}
}
return em;
}
System.out.println("************EntityManager object is injected by EJB container, great to see that!!!************");
return em1;
}
}
<?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="PFJPAEMJTA" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:jboss/jdbc/PF_TX_DATASOURCE</jta-data-source>
<class>com.entity.rdbms.RDBMSComponentBean</class>
<properties>
<property name="showSql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
</properties>
</persistence-unit>
</persistence>
EntityManagerFactoryを挿入できますか? –
プロジェクトの構成は? persistence.xmlはどこに置いていますか? – empyros