約一年ほど前にマニュアルベースではできそうだからということで記事を書きました。
書いた以上はやってみないと。

これ、日本でやった事例が見当たらないんです。
聞いてみたらできないでしょうとのこと。
確かにWASでJavaと言うのはわかりますが、IMSでJavaですか?と不思議な人も。
一応海外のドキュメントを紹介します。
http://www.slideshare.net/IBMIMS/phoenix-ug-06201012-java-and-ims-on-system-z

https://share.confex.com/share/121/webprogram/Handout/Session14171/IMS Java zOS-2.pdf

かなり最近ですが海外では需要が出てきました。
事例によるとGermanBankではIMS MPPからJMPに置き換えた事例もあるようです。

簡単にIMSをご紹介しますと、わかりやすくいうと銀行のATM引き出したいと言う場合にそういうメッセージがIMSに届き、それに対して処理結果を返すというもので、トランザクションマネージャーとも言われます。
IMSはz/OS上でしか稼働しません。実際に銀行では使われています。
Open系だとWAS,Weblogicあたりになりますでしょうか?
私がこれを思いついた理由はいくつかあります。
実際にIBMメインフレームで稼働している銀行勘定系システムのほとんどはPL/Iで書かれています。COBOLもありますが主はPL/Iです。
個人的には好きな言語ですが、ほとんど勘定系に手をつけられないところがあるようです。
要員確保と言う観点でJavaと考えました。
もう一つはなぜIMSだったのかと言う理由ですが、個人的には最強のトランザクションマネージャだと思っているからです。
普通にCOBOLを扱うようにJavaでも電文制御が完璧です。
個人的にWASで作ると組み合わせで電文制御がかなり複雑になる気がします。

この2点からやってみることにしました。

IMSでJavaアプリを動かすにはJavaアプリ専用の従属リージョンがあります。
従来のMPPに当たる部分はJMP。BMPに当たる部分はJBPとなります。
これらのリージョンでJvm上で稼働します。一通りDL/I命令はJavaのクラスとして用意されます。

一応こんな感じで動きます。
まずは従来のBMP。

19.19.58 JOB02160 $HASP373 IV2G210J STARTED – INIT 3 – CLASS A – SYS MVS1
19.19.58 JOB02160 IEF403I IV2G210J – STARTED – TIME=19.19.58
19.19.58 JOB02160 +STATUS GE, DLI CALL = GU
19.19.58 JOB02160 @12 INSERT IS DONE, REPLY
19.20.10 JOB02160 R 12,SUPPRESSED
19.20.10 JOB02160 +STATUS GE, DLI CALL = GU
19.20.11 JOB02160 – –TIMINGS (MINS.)–
19.20.11 JOB02160 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU SRB CLOCK
19.20.11 JOB02160 -IV2G210J HDAMUPDT G 00 154 .00 .00 .21
19.20.11 JOB02160 IEF404I IV2G210J – ENDED – TIME=19.20.11

– 19.20.05 CPAC /dis act
– 19.20.05 CPAC JOB02154 DFS4445I CMD FROM MCS/E-MCS CONSOLE
– USERID=CON0440: DIS ACT IVP3
19.20.05 CPAC JOB02154 DFS000I MESSAGE(S) FROM ID=IVP3
REGID JOBNAME TYPE TRAN/STEP PROGRAM STATUS CLASS
1 IV2G210J BMP G DFSIVP7
JBPRGN JBP NONE
FPRGN FP NONE
DBTRGN DBT NONE
IVP11RC3 DBRC
IVP11DL3 DLS
*14145/192005*
– 19.20.10 CPAC 12 SUPPRESSED

至って普通です。これがJBPとなるとこうなります。

19.18.20 JOB02158 $HASP373 IV2G212J STARTED – INIT 3 – CLASS A – SYS MVS1
19.18.20 JOB02158 IEF403I IV2G212J – STARTED – TIME=19.18.20
19.18.38 JOB02158 – –TIMINGS (MINS.)–
19.18.38 JOB02158 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU SRB CLOCK
19.18.38 JOB02158 -IV2G212J IVPJBP1 JBPRGN 00 13875 .26 .00 .30
19.18.39 JOB02158 -IV2G212J PRINTJ 00 120 .00 .00 .01
19.18.39 JOB02158 IEF404I IV2G212J – ENDED – TIME=19.18.39
19.18.39 JOB02158 -IV2G212J ENDED. NAME-PGMRNAME TOTAL CPU TIME=
19.18.39 JOB02158 $HASP395 IV2G212J ENDED

Classpath:
imsjavaBase.jar OK L2009070801
imsJDBC.jar OK IMS JDBC driver located
imsjavaTM.jar OK IMS Java TM API located
imsDBJCA.jar Not Tested Skipped imsDBJCA.jar check as IVP not run i
Custom service Not Tested Skipped custom service check as IVP is not
xml-apis.jar OK IBM JAXP 1.3.11
xercesImpl.jar OK XML4J 4.4.19
xalan.jar OK XSLT4J Java 2.7.19

Load Library:
Load Library OK Running in JMP/JBP

Connection:
Open Connection OK
Database Calls OK
Close Connection OK
IVP PASSED
DFSJVM00: ENVIRON=DFSJVMEV
DFSJVM00: No value was set for option Virtual Machine (JVM) installation.
DFSJVM00: LIBPATH=/usr/lpp/java/J5.0/bin/j9vm:/usr/lpp/java/J5.0/bin/:/usr/lpp/
DFSJVM00: JVMOPMAS=DFSJVMMS
DFSJVM00: Option 0 = -Xoptionsfile=/tmp/dfsjvmpr.props
DFSJVM00: Option 1 = -Xss64K
DFSJVM00: Option 2 = -Xmso64K
DFSJVM00: Option 3 = -Xmaxf0.8
DFSJVM00: Option 4 = -Xminf0.3
DFSJVM00: Option 5 = -Xmx4M
DFSJVM00: Option 6 = -Dcom.ibm.ims.jdbcenvironment=IMS
DFSJVM00: Option 7 = -Dcom.ibm.ims.regiontype=JBP
DFSJVM00: DestroyJavaVM() RC=0

/DIS ACT

DFS4445I CMD FROM MCS/E-MCS CONSOLE USERID=CON0440: DIS ACT IVP3
DFS000I MESSAGE(S) FROM ID=IVP3 855
REGID JOBNAME TYPE TRAN/STEP PROGRAM STATUS CLASS
1 IV2G212J JBP JBPRGN DFSIVP67
BATCHREG BMP NONE
FPRGN FP NONE
DBTRGN DBT NONE
IVP11RC3 DBRC
IVP11DL3 DLS
*14145/191900*

一応マニュアルどおり動くようです。
Javaだけに重いですね。

ただ、かなり苦戦します。IMSの知識とUSSの知識、Javaの知識が必要です。
当然、IMS上で発生するものもあればJavaやUSS上で発生するものもあります。
エラーでもどこのコードが原因なのかこれを特定するだけでもかなりのもんです。

パフォーマンスはそもそもかなり小さい環境で行ったので、CPU100%になりました。
しかし、IMS GENやって、DBD,ACB,PSB GENをやってJavaが動くのはなんか不思議です。

やはりメッセージ制御の部分で安心感があります。