EJB3.1のテストその後

昨日の夜はミス多発で眠い目をこすりながらやるもんじゃないな・・・。

http://d.hatena.ne.jp/shin/20080519/p1のコメントの続きです。


とりあえずわかったのは@EJBで埋め込まれたクラスがあると、そのクラスの名前+@EJBのフィールド名、もしくは@EJBのname要素で指定したものがJNDIに登録される。

つまり

package hoge;

@Stateless
public class Hoge{
  @EJB
  private Hello hello;
  
}

というコードだとJNDI名は以下のようになる。

java:comp/env/hoge.Hoge/hello


name子弟を入れるとそれが直接マッピングされる

package hoge;

@Stateless
public class Hoge{
  @EJB(name="hogehoge")
  private Hello hello;
  
}

というコードだとJNDI名は以下のようになる。

java:comp/env/hogehoge


以下のようにマッピング専用のクラスを作ってそこに@EJBの定義をしておくと管理が楽になるかも

package hoge;

@Stateless
public class Config{
  @EJB(name="index.jsp")
  private IndexAction indexAction;
  
  @EJB(name="login.jsp")
  private LoginAction loginAction;
}

というコードだとJNDI名は以下のようになる。

java:comp/env/index.jsp
java:comp/env/login.jsp


ActionをインターフェースにしてbeanNameでセットしてもよいが、記述が多少面倒になるのでどうだろ。

package hoge;

@Stateless
public class Config{
  @EJB(name="index.jsp" , beanName="IndexAction")
  private Action indexAction;
  
  @EJB(name="login.jsp" , beanName="LoginAction")
  private Action loginAction;
}