- - PR -
EJBのJNDI lookupについて
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-11 11:57
お世話になっております。
JBoss3.2.2を利用してEJBについて勉強しているのですが、 JNDIについて混乱していまして ご質問させて頂きたいと思います。 ejb-jarファイルにパッケージングされる jboss.xmlに次のように記述したEJBをデプロイしました。
この場合、このBean(MemberHome)をlookupするときに次のようにすれば できることを確認しました。
そこでご質問なのですが、 1.EJBの仕様書によれば、java:comp/env/ejb/MemberHomeのような記述が JNDI位置情報として推奨されているとのことですが、 推奨されている記述を採用したい場合は jboss.xmlファイルの<jndi-name>要素にこれ("java:comp/env/...")を 記述すればよいのでしょうか。 2.JNDIの位置情報を変更しても、プログラムを変更することなくデプロイできるように EJB参照という仕組みがあるということを知りました。 EJB参照を利用する場合、ejb-jarファイルの<ejb-ref-name>要素のボディには 何を指定したらよいのでしょうか。 jboss.xmlの<jndi-name>に指定した値を指定するのでしょうか。 また、lookupする時に指定するjndi文字列には<ejb-ref-name>で指定した値を 指定するようにすればよいのでしょうか。 <ejb-ref>(ejb-jarファイル)、<jndi-name>(jboss.xmlファイル)、 lookup時のJNDI文字列の間の関係についてご教示頂ければと思います。 よろしくお願いします。 | ||||||||
|
投稿日時: 2003-11-11 12:36
木下牛です。
>1.EJBの仕様書によれば、java:comp/env/ejb/MemberHomeのような記述が > JNDI位置情報として推奨されているとのことですが、 > 推奨されている記述を採用したい場合は > jboss.xmlファイルの<jndi-name>要素にこれ("java:comp/env/...")を > 記述すればよいのでしょうか。 java:comp/env/* はENC名といって呼び出し側の設定になります。 なので呼び出されるEJBのDD(Deployment Descriptor)にはjava:comp/env* と書く必要はありません。(書いてはいけません) EJBをデプロイしたときにつけられるJNDI名はアプリケーションサーバによって 微妙に違います。JBossでは素直に ejb/remote/Member というJNDIになるかもしれませんが、他のアプリケーションサーバでは java/ejb/remote/Member とか勝手にプリフィックスをつけてくれたりするものもあります。(JBoss2.4.x のデータソースなんかはそうだったような・・・) なので、直接のJNDI名をコード中に書いてしまうと他のアプリケーションサーバ に移植するときにコードの修正が必要になり、ポータビリティが落ちます。 そこで、コンポーネント内だけで通用するENC名と実JNDI名のマッピングをして (これはアプリケーションサーバ固有のDDに記述します)コードではENC名で EJBやデータソースを取得するようにします。それが、ejb-ref-nameの設定にな ります。ejb-ref-nameがENC名になります。JBossの場合、別のEJBが先のMember EJBを呼ぶ場合次のように記述します。 ejb-jar.xml------------------------ : <ejb-ref> <ejb-ref-name>ejb/Member</ejb-ref-name> : </ejb-ref> : ----------------------------------- jboss.xml-------------------------- <ejb-ref> <ejb-ref-name>ejb/Member</ejb-ref-name> <jndi-name>ejb/remote/Member</jndi-name> </ejb-ref> ----------------------------------- こうすると、 context.lookup("java:comp/env/ejb/Member"); で、見つけることが出来ます。 2.4.xのドキュメントですが参考までに http://neverbird.sourceforge.jp/manual/fancy/ch07s13.html | ||||||||
|
投稿日時: 2003-11-11 13:10
木下牛様
返信ありがとうございます。
ENC名というのですね。 恥ずかしながらはじめて知りました。 また、呼び出し側の設定なのですね。
なるほど。 jboss.xmlファイルに<ejb-ref-name>要素を記述することで、 ENC名と実際のJNDI名をマッピングするのですね。 設定ファイルやサンプルコードを記述していただいたおかげで、 私のような未熟者でも誤解することなく、 理解することができました。 詳細かつ丁寧なご説明本当にありがとうございました。 | ||||||||
1
