はじめに
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にコピーして編集します。
最低限必要な設定は以下の通りです。
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パラメーターで指定します。
JVMPROFILEDIR=/var/cicsts/cicsts53/CT53H4A1/JVMProfiles
このSITパラメーターを有効にしてCICSリージョンを起動します。
CICS資源定義: JVMServer定義
CICS上でLibertyを稼働させる場合、USS上に用意したプロパティーファイルを指定したJVMServer定義という資源定義を作成してインストールする必要があります。
これもサンプルがDFH$WLPグループに提供されているので、コピーして使用すればよいでしょう。
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しているのが分かると思います。
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/ にアクセスすると、ホーム画面が参照できます。
さらに、デフォルトで提供されるWebアプリにアクセスしてみると、以下のような環境情報が確認できます。
http://server:port/com.ibm.cics.wlp.defaultapp/
これで最低限の実行環境は整いました。
簡単ですねぇ。
開発環境整備
この辺の記述がベースです。
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 を選択し、インストールします。
各種設定
開発環境整備のため、いくつか設定を行います。
ターゲットのCICSバージョン設定
Eclipse(CICS Explorer)上で、どのバージョンのCICSを開発のターゲットにするか指定します。
設定を選択し、
プラグイン開発 - ターゲットプラットフォームを選択し、
ターゲットとなるCICSのバージョンを選択します。(ここでは CICS TS V5.3 with Liberty and PHP)
FTP構成
CICS ExplorerからアプリケーションをターゲットのCICSにデプロイする場合、作成したアプリケーションをUSS上に転送する必要があります。CICS Explorerからデプロイできるようにするために、FTPの接続構成を作っておきます。
ホスト接続ビューを開き、z/OS FTPの項目に、FTP構成の定義を行います。
CICS ExplorerからFTP接続ができると、以下のように緑色のマークになります。
USSディレクトリ
アプリケーションを配置するためのディレクトリをUSS上に用意しておきましょう。
CICS-Libertyアプリケーションは、CICS上ではBUNDLE定義という資源で関連付けされるので、以下のようにbundlesというディレクトリを作成しておきます。
/var/cicsts/cicsts53/CT53H4A1/bundles/
サンプルアプリ
さて、開発環境が整ったので、CICS SDKで提供されているサンプルアプリのプロジェクトを作成して、それをCICS-Liberty上にデプロイして動かす、というところまでやってみましょう。
サンプル・プロジェクトの作成
以下の記述を参考に...
Creating the servlet examples
ファイル - 新規 - サンプルから、CICS Hello Worldを選択します。
これでCICS Hello WorldのサンプルアプリのプロジェクトがEclipse上にインポートされました。
これは、アプリとしてはjspが1つ含まれているだけの単純なものです。
また、これはCICS上の資源として管理するためのCICS Bundleの定義(cics.xml)が含まれています。
デプロイ
以下の記述を参考に...
Deploying the servlet examples
このアプリをデプロイしてみましょう。
xxx.bundle というプロジェクトを右クリックし、z/OS UNIX ファイルシステムへのバンドル・プロジェクトのエクスポート を選択します。
ファイルシステム内の特定のロケーションにエクスポートを選択して次へ
上で用意しておいたデプロイ先のディレクトリを選択し、エクスポートします。
これでUSS上にアプリが配置されました。
最後に、このアプリをCICSから認識させるために、BUNDLE定義という資源定義をCICS上に追加します。
このサンプル用のBUNDLE定義はDFH$WLPグループに提供されていますので、コピーして適宜編集してインストールします。
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です。
CICSリージョン名(applid)が返されているのが確認できます。
おわりに
ここではCICS-Libertyアプリを動かすための一連の手順をご紹介しました。
アプリの中身には踏み込んでいませんが、CICS-LibertyアプリではJCICSというEXEC CICS API相当のJavaのインターフェースが提供されているので、Javaから直接CICSのリソースをアクセスすることができます。
このCICS-Libertyフィーチャーを利用することで、既存のCICSアプリをWebから活用したり、拡張部分をJavaで開発する、といったことがやりやすくなるかもね。