0

サーバーの jndi レジストリ (jboss など) をブラウズし、ejb ごとにその実装クラスを見つけたいと考えています。たとえば、ローカル Bean があるとします。

@Stateless(name="fooService")
public class FooServiceBean implements FooService () { ... }

and the interface

@Local
public interface FooService { ... }

そして、次のようにjndiから取得します:

Context ctx = new InitialContext();
Object obj = ctx.lookup("fooService");

今の質問.. obj が FooServiceBean のインスタンスであることをどのように知ることができますか?

2013 年 9 月 25 日更新: これまでのところ、これが可能であることがわかりませんでしたが、実際には理にかなっています。JNDI はインターフェースのみをホストします。

4

2 に答える 2

1

これはあなたの質問には答えませんが:

クライアントは、インターフェースがどのメカニズムによって実装されているかを実際に認識すべきではありません。これは、クライアントをインターフェイスではなく実装に結合するため、悪い設計です。Bean 実装クラスは、アプリケーション サーバー ランタイムによって管理されます。クライアントはその存在を認識すべきではありません。

于 2013-09-25T14:30:09.303 に答える
0

それは間違ったアプローチのように聞こえます。クライアントが知りたい/知りたい理由は何ですか? 実装から分離されたインターフェースのポイントは、クライアントを実装の変更から隔離することです。本当に知る必要がある場合は、FooServiceBean から true を返し、他のすべての実装から false を返す isFooServiceBean() メソッドを追加できますが、何かが設計ミスのように思えます。

于 2013-07-08T17:58:22.187 に答える