Help us understand the problem. What is going on with this article?

CICS上でJavaEEアプリケーションを動かす

More than 1 year has passed since last update.

はじめに

CICS(CICS Transaction Server for z/OS)というと、COBOL、 PL/I、 アセンブラ等の言語でアプリケーションを書くのが主流というイメージがあると思いますが、ずいぶん前からJavaのサポートも追加されています。
さらに最近のバージョンでは、Liberty(WAS: WebSphere Application Serverの軽量版)がCICS上で動作するようになっています。つまり、CICS上でJavaEEアプリケーションを稼働させることができるようになっています。

例えば既存のCICSアプリケーションがあったとして、それをWebからアクセスさせるためのWeb用のインターフェースを作りたい場合、別途アプリケーションサーバーを購入しなくてもCICSだけで実現できてしまいます。

CICS上でLibertyを動かすための最低限の設定と、サンプル・アプリケーションを動かす手順をまとめておきます。

<環境>
CICS TS V5.3 for z/OS
CICSリージョン名: CT53H4A1

実行環境整備

基本はこの辺の記述に従います。
https://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.java.doc/JVMserver/config_jvmserver_liberty.html

CICS上動かすLibertyサーバーのプロパティ情報や、ログ等はUSS上のファイルで管理されます。そのため、まずUSS(Unix System Service)上にCICS-Libertyフィーチャーで使用するディレクトリやファイルを準備します。

USS ディレクトリ

以下のようなディレクトリを作成しておきます。

  • /var/cicsts/cicsts53/CT53H4A1/JVMProfiles/ (JVM Propertyファイル配置用)
  • /var/cicsts/cicsts53/CT53H4A1/work/ (ログなどが出力される作業用ディレクトリ)

JVM Propertyファイル

Libertyやその前提となるJVMのプロパティーなどを設定するファイルを準備します。
これは製品提供の雛形が<導入ディレクトリ>/JVMProfiles/DFHWLP.jvmpropertiesに提供されているので、それを/var/cicsts/cicsts53/CT53H4A1/JVMProfiles/DFHWLP.jvmpropertiesにコピーして編集します。
最低限必要な設定は以下の通りです。

DFHWLP.jvmproperties
JAVA_HOME=/usr/lpp/java/J7.1_64/
WORK_DIR=/var/cicsts/cicsts53/CT53H4A1/work
WLP_INSTALL_DIR=/usr/lpp/cicsts/cicsts53/wlp
-Dcom.ibm.cics.jvmserver.wlp.autoconfigure=true
-Dcom.ibm.cics.jvmserver.wlp.server.host=*
-Dcom.ibm.cics.jvmserver.wlp.server.http.port=53481
-Dcom.ibm.cics.jvmserver.wlp.server.https.port=53482

使用するJavaのJAVA_HOME、work用ディレクトリ、LibertyがListenするポート番号などを指定します。

SIT

CICSリージョンのSITにて、上で用意したプロパティーファイルのディレクトリをJVMPROFILEDIRパラメーターで指定します。

SIT
JVMPROFILEDIR=/var/cicsts/cicsts53/CT53H4A1/JVMProfiles 

このSITパラメーターを有効にしてCICSリージョンを起動します。

CICS資源定義: JVMServer定義

CICS上でLibertyを稼働させる場合、USS上に用意したプロパティーファイルを指定したJVMServer定義という資源定義を作成してインストールする必要があります。
これもサンプルがDFH$WLPグループに提供されているので、コピーして使用すればよいでしょう。

JVMServer定義例
OBJECT CHARACTERISTICS                                    CICS RELEASE = 0700 
 CEDA  View JVmserver( DFHWLP   )                                             
  JVmserver      : DFHWLP                                                     
  Group          : TAGGRP                                                     
  DEScription    : CICS JVM server to run WLP samples                         
  Status         : Enabled            Enabled | Disabled                      
  Jvmprofile     : DFHWLP                                         (Mixed Case)
  Lerunopts      : DFHAXRO                                                    
  Threadlimit    : 015                1-256                                   
 DEFINITION SIGNATURE                                                         
  DEFinetime     : 01/29/16 09:08:50                                          
  CHANGETime     : 01/29/16 09:08:50                                          
  CHANGEUsrid    : CICSUSER                                                   
  CHANGEAGEnt    : CSDApi             CSDApi | CSDBatch                       
  CHANGEAGRel    : 0700                                                     

ここで指定したうJvmprofile(上の例だとDFHWLP)の値に拡張子「.jvmprofile」が付いたファイルが、SITのJVMPROFILEDIRで指定したディレクトリから探索されます。

JVMServer定義を作成したら、それをインストールしましょう。
すると、CICSのJOBLOGには以下のようなメッセージが出力されます。

