ここにいろいろ書いてある
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html
ローカルEJBの場合
クライアントコンテナがインジェクションしてくれる場合、@EJBアノテーションを書く。@EJBのname属性は<ejb-ref-name>に相当。指定しなければルールに従って自動的につけられる。
@EJB(beanInterface=FooLocal.class)
Webフレームワークなどを使っていてServletに自分のアノテーションをつけられない場合はweb.xmlで参照名の定義をする。
<ejb-local-ref>
<ejb-ref-name>ejb/fooejb</ejb-ref-name>
<local>abc.def.FooLocal</local> <!-- ローカルインターフェイスの完全修飾名 -->
<ejb-link>FooBean</ejb-link> <!-- EJBのJNDI名 -->
</ejb-local-ref>
Contextから取得
InitialContext ctx = new InitialContext();
FooLocal foo = (FooLocal)ctx.lookup("java:comp/env/ejb/fooejb");
リモートEJBの場合
クライアントコンテナを使う場合は@EJBアノテーションでインジェクションされる
@EJB(beanInterface=FooRemote.class)
クライアントコンテナを使わない場合JNDIから自前でルックアップする。
props = JNDIリモート参照の設定。後述。
InitialContext ctx = new InitialContext(props);
FooRemote foo = (FooRemote)ctx.lookup("com.example.FooRemote");
JNDIの設定
クラスパスにjndi.propertiesファイルを含めるか、InitialContextの引数にPropertiesを渡す。また、クライアント側プログラムのCLASSPATHにサーバ製品に対応するライブラリを含める。
設定するプロパティ
GrassFishの場合
org.omg.CORBA.ORBInitialHost=hostname
org.omg.CORBA.ORBInitialPort=3700
ホスト、ポートのデフォルトはlocalhost:3700
ライブラリ
appserv-rt.jar
javaee.jar
CLASSPATHに明示的に書く場合は上記の2つだけでいいが、appserv-rt.jarのMANAFEST.MFでさらに以下のファイルが指定されているのでappserv-rt.jarと同じディレクトリに入れておく
appserv-ext.jar
appserv-deployment-client.jar
jmxremote_optional.jar
appserv-rt_ja.jar
appserv-rt_zh.jar
appserv-rt_fr.jar
appserv-rt_de.jar
appserv-rt_es.jar
appserv-rt_it.jar
appserv-rt_sw.jar
appserv-rt_ko.jar
appserv-rt_zh_TW.jar
appserv-rt_zh_CN.jar
JNDI名の定義
EJB3.0のデフォルトのJNDI名はリモートインターフェイスの完全修飾名。
JNDI名を指定する場合は@Stateless, @Statefullの引数に書く
@Stateless(mappedName="FooEJB")
参考記事