次のコードが機能します。
@Stateless
@LocalBean
public class MyClass
{
@PersistenceContext(name = "MyPU")
EntityManager em;
public void myBusinessMethod(MyEntity e)
{
em.persist(e);
}
}
しかし、次の階層では、Glassfish 3.0 (および EclipseLink を使用した標準 JPA アノテーション) の . 行で TransactionRequiredException が発生しpersist
ます。
@Stateless
@LocalBean
public class MyClass extends MyBaseClass
{
public void myBusinessMethod(MyEntity e)
{
super.update(e);
}
}
public abstract class MyBaseClass
{
@PersistenceContext(name = "MyPU")
EntityManager em;
public void update(Object e)
{
em.persist(e);
}
}
私の EJB では、共通コードを抽象クラスに集めて、よりクリーンなコードにしました。(update
誰がいつ操作を行ったか、すべてのエンティティがインターフェイスを実装していることも保存します。)
この問題は致命的ではありません。単純にupdate
メソッドをサブクラスにコピーして姉妹化することはできますが、それらすべてを 1 つの場所にまとめておきたいと考えています。
私は試しませんでしたが、これは私の基本クラスが抽象的であるためかもしれませんが、そのような(私見一般的な)ユースケースの適切な方法を学びたいと思います。