3

クラスター化されたJBoss環境の機能をテストするために、いくつかのプロジェクトでバニラJBossAS 6サーバーを使用しています。私が抱えている問題は、ノード内の 1 つの EJB (別のタイプ) から別のノード内の同じタイプのインスタンスに EJB 参照を転送すると、メソッド呼び出し時に例外がスローされ、そのlong_alphanumeric_keyキーが指定された Bean はキャッシュ (InfinispanStatefulCache) に登録されていません。

問題は、転送する必要があるオブジェクトでステートフル アノテーションの代わりにシングルトン アノテーションを使用すると、転送されたオブジェクトが問題なく動作し、それが作成されたサーバーで共有 EJB のメソッドを正常に呼び出すことです。問題は、このケースには HA-Singleton と同じ欠陥があることです。HA-JNDI ツリーのルックアップを介して以前に取得されたすべての転送された参照。

私が達成しようとしていることについての洞察:

私が現在必要としているのは、HA-Singleton のようにノード間でステートフル EJB の単一インスタンスを共有することです。HA-Singleton を使用しない理由は、このタイプのシングルトンの状態がクラスターのマスター ノードで排他的に維持されるため、ノードがシャットダウンまたは失敗した場合、インスタンスの状態が失われるためです。

ステートフル Bean を使用すると、クラスターの状態を維持できるため、ノードで障害が発生したときに状態が失われるのを防ぐことができます。JBoss と Infinispan のキャッシュがどのように機能するかはまだ完全には理解できていませんが、私が読んだ限りでは、@Clusteredアノテーション付きステートフル Bean の状態はクラスター全体に自動的に複製されます。

現在の JBoss バージョンで Singleton と HA-Singleton を使用する際の問題についてはすでに警告されているため、この設計変更の解決に役立つあらゆる種類のドキュメントまたはパターンを歓迎します。

また、Infinispan キャッシュと JBoss クラスタリングがどのように機能するかについての洞察を提供できるドキュメントをいただければ幸いです。これまで私が読んできた資料には、Infinispan の代わりに JBossCache が使用された古い JBoss バージョンが混在していました。

よろしくお願いします、
ドイツ語

4

1 に答える 1

2

残念ながら、JBoss AS6またはAS7は、クラスター化されたEJBシングルトンをまだサポートしていません。これは本当にあなたが探しているものだと思います。HA-Singletonは、クラスターの単一ノードでのみ、一部のサービスの1つのインスタンスのみが開始されるようにします。それはあなたのユースケースに合わないようです。実際には、EJBシングルトンの状態を配布するだけでよいようです。これが私がお勧めするものです。ローカルEJBシングルトンを使用しますが、分散状態を格納するためにinfinispanを使用します。* Infinispan統合はより成熟しているため、まず、AS6ではなくAS7を使用することをお勧めします。* AS7では、シングルトンでinfinispanキャッシュを直接使用できます。例えば

@Singleton
public class MySingleton {
  // This references the same infinispan cache container used for sfsb replication
  @Resource(lookup="java:jboss/infinispan/container/ejb")
  private CacheContainer container;
  private Cache<?, ?> cache;

  @PostContruct
  public void init() {
    // This will create a cache for use by this singleton
    // Any state to be distributed should be stored in the cache.
    this.cache = container.getCache(this.getClass().getName());
  }

  @PreDestroy
  public void destroy() {
    this.cache.stop();
  }
}
于 2012-02-13T17:57:36.710 に答える