付録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>