2015-08-27 82 views
3

如果在DStateless.method4()BSession.method2()中發生錯誤,在以下情況下會發生什麼情況?我希望CStateless.method3()DStateless.method4()共享相同的事務。如果SessionScoped和無狀態方法調用混合,交易會發生什麼

是否允許在EJB CDI 做出這樣的電話?

ASession.method1() (calls)-> CStateless.method3() -> BSession.method2() -> DStateless.method4(); 

@SessionScoped 
class ASession { 
    method1(); 
} 

@SessionScoped 
class BSession { 
    method2(); 
} 

@Stateless 
class CStateless { 
    method3(); 
} 

@Stateless 
class DStateless { 
    method4(); 
} 
+1

在這種情況下,他們將共享相同的交易。唯一的問題是你爲什麼要從無狀態bean中調用sessioncoped bean – maress

+0

@maress主要原因是sessionScoped bean會進行一些文件操作。另一個原因是會話scoped bean有更多關於做什麼的信息。 – Tony

+0

這仍然不能保證來自無狀態bean的sessionscoped bean調用。在需要會話/請求上下文的會話bean中執行所有操作,然後將下一個邏輯上傳到無狀態bean。會話bean可能會調用幾個無狀態bean來完成其工作 – maress

回答

0

是的,它是允許的。

假設method1()未在交易中運行,交易邊界將在method3()左右。 method4()將使用相同的事務。

相關問題