私は2つの方法でEJB持っている:私はちょうど、独自のメソッドを呼び出すEJBは、これらのメソッドのTransactionAttributeTypeを無視することを発見しEJBメソッドが他のメソッドのトランザクション属性を無視する場合、どのようにしてEJBトランザクションをマイクロマニュアすることができますか?
@Stateless
public FooFacade implements FooFacadeRemote {
...
@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
public void saveFoos(List<Foo> foos) {
for(Foo foo: foos) {
saveFoo(foo);
}
}
@TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRED)
private void saveFoo(Foo foo) {
em.persist(foo);
}
}
を。だから、saveFooはTransactionAttributeTypeをNEVERと見なすので、トランザクションが必要な例外が発生しています。
私はこれを回避するには、タスクを実行するEJBの別のインスタンスを取得することであることを理解:
@EJB(name = "FooFacade")
private FooFacadeRemote self;
@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
public void saveFoos(List<Foo> foos) {
for(Foo foo: foos) {
self.saveFoo(foo);
}
}
しかし、これは本当に必要ですか?つまり、saveFooを必ず公開する必要はありません。
申し訳ありませんが、それは私が別のEJBを言いたときの意味です。元の質問を更新します。 – wsaxton
はい、あなたの唯一の選択肢です。 "プライベート" EJBメソッドを持つ方法はありません。 –