DFHRD0131 I 03/07/2017 19:14:04 CT53H4A1 TCP00045 CICSUSER CEDA INSTALL JVMSERVER(DFHWLP)                                      
0045     CEDA CICSUSER 03/07/17 19:14:04 INSTALL JVMSERVER(DFHWLP) GROUP(TAGGRP)                                               
DFHPG0210 03/07/2017 19:14:04 CT53H4A1  IBMUSER CJSR Resource definition for DFHAXRO has been system autoinstalled.            
DFHSJ0207 03/07/2017 19:14:09 CT53H4A1 JVMSERVER DFHWLP is running Java version 1.7.1.                                         
DFHSJ0919 I 03/07/2017 19:14:17 CT53H4A1 IBMUSER JVMSERVER DFHWLP is processing any queued bundles.                            
DFHSJ0915 03/07/2017 19:14:17 CT53H4A1 IBMUSER JVMSERVER DFHWLP is now enabled and is ready for use.                           
DFHSJ0901 I 03/07/2017 19:14:17 CT53H4A1 JVMSERVER DFHWLP Java full version is: JRE 1.7.0 IBM J9 2.7 z/OS s390x-64 Compressed  
           References 20140410_195893 (JIT enabled, AOT enabled) J9VM - R27_Java727_SR1_20140410_1931_B195893 JIT  -           
           tr.r13.java_20140410_61421 GC   - R27_Java727_SR1_20140410_1931_B195893_CMPRSS J9CL - 20140410_195893. 

これでCICS上でLibertyのサーバーが立ち上がりました!

稼働確認

NETSTATコマンド等でListenしているポートの情報を確認すると、先にプロパティーファイルで指定したポートでListenしているのが分かると思います。

NETSTAT例
398 00000090  CT53H4A1 000015DC 0.0.0.0..53481         0.0.0.0..0             LISTEN     
398 00000090  CT53H4A1 000015DD 0.0.0.0..53482         0.0.0.0..0             LISTEN   

LibertyサーバーがCICS上で稼働しているので、ブラウザから接続してみましょう。
http://hostname:53481/ にアクセスすると、ホーム画面が参照できます。
image01.JPG

さらに、デフォルトで提供されるWebアプリにアクセスしてみると、以下のような環境情報が確認できます。
image02.JPG

これで最低限の実行環境は整いました。
簡単ですねぇ。

開発環境整備

この辺の記述がベースです。
https://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.3.0/com.ibm.cics.ts.java.doc/topics/installingthelibertyprofile.html

さて、CICSアプリといえども、Libertyの上で動くJavaEEアプリケーションを開発する訳なので、開発環境は PCOMの3270画面ではなく、もちろんPC上のEclipseです。
Eclipse用にCICS-Liberty用のSDKプラグインが提供されているので、それを追加すれば開発環境が作れます。
Eclipseはフリーで提供される任意のもの(バージョンの整合性は要確認ですが)を使えばよいのですが、CICSはCICS ExplorerというEclipseベースの管理ツール(フリー)が提供されているので、それを入手して、そこにSDKを入れるのがよいでしょう。

CICS Explorer

以下の記述を参考に...
CICS Explorerのインストール

インストールの仕方が2通りあって、さらに、事前にEclipse入ってる場合とかz/OS Explorer入ってる場合とかあって分かりにくいかもしれませんが、手っ取り早いのは、以下のサイトの一番下の「Using Eclipse (p2)」の Option1 Starting from Scrach を選んで、該当のプラットフォームのCICS Explorerをダウンロードすればよいです。
https://developer.ibm.com/mainframe/products/downloads/eclipse-tools/#p2
で、zipが入手できるので、こいつを展開するだけです。
zip展開するとzosexplorer.exeというのがあるのでそれを実行して起動します。(CICS Explorerダウンロードしても実行ファイルはzosexplorer.exeです。)

SDKプラグイン

以下の記述を参考に...
Installing the CICS SDK for web and JSP

CICS Explorerのメニューから、ヘルプ - 新規ソフトウェアのインストール を選択し、
IBM Explorer for z/OS Update Site - http://public.dhe.ibm.com/ibmdl/export/pub/software/htp/zos/tools/aqua/ を選択します。

Webサイトからダウンロードしてインストールするので、Webにつながっている必要があります。

IBM CICS Explorerを展開して、IBM CICS SDK for Servlet and JSP support, IBM CICS SDK for Servlet and JSP translation support を選択し、インストールします。
image03.JPG

各種設定

開発環境整備のため、いくつか設定を行います。

ターゲットのCICSバージョン設定

