スケのブログ

Java, Java EE, OpenAMなどの情報を記述していきます。

Stackoverflowの「What is local/remote and no-interface view in EJB?」を翻訳

質問

EJBには様々なクライアントビューがありますがその目的と意義を勉強しています。どなたか説明してくれませんか?

回答

Remote client view

EJBとそのクライアントがそれぞれ分散した環境にある場合、つまり、EJBとクライアントが異なるJVMに分けられている場合。例:EJBはWebSphereアプリケーションサーバに存在し、そのEJBAPIを使用するサーブレットTomcatサーバに存在する。

Local client view

EJBかクライアントが、単一のJVMでそのBeanのみを取り扱っている場合。例:EJBサーブレットが同じWebSphereサーバにデプロイされている。

No-Interface view

ほぼLocal client viewと同義ですが、BeanクラスはClient viewインターフェースの実装を必要としません。そのBeanクラスのすべてのpublicメソッドは自動的に呼び出し元に公開されます。
No-interface viewは常にインジェクションやJNDI lookupによって、EJB参照(LocalビューかRemoteビューか)を得ています。しかし、そのEJB参照のJavaの型はLocalインターフェースの型ではなく、Beanクラスの型です。これは、Java EE6の導入の一部としての利便性です

Difference between local client view and no-interface view

No-interface viewの場合、クライアントと対象のBeanは同じアプリケーション(EAR)内にパッケージングされていなければなりません。
Local viewの場合、クライアントは業務アプリとは別のアプリにパッケージングすることができます。これにより、コンポネントのファイングラインディングの面で、アプリにより柔軟性を与えることができます。

自身のAPIの使用シナリオに応じて、No-interface viewとLocal client viewを使用してもよいです。No-interface viewは、将来仕様に柔軟な機能を与えられる可能性が非常に高いです。

Reason

EJBサービスを利用したいクライアントは、コンテナでBeanを「look up」することになっていました(特定の初期コンテキストと共に)。
これは、すべての呼び出しが、コンテナが提供する特殊なEJB参照(プロキシ)を介して行われているからです。
これにより、コンテナは追加のBeanサービス(プーリング、トランザクション管理など)を提供することができます。
よって、クライアントは明示的にnew演算子を使用してEJBインスタンス化することができません。Client viewは、クライアントがアクセスするであろう特定のインタフェースを介して提供されます。サーバー側のプロキシ実現は、これらのインタフェースに基づいて行われます。
異なるClient ivewは、上記のようにさまざまなデプロイシナリオに合わせるため、定義されています。