The competition amongst transaction processors is getting tough. It used to be CICS just had to worry about its...
archrival on the mainframe. Now we have Websphere, along with any number of other application servers on a myriad of platforms. Fortunately, for those of us too lazy to switch jobs, IBM keeps CICS up to date with the latest technologies, such as Java. A few months ago, I set up a Java transaction at the request an application team. This column outlines what I discovered along the way.
Let me start with something that may already be obvious to a lot of you. Java programs run under z/Os' UNIX System Services (USS). UNIX cares deeply and profoundly about letter case in file names. The directory /lpp/cicsts is not the same as /LPP/CICSTS or even /LpP/CiCsTs. This means that you will need to turn off upper-case translation for CEDA or define resources through alternate means, such as the resource definition online (RDO) batch utility DFHCSDUP.
You also must be careful to preserve case when you change the system initialization table (SIT) or SIT overrides. The profile directory is a good place to start. You specify the profile directory in SIT parameter JVMPROFILEDIR. This parameter points to a directory containing the specific profile files specified in the Java program definition. CICS passes values in the profile to the Java Virtual Machine (JVM) when a transaction invokes a Java program.
Some of the more important values in these profiles include:
Note that CICS doesn't support the 64 bit JVM. Therefore, if the 64 bit JVM is your default you will have to look for the "classic" 31 bit JVM and put its directory in the profile.
The profile also presents an interesting twist to preventative maintenance because the profiles' CICS_DIRECTORY symbol points to the CICS Java classes. If you start running Java in production you will need to work out a strategy to include, and possibly back out, maintenance applied to the CICS classes; whether it's a wholesale copy into a static directory or changing the profile to switch to another.
The next item in line is the program definition, which includes two important pieces of information. The first is the profile which should be set up as described above. The second is the fully qualified name of the main class of the program. Again, the fully qualified class name includes some of the directory names as shown above for examples.HelloWorld.HelloCICSWorld.
I was pleasantly surprised to see that I didn't need to do much else when I set up the first Java program, although I will say there were a few bumps along the way. The previously mentioned case sensitivity bit me a couple of times when CEDA changed everything to capital letters behind my back. I also had to dig through the UNIX file system for a while before I had all the directories correct. For getting the correct names into the right places, I'm forever indebted to whoever invented cut and paste. I also spent a little time trying to find the STDOUT and STDERR files.
To date, my experience with Java on CICS is limited. But that won't prevent me from making the following recommendations:
I also welcome any comments from readers who want to share their recommendations from real world experience.
Running Java in CICS is a much more complex issue than what's in this column. There are some performance parameters I didn't touch on, as well as issues about JVM reuse and tuning the number of open TCB's. CICS can also take advantage of the zAAP processors introduced with the Z990 processor series, which is supposed to be another performance boost. As for our shop, I hope the application teams get serious about running Java on CICS because this could get interesting . . . in a good way.
Let us know what you think about this tip; e-mail: Matt Stansberry, Site Editor