簡體   English   中英

如何在群集環境中使用javax.ejb.Singleton?

[英]How singleton is javax.ejb.Singleton in a clustered environment?

我需要在應用程序中維護一個對於集群環境中的所有用戶和所有節點都是唯一的簡單計數器。 我想過如下使用單例會話bean注釋javax.ejb.Singleton:

package foo;

import javax.ejb.Singleton;

@Singleton
public class Bean {
    private int counter;
    [...]
}

這看起來很簡單,但如果在集群環境中按預期工作,我找不到答案。 群集的每個節點都有自己的實例嗎?

當然我可以將bean保存在數據庫中,但它實際上只是一個計數器,這樣做會有點過分。 此外,我希望計數器在應用程序崩潰或重新啟動時重置,因此持久存在會產生比解決的問題更多的問題。

群集的每個節點都有自己的實例嗎?

是的,每個群集節點將具有不同的Singleton實例。 因此,@ Singleton注釋不是您的問題的解決方案。

請記住,Java EE規范沒有定義任何類型的集群行為。 您需要搜索特定的供應商解決方案才能實現此類要求。 僅作為示例,請參閱此鏈接

你可以使用hazelcast 它是一個分布式內存鍵值存儲。 似乎它將是一個完美的契合。 它還實現了JSR-107,這是JCache規范。

哈單身是一種方法。 作為進步,存在一些局限性。 如果您閱讀,您將擁有一個通過“getValue()”方法訪問服務的@stateless bean。 get值調用singleton bean的方法並給你一個值......直到那里。

但是如果你需要使用bean,一個策略應該通過get值返回一個SingletonBean實例,但是......你將有更多的單例bean實例....並且存在問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM