[英]Portlets, HttpSession and Thread-Safety
我們的portlet在HttpSession中保持狀態,HttpSession由同一會話的所有請求處理線程共享。
portlet規范(JSR-168)寫道:
PLT.5.2.4.3請求處理期間的多線程問題
portlet容器通過在不同線程上並發執行請求處理方法來處理對同一portlet的並發請求。 Portlet開發人員必須設計其portlet以處理來自
processAction
內的多個線程的並發執行,並在任何特定時間render
方法。
我想知道我應該如何實現這一目標? 當然,我可以使用同步在processAction
和render
期間實現互斥,但我不知道如何強制執行整個請求處理的原子性。 特別是,我擔心以下情況:
processAction
,將數據加載到會話中以便以后呈現 processAction
,從會話中丟棄該數據 render
,從會話中讀取要渲染的數據,並拋出NullPointerException,因為准備好的數據不再存在...... 通常如何阻止這種情況? 特別是,當使用JBoss portlet橋來調整JSF到Portlet環境時?
我會說如果有兩個portlet在相同的數據上運行,特別是一個讀取它而另一個刪除它,那么很可能是設計中存在嚴重缺陷。
然后,您可能希望按portlet /線程存儲數據,即如果portlet1讀取某些數據,則應將其鎖定,直到讀取完成並使用唯一鍵將其放入會話中。
如果刪除應呈現的數據是合法的,那么您應該考慮到這一點並在render
期間再次檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.