COBOL2002 Cosminexus連携機能ガイド


付録F.2 EJB対応版

〈この項の構成〉

(1) COBOL引数の登録集原文とCOBOLプログラム例

前述のJavaBean版と同じです。「付録F.1 JavaBean版」を参照してください。

(2) Servlet(Java UAP)例

package testejb;
 
// import定義
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import javax.rmi.*;
import java.io.*;
import java.util.*;
import javax.transaction.UserTransaction;
import javax.ejb.CreateException;
import java.rmi.*;
import java.lang.RuntimeException.*;
import jp.co.hitachi_sk.j2cb.*;
 
//* EJB パッケージ名 *
import testejb.*;
 
public class SearchEJBServlet extends HttpServlet {
 
  // *******************************
  // *  ホームインタフェース定義
  // *******************************
  private static final long serialVersionUID = 0L;
  SearchEJBHome   homeobj;
 
  String wkstr;
  boolean flgget=true;
  ServletContext  gservCont=null;
  UserTransaction tx;
 
  public void init(ServletConfig config) throws ServletException {
    Context context;
    try {
      gservCont=config.getServletContext();
      java.util.Properties prop=new java.util.Properties();
      prop.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
                      "com.hitachi.software.ejb.jndi.InsContextFactory");
      prop.setProperty(javax.naming.Context.OBJECT_FACTORIES,
                      "com.hitachi.software.ejb.jndi.InsNamingFactory");
      prop.setProperty(javax.naming.Context.STATE_FACTORIES,
                      "com.hitachi.software.ejb.jndi.InsNamingFactory");
      prop.setProperty(javax.naming.Context.PROVIDER_URL, "iiopname://localhost:900");
      javax.naming.Context ctx=new javax.naming.InitialContext(prop);
 
 
  //  *************************************************
  //  * ctx.lookup("HITACHI_EJB//SERVERS//**1**//EJB//**2**//**3**.**4**");
  //  * **1** : サーバ名(servername)
  //  * **2** : アプリケーション名
  //  * **3** : リモート名
  //  * **4** : ホーム名
  //  *
  //  * homeobj=(**5**)PortableRemoteObject.narrow(objref,**5**.class);
  //  * **5** : ホーム名
  //  *
  //  *************************************************
  //  * 注意 : lookupの**1**(servername)は環境に合わせて変更してください
  //  *************************************************
 
      Object objref =
       ctx.lookup("HITACHI_EJB/SERVERS/servername/EJB/SearchEJBBean/SearchEJB.SearchEJBHome");
      homeobj=(SearchEJBHome)PortableRemoteObject.narrow(objref,SearchEJBHome.class);
 
    } catch(Exception e) {
      e.printStackTrace();
      return;
    }
}
 
  // Post の処理
  public void doPost(HttpServletRequest req,
                  HttpServletResponse res)
                  throws ServletException, IOException {
    flgget=false;
    doGetPost(req,res);
  }
 
  // Get の処理
  public void doGet(HttpServletRequest req,
                  HttpServletResponse res)
                  throws ServletException, IOException {
    flgget=true;
    doGetPost(req,res);
  }
 
  // GetPost の処理
  public void doGetPost(HttpServletRequest req,
                  HttpServletResponse res)
                  throws ServletException, IOException {
 
  // ********************************
  // *  リモートインタフェース定義
  // ********************************
 
 
 
    SearchEJB       remoteobj;
 
    // Htmからのデータ取得
    String number="";
    try {
      number=req.getParameter("Number");
    } catch (Exception e) {
      System.out.println("htm入力データエラー発生 :");
      e.printStackTrace();
      return;
    }
 
 
    // ****************************************************
    // * 文字エンコーディングの設定とそのライタの取得
    // ****************************************************
 
    res.setContentType("text/html; charset=shift_jis");
    PrintWriter out=res.getWriter();
    // HTMLを書き出す
    out.println("<html><head>");
   out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-2022-JP\">");
    out.println("<title>Test- (EJB呼び出し)-</title></head>");
    out.println("<body><center><h1>EJB動作確認</h1><br>");
 
    // EJBをCreate
    try {
      remoteobj=homeobj.create();
    } catch (Exception e) {
      J2CBErrorUtil wkobj=new J2CBErrorUtil(e.getMessage());
      out.println("Create時エラー発生 :");
      out.println("<p>getEJBCblErrorCode=" + wkobj.getEJBCblErrorCode() + "</p>");
      out.println("<p>getEJBCblMessageID=" + wkobj.getEJBCblMessageID() + "</p>");
      out.println("<p>getEJBDetailMessage=" + wkobj.getEJBDetailMessage() + "</p>");
      out.println("<p>getEJBErrorCode=" + wkobj.getEJBErrorCode() + "</p>");
      out.println("<p>getEJBMessage=" + wkobj.getEJBMessage() + "</p>");
      out.println("<p>getEJBName=" + wkobj.getEJBName() + "</p>");
      e.printStackTrace();
      return;
    }
 
    try {
      // Beanにパラメタを設定
      try {
        remoteobj.setP_number(new Integer(number));
      } catch (NumberFormatException e) {
        out.println("入力データエラー発生 :" + e.getMessage());
        e.printStackTrace();
        return;
      }
      remoteobj.setP_name("");
      remoteobj.setP_address("");
      remoteobj.setP_gif("");
    } catch(Exception e) {
      out.println("setBean エラー発生");
      out.println("Error MSG : " + e.getMessage());
      return;
    }
 
    // COBOLプログラムの呼び出し
    try {
      remoteobj.callCOBOL();
    } catch (Exception e) {
     out.println("COBOLプログラム呼び出し時 エラー発生 :");
      J2CBErrorUtil wkobj=new J2CBErrorUtil(e.getMessage());
      out.println("<p>getEJBCblErrorCode=" + wkobj.getEJBCblErrorCode() + "</p>");
      out.println("<p>getEJBCblMessageID=" + wkobj.getEJBCblMessageID() + "</p>");
      out.println("<p>getEJBDetailMessage=" + wkobj.getEJBDetailMessage() + "</p>");
     out.println("<p>getEJBErrorCode=" + wkobj.getEJBErrorCode() + "</p>");
      out.println("<p>getEJBMessage=" + wkobj.getEJBMessage() + "</p>");
      out.println("<p>getEJBName=" + wkobj.getEJBName() + "</p>");
      e.printStackTrace();
      return;
    }
    // データの出力
    try {
      out.println("<center>Result of Search.");
     out.println("<table border='1'>");
      out.println("<tr><td colspan='2' align='center'>");
      out.println( remoteobj.getP_number() );
      out.println("</td><tr><td>Name</td><td>");
      out.println( remoteobj.getP_name() );
     out.println("</td><tr><td>Address</td><td>");
      out.println( remoteobj.getP_address() );
      out.println("<tr><td colspan='2' align='center'><img src='../servlet");
     out.println(remoteobj.getP_gif());
      out.println("'>");
      out.println("<tr>");
      out.println("</table>");
      out.println("</center>");
    } catch(Exception e) {
      out.println("getBean時 エラー発生");
     J2CBErrorUtil wkobj=new J2CBErrorUtil(e.getMessage());
      out.println("<p>getEJBCblErrorCode=" + wkobj.getEJBCblErrorCode() + "</p>");
      out.println("<p>getEJBCblMessageID=" + wkobj.getEJBCblMessageID() + "</p>");
      out.println("<p>getEJBDetailMessage=" + wkobj.getEJBDetailMessage() + "</p>");
      out.println("<p>getEJBErrorCode=" + wkobj.getEJBErrorCode() + "</p>");
     out.println("<p>getEJBMessage=" + wkobj.getEJBMessage() + "</p>");
      out.println("<p>getEJBName=" + wkobj.getEJBName() + "</p>");
      e.printStackTrace();
      return;
    }
 
    out.println("</body></html>");
    out.close();
  }
 
}

(3) HTMLの作成例

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=shift_jis">
<TITLE>
SearchEJB
</TITLE>
</HEAD>
<BODY>
<h3><center>COBOL adapter for Cosminexusのサンプル<BR>(EJB版)</center></h3>
<hr><br>
<center>100001 と 100002が登録されています。
<FORM  action=/servlet/testejb.SearchEJBServlet method="POST">
Number:<input type="text" name="Number" value="100001">
<BR><BR> Submit を押すと servlet SearchEJBServlet を実行
<BR><BR><input type=submit value="Submit"></form>
</center>
</BODY>
</HTML>