有狀態階段作業 Bean (SFSB) 包含用戶端特定的狀態。用戶端與有狀態階段作業 Bean 之間存在一對一關係。建立時,EJB 容器會為每個 SFSB 提供一個唯一的階段作業 ID,此 ID 將 SFSB 連結至用戶端。
在伺服器實例出現故障時,SFSB 的狀態可以儲存在永久存放區中。SFSB 的狀態在其使用週期中預先定義的時間儲存於持續性存放區中。此動作稱為檢查點操作。如果啟用,通常會在 Bean 完成了任何作業事件之後 (即使該作業事件回復) 執行檢查點操作。
但是,如果 SFSB 參與了 Bean 管理的作業事件,則可能會在 Bean 方法執行到一半時確定該作業事件。因為 Bean 的狀態可能由於方法呼叫而處於過渡過程中,因此不是對 Bean 狀態進行檢查點操作的恰當時間。這種情況下,如果 Bean 在方法結束時不在其他作業事件的範圍內,EJB 容器會在相應方法結束時對 Bean 的狀態進行檢查點操作。如果 Bean 管理的作業事件使用多個方法,檢查點操作將延遲,直至後續方法結束時沒有使用中的作業事件。
SFSB 的狀態無需是作業事件,且可能做為非作業事件商務方法而進行了重大修改。如果某個 SFSB 出現這種情況,則您可以指定一系列檢查點方法,如指定進行檢查點操作方法中所述。
如果可分散 Web 應用程式參照 SFSB,且 Web 應用程式的階段作業容錯移轉,則 EJB 參照也將容錯移轉。
如果在 Application Server 實例停止時取消部署使用階段作業持續性的 SFSB,則可能不會清除持續性存放區中的階段作業資料。若要防止發生此情況,請在 Application Server 實例執行時取消部署 SFSB。
選取 [EJB 容器可用性] 標籤。
核取 [可用性服務] 核取方塊。
若要停用可用性,請取消核取此核取方塊。
請按照可用性設定中的說明變更其他設定
按一下 [儲存] 按鈕。
重新啟動伺服器實例。
若要啟用 EJB 容器的可用性,請使用 asadmin set 指令為配置設定以下三個特性:
availability-service.ejb-container-availability.availability-enabled
availability-service.ejb-container-availability.sfsb-persistence-type
availability-service.ejb-container-availability.sfsb-ha-persistence-type
例如,如果 config1 為配置名稱,則使用以下指令:
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .availability-enabled="true"
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .sfsb-persistence-type="file"
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability .sfsb-ha-persistence-type="ha"
Sun Java System Application Server 的 Application Server 獨立發行版本 隨附了 HADB 軟體。如需有關 Sun Java System Application Server 的可用發行軟體資訊,請參閱「Sun Java System Application Server 9.1 Installation Guide」中的「Distribution Types and Their Components」。只有 企業 設定檔才提供 HADB 功能。如需有關設定檔的更多資訊,請參閱 「Sun Java System Application Server 9.1 管理指南」中的「用法設定檔」。
[可用性服務] 的 [EJB 容器可用性] 標籤可讓您變更以下可用性設定:
HA 持續性類型:為啟用了可用性的 SFSB 指定階段作業持續性和鈍化機制。允許值有 file (檔案系統)、replicated (其他伺服器上的記憶體) 及 ha (HADB)。預設值為 ha。對於需要階段作業持續性的生產環境,請使用預設值 ha 或重複。
SFSB 持續性類型:為尚未啟用可用性的 SFSB 指定鈍化機制。允許值有 file (預設值)、replicated 及 ha。
如果將任一持續性類型設定為 file,EJB 容器都將指定檔案系統位置,以儲存鈍化的階段作業 Bean 狀態。檔案系統的檢查點操作對於測試很有用,但不適用於生產環境。如需配置儲存特性的相關資訊,請參閱管理主控台線上說明。
如果任何其他伺服器實例出現故障,HA 持續性會使伺服器實例的叢集可以回復 SFSB 狀態。HADB 也用做鈍化和啟動儲存。在需要 SFSB 狀態持續性的生產環境中使用此選項。如需更多資訊,請參閱 configure-ha-cluster(1)。
SFSB 儲存池名稱:如果為獲得階段作業持續性而變更了用於連線 HADB 的 JDBC 資源,可以變更 SFSB 儲存池名稱。如需詳細資訊,請參閱 configure-ha-cluster(1)。
如果停用了可用性,本機檔案系統將用於 SFSB 狀態鈍化,但不用於持續性。若要變更 SFSB 狀態的儲存位置,請變更 EJB 容器中的 [階段作業儲存位置] 設定。如需配置儲存特性的更多資訊,請參閱管理主控台線上說明。
部署期間,可以啟用個別應用程式或 EJB 模組的 SFSB 可用性:
如果使用管理主控台部署,請核取 [啟用可用性] 核取方塊。
如果使用 asadmin deploy 或 asadmin deploydir 指令部署,請將 --availabilityenabled 選項設定為 true。如需更多資訊,請參閱 deploy(1) 和 deploydir(1)。
若要啟用個別 SFSB 的可用性並選取進行檢查點操作方法,請使用 sun-ejb-jar.xml 部署.
若要啟用高可用性階段作業持續性,請在 ejb 元素中設定 availability-enabled="true"。若要控制 SFSB 快取的大小和運作方式,請使用以下元素:
max-cache-size:指定快取中保留的階段作業 Bean 的最大數。如果快取溢出 (Bean 的個數超出 max-cache-size),則容器會鈍化一些 Bean 或將 Bean 的串列化狀態寫入檔案。用於建立檔案的目錄來自使用配置 API 的 EJB 容器。
resize-quantity
cache-idle-timeout-in-seconds
removal-timeout-in-seconds
victim-selection-policy
如需有關 sun-ejb-jar.xml 的更多資訊,請參閱「Sun Java System Application Server 9.1 Application Deployment Guide」中的「The sun-ejb-jar.xml File」。
<sun-ejb-jar> ... <enterprise-beans> ... <ejb availability-enabled="true"> <ejb-name>MySFSB</ejb-name> </ejb> ... </enterprise-beans> </sun-ejb-jar>
如果啟用,通常會在 Bean 完成了任何作業事件之後 (即使該作業事件回復) 執行檢查點操作。若要在導致 Bean 狀態重大修改之非作業事件商務方法結束時,指定額外的選擇性 SFSB 檢查點操作功能,請使用 sun-ejb-jar.xml 部署描述元檔案的 ejb 元素中的 checkpoint-at-end-of-method 元素。
如果要在建立之後立即對 SFSB 的初始狀態進行檢查點操作,checkpoint-at-end-of-method 元素中的非作業事件方法可以是:
在 SFSB 的主介面中定義的 create() 方法
對於僅使用容器管理的作業事件之 SFSB,Bean 遠端介面中的方法使用作業事件屬性 TX_NOT_SUPPORTED 或 TX_NEVER 標記
對於僅使用 Bean 管理的作業事件之 SFSB,即不啟動也不確定 Bean 管理作業事件的方法
忽略此清單中提及的任何其他方法。在這些方法呼叫的每一個結尾,EJB 容器均將 SFSB 的狀態儲存至持續性存放區。
如果 SFSB 未參與任何作業事件,且如果 checkpoint-at-end-of-method 元素中未明確指定其任何方法,則根本不會對 Bean 的狀態進行檢查點操作 (即使此 Bean 的availability-enabled="true")
為了取得更好的效能,請指定方法的小子集。此方法應該完成對 Bean 的狀態做出重要修改的大量工作或結果。
<sun-ejb-jar> ... <enterprise-beans> ... <ejb availability-enabled="true"> <ejb-name>ShoppingCartEJB</ejb-name> <checkpoint-at-end-of-method> <method> <method-name>addToCart</method-name> </method> </checkpoint-at-end-of-method> </ejb> ... </enterprise-beans> </sun-ejb-jar>