簡體   English   中英

Portlets,HttpSession和Thread-Safety

[英]Portlets, HttpSession and Thread-Safety

我們的portlet在HttpSession中保持狀態,HttpSession由同一會話的所有請求處理線程共享。

portlet規范(JSR-168)寫道:

PLT.5.2.4.3請求處理期間的多線程問題

portlet容器通過在不同線程上並發執行請求處理方法來處理對同一portlet的並發請求。 Portlet開發人員必須設計其portlet以處理來自processAction內的多個線程的並發執行,並在任何特定時間render方法。

我想知道我應該如何實現這一目標? 當然,我可以使用同步在processActionrender期間實現互斥,但我不知道如何強制執行整個請求處理的原子性。 特別是,我擔心以下情況:

  • 線程1執行processAction ,將數據加載到會話中以便以后呈現
  • 線程2執行processAction ,從會話中丟棄該數據
  • 線程1執行render ,從會話中讀取要渲染的數據,並拋出NullPointerException,因為准備好的數據不再存在......

通常如何阻止這種情況? 特別是,當使用JBoss portlet橋來調整JSF到Portlet環境時?

我會說如果有兩個portlet在相同的數據上運行,特別是一個讀取它而另一個刪除它,那么很可能是設計中存在嚴重缺陷。

然后,您可能希望按portlet /線程存儲數據,即如果portlet1讀取某些數據,則應將其鎖定,直到讀取完成並使用唯一鍵將其放入會話中。

如果刪除應呈現的數據是合法的,那么您應該考慮到這一點並在render期間再次檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM