2012-05-25 27 views
2

我設置了兩個相同的Tomcat服務器,它們承載相同的Web應用程序(Sun RI JSF 2/Tomahawk)。對於負載平衡和故障切換場景,我使用nginx服務器作爲將請求委託給一個或另一個服務器的反向代理。現在一個tomcat被定義爲備份解決方案,以便tomcat服務器1處理所有的請求。當我殺死了tomcat 1的進程時,nginx很好地將以下請求委託給了tomcat服務器2.爲了重用會話數據,我配置了兩個tomcat服務器來使用memcached作爲會話存儲。 JSF被配置爲將其狀態存儲在服務器上。使用memcached作爲會話故障恢復JSF應用程序狀態

關於日誌文件,這個設置看起來不錯,會話數據是使用memcached服務器讀取和存儲的。例如,即使tomcat 1已關閉,也可以方便地使用Web應用程序而無需再次登錄。

不過,似乎我的(會話作用域)支持bean分別在恢復會話後沒有存儲或使用。表單字段留空,應該填充來自會話bean的數據。

有沒有可能用上述技術做這些事情?

+0

爲了避免這種顯而易見的情況,會話中所有需要執行的操作都已經實現了'Serializable'? – BalusC

+0

我這麼認爲。我忘記提及的唯一事情是我也使用CDI/OWB。爲了找到錯誤,我寫了一個小計數器應用程序,計數器值綁定到會話範圍的bean。安裝程序保持不變。我意識到,櫃檯並沒有改變它向負責一個或另一個服務器發送請求的方式。用Weld替換OWB後,櫃檯恢復狀態似乎有效。如果您完全不使用CDI,情況也是如此。我現在將在主應用程序中用Weld替換OWB,並讓你知道結果是什麼。 – Florian

+0

您是否使用自己的解決方案將會話存儲在memcached或memcached-session-manager(http://memcached-session-manager.googlecode.com)中? – MartinGrotzke

回答

0

隨着memcached的會話管理器和OWB你應該在這個版本ServletRequestListeners的通知得到了改變使用Tomcat < 7.0.22爲(這是故障轉移支持使用OWB的機制)。

我目前正在研究與OWB和tomcat> = 7.0.22一起使用的msm的新版本。

+0

我會感興趣,如果這對你有用,弗洛裏安:-) – MartinGrotzke

相關問題