メソッドに REQUIRE_NEW のアノテーションを付けましたが、それが新しいトランザクションで実行されることを期待していました。コードは次のとおりです。
public class EJBAImpl implements EJBA {
@EJB
private EJBB ejbb;
public void someMethod(entity){
ejbb.create(entity);
//doMoreStuff
}
}
public class BaseEJB {
public void create(Entity entity) {
//saveHere
}
}
public class EJBBImpl extends BaseEJB implements EJBB {
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void create(Entity entity) {
super.create(entity);
}
}
ただし、create メソッドの呼び出し (doMoreStuff と言う場所) の後の行にブレークポイントを配置すると、エンティティが DB に保存されません。私は何が欠けていますか?確認したところ、EJBB はプロキシです。
編集:メソッドが継承されている場合、それは機能しません。解決策は、次のように EJBB のメソッドを変更することでした。
public class EJBBImpl extends BaseEJB implements EJBB {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void anotherNameForCreate(Entity entity) {
super.create(entity);
}
}
別のクラスのメソッドをオーバーライドすると機能しない理由を知っている人はいますか?