import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
import com.hitachi.software.ejb.adapter.tp1.TP1InMessage;
import com.hitachi.software.ejb.adapter.tp1.TP1MessageListener;
import com.hitachi.software.ejb.adapter.tp1.TP1OutMessage;
public class SampleMDB
implements TP1MessageListener, MessageDrivenBean {
private MessageDrivenContext context;
public TP1OutMessage onMessage(TP1InMessage in) {
//入力パラメタ取得
byte[] inputdata = in.getInputData();
//出力データオブジェクトの生成
TP1OutMessage out = in.createOutMessage();
//出力データ格納領域の長さを取得
int outLen = out.getMaxOutputLength();
UserTransaction ut = null;
Connection con = null;
PreparedStatement prepStmt = null;
try {
//DB更新する業務処理を実装
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup(
"java:comp/env/jdbc/SampleDB");
ut = context.getUserTransaction();
ut.begin();
con = ds.getConnection();
prepStmt = con.prepareStatement(
"update sample set name = ? where id = 1");
prepStmt.setString(1, new String(inputdata));
prepStmt.executeUpdate();
ut.commit();
byte[] result ="update complete.".getBytes();
//出力データ格納領域の取得
byte[] outputdata = out.getOutputData(outLen);
//業務処理の結果を出力データにコピー
System.arraycopy(result,0,outputdata,0,result.length);
} catch(Exception e) {
//エラー処理
try {
if(ut != null) {
ut.rollback();
}
} catch(Exception ex) {
}
byte[] wk = "An error occured.".getBytes();
//エラー処理用の出力データ格納領域の取得
byte[] outputdata = out.getOutputData(wk.length);
//エラー処理の内容を出力データにコピー
System.arraycopy(wk,0,outputdata,0,wk.length);
}
finally {
if(prepStmt != null) {
try {
prepStmt.close();
} catch(Exception exp) {
}
}
if(con != null) {
try {
con.close();
} catch(Exception exp) {
}
}
}
return out;
}
public void ejbCreate() {
}
public void ejbRemove() throws EJBException {
}
public void setMessageDrivenContext(MessageDrivenContext ctx)
throws EJBException {
this.context = ctx;
}
} |