18

EJB 3.1 では、JNDI ルックアップはさまざまなルックアップ名で作成できます。

java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualifiedbean interface-name>           
java:global[/<app-name>]/<module-name>/<bean-name> 
java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name> 
java:app/<module-name>/<bean-name> 
java:module/<bean-name>!<fully-qualified-bean-interface-name> 
java:module/<bean-name>

私の JavaEE 6 プロジェクト (Maven 2、Netbeans 6、および Glassfish v3 を使用) では、アプリケーション名は X-Snapshot.ear で、EJB モジュールは Y-Snapshot.jar です。別のアプリケーションとモジュール名を使用するようにこの Maven プロジェクトを構成するにはどうすればよいですか? この名前が変更されたときに、すべての JNDI ルックアップを変更するつもりはありません!! では、JNDI ルックアップのアプリケーション名とモジュール名を構成することは可能ですか?

4

2 に答える 2

18

素朴なアプローチ

Maven EAR プラグインを使用すると、モジュールのファイル名をカスタマイズできます。最終的な名前または EAR を使用して設定できますproject.build.finalName

はるかに優れたアプローチ

<application-name><module-name>application.xmlと をそれぞれオーバーライドしejb-jar.xmlます。EJB 3.1 でのポータブル グローバル JNDI 名の引用:

上記の名前に加えて、EJB が 1 つのクライアント ビューのみを公開する (つまり、インターフェースを 1 つだけ実装するか、インターフェース ビューを実装しない) 場合、コンテナーは Bean を

java:global/[<application-name>]/<module-name>/<bean-name>

どこ

  1. <aplication-name>デフォルトは.ear、バンドル拡張子なしのバンドル名 (ファイル名) です。これは でオーバーライドできますapplication.xml。また、 <application-name>Bean がファイル内にパッケージ化されている場合にのみ適用され .earます。
  2. <module-name>デフォルトは、バンドル拡張子なしのバンドル名 (.warまたは) です。.jar繰り返しますが、これは でオーバーライドできますejb-jar.xml
  3. <bean-name>デフォルトは、Bean の非修飾クラス名です。ただし、@Statefulor @Statelessまたは@Singletonname 属性を使用する場合は、そこで指定された値が Bean 名として使用されます。
于 2010-08-07T20:39:47.603 に答える
7

アプリケーション名とモジュール名は、JNDI を介して実行時に検索できます。

@Resource(lookup = "java:app/AppName")
private String appName;

@Resource(lookup = "java:module/ModuleName")
private String moduleName;

説明されているように、アプリケーション デプロイメント記述子で application-name と module-name を構成できますが、これらの名前はデプロイメント時に ( Java EE 仕様に従って、以下に示すように) オーバーライドされる可能性があるため、ハードコーディングしないことをお勧めします。これらの値をアプリケーション コードに含めます。

EE.8.5.2 Java EEアプリケーションのデプロイおよびEE.8.5.1スタンドアロンJava EEモジュールのデプロイ

デプロイメント・ツールは、アプリケーション名がアプリケーション・サーバー・インスタンス内で固有であることを確認する必要があります。名前が一意でない場合、展開ツールが自動的に一意の名前を選択するか、Deployer が一意の名前を選択できるようにすることができます。

EE.8.1.1 コンポーネントの作成

名前が一意でない場合 (たとえば、異なるファイル名拡張子を削除した後に 2 つの名前が同一であるなど) に限り、展開ツールは競合するモジュールのいずれかに対して新しい一意の名前を選択できます。競合しないモジュール名は変更しないでください。このような場合に一意の名前を選択するアルゴリズムは製品固有です。

于 2011-08-15T15:07:06.153 に答える