web-dev-qa-db-ja.com

EJBのローカル/リモートおよびインターフェイスなしビューとは何ですか?

EJBでさまざまなクライアントビューが必要な理由と理由を理解しようとしています。誰かが説明しようとすることができますか?

76
LuckyLuke

リモートクライアントビュー

EJBとそのクライアントが分散環境にある場合-EJBとクライアントは別々のJava仮想マシンに存在することを意味します。 Tomcatサーバー上。

ローカルクライアントビュー

他のエンタープライズBeanまたはクライアントが単一のJVM内のBeanのみに対処することが保証されている場合のみ。たとえば、同じWebSphereサーバーにデプロイされたEJBとサーブレット。

インターフェイスなしのビュー

ローカルクライアントビューとほぼ同じですが、違いがあります。この場合、Beanクラスはクライアントビューインターフェイスを実装する必要はありません。 Beanクラスのすべてのパブリックメソッドは、呼び出し元に自動的に公開されます。インターフェイスなしのビューは、ローカルビューまたはリモートビューと同様に、インジェクションまたはJNDIルックアップを通じて常にEJB参照を取得します。ただし、Java EJB参照のタイプは、ローカルインターフェースのタイプではなく、Beanクラスタイプです。これは、Java EE6 。

ローカルクライアントビューとインターフェイスなしビューの違い

インターフェイスなしのビューの場合、クライアントとターゲットBeanは同じアプリケーション(EAR)にパッケージ化する必要があります。ローカルビューの場合、クライアントはエンタープライズアプリケーションとは別のアプリケーションにパッケージ化できます。そのため、コンポーネントのきめ細かな点で柔軟性が高まります。

APIの使用シナリオに応じて、ローカルクライアントビューとインターフェイスなしビューを使用できます。インターフェイスなしのビューは、将来の仕様で柔軟な機能を受け取る可能性が非常に高くなります。

理由

歴史的または別の方法で、EJBサービスを使用したいクライアントは、コンテナ上のBeanを(特定の初期コンテキストで)「ルックアップ」するはずでした。これは、すべての呼び出しが、コンテナが提供する特別なEJB参照(プロキシ)を介して行われるためです。これにより、コンテナはプーリング、コンテナ管理トランザクションなどのすべての追加Beanサービスを提供できます。したがって、クライアントはnew演算子でEJBを明示的にインスタンス化できません。クライアントビューは、クライアントがアクセスできる特定のインターフェイスを介して提供されます。サーバー側でのプロキシの実現は、これらのインターフェイスに基づいて行われます。前述のように、さまざまな展開シナリオに適したさまざまなクライアントビューが定義されています。

122
ring bearer

EJB 3.1仕様のセクション3.2.2に従って:

ローカルクライアントビューを介したエンタープライズBeanへのアクセスは、ローカルクライアントビューを提供するエンタープライズBeanと同じアプリケーション内にパッケージ化されたローカルクライアントでのみサポートされる必要があります。この仕様の準拠実装は、別のアプリケーションにパッケージ化されたローカルクライアントからエンタープライズBeanのローカルクライアントビューへのアクセスをオプションでサポートできます。ローカルクライアントビューへのアプリケーション間アクセスの構成要件はベンダー固有であり、この仕様の範囲外です。ローカルクライアントビューへのアプリケーション間アクセスに依存するアプリケーションは移植できません。

インターフェイスなしビューは、Beanが個別のインターフェイスを宣言することなくローカルクライアントビューを公開できるようにする単なる便利な機能です。

3
Melad Basilius