arm926ej_EJB超时策略:它们如何提供帮助?
arm926ej
EJB 3.1在其API中引入了與超時相關的注釋。
- @AccessTimeout
- @StatefulTimeout
讓我們快速看一下它們是什么以及它們為什么重要
@AccessTimeout
指定一個排隊請求(等待另一個線程完成)超時的時間段。
當您的會話bean實例被并發請求轟炸時,EJB容器通過序列化這些調用(即阻塞其他線程直到當前線程完成執行)來確保完整性。 您可以使用此批注進一步完善此行為。
哪些bean可以利用此注釋?
這適用于
- 有狀態的 (@Stateful)Bean和
- 配置了容器托管的并發選項(ConcurrencyManagementType.CONTAINER)的Singleton bean(@Singleton)
它為什么如此重要 ?
由于EJB容器對并發請求進行了序列化,因此具有此批注可確保不會永遠阻止潛在的(等待)線程,并有助于定義并發策略 。
我可以在哪里放置此注釋?
- 在類上–全局適用于所有方法
- 僅在特定方法上
- 在特定方法上覆蓋類級別注釋的設置
如何使用它 ?
您可以使用此批注的value和unit元素定義其行為
這里有一些選擇
- @AccessTimeout(0) –這意味著您的方法根本不支持并發訪問,并且客戶端最終將收到java.ejb.ConcurrentAccessException
- @AccessTimeout(-1) –您的方法將無限期阻塞(我不認為這是個好主意!)
- @AccessTimeout(5000) –如果有機會,方法將在隊列中的下一個線程(如果有)之前等待5000 ms(5秒)
幾件事要注意
- unit元素的默認值為java.util.concurrent.TimeUnit.MILLISECONDS
- 小于-1的超時值無效
@StatefulTimeout
定義驅逐空閑狀態會話Bean的閾值限制,即在特定時間間隔內未收到客戶端請求的Bean
它為什么如此重要 ?
假設您有一個有狀態的會話Bean處理用戶注冊工作流程。 用戶在特定時間間隔內處于非活動狀態(可能正在執行其他操作)。 您希望有狀態會話Bean在內存中活動多長時間? 配置此注釋可以幫助防止不活動的Bean實例占用主內存。
我可以在哪里放置此注釋?
與@AccessTimeout批注相同的規則!
如何使用它 ?
您可以使用此批注的value和unit元素定義其行為
這里有一些選擇
- @StatefulTimeout(0) –這意味著您的bean實例將在包含此批注的方法完成后立即刪除
- @StatefulTimeout(-1) –您的方法對超時不敏感(固執的人!)
- @StatefulTimeout(15000) –方法將等待15000毫秒(15秒)以用于客戶端請求,然后該方法將成為驅逐對象
幾件事要注意
- unit元素的默認值為java.util.concurrent.TimeUnit.MILLISECONDS
- 小于-1的超時值無效
干杯!
翻譯自: https://www.javacodegeeks.com/2015/04/timeout-policies-for-ejbs-how-do-they-help.html
arm926ej
總結
以上是生活随笔為你收集整理的arm926ej_EJB超时策略:它们如何提供帮助?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 混沌与秩序电脑按键(混沌与秩序新手攻略)
- 下一篇: 电脑咋样P图(电脑P图怎么P)