2011-10-11 70 views
1

我已經看到了這個話題在不同的應用程序共享會話此解決方案: Any way to share session state between different applications in tomcat?如何更改JNDI bean中的值?

從來就能夠註冊一個JNDI豆,得到它在不同的應用。但我真正想要的是在一個應用程序中更改此Bean的值(將值添加到散列表),並在其他應用程序中檢索新值,但這種更改似乎只發生在本地。

有沒有解決方法?

感謝

回答

0

您是否嘗試過使用JNDI上下文重新綁定的方法?這使您可以用新的替換當前綁定的對象。

+0

如果對象被高度訪問和更改,這可能會很危險,不是嗎?應用程序可能會覆蓋其他應用程序更改的數據。 –

0

您是否在所有應用程序中獲得相同的bean,或容器是否爲每個應用程序創建一個新的bean?

如果您無法使用它,請參閱以下解決方法:創建另一個Web應用程序並使用它來共享狀態。將狀態轉換爲可以輕鬆發送到應用程序的內容(XML或JSON)。

如果你有點小心(只使用Input/OutputStreams和ISO-8859-1編碼),也應該可以直接序列化Java對象並將它們傳遞給服務器(通常需要序列化注意事項) 。

最後,您可以在同一臺機器上設置一個RMI服務器,該機器提供了一個類似於地圖的API來交換數據。

+0

我相信這是恢復的豆。這就是我正在做的。 我已經把這段代碼都應用 <的resource-env-REF> <的resource-env-REF-名稱>豆/ SessionPool beans.SessionPool 'Context initCtx = new InitialContext(); Context envCtx =(Context)initCtx.lookup(「java:comp/env」); SessionPool bean =(SessionPool)envCtx.lookup(「bean/SessionPool」);' –

+0

確保獲得相同的bean:打印hashCode()或使用調試器查看對象ID。如果查找每次創建一個新的bean,它將不起作用。 –