COBOL2002 Cosminexus連携機能ガイド

[目次][用語][索引][前へ][次へ]

2.4.1 COBOLアクセスでのServletの作成方法

生成したCOBOLアクセス用Beanを呼び出すServlet(Java UAP)を作成します。次のことに注意して作成してください。

<この項の構成>
(1) setterの指定
(2) callCOBOLメソッドの呼び出し
(3) getterの指定

(1) setterの指定

一般のJavaBeansを利用したServletプログラムと同様に,自動生成されたCOBOLアクセス用Beanを参考にして,COBOL引数の設定を行います。設定時にはsetter(setXxx)を使用して引数領域をすべて設定しておかなければなりません。設定されていない領域の値は保証しません。

(a) 通常の例

(COBOL引数の登録集原文例)
01  PERSONAL-DATA.
  05  P-NUMBER   PIC  9(9)  USAGE COMP.
  05  P-NAME     PIC  X(50).
  05  P-ADDRESS  PIC  X(100).

(JavaBeansの場合の引数設定例)
bean.setP_number(new Integer(number));
bean.setP_name("");
bean.setP_address("");

(EJBの場合の引数設定例)
remoteobj.setP_number(new Integer(number));
remoteobj.setP_name("");
remoteobj.setP_address("");
 
(b) OCCURS句を使った例

(COBOL引数の登録集原文例)
01  G1.
  02  G2 OCCURS 10.
    05  B1   PIC  X(50).

(JavaBeansの場合の引数設定例)
int i=0;
for (i=0; i<10 ; i++) {
    bean.setB1("XXXXX", i);
}

(EJBの場合の引数設定例)
int i=0;
for (i=0; i<10 ; i++) {
    remoteobj.setB1("XXXXX", i);
}
(c) 可変長データを指定した例

(COBOL引数の登録集原文例)
01 XML-DATA    PIC X(10000004).

(JavaBeansの場合の引数設定例)
byte[] sdata=new byte[10000000];
bean.setXml_data(sdata, 50);

(EJBの場合の引数設定例)
byte[] sdata=new byte[10000000];
remoteobj.setXml_data(sdata, 50);
(d) アドレスデータを指定した例

setterの引数には,データ(バイト配列)とデータ長を指定します。

(COBOL引数の登録集原文例)
01 XML-DATA    USAGE ADDRESS.

(JavaBeansの場合の引数設定例)
byte[] sdata=new byte[20000000];
bean.setXml_data(sdata, 50);

(EJBの場合の引数設定例)
byte[] sdata=new byte[20000000];
remoteobj.setXml_data(sdata, 50);

(2) callCOBOLメソッドの呼び出し

Beanのsetterを記述後にCOBOLアクセス用BeanのcallCOBOLメソッドを呼び出します。

(JavaBeansの場合)
bean.callCOBOL();

(EJBの場合)
remoteobj.callCOBOL();

(3) getterの指定

Servletで使用する場合は,Beanのgetter(getXxx)を使用することでCOBOLの引数を取得できます。

(a) 通常の例

(COBOL引数の登録集原文例)
01  PERSONAL-DATA.
  05  P-NUMBER   PIC  9(9)  USAGE COMP.
  05  P-NAME     PIC  X(50).
  05  P-ADDRESS  PIC  X(100).

(JavaBeansの場合の引数取得指定例)
Integer wkint =bean.getP_number();
String  wkstr1=bean.getP_name();
String  wkstr2=bean.getP_address();

(EJBの場合の引数取得指定例)
Integer wkint =remoteobj.getP_number();
String  wkstr1=remoteobj.getP_name();
String  wkstr2=remoteobj.getP_address();
(b) OCCURS句を使った例

(COBOL引数の登録集原文例)
01  G1.
  02  G2 OCCURS 10.
  05  B1   PIC  X(50).

(JavaBeansの場合の引数取得指定例)
String wkstr=bean.getB1(5);

(EJBの場合の引数取得指定例)
String wkstr=bean.getB1(5);
(c) 可変長データを指定した例

XML-DATAのデータ属性を「可変長データ(byte[])」にします。データ長は, データ(バイト配列)のlengthプロパティで取得します。

(COBOL引数の登録集原文例)
01 XML-DATA    PIC X(10000004).

(JavaBeansの場合の引数取得指定例)
byte[] rdata=bean.getXml_data();
int rlen=rdata.length;    // 長さを取得する

(EJBの場合の引数取得指定例)
byte[] rdata=remoteobj.getXml_data();
int rlen=rdata.length;    // 長さを取得する
(d) アドレスデータを指定した例

データ長は,データ(バイト配列)のlengthプロパティで取得します。

(COBOL引数の登録集原文例)
01 XML-DATA    USAGE ADDRESS.

(JavaBeansの場合の引数取得指定例)
byte[] rdata=bean.getXml_data();
int rlen=rdata.length;   // 長さを取得する

(EJBの場合の引数取得指定例)
byte[] rdata=remoteobj.getXml_data();
int rlen=rdata.length;    // 長さを取得する

また,JSPでBeanを使用することもできます。

(例)ServletからJSP呼び出し指定例
javax.servlet.RequestDispatcher
rd=c.getRequestDispatcher("/Search.jsp");
rd.forward(req, res);