考慮到開發Java EE應用程序的事實,它具有聊天服務器的目的,我遇到了一些問題。如何維護有狀態會話Bean的列表?
客戶端應該能夠使用HTTP,SOAP或AMF等不同的連接器進行連接。傳入的請求需要轉換爲統一的內部消息。接下來,消息驅動的bean調用業務邏輯並將請求的結果返回給特定的連接器。
問題1:這聽起來合理嗎?
我的問題是我如何存儲每個客戶端的會話信息。這將包括連接數據,時間戳,需要交付的命令等。 有狀態會話Bean應該沒問題,因爲只要客戶端連接,我就需要它們。但是,問題是要維護所有bean的列表,以便能夠爲新請求選擇正確的會話。 我無法將SFSB引用鏈接到HttpSession(如其他地方推薦的),因爲存在不同的連接器,不僅僅是HTTP客戶端。
問題2:那是什麼方法?會話管理器,執行JNDI查找以創建新的SFSB並將其添加到內部列表中?
問題3:它如何在集羣環境中工作?我看到SFSB可以複製到不同的節點,但是如何同步會話管理器列表?
問題4:除了負載平衡器之外,您還會推薦會話親和度嗎?
謝謝。
我使用GlassFish 3.1.1。其實,主要問題是我如何獲得對SFSB實例的引用?查看後,我需要存儲它?有沒有辦法從應用程序服務器檢索所有實例,並使用諸如「connectionID」之類的標識符選擇相應的實例? – valentin
我的理解是,您只是使用查詢來請求數據,通常JPA和應用程序服務器會負責從數據庫加載對象並將它們返回給您。 –
非常感謝! 因此,存儲會話信息(即使會有很多更新)應該通過JPA層到數據庫?當然,這會讓我們有機會在所有集羣節點上獲得相同的信息,但是不是使用數據庫作爲接口來連接所有節點的性能缺陷? – valentin