0
我有2種方法的EJB:如果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);
}
}
我剛剛發現一個EJB調用自己的方法忽略了這些方法的TransactionAttributeType。所以我得到交易要求的例外,因爲saveFoo「看到」TransactionAttributeType爲從不。
我理解這一解決方法是讓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方法。 –