Eclipse(CICS Explorer)上で、どのバージョンのCICSを開発のターゲットにするか指定します。
設定を選択し、
プラグイン開発 - ターゲットプラットフォームを選択し、
ターゲットとなるCICSのバージョンを選択します。(ここでは CICS TS V5.3 with Liberty and PHP)
image04.JPG

image05.JPG

FTP構成

CICS ExplorerからアプリケーションをターゲットのCICSにデプロイする場合、作成したアプリケーションをUSS上に転送する必要があります。CICS Explorerからデプロイできるようにするために、FTPの接続構成を作っておきます。
ホスト接続ビューを開き、z/OS FTPの項目に、FTP構成の定義を行います。
image06.JPG

CICS ExplorerからFTP接続ができると、以下のように緑色のマークになります。
image07.JPG

USSディレクトリ

アプリケーションを配置するためのディレクトリをUSS上に用意しておきましょう。
CICS-Libertyアプリケーションは、CICS上ではBUNDLE定義という資源で関連付けされるので、以下のようにbundlesというディレクトリを作成しておきます。
/var/cicsts/cicsts53/CT53H4A1/bundles/

サンプルアプリ

さて、開発環境が整ったので、CICS SDKで提供されているサンプルアプリのプロジェクトを作成して、それをCICS-Liberty上にデプロイして動かす、というところまでやってみましょう。

サンプル・プロジェクトの作成

以下の記述を参考に...
Creating the servlet examples

ファイル - 新規 - サンプルから、CICS Hello Worldを選択します。
image08.JPG

これでCICS Hello WorldのサンプルアプリのプロジェクトがEclipse上にインポートされました。
これは、アプリとしてはjspが1つ含まれているだけの単純なものです。
image09.JPG

また、これはCICS上の資源として管理するためのCICS Bundleの定義(cics.xml)が含まれています。

デプロイ

以下の記述を参考に...
Deploying the servlet examples

このアプリをデプロイしてみましょう。
xxx.bundle というプロジェクトを右クリックし、z/OS UNIX ファイルシステムへのバンドル・プロジェクトのエクスポート を選択します。
image10.JPG

ファイルシステム内の特定のロケーションにエクスポートを選択して次へ

上で用意しておいたデプロイ先のディレクトリを選択し、エクスポートします。
image11.JPG

これでUSS上にアプリが配置されました。

最後に、このアプリをCICSから認識させるために、BUNDLE定義という資源定義をCICS上に追加します。
このサンプル用のBUNDLE定義はDFH$WLPグループに提供されていますので、コピーして適宜編集してインストールします。

BUNDLE定義例
OVERTYPE TO MODIFY                                        CICS RELEASE = 0700 
 CEDA  ALter Bundle( WLPHELLO )                                               
  Bundle         : WLPHELLO                                                   
  Group          : TAGGRP                                                     
  DEScription  ==> CICS Bundle for Liberty Hello servlet                      
  Status       ==> Enabled            Enabled | Disabled                      
  BUndledir    ==> /var/cicsts/cicsts53/CT53H4A1/bundles/com.ibm.cics.server. 
  (Mixed Case) ==> examples.wlp.hello.bundle_1.0.1                        
               ==>                                                            
               ==>                                                            
               ==>                                                            
  BAsescope    ==>                                                            
  (Mixed Case) ==>                                                            
               ==>                                                            
               ==>                                                            
               ==>                                                            
 DEFINITION SIGNATURE                                                         
  DEFinetime     : 03/07/17 21:02:49                                          
  CHANGETime     : 03/07/17 21:04:26                                          

                                                    SYSID=H4A1 APPLID=CT53H4A1

CICS JOBLOGには以下のようなメッセージが出力されます。

+CWWKG0016I: Starting server configuration update.                          
+CWWKG0017I: The server configuration was successfully updated in 636       
 0.031 seconds.                                                             
+CWWKZ0001I: Application com.ibm.cics.server.examples.wlp.hello.war 637     
 started in 0.069 seconds.                                                  

実行

CICS-Liberty上にデプロイされたアプリケーションに、ブラウザからアクセスしてみましょう。

以下のURLにブラウザからアクセス
http://hostname:53481/com.ibm.cics.server.examples.wlp.hello/

アプリケーションが以下のような画面を返せばOKです。
image12.JPG
CICSリージョン名(applid)が返されているのが確認できます。

おわりに

ここではCICS-Libertyアプリを動かすための一連の手順をご紹介しました。
アプリの中身には踏み込んでいませんが、CICS-LibertyアプリではJCICSというEXEC CICS API相当のJavaのインターフェースが提供されているので、Javaから直接CICSのリソースをアクセスすることができます。
このCICS-Libertyフィーチャーを利用することで、既存のCICSアプリをWebから活用したり、拡張部分をJavaで開発する、といったことがやりやすくなるかもね。

tomotagwork
*おことわり* このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away