2011-10-02 75 views
0

我很新的EJB 3.1,我試圖解決服務器端的問題;也許有人可以提供一些指導。使用EJB 3.1的Singleton bean作爲客戶到多個遠程狀態會話Bean

我有一個狀態機,代表多個用戶的在我的應用程序共享狀態。我試圖將這個狀態機模型化爲一個有狀態會話Bean;由於這個狀態機代表了多個用戶,我引入了一個Singleton會話bean,它是StateMachine的實際客戶端,所有用戶最終都是Singleton bean的「客戶端」。我希望在應用程序的整個生命週期中生命週期多個StateMachines時出現問題。

我想我的辛格爾頓豆(「經理」)來處理客戶端的請求,並分發到相應的StateMachine - 我怎麼會訪問狀態bean的具體事例?爲了增加複雜性,我試圖遠程訪問這些StateMachine bean(如果它是本地的,我只是創建這些事件的實例作爲Manager的成員)。

無論如何,我希望這是明確的。我覺得我錯過了EJB設計的一些基本點;你們都會告訴我,如果是這樣的話。

回答

1

單身已在EJB 3.1被引入提供如在A Sampling of EJB 3.1描述的多個實例之間共享狀態的能力。

單身

一個長期存在的遺漏EJB API在一直的能力到企業bean組件 的多個實例之間或在應用程序的多個企業bean組件之間容易 共享狀態。相比之下,Java EE Web應用程序編程模型始終通過 通過ServletConfig對象提供此類功能。在 EJB 3.1中,這個遺漏已經通過引入 singleton beans(也稱爲singletons)而得到解決。

單例是一種新類型的會話bean,保證爲 在特定的Java虛擬 機器(JVM)*中實例化一次。一個Singleton使用@Singleton 註釋中定義,如顯示在下面的代碼例如:

@Singleton公共類PropertiesBean {

private Properties props; 
private int accessCount = 0; 

public String getProperty(String name) { ... } 

public int getAccessCount() { ... } 

}因爲它是會話bean的另一種調味劑,單罐 定義與無狀態和有狀態bean相同的本地和遠程客戶端視圖。客戶端訪問單身人士的方式與訪問無狀態和有狀態Bean的方式相同,即通過EJB 參考。例如,一個客戶端可以訪問上述PropertiesBean 單如下:

@EJB private PropertiesBean propsBean; 

...

絃樂味精= propsBean.getProperty( 「hello.message」);在這裏, 容器確保在同一個JVM所有PropertiesBean 引用所有的調用由 PropertiesBean的同一個實例提供服務。默認情況下,容器與其他組件類型一樣強制執行相同的線程 保證。具體來說,允許不超過一個 訪問任何一個 時間的特定bean實例。對於單身人士來說,這意味着阻止任何併發調用。 但是,這只是默認的併發行爲。有 額外的併發選項,允許更高效的併發 訪問單例實例。

看看Java EE6 Events關於如何使用事件發送通知。

相關問題