[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12131] Re: JDK5 + JBoss4.0.3SP1 + JBoss-EJB3(RC3) で EJB3 の手順



  高橋(智)です。

> > EJB3の実装手順を見せていただきました。かなり簡単になっているようで
> > いままでなら、EchoRemote.java は、
> snip

  簡単ついでに、DataSourceを使用するコードを追加してみました。

  前回のメールのtest.Clientを実行すると、サーバ側のコンソールには以下の
出力が得られます。
[STDOUT] Constructor:null
[STDOUT] PostConstruct:org.jboss.resource.adapter.jdbc.WrapperDataSource@1b4d679
[STDOUT] BusinessMethod:org.jboss.resource.adapter.jdbc.WrapperDataSource@1b4d679

  変数dsは、コンストラクタが呼び出された時点ではnullですが、PostConstructの
時点では既にコンテナによって何かセットされているようです。
  あとは、@Resource(mappedName="java:comp/env/jdbc/DS") のように、ソース中から
サーバ固有のJNDI名を排除したいのですが、どのようにオーバーライドするのかは分か
りませんです。配布ディスクリプタ(.xml)を使うのかな... (^^;

=======================================================================
package test;
import javax.ejb.Stateless;
import javax.ejb.PostConstruct;   //追加
import javax.annotation.Resource; //追加
@Stateless
public class EchoBean implements EchoRemote
{
  @Resource(mappedName="java:/DefaultDS") // その他、java:/MySqlDSなど
  private javax.sql.DataSource ds;

  public EchoBean() {
    System.out.println("Constructor:" + ds);
  }

  @PostConstruct
  public void postConstructCallback() {
    System.out.println("PostConstruct:" + ds);
  }

  public String echo(String msg) {
    System.out.println("Business Method:" + ds);

    java.sql.Connection conn = null;
    try {
      conn = ds.getConnection();
    }
    catch (java.sql.SQLException ex) {
      ex.printStackTrace();
    }
    finally {
      try {
        if( conn != null )
          conn.close();
      }catch(Exception ex){}
    }
    return msg;
  }
}
=======================================================================

-- 
高橋智宏