質問

私は現在、一部の古いソースコードを開発したなアプリサーバーです。基本的にチ"ブラックボックスコード"の入力インターフェース、出力インタフェース。あの"ブラックボックス"の授業は静的データ構造を含んだ状態では、長い年月をかけてつくるアルゴリズムで定時間(10秒)があります。のブラックボックスから、主たる方法です。

こ簡単に自分自身しようと考え、"ブラックボックス"シングルトン.基本的に、という方にアクセスの論理中のブラックボックスか同一のインスタンスとなります。これらの行使えるようになったのメッセージ駆動の豆を入力としてのブラックボックス、JMSの出版社は何らかの出力、ブラックボックス。

どんだけのアイデアです。他のヒント?

を懸念していますが、あるスレッドの"ブラックボックスコードを私が知らなかです。

あるという"アプリscopedオブジェ"にEJB?

注意:を使用していGlassfish

役に立ちましたか?

解決

ご利用の場合の簡単なsingelton, ますので面した問題を踏み入れればクラスタ化された環境.

このシナリオでは、複数あたclassloader複数のJVMs、sinlgetonパターン 休みしますので、動きやすい複数のインスタンスのクラスです。

の利用のためのシングルトンアプリサーバ(その恐れがあるクラスタ化された環境でのシングルトンは全状態、利用お客様の利便性を高めるためのアクセスグローバルデータます。

であることを確認申請サーバのベンダーソリューションのためこの課題です。ではないが、そのほとんど引先の皆さまにおかれましては、供給の一部解境での並べ替えができます。

具体的にはためのGlassfishるという使い、チェックアウト シングルトンEJB支援のためのGlassfish.しかし単一のアノテーションを期待で

他のヒント

私はシングルトンを作成することは、実際に唯一の現実的な考えであることを言うでしょう。この「ブラックボックス」内でそのコードを仮定すると、このファサードの2つのインスタンスを作成するために絶対に安全ではない、静的フィールドを使用することが知られています。結果はそうでない場合は予測不能です。

ファー悪い考えであることから、それは実際には潜在的に非常にの良いのアイデアのように私に聞こえるます。

ただ、ビューのプログラム設計の観点から:あなたのブラックボックスは、概念的にそれらに取り組むのプロパティとメソッドを持つ「オブジェクト」であれば、その後しかインスタンス化し、それらの一つがあります場合でも、オブジェクトにそれを作りますます。

これは動作するはずですが、あなたが対処する必要がありますいくつかの問題があります。

スレッド、あなたが言及したように。 MDBは、あなた自身のスレッドを作成することはできませんEJBコンテナ内で実行されるので、あなたがそこに潜在的な問題を抱えています。あなたが(それはあなたが行うように聞こえる)実際のコードへのアクセス権を持っている場合は、スレッドを排除または「承認」スレッド方式を使用するには、いずれかのいくつかのリファクタリングを行うことをお勧めします。それは間隔にいくつかのタスクを実行しているためのCommonJ TimerManagerは、おそらくあなたの述べられた場合に動作します。ほとんどのアプリケーションサーバで使用可能な実装があります(WASおよびWebLogicは、それが含まれてい)ています。

クラスローディング - これはあなたの構成に依存しています。シングルトンは、同じEAR内に作成され、MDBのから操作された場合は、罰金になります。別々のEARの異なるクラスローダとあなたの複数のインスタンスシングルトンを意味します。これはあなたのケースではないか、それ以上の情報なしで問題になるかどうかについてはコメントできません。

私はポイントを逃していますか?あなたは「ブラックボックスのコードは」状態が含まれていることを述べました。 MDBは、宛先ごとに1つのインスタンスに制限することができるが、適切な設定を行わなくても、あなたは、いくつかのMDBになってしまいます。それらのすべては、「ブラックボックスコード」のあなたの単一のインスタンスでの作業します。私にとっては、1つのBeanが他のBeanが前に数ティックを作成している「ブラックボックスコード」状態を上書きしますので、これは、良いアイデアではないようです。

アーティファクトあなたの条件に優れたフィットは、JBossのMBeanであることをように私には思えます。 (あなたが候補ASとしてJBoss上で考えている場合)。

<のhref = "http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Server_Configuration_Guide/4/html/Writing_JBoss_MBean_Services-A_Standard_MBean_Example.html" のrel = "nofollowをnoreferrer" >標準MBeanの例の

のMBeanはまた、JBossのクラスタリングの場合、シングルトンとして展開することができる。

P>

私はこれがあなたのために有用であることを願っています。

ラファます。

できるだけ早く静力学を取り除くためにコードを修正してください。シングルトンは、正しい方向への一歩ではありません - 彼らは、余分なミスディレクションを追加します。

状態が変更されることがあります。

シングルトンを使用しないでください。

あなたのブラックボックスクラスのグローバルインスタンスを公開することに移動するための方法のように見えるしていません。しばしば、シングルトンは、彼らはあなたに物事が容易になりますように見える、と彼らができるようにして、それは多くの場合、あなたを噛まないように戻ってくると、あなたのコードの大きな塊を再構築する必要が終わるでしょう。

Webサーバの世界では、オブジェクトはリクエスト、セッション、またはアプリケーションにスコープすることができます。おそらく、あなたが必要なものをアプリケーションスコープのオブジェクトである。

「アプリケーションスコープオブジェクト」または「アプリケーション寿命オブジェクト」のドキュメントを検索します。

なぜ空白のボックスブツのためのRESTインターフェースを作成し、クライアントがHTTP呼び出しを行うことはできませ?

IMO、それはあなたのシングルトンのニーズのEJBコンテナを持つことをお勧めします。 Java EE 6ではセッションBeanに@Singleton注釈を配置すると、あなたの名前のシングルトンを与えます。

scroll top