Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
onMessageメソッドに,次に示す業務ロジックを実装します。
public TP1OutMessage onMessage(TP1InMessage in)
{
//入力パラメタ取得
byte[] inputdata = in.getInputData();
・・・
//出力データオブジェクトの生成
TP1OutMessage out = in.createOutMessage();
・・・
・・・
//出力データ格納領域の長さを取得
int outLen = out.getMaxOutputLength();
・・・
try {
・・・
//出力データ格納領域の取得
byte[] outputdata = out.getOutputData(outLen);
・・・
//業務処理
//outputdata中に出力データを格納
・・・
} catch(Exception e) {
//errorLenにエラー処理用の出力データ長を設定
//エラー処理用の出力データ格納領域の取得
byte[] outputdata = out.getOutputData(errorLen);
・・・
//outputdata中にエラー情報を格納
・・・
}
return out;
}
|
Message-driven Bean(サービス)のコーディング例は,トランザクション連携機能を使用しない場合と,トランザクション連携機能を使用する場合の2種類があります。Message-driven Bean(サービス)のコーディング例を次に示します。
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 occurred.".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;
}
}
|
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 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 {
public TP1OutMessage onMessage(TP1InMessage in) {
//入力パラメタ取得
byte[] inputdata = in.getInputData();
//出力データオブジェクトの生成
TP1OutMessage out = in.createOutMessage();
//出力データ格納領域の長さを取得
int outLen = out.getMaxOutputLength();
Connection con = null;
PreparedStatement prepStmt = null;
try {
//DB更新する業務処理を実装
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup(
"java:comp/env/jdbc/SampleDB");
con = ds.getConnection();
prepStmt = con.prepareStatement(
"update sample set name = ? where id = 1");
prepStmt.setString(1, new String(inputdata));
prepStmt.executeUpdate();
byte[] result ="update complete.".getBytes();
//出力データ格納領域の取得
byte[] outputdata = out.getOutputData(outLen);
//業務処理の結果を出力データにコピー
System.arraycopy(result,0,outputdata,0,result.length);
} catch(Exception e) {
//エラー処理
byte[] wk = "An error occurred.".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 {
}
}
|
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.