これは多くの時間を要していたと私は思っていましたが、私はちょうどそれを正しくするようです。 一部のEJBコンポーネントでWebアプリケーション8.5.5.9にWARアプリケーションをデプロイし、JPA 2.0とHibernate 4.2.0を使用してデータベース作業を行っています。 これらのEJBは、データベースからデータを要求するためにJNDIを介して他のアプリケーションから呼び出されます。 私が質問を投稿しませんほとんど以来:) ...よく(クライアント側のスタブと、すべての作品を生成:Hibernate EntityManagerはステートレスEJBに注入されていません
クライアントは、JNDIを介してリモートインタフェースIDatabaseServiceを呼び出して、コンテナが実装
@Stateless
@Remote({ IDatabaseService.class })
public class DBServiceBean implements IDatabaseService
{
@EJB
private ApplicationService applicationService;
@Override
public BOApplication getApplication(String applicationId)
{
BOApplication app = applicationService.getApplication(applicationId);
return app;
}
// getters and setters
}
としてDBServiceBeanを返します。
DBServiceBeanサービスが
@Stateless
@LocalBean
public class ApplicationServiceImpl implements ApplicationService
{
@EJB
private ApplicationDao applicationDao;
@Override
public BOApplication getApplication(String applicationId)
{
DBApplication dbApplication = applicationDao.getApplication(applicationId);
BOApplication application = new BOApplication(dbApplication);
return application;
}
// getters and setters
}
ApplicationServiceはEJB
として注入DAO性を有するEJBとして注入しています@Stateless
@LocalBean
public class HBApplicationDao implements ApplicationDao
{
@PersistenceContext(unitName = "some.jpa.name")
private EntityManager em;
@Override
public DBApplication getApplication(String applicationId)
{
String sql = "....";
Query query = em.createQuery(sql, DBApplication.class);
query.setParameter("applicationid", applicationId);
DBApplication application = (DBApplication) query.getSingleResult();
return application;
}
public void setEm(EntityManager em)
{
this.em = em;
}
}
DAOにはエンティティマネージャとエンティティマネージャがあります。 すべて正常に動作し、すべてのコンポーネントが正常に注入されますが、エンティティマネージャの注入は行われず、実行時にエンティティマネージャがNULLになります
ログを確認すると、すべてのクラス、バインディング、ハイバネートマッピングなどは問題なく作成されます内部にログメッセージを置くと、エンティティマネージャのsetterが呼び出されることはありません。
ここは私のpersistence.xmlです。
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="some.jpa.name" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/ExtensionDB</jta-data-source>
<class>some.package.entity.DBApplication</class>
<class>some.package.entity.DBApplicant</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="openjpa.TransactionMode" value="managed" />
<property name="openjpa.ConnectionFactoryMode" value="managed" />
<property name="openjpa.jdbc.DBDictionary" value="oracle" />
</properties>
</persistence-unit>
</persistence>
私は、エンティティマネージャがBeanの作成に注入されていないが、そのBeanの後に注入されたことを理解します。また、そのBeanを別のコンテナ管理オブジェクト(JSF Beanなど)に注入する必要があります。 この問題に関するトピックを読んでいますが、どの要件を満たしていないかわかりません。
ありがとうございました。