1. ホーム
  2. java

[解決済み] EJBにおけるlocal/remoteとno-interface viewとは何ですか?

2023-06-10 16:14:36

質問

私は、EJBで異なるクライアントビューが必要な目的と理由を理解しようとしています。誰かが説明することを試みることができますか?

どのように解決するのですか?

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

EJBとそのクライアントが分散環境にある場合 - つまり、EJBとクライアントが別々のJava仮想マシンに存在する場合。例:WebSphere Application Server上でホストされるEJBと、Tomcatサーバー上でホストされるEJB APIを消費するServlet。

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

他のエンタプライズBeanやクライアントが単一のJVM内でBeanをアドレスするだけであることが保証されている場合のみ。例:EJBだけでなく、同じWebSphereサーバー上に展開されたServletも。

ノーインターフェイスビュー

ローカルクライアントビューとほぼ同じですが、異なる点があります。この場合、Beanクラスはクライアントビューインターフェースを実装する必要はありません。 no-interfaceビューは常にEJB参照を取得します - ローカルまたはリモートビューと同様に - インジェクションまたはJNDIルックアップによって; しかし、EJB参照のJavaタイプはローカルインターフェースのタイプではなく、ビーンクラスタイプになります。これは、Java EE6の一部として導入された利便性です。

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

ノーインターフェイスビューの場合、クライアントとターゲットBeanは同じアプリケーション(EAR)にパッケージングされなければなりません。ローカルビューの場合、クライアントはエンタープライズアプリケーションとは別のアプリケーションでパッケージ化することができます。そのため、コンポーネントを細かく分類するという点では、より柔軟性があります。

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

理由

歴史的に見ても、EJBサービスを使用したいクライアントは、(特定の初期コンテキストで)コンテナ上のBeanを"look up"することになっていました。それは、すべての呼び出しがコンテナによって提供される特別なEJB参照(プロキシ)を通して行われるからである。これによって,コンテナは,プーリング,コンテナ管理トランザクションなどのすべての付加的なBeanサービスを提供することができる。ですから、クライアントは明示的にEJBを new 演算子で明示的にインスタンス化することはできません。クライアントビューは、クライアントがアクセスできる特定のインターフェイスを介して提供されます。サーバーサイドでのプロキシ実現は、これらのインターフェイスに基づいて行われます。上記のように、様々な展開シナリオに対応するために、異なるクライアントビューが定義されています。