2011-06-30 57 views
0

我有以下Bean聲明:狀態EJB生命週期質疑

@Stateful 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class InteruptBean implements Interrupt { 

private boolean interrupt = false; 

@Override 
public boolean check() { 
    return interrupt; 
} 

@Override 
public void interrupt() { 
    interrupt = true; 
} 
} 

我想了解狀態EJB生命週期。一旦使用interrupt()方法永久修改了此EJB的狀態,並且對此實例的所有引用都設置爲null,那麼將該bean實例放回到符合條件的池中還是將其丟棄?

是什麼讓我質疑我的判斷是TransactionAttributeType.NOT_SUPPORTED。我希望容器規範說某處有狀態EJB以某種方式重置,在重新使用之前如何重置狀態,無論TransactionAttributeType是什麼。

謝謝!

回答

1

閱讀http://download.oracle.com/javaee/6/tutorial/doc/giplj.html#gipln

在生命週期結束時,客戶端調用註解@Remove的方法,EJB容器調用標註爲@PreDestroy的方法(如果有的話)。然後,該bean的實例已準備好進行垃圾收集。

如果沒有人調用@Remove方法,那麼容器將等待一個超時到達並將其刪除。

@TransactionAttribute註釋與bean的生命週期無關。它只告訴容器是否以及何時啓動一個事務,當其中一個業務方法被調用時。

+0

感謝!這就是我正在尋找 –

1

@ cj91

我不知道該SPEC是否特別說你問,I,E

我希望容器規範說 的地方,有狀態EJB復位 莫名其妙如何在再次使用之前初始狀態爲 ,無關緊要 TransactionAttributeType是什麼。

但我非常確定事務屬性類型對有狀態EJB如何(重新)初始化沒有影響。

NOT_SUPPORTED僅表示該方法不能從事務上下文中調用。如果它被調用,它會被默默忽略。

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html

+0

謝謝,我真的很感激它! –