2011-09-06 64 views
3

是否有用戶MongoDB作爲Tomcat6的中央會話存儲?如果是這樣,我們是否可以有一個tomcat服務器集羣讀取來自MongoDB的會話數據,以便可以在不需要粘性會話的情況下對集羣進行大小調整(即時添加更多的框)?Tomcat6的基於MongoDB的會話存儲

回答

2

我想我找到了我一直在尋找。

https://github.com/dawsonsystems/Mongo-Tomcat-Sessions

如果有人已經在生產中使用它,我很想聽聽你的經歷。

+0

你有沒有機會在生產中使用它?對此的任何反饋都非常有幫助。 – ChrisOdney

+0

也期待使用此...是否正確閱讀README中使用此SessionManager不支持聚簇mongo?任何反饋都將不勝感激。 –

0

的Tomcat/J2EE會話具有getId()方法,該方法返回當前用戶的會話ID。您當然可以將它用作MongoDB中sessions集合的關鍵字,並存儲您想要的任何數據。

我不知道有任何預建的工具和Tomcat 6條具體整合,但這並不意味着它們不存在。但是這是一個相當簡單的任務,只需編寫自己的DAO來訪問會話數據,最簡單的方法是給出HttpSessionHttpServletRequest

如果您的會話數據是你保持唯一的共享狀態,然後將它移動到MongoDB中(或任何關閉應用程序服務器的數據庫或工具)將讓您縮放像你求婚。如果您在應用程序服務器上維護了其他狀態,則需要確定如何將其從應用程序服務器移到共享資源上。

+0

確定。我試圖改進這個問題。看一看。 – rreyes1979

+0

更新,希望這有助於。 – dcrosta

0

我覺得有使用MongoDD存儲會話,只使用Servlet的API函數,沒有專有的應用服務器的功能更好的辦法。

  1. 所有你需要創建自己的實現的 HttpSession的基礎上storeing Map的第一屬性
  2. 您需要創建的HttpServletRequest的實現(使用HttpServletRequest的包裝),其覆蓋的getSession法和 返回您的實現
  3. 您需要創建一個過濾器,取代了給定的HttpRequest對你創建並執行MongoDB的處理加載和存儲屬性映射

你會發現一些代碼樣本(可悲的是在德語)位置:http://mibutec.wordpress.com/2013/09/23/eigenes-session-handling-in-webapplikationen/