Batchverarbeitung mit Java im CICS Günter Nothtroff Ehningen, 25.03.2014 Agenda ¡ ¡ ¡ ¡ ¡ ¡ ¡ Warum Java statt COBOL? Warum CICS? Ablauf OSGi und CICS BluePrint Deployment Stolpersteine Warum Java statt COBOL? ¡ Unterprogramm nicht nur für Host ¡ Kein doppelter Pflegeaufwand ¡ Nutzung der Funktion auch von vielen Externen CICS und Alternativen ¡ Läuft bei uns schon, gute Erfahrung ¡ Websphere Application Server (WAS) haben wir nicht auf z ¡ JZOS passt nicht: Die Hauptprogramme sind COBOL ¡ COBOL-JNI Java Native Interface ist - komplex (bei uns keine Erfahrung) - erfordert pro Job eine eigene JVM - Viele hundert Jobs pro Tag Ablauf ¡ Batchprogramm ruft statt bisheriger Prüfroutine nun das Schnittstellenprogramm auf ¡ EXCI-Verbindung ins CICS ¡ Java-Programm (Wrapper) ¡ Blueprint-Abstraktionsschicht ¡ Eigentliche Kernprüfung EXCI (External Caller Interface) ¡ Schnittstellenprogramm -öffnet PIPE ins CICS (Initialize User Call, Allocate Pipe, Open Pipe) - Eigentliche Aufrufe (DPL) - Schließen Pipe (Close, Deallocate) ¡ SDFHSAMP(DFH0CXCC) als Muster ¡ EXCI-Programme nur über Preprozessor umwandelbar OSGi ¡ Standardvorgehensweise ab CICS V4 ¡ Vermeidet "JAR-Hölle" wegen ClassNotFound-Exception ¡ Abhängigkeiten werden bei Installation des Bundles aufgelöst ¡ Unterschiedliche Versionen eines Packages möglich Definition als CICS-Programm ¡ Angabe von JVM Server ¡ Angabe: OSGi Service or Class Name de.drv.dsrv.kernpruefung.cics.DU055 ¡ Name muss mit OSGi Service Name übereinstimmen (CICS-MainClass) ¡ Kein Hinweis auf Ablageort in HFS/ZFS Java-Bundles ¡ BundleName nur für CICS-Verwaltung ¡ BundleDir zeigt auf ZFS-Verzeichnis ¡ Dient zur Versionsverwaltung ¡ MANIFEST.MF - CICS-MainClass - Import-Package und - Export-Package (Abhängigkeiten) Name.osgibundle ¡ Steht neben JAR-File im BundleOrdner ¡ Enthält SymbolicName und JVMServer <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <osgibundle symbolicname="KernpruefungAufruf" version="1.0.0" jvmserver="DRV$JVMS"/> cics.xml Steht im Unterordner META-INF des Bundles sowie im JAR-File (/META-INF) ¡ Enthält Versionsangabe ¡ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <manifest xmlns="http://www.ibm.com/xmlns/prod/cics/bundle" build="GM01-20121114-1544" bundleRelease="0" bundleVersion="1" bundleMicroVer="0" bundleMinorVer="0" bundleMajorVer="1" id="KernpruefungAufruf.Bundle"> <meta_directives> <timestamp>2013-10-07T11:33:50.184+02:00 </timestamp> </ meta_directives> <define path="KernpruefungAufruf.osgibundle" type= "http:// www.ibm.com/xmlns/prod/cics/bundle/OSGIBUNDLE" name="KernpruefungAufruf"/> </manifest> Unsere Bundles ¡ Wrapper-Klasse (CommArea umsetzen) ¡ Aufruf (nur Interface-Definition) ¡ Implementation (eigentliche Arbeit) ¡ Versionswechsel normalerweise nur bei Implementations-Bundle BluePrint ¡ ¡ ¡ ¡ ¡ CICS-kann NEWCOPY bzw. PHASEIN Java nicht BluePrint impft dem rufenden Programm die Adresse des gerufenen Programmes ein Versionswechsel: Neue Version installieren, danach alte Version deaktivieren. Erst hier wird BluePrint aktiv und der Versionswechsel durchgeführt Benötigt OSGI_BUNDLES in JVM-Profil, die schon beim JVM-Start geladen werden blueprint.xml ¡ Im Verzeichnis OSGI-INF des Bundles ¡ Verweis auf bind/unbind-Methoden in angegebener Klasse für gewünschte Property (gerufenes Programm) ¡ Nach Installation neuer Unterprogramm-Version erfolgt Update der Property in Hauptprogramm durch BlueprintFramework Deployment ¡ Entwicklungsebene: CICS-Explorer bzw. RDz mit Perspektive CICS-SM ¡ Test bzw. Prod über hauseigenes Staging-Verfahren, als weitere Sprache inkl. Skeleton hinterlegt ¡ Zeitgesteuertes Aktivieren möglich (deaktivieren der alten Version) Deployment - Grafik DEFINE BUNDLE KERNAUF Kernauf.Bundle_1.0.2 Deployment: Kopieren BUNDLE-Member Anstarten Job Submit DEFINE BUNDLE KERNAUF Kernauf.Bundle_1.0.2 REXX-Prozedur CICS-Explorer bzw. RDz-CICS-SM CICS-Repository DFHCSD DFHCSDUP-Sysin Befüllen CSD CICS-Repository DFHCSD Kopieren im HFS /etc/cicsts/cicsT/ bundles Ablageverzeichnis OSHELL-Sysin /etc/cicsts/cicsE/ bundles Ablageverzeichnis XFILE-Sysin CICS: Aktive Elemente XFILE: EXCI-Aufruf XFILC für Create Bundle CICS: Aktive Elemente Stolperfallen ¡ EXCI-Nutzung zestört RETURN-CODE, erschwert Austausch der Subroutinen ¡ OSHELL liefert keinen RC zurück ¡ Kein IBM-Tool, um Definitionen zu definieren und aktivieren à Eigenentwicklung Noch Fragen? Danke für Ihre Aufmerksamkeit!