- - PR -
Xdocletで自動生成したソースがそのままだと名前解決に失敗しlookupできない。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-19 12:56
JBOSS-IDE の v1.4.0 を使い内包するXdoclet でセッションビーンからEJBを自動生成しました。
そのときに指定したセッションビーンでのXdocletのタグの指定は /** * @ejb.bean name="FecEntrance" * display-name="Name for FecEntrance" * description="Description for FecEntrance" * jndi-name="ejb/FecEntrance" * type="Stateless" * view-type="remote" */ で FecEntrance.java FecEntranceHome.java FecEntranceSession.java FecEntranceUtil.java が新規に作成されました。 生成されたHOMEインターフェースのプロパティには public static final String COMP_NAME="java:comp/env/ejb/FecEntrance"; public static final String JNDI_NAME="ejb/FecEntrance"; ができている状態です。 今回の話題はこのCOMP_NAMEなのですが、自動生成されたファイルは編集禁止と銘打ったありますが、このままだと javax.naming.NameNotFoundException: ejb not bound が発生してしまいます。これを何とかしたいのです。。。 ひとつの解決策として COMP_NAMEの値をJNDI_NAMEと同じにすると回避されましたが、これは気が進みません。 理由は毎回EJBを作成するたびにこの部分を修正しなければならず、ソースの本数を考えると手間だからです。 設定が悪いのか、JBOSS-IDEのバグなのか分からないのですが、(COMP_NAMEは生成されたUtilクラスが使用しています) Xdocletを走らせると自動生成されるコンフィグファイルがあります。 META-INFに ejb-jar.xml jboss.xml が生成されるのですが、ここらへんにJNDIの設定箇所があります。 jboss.xmlには <session> <ejb-name>FecEntrance</ejb-name> <jndi-name>ejb/FecEntrance</jndi-name> </session> とあり、これを <jndi-name>java:comp/env/ejb/FecEntrance</jndi-name> に変えるなどして試してみたのですが、結果は同じでした。(javax.naming.NameNotFoundException: ejb not boundが出る) 新たに <comp-name>java:comp/env/ejb/FecEntrance</comp-name> などを追加してみてもだめでした。 どなたか解決策を知っておられる方おられませんでしょうか。 よろしくお願いいたします。 エラーログ: 12:25:50,317 INFO [STDOUT] javax.naming.NameNotFoundException: ejb not bound 12:25:50,317 INFO [STDOUT] at org.jnp.server.NamingServer.getBinding(NamingServer.java:495) 12:25:50,317 INFO [STDOUT] at org.jnp.server.NamingServer.getBinding(NamingServer.java:503) 12:25:50,317 INFO [STDOUT] at org.jnp.server.NamingServer.getObject(NamingServer.java:509) 12:25:50,317 INFO [STDOUT] at org.jnp.server.NamingServer.lookup(NamingServer.java:253) 12:25:50,317 INFO [STDOUT] at org.jnp.server.NamingServer.lookup(NamingServer.java:256) 12:25:50,317 INFO [STDOUT] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:530) 12:25:50,317 INFO [STDOUT] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:644) 12:25:50,317 INFO [STDOUT] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:509) 12:25:50,317 INFO [STDOUT] at javax.naming.InitialContext.lookup(InitialContext.java:347) 12:25:50,317 INFO [STDOUT] at fec.sb.main.FecEntranceUtil.lookupHome(FecEntranceUtil.java:22) 12:25:50,317 INFO [STDOUT] at fec.sb.main.FecEntranceUtil.getHome(FecEntranceUtil.java:42) 12:25:50,317 INFO [STDOUT] at fec.servlet.FecServlet.doGet(FecServlet.java:132) 環境は eclipse 3.0.1 jboss 3.2.5 jboss-ide 1.4.0 です。 |
|
投稿日時: 2005-05-19 14:02
以下のXDocletのタグを追加してみてください。
@ejb.util generate="physical" 理由は、以下を読めばおわかりになると思います。 http://xdoclet.sourceforge.net/xdoclet/tags/ejb-tags.html#@ejb_util__0__1_ |
|
投稿日時: 2005-05-19 14:28
typer さん
レスありがとうございます。 早速試してみたところ、解決いたしました。 ありがとうございます。 PS:ところでわざわざ論理名を設けてJNDI名を直接使わない理由はどこにあるのでしょうか。 |
|
投稿日時: 2005-05-19 16:17
>PS:ところでわざわざ論理名を設けてJNDI名を直接使わない理由はどこにあるのでしょうか。
JNDI名はグローバルな空間に定義されるため、他のJ2EEモジュ−ルで使用されているJNDI名 と衝突が起こる可能性があります。 もし、そうなった場合、JNDI名をハードコードしているとソース修正が必要になってしまいま す。ソース上は論理名を使用してEJBへアクセスしていればJNDI名の衝突が発生した場合に JNDI名を変更することによるソースへの影響は無くなるわけです。 なぜなら、論理名とJNDI名の実際のマッピングはDDで行っているからです。 (この場合は、DDを編集することになります。) [ メッセージ編集済み 編集者: typer 編集日時 2005-05-19 16:18 ] |
|
投稿日時: 2005-05-19 17:49
typerさん
情報いろいろとありがとうございます。 別名の意図も理解できました。 今回別々のVMで立ち上がった2つのJBOSS間で通信をする必要があります。 その場合はNameServer自体が異なるので管理は別になると考えていますが、もし同じVM上のJBOSSアプリケーション間で通信うるとなると衝突の恐れがあるということですね。 ご指摘ありがとうございました。 |
1