[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;
}
}
=======================================================================
--
高橋智宏