J2EE 應用程式通常具有大量階段作業狀態資料。Web 購物車即為階段作業狀態的經典範例。而且,應用程式可以快取頻繁需要的階段作業物件資料。實際上,幾乎所有需要進行大量使用者互動活動的應用程式均需要維護階段作業狀態。
若要使用 asadmin 啟用和配置 Web 容器的可用性,請參閱 configure-ha-persistence(1)。
此外,還可使用 asadmin set 指令將配置的 availability-service.web-container-availability.availability-enabled 特性設定為 true,然後使用 configure-ha-persistence 根據需要設定特性。
例如,如下使用 set 指令,其中,config1 為配置名稱:
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849 config1.availability-service.web-container-availability.availability-enabled="true" asadmin configure-ha-persistence --user admin --passwordfile secret.txt --type ha --frequency web-method --scope modified-session --store jdbc/hastore --property maxSessions=1000:reapIntervalSeconds=60 cluster1 |
在樹形元件中,選取所需配置。
按一下 [可用性服務]。
選取 [Web 容器可用性] 標籤。
核取 [可用性服務] 核取方塊以啟用可用性。若要停用可用性,請取消核取該方塊。
變更其他設定,如以下可用性設定小節中所述。
重新啟動伺服器實例。
[可用性服務] 的 [Web 容器可用性] 標籤讓您可以變更以下可用性設定:
持續性類型:為啟用了可用性的 Web 應用程式指定階段作業持續性機制。允許的值包括 memory (無持續性)、file (檔案系統) 和 ha (HADB)。
必須配置並啟用 HADB 後,才能使用 ha 階段作業持續性。如需詳細配置資訊,請參閱 configure-ha-cluster(1)。
如果啟用了 Web 容器可用性,預設為 ha。否則,預設為 memory。對於需要階段作業持續性的生產環境,請使用 ha。前兩個類型 (memory 和 file ) 的持續性不提供高可用性階段作業持續性。
持續性頻率:指定儲存階段作業狀態的頻率。僅當持續性類型為 ha 時適用。允許的值包括 :
web-method - 在每個 Web 請求結束時、將回應傳送回用戶端之前,儲存階段作業狀態。此模式為發生故障時完全更新階段作業狀態提供了最好的保證。此為預設值。
time-based - 根據 reapIntervalSeconds 儲存特性設定的頻率,在背景儲存階段作業狀態。此模式不能保證完全更新階段作業狀態。但是,它可以提供很大的效能改善,因為在每個請求之後都不儲存狀態。
持續性範圍:指定階段作業物件數和儲存階段作業狀態的頻率。僅當持續性類型為 ha 時適用。允許的值包括:
session - 每次都儲存整個階段作業狀態。此模式為正確儲存任何可分散 Web 應用程式的階段作業資料提供了最好的保證。此為預設值。
modified-session - 如果階段作業狀態已修改,則儲存整個階段作業狀態。如果呼叫了 HttpSession.setAttribute() 或 HttpSession.removeAttribute(),則系統將認為階段作業狀態已修改。您必須保證每次變更屬性時都呼叫 setAttribute()。這不是 J2EE 規格的需求,但是此模式需要這樣做才能正常工作。
modified-attribute - 僅儲存修改的階段作業屬性。若要使此模式正常運作,您必須遵循一些指導原則:
每次修改階段作業狀態時都必須呼叫 setAttribute()。
確定各屬性之間沒有交叉參照。系統將對每個不同屬性關鍵字下的物件圖形單獨進行串列化並單獨儲存。如果每個單獨的關鍵字下的物件之間存在物件交叉參照,則它們將不會進行正確串列化和反串列化。
在多個屬性之間分布階段作業狀態,或者至少在唯讀屬性和可修改屬性之間分布階段作業狀態。
單次登入狀態:核取此方塊以啟用單次登入狀態的持續性。若要停用可用性,請取消核取該方塊。如需更多資訊,請參閱將階段作業容錯移轉與單次登入配合使用
HTTP 階段作業儲存:如果為獲得階段作業持續性而變更了用於連線 HADB 的 JDBC 資源,可以變更 HTTP 階段作業儲存。如需詳細資訊,請參閱 configure-ha-cluster(1)。
若要啟用和配置個別 Web 應用程式的可用性,請編輯應用程式部署描述元檔案 sun-web.xml。應用程式部署描述元中的設定會置換 Web 容器的可用性設定。
session-manager 元素的 persistence-type 屬性決定應用程式使用之階段作業持續性的類型。必須將該屬性設定為 ha 才能啟用高可用性階段作業持續性。
如需有關 sun-web.xml 檔案的更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「The sun-web.xml File」。
<sun-web-app> ... <session-config> <session-manager persistence-type=ha> <manager-properties> <property name=persistenceFrequency value=web-method /> </manager-properties> <store-properties> <property name=persistenceScope value=session /> </store-properties> </session-manager> ... </session-config> ...
在單一應用程式伺服器實例中,使用者經過應用程式認證後,即無需分別經在相同實例上執行的其他應用程式重新認證。這稱為單次登入。如需更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「User Authentication for Single Sign-on」。
若要使該功能在 HTTP 階段作業容錯移轉到叢集中另一個實例後仍然可用,必須將單次登入資訊保留在 HADB 中。若要保持單次登入資訊,首先請啟用伺服器實例和 Web 容器的可用性,然後啟用單次登入狀態容錯移轉。
透過管理主控台中的 [可用性服務] 的 [Web 容器可用性] 標籤,您可以啟用單次登入狀態容錯移轉,如配置 Web 容器的可用性中所述。您也可以使用 asadmin set 指令將配置的 availability-service.web-container-availability.sso-failover-enabled 特性設定為 true。
例如,按如下所示使用 set 指令,其中 config1 為配置名稱:
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849 config1.availability-service.web-container-availability. sso-failover-enabled="true"
可使用單一名稱和密碼組合存取的多個應用程式,即構成單次登入群組。對於與應用程式 (是單次登入群組的一部分) 相對應的 HTTP 階段作業,如果其中一個階段作業逾時,其他階段作業並不會失效,並且仍然可用。這是因為一個階段作業的逾時不應影響其他階段作業的可用性。
因此,如果一個階段作業逾時並且您嘗試從執行該階段作業的同一瀏覽器視窗存取相應的應用程式,則無需再次進行認證。但是將建立一個新的階段作業。
以屬於含有其他兩個應用程式的單次登入群組的購物車應用程式為例。假設其他兩個應用程式的階段作業逾時值大於購物車應用程式的階段作業逾時值。如果購物車應用程式的階段作業逾時,並且您嘗試從執行該階段作業的同一瀏覽器視窗執行購物車應用程式,則無需再次進行認證。但是,前一輛購物車將遺失,並且必須建立一輛新的購物車。即使執行購物車應用程式的階段作業已逾時,其他兩個應用程式也會繼續照常執行。
類似地,可假定與其他兩個應用程式中的任何一個應用程式對應的階段作業逾時。當從執行該階段作業的同一瀏覽器視窗連線應用程式時,您無需再次進行認證。
此運作方式僅適用於階段作業逾時情況。如果啟用了單次登入並且您使用 HttpSession.invalidate() 令其中一個階段作業失效,則屬於單次登入群組的所有應用程式之階段作業都將失效。如果您嘗試存取屬於單次登入群組的任一應用程式,則需要再次進行認證,系統將為存取該應用程式的用戶端建立一個新的階段作業。