2017-02-21 100 views
0

我目前正在使用Websphere 8.0上的JSF進行編程,並且遇到了一個問題,我認爲這是因爲我們的集羣。我們有兩個節點,一段時間後,我的問題沒有發生。Websphere 8集羣和JSF2問題

我的問題是,我通過commandButton提交後通過javax.faces.application.ViewExpiredException結束。

此外,在此之前,堆棧跟蹤,我發現這一點:

View State cannot be reconstructed 
javax.faces.FacesException: javax.faces.application.ViewExpiredException 
    at org.apache.myfaces.shared_impl.util.StateUtils.decrypt(StateUtils.java:496) 
    at org.apache.myfaces.shared_impl.util.StateUtils.reconstruct(StateUtils.java:378) 

所以我想有一些錯誤的兩個節點之間的處理。

在我的web.xml我已設置:

<distributable /> 

<env-entry> 
     <env-entry-name>jsf/ClientSideSecretKey</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>SRe1FY2HKwBTOtT5KrtmiSoOzws+NA9/yX191wMFn9o=</env-entry-value> 
    </env-entry> 

像其他一些在其他線程中提到,但我的問題仍然存在。

Websphere內部可能有一些配置?

回答

1

這指出了一個加密問題。 WebSphere 8.0使用MyFaces JSF 2.0實現 - 您可能需要通過MyFaces上下文參數爲每個節點配置一個共享密鑰。至少,你需要設置的參數org.apache.myfaces.SECRET:

<!-- Defines the secret (Base64 encoded) used to initialize the secret key 
    for encryption algorithm. The size of it depends on the algorithm used for encryption --> 
<context-param> 
    <param-name>org.apache.myfaces.SECRET</param-name> 
    <param-value>MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz</param-value> 
</context-param> 

的MyFaces的安全參數的解釋是here

+0

無論如何,如果在用戶會話當前存在於一個節點的情況下關閉了節點自動切換節點,我從來沒有見過。防火牆/ LB會將它們放到節點#1,並且所有基於cookie的請求都會在那裏重定向?如果服務器停止/啓動,他們的會話是死的,因此視圖過期?並且下次他們登錄LB時將它們發送給'up'節點/服務器? – VeenarM

+0

WebSphere ND和其他服務器 - 通過會話故障切換支持這一點。在這種情況下,如果某個節點發生故障,則來自故障節點的會話可以被另一個節點接收並繼續。 (這是集羣的動機...) – wtlucy

+0

也許一個正確配置的環境的樂趣:P – VeenarM