0

私のプロジェクトには、ejb-module1 と ejb-module2 の 2 つの ejb-module があります。ejb-module1 にはエンティティ クラスと永続化ユニットが含まれており、次のようなエンティティ マネージャを持つ ejb があります。

@Stateful
public class ErpTools implements ErpToolsLocal {
@PersistenceContext(unitName = "erp-ejbPU")
private EntityManager em;


public EntityManager getEm() {
    return em;
}

public void setEm(EntityManager em) {
    this.em = em;
}

ejb-module2 には、ejb-module1 のエンティティ マネージャーを使用する必要がある他の ejb があります。

  String ejbql = "SELECT e from CtEmpresaCliente e ORDER BY e.idCliente ASC";        
  Query query = this.erpTools.getEm().createQuery(ejbql);
  empresaClientes = query.getResultList();

ただし、次の例外を送信します。

"Unable to retrieve EntityManagerFactory for unitName erp-ejbPU"
debuging in this point Query query = this.erpTools.getEm().createQuery(ejbql);
this.erpTools.getEm() is not null.

注: NetbeansJPAJEE6の使用EJB 3.1

4

1 に答える 1

0

異なるモジュールにある EJB への呼び出しは、値渡しのセマンティクスを使用し、シリアライゼーション/デシリアライゼーションを受けるという意味で、リモート呼び出しに似ています。この場合、ネットワークは使用されませんが、リモート呼び出しの他のすべての側面はまだ発生しています。

これが意味することは、別の EJB モジュールから非 null を取得しても、EntityManagerシリアライズ/デシリアライズされ、別の EJB モジュールに到達するまでに、有効な永続コンテキストを参照していないということです (呼び出し側の EJB モジュールには存在しません)。

于 2013-03-19T17:45:40.757 に答える