私はJava EE 6 WebアプリケーションをGlassFish
3.1で実行しています。このアプリケーションは、ローカルSingleton EJB
MySingletonの2つのインスタンスを使用します。 MySingletonの各インスタンスは、APIを介して第三者のソフトウェアに接続します。異なる物理サーバー上でEJBを実行しているGlassFish
MySingleton.java
@Singleton
@LocalBean
public class MySingleton {
@PersistenceContext private EntityManager em;
private ThirdPartyAPI thirdPartyAPI;
...
}
MySingletonManager.java
@Singleton
@LocalBean
public class MySingletonManager {
@EJB private MySingleton mySingletonA;
@EJB private MySingleton mySingletonB; ///Aargh! They can't run on the same server!!
...
}
ここで制約されている:
- サードパーティのソフトウェアプロバイダは、そのソフトウェアは、それぞれを実行することを要求しますイン他の物理サーバー上の
ThirdPartyAPI
の番号 - MySingletonは、同じ
PersistenceContext
のクエリとトランザクションに必要なEntityManager
というインジェクションインスタンスを使用します。
制約1を満たすために、私はリモートでシングルトンEJBにアクセスする必要があると思う:私は、アプリケーションサーバに「サーバBにサーバA、mySingletonB上mySingletonAを実行する」のような何かを伝える必要があります。このために、JNDI
によってリモートEJBを呼び出す可能性があることがわかります。
制約2を満たすには、GlassSish clustering
を使用する必要があると思います。なぜなら、PersitenceContextをMySingletonの2つのインスタンスにわたって共有する必要があるからです。
残念ながら、私は2つのテクニックを一緒に使用する方法(リモートEJBとクラスタリング)に関する参考資料を見つけることができません。
私は、このシナリオのために推奨されるアーキテクチャについてのヒントや提案、そして最終的に実装ガイドラインを探しています。あなたは、外部EISシステムに接続している場合は、物事の
ご回答ありがとうございます。トピックの複雑さを考えると、時間が必要です。ところで、「シングルトンは状態を持つことができません」ということについて(最終的にはいくつかの参考文献で)明確にすることができますか? – perissf
Singletons http://java.sun.com/developer/technicalArticles/Programming/singletons/に関するこの興味深い記事が見つかりました。ヒントを教えてください – perissf
クラスタ化されたJ2EE環境のシングルトンは、実際にはクラスタ内のノードごとに1つのSingletonインスタンスを持ちます。さもなければ、単一の失敗点があるでしょう...それゆえ、クラスタ化された環境では、 '本当の'シングルトンではないので、シングルトンに状態を入れる際には、追加の注意が必要です。これを管理する最も簡単な方法は、クラスタ化されたシングルトンに状態を入れないことです。 –