CICS TS V5.6 unterstützt neben Maven auch Gradle als Build-Management-Tool für CICS-Java-Anwendungen. Hier werden wir versuchen, die Verwaltung von CICS-Java-Anwendungen mit Gradle zu erstellen.
CICS-Java-Anwendung ausführen - (1) Einfache Beispiel-App ausführen CICS-Java-Anwendung ausführen - (2) Build-Verwaltung durch Maven CICS-Java-Anwendung ausführen - (3) Build-Verwaltung von Gradle CICS-Java-Anwendung ausführen - (4) Spring Boot-Anwendung
Dies ist ähnlich wie bei Maven. (Verwenden Sie Gradle anstelle von Maven)
Bitte verwenden Sie Eclipse, VS-Code usw., mit denen Sie je nach Bedarf Java EE-Anwendungen entwickeln können. Da wir das Beispiel so verwenden, wie es diesmal ist, werden wir die Quelle nicht speziell bearbeiten, so dass wir es nicht verwenden müssen, aber normalerweise werden wir eine Art Entwicklungsumgebung verwenden. Es wäre schön, mit Gradle, Git usw. arbeiten zu können. Wenn Sie CICS Explorer zusammen verwenden möchten, können Sie Eclipse verwenden.
CICS Explorer
Dies ist ebenfalls nicht erforderlich, kann jedoch zum Überprüfen der Ressourcendefinition von CICS verwendet werden. Laden Sie ein Eclipse-basiertes Tool namens CICS Explorer herunter und richten Sie es ein, indem Sie auf die folgenden Bereiche verweisen. Referenz: CICS Explorer herunterladen und starten
Gradle
c:\>java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
Entpacken Sie einfach das heruntergeladene und führen Sie es durch den Pfad. Voraussetzung ist Java 8 oder höher. Laden Sie die aktuellste Version von Gradle V6.5 von der folgenden Version herunter (gradle-6.5.zip). Extrahieren Sie es in ein geeignetes Verzeichnis. (Hier (c: \ x \ Gradle \ gradle-6.5 ) Fügen Sie Ihrem PFAD den Zielbehälter (C: \ x \ Gradle \ gradle-6.5 \ bin) hinzu.
c:\>gradle -v
------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------
Build time: 2020-06-02 20:46:21 UTC
Revision: a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4
Kotlin: 1.3.72
Groovy: 2.5.11
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 1.8.0_144 (Oracle Corporation 25.144-b01)
OS: Windows 10 10.0 amd64
Das ist in Ordnung.
git
Wir werden das auf gitHub bereitgestellte Beispiel erhalten und verwenden, also installieren Sie auch git. Die Setup-Methode wird weggelassen, da sie herumliegt.
c:\>git --version
git version 2.21.0.windows.1
Bereiten Sie eine CICS-Region vor, um das Beispiel auszuführen. Im Moment verwenden wir eine Region mit dem Namen ** CT56B4A1 ** unter CICSplex-Kontrolle. Fügen Sie eine Ressource namens JVMServer hinzu, um Java-Anwendungen auszuführen. Dieses Mal verwenden wir das Beispiel für CICS-Liberty (JavaEE-Anwendung). Erstellen Sie daher einen JVM-Server für Liberty.
Bereiten Sie das JVM-Profil auf USS vor. (Die mit JVMServer verbundenen Eigenschaften werden effektiv in der Datei auf dieser USS angegeben. Die JVMSERVER-Ressourcendefinition zeigt auf den Dateinamen dieses JVM-Profils.) Ein Beispiel wird mitgeliefert. Kopieren Sie es und verwenden Sie es.
Erstellen Sie ein Verzeichnis mit dem Namen / var / cicsts / cicsts56 / CT56B4A1 / JVMProfiles und kopieren Sie /usr/lpp/cicsts/cicsts56/JVMProfiles/DFHOSGI.jvmprofile (Beispieldefinition für OSGi im CCD-Installationsverzeichnis) dorthin. Machen. Passen Sie es an Ihre Umgebung an.
DFHWLP.jvmprofile Auszug
JAVA_HOME=/usr/lpp/java/J8.0_64/
WORK_DIR=/var/cicsts/cicsts56/CT56B4A1/work
WLP_INSTALL_DIR=/usr/lpp/cicsts/cicsts56/wlp
-Dcom.ibm.cics.jvmserver.wlp.autoconfigure=true
-Dcom.ibm.cics.jvmserver.wlp.server.host=*
-Dcom.ibm.cics.jvmserver.wlp.server.http.port=56441
-Dcom.ibm.cics.jvmserver.wlp.server.https.port=56451
-Xms128M
-Xmx256M
-Xmso1M
-Xgcpolicy:gencon
-Xscmx256M
-Xshareclasses:name=cicsts%g,groupAccess,nonfatal
-Xtune:virtualized
-Dcom.ibm.tools.attach.enable=no
-Dfile.encoding=ISO-8859-1
_BPXK_DISABLE_SHLIB=YES
SIT
Geben Sie im SIT-Parameter "JVMPROFILEDIR" das Verzeichnis an, in dem sich die obige Eigenschaftendatei befindet.
JVMPROFILEDIR=/var/cicsts/cicsts56/CT56B4A1/JVMProfiles
Starten Sie die Region neu, damit die Änderungen wirksam werden.
Bereiten Sie die JVMSERVER-Ressourcendefinition vor. Kopieren Sie die JVMSERVER-Definition "DFHWLP" in der vom Produkt bereitgestellten DFH $ WLP-Gruppe in eine entsprechende Gruppe und installieren Sie sie.
OBJECT CHARACTERISTICS CICS RELEASE = 0730
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 : 06/04/20 16:20:21
CHANGETime : 06/04/20 16:20:21
CHANGEUsrid : CICSUSER
CHANGEAGEnt : CSDApi CSDApi | CSDBatch
CHANGEAGRel : 0730
Es ist in Ordnung, wenn es unter CEMT I JVMSERVER aktiviert ist.
I JVMS
STATUS: RESULTS - OVERTYPE TO MODIFY
Jvm(DFHWLP ) Ena Prf(DFHWLP ) Ler(DFHAXRO )
Threadc(005) Threadl( 015 ) Cur(48314096)
CICS Bundle Deployment API Sie müssen die CICS Bundle Deployment API eingerichtet haben, die in CICS TS V5.6 verfügbar ist. Diese Funktion wurde für die Anwendungsbereitstellung als eine der REST-basierten Verwaltungs-APIs namens CMCI hinzugefügt. Richten Sie CMCI auf dem WUI-Server ein, der die Ziel-CICS-Region verwaltet, und geben Sie in den Eigenschaften des CMCI-JVM-Servers die Parameter für die CICS-Bundle-Bereitstellungs-API an. Referenz: Funktionsweise: CICS-Bundle-Bereitstellungs-API
Die minimal erforderlichen Einstellungen sind wie folgt.
Erstellen Sie auf USS ein Verzeichnis für die Platzierung von Bundle-Dateien. Hier ist es "/ var / cicsts / cicsts56 / bundles".
Legen Sie die folgenden Parameter im JVM-Profil (EYUCMCIJ.jvmprofile) für den CMCI-JVM-Server der WUI fest.
-Dcom.ibm.cics.jvmserver.cmci.bundles.dir=/var/cicsts/cicsts56/bundles
Klonen Sie "https: // github.com / IBM / cics-bundle-gradle.git" in ein geeignetes Verzeichnis auf Ihrem lokalen PC.
C:\y\workspace\cicsts56>git clone https://github.com/IBM/cics-bundle-gradle.git
Cloning into 'cics-bundle-gradle'...
remote: Enumerating objects: 125, done.
remote: Counting objects: 100% (125/125), done.
remote: Compressing objects: 100% (87/87), done.
remote: Total 1855 (delta 43), reused 86 (delta 13), pack-reused 1730Receiving objects: 99% (1837/1855), 2.08 MiB | 2.01 MiB/s
Receiving objects: 100% (1855/1855), 4.19 MiB | 2.83 MiB/s, done.
Resolving deltas: 100% (610/610), done.
Wir werden ein Beispiel namens gradle-multipart-sample unter samples verwenden. Verschieben Sie also das Verzeichnis und sehen Sie sich die Struktur der Datei an.
C:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample>tree /f /a
Liste der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumens lautet 1866-E2FC
C:.
| build.gradle
| gradlew
| gradlew.bat
| README.md
| settings.gradle
|
+---gradle
| \---wrapper
| gradle-wrapper.jar
| gradle-wrapper.properties
|
+---gradle-bundle-demo
| build.gradle
|
\---gradle-war-demo
| build.gradle
|
\---src
\---main
+---java
| \---demo
| SimpleServlet.java
|
\---web-app
| index.html
| index.js
| style.css
|
+---images
| cics.png
|
\---WEB-INF
web.xml
Es gibt mehrere build.gradle und es hat eine hierarchische Struktur, die als "Multi-Projekt" von Gradle bezeichnet wird. Referenz: Grundlagen eines Multiprojekts mit Gradle
Normalerweise erstellen Sie beim Erstellen einer CICS-Java-App ein OSGi-Projekt (jar) oder Webprojekt (WAR), das den Hauptteil der App darstellt, erstellen Sie ein CICS-Bundle-Projekt, um die Anwendung zu organisieren, und stellen Sie sie als einzelnes Paket bereit. TU das. In diesem Beispiel entspricht der Gradle-War-Demo-Teil dem Projekt des Anwendungskörpers (WAR), und der Gradle-Bundle-Demo-Teil entspricht dem CICS-Bundle-Projekt. Um sie zusammenzufassen, wird der übergeordnete Teil als Multiprojekt verwendet Es ist im Gradle-Multipart-Sample-Projekt zusammengefasst. Die Beziehung zwischen build.gradle ist wie folgt.
Es scheint, dass Sie die Beziehung des Projekts auch mit dem folgenden Befehl anzeigen können.
c:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample>gradle -q projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'gradle-multipart-sample'
+--- Project ':gradle-bundle-demo'
\--- Project ':gradle-war-demo'
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :gradle-bundle-demo-test04:tasks
Dies ist eine Webanwendung, die auf CICS-Liberty ausgeführt werden soll. Es wird durch einfaches HTML und Servlet implementiert. (Es sieht aus wie die Maven-Probe)
SimpleServlet.java
package demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.cics.server.InvalidRequestException;
import com.ibm.cics.server.Task;
/**
* Servlet implementation class SimpleServlet
*/
@WebServlet("/SimpleServlet")
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().print("Hello world!");
Task task = Task.getTask();
try {
String userid = task.getUSERID();
response.setContentType("text/html");
response.getWriter().print("\nI am " + userid);
} catch (InvalidRequestException e) {
throw new RuntimeException(e);
}
}
}
Der Prozess besteht darin, das Objekt der eigenen Aufgabe zu erfassen, die in der Aufgabenklasse von JCICS ausgeführt wird, die Benutzerinformationen zu erfassen, die sich selbst daraus ausführen, und sie anzuzeigen.
Die App selbst muss nicht geändert werden. Überprüfen Sie daher einfach den Inhalt.
Normalerweise erstellen Sie beim Erstellen einer CICS-Java-App mit CICS Explorer (wenn Sie Gradle nicht verwenden) ein CICS-Bundle-Projekt und legen fest, welche Apps (WAR, OSGi usw.) darin enthalten sein sollen. Als Ergebnis werden Dateien wie cics.xml und xxx.warbundle erstellt.
Dies entspricht dem CICS-Bundle-Projekt, es ist jedoch nur build.gradle vorhanden. Durch die Angabe der Abhängigkeit mithilfe des Gradle-Mechanismus scheint das von CICS bereitgestellte Gradle-Plug-In (Cics-Bundle-Gradle) automatisch die für das CICS-Bundle-Projekt erforderlichen Dateien zu erstellen. Daher müssen Sie als Benutzer nur die erforderlichen Einstellungen in build.gradle vornehmen, und Sie müssen das CICS-Bundle-Projekt nicht direkt kennen.
Bearbeiten Sie build.gradle entsprechend Ihrer Umgebung. Änderungen sind in den Kommentaren (1) - (7) beschrieben.
gradle-bundle-demo-test04\build.gradle
plugins {
id 'com.ibm.cics.bundle' version '1.0.0'
}
group 'com.ibm.cics'
version '1.0.0'
repositories {
mavenCentral()
}
cicsBundle {
build {
defaultJVMServer = 'DFHWLP' // (1)JVMSERVER Name
}
deploy {
cicsplex = 'C73PLX' // (2)Der CICSplex-Name, zu dem die Ziel-CICS-Region gehört
region = 'CT56B4A1' // (3)Name der Ziel-CICS-Region
bunddef = 'GRDBUNDL' // (4)Name der Bundle-Definitionsressource, die in der Ziel-CICS-Region definiert ist
csdgroup = 'TAGGRP' // (5) (4)CSD-Gruppenname, zu dem die Bundle-Definition von
url = 'http://etp1:56002' // (6)WUI CMCI URL
username = 'TAG' // (7)Mit dem Benutzer, der bei der Ausgabe der Bereitstellungs-API durch CMCI verwendet wird
password = '********' //Passwort
//caution: uncomment the line below to disable TLS/SSL checking for certificates
//insecure = true
}
}
dependencies {
cicsBundlePart group: 'org.codehaus.cargo', name: 'simple-war', version: '1.7.7', ext: 'war'
cicsBundlePart project(path:':gradle-war-demo', configuration: 'archives')
}
Jetzt habe ich den Verzeichnisnamen des Projekts für das CICS-Bundle von gradle-bundle-demo in gradle-bundle-demo-test04 geändert. Dieser Verzeichnisname wird als Verzeichnisname beim Übertragen von Produkten über USS verwendet. In dem Verzeichnis zum Anordnen des vom JVM-Server der WUI angegebenen Bundle-Verzeichnisses (hier "/ var / cicsts / cicsts56 / bundles") wird ein Verzeichnis mit dem Namen "/ var / cicsts / cicsts56 / gradle-bundle-demo-test04_1.0.0 /
Andere Änderungsparameter sind wie folgt.
** (1) defaultjvmserver **: Geben Sie den Namen des JVMSERVER an, der die App ausführen soll. Es muss vorab in der CICS-Zielregion installiert werden. ** (2) cicsplex **: Der Name des CICSplex, zu dem die Ziel-CICS-Region gehört ** (3) Region **: Name der CICS-Zielregion ** (4) bundledef **: Name der Bundle-Definitionsressource, die in der Ziel-CICS-Region definiert ist ** (5) csdgroup **: CSD-Gruppenname, zu dem die Bundle-Definition von (5) gehört ** (6) url **: Geben Sie die CMCI-URL der WUI an. Die CICS Bundle Deployment API muss für diese WUI aktiviert sein. (Wenn es sich um eine Vorlage handelt, gibt es keine Beschreibung von "http: //". Wenn Sie dies jedoch nicht angeben, tritt ein Fehler auf. Seien Sie also vorsichtig!) ** (7) Benutzername / Kennwort **: Benutzer und Kennwort, die bei der Ausgabe der Bereitstellungs-API durch CMCI verwendet werden
Da wir das Projektverzeichnis umbenannt haben, werden wir die übergeordnete Einstellung.gradle entsprechend ändern.
setting.gradle
rootProject.name = 'gradle-multipart-sample'
include 'gradle-war-demo'
include 'gradle-bundle-demo-test04'
Erstellen Sie eine Bundle-Definition gemäß dem in build.gradle oben angegebenen Inhalt.
OBJECT CHARACTERISTICS CICS RELEASE = 0730
CEDA View Bundle( GRDBUNDL )
Bundle : GRDBUNDL
Group : TAGGRP
DEScription : CICS-BUNDLE-DEMO
Status : Enabled Enabled | Disabled
BUndledir : /var/cicsts/cicsts56/bundles/gradle-bundle-demo-test04_1.0
(Mixed Case) : .0
:
:
:
BAsescope :
(Mixed Case) :
:
:
:
DEFINITION SIGNATURE
DEFinetime : 06/17/20 14:19:33
Die CSD-Gruppe wird angegeben (5), der Name der BUNDLE-Definition lautet (4) und BUNDLEDIR wird basierend auf dem Namen des Projektverzeichnisses und dem Wert der Versionsinformationen angegeben.
Ich bin der Meinung, dass dies bald behoben wird, aber es gibt einen Fehler in der Verzeichnisstruktur des bereitgestellten Beispiels. Wenn die nachfolgende Verarbeitung so ausgeführt wird, wie sie ist, funktioniert das Beispiel nicht ordnungsgemäß. Es gibt ein Verzeichnis mit dem Namen "... \ gradle-multipart-sample \ gradle-war-demo \ src \ main \ web-app ", aber ändern Sie diese "Web-App" in "webapp". Lassen Sie uns (Bindestriche entfernen). Für den Betrieb des Gradle's War-Plug-Ins werden die Dateien unter der Webanwendung beim Erstellen einer WAR standardmäßig kopiert. Im Beispiel handelt es sich jedoch um eine Web-App, also web.xml und index.html in diesem Verzeichnis Usw. wird nicht kopiert und die Beispielanwendung kann nicht aufgerufen werden.
Referenz: Gradle - The War Plugin
The default behavior of the War task is to copy the content of src/main/webapp to the root of the archive. Your webapp directory may of course contain a WEB-INF sub-directory, which may contain a web.xml file. Your compiled classes are compiled to WEB-INF/classes. All the dependencies of the runtime [1] configuration are copied to WEB-INF/lib.
Führen Sie zum Erstellen den folgenden Befehl im Verzeichnis gradle-multipart-sample aus. Zunächst dauert es einige Zeit, da die erforderlichen Pakete heruntergeladen werden.
c:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample>gradlew build
Downloading https://services.gradle.org/distributions/gradle-5.0-all.zip
...........................................................................................................................
Welcome to Gradle 5.0!
Here are the highlights of this release:
- Kotlin DSL 1.0
- Task timeouts
- Dependency alignment aka BOM support
- Interactive `gradle init`
For more details see https://docs.gradle.org/5.0/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :gradle-bundle-demo-test04:buildCICSBundle
Adding Java-based bundle parts from 'cicsBundlePart' dependency configuration
Adding Java-based bundle part: 'C:\Users\TomohiroTaguchi\.gradle\caches\modules-2\files-2.1\org.codehaus.cargo\simple-war\1.7.7\5f462015066db63c2e240b4fc3674c6f4910bb73\simple-war-1.7.7.war'
Adding Java-based bundle part: 'C:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample\gradle-war-demo\build\libs\gradle-war-demo-1.0.0.war'
Adding non-Java-based bundle parts from 'src/main/resources'
BUILD SUCCESSFUL in 1m 12s
4 actionable tasks: 4 executed
Das Projekt ist jetzt gebaut. Im Gradle-Bundle-Demo-Verzeichnis werden jede Datei des CICS-Bundle-Projekts und eine ZIP-Datei (zum Zeitpunkt der Bereitstellung verwendet) generiert, die sie zusammenfasst.
c:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample>tree gradle-bundle-demo-test04 /f /a
Liste der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumens lautet 1866-E2FC
C:\Y\WORKSPACE\CICSTS56\CICS-BUNDLE-GRADLE\SAMPLES\GRADLE-MULTIPART-SAMPLE\GRADLE-BUNDLE-DEMO-TEST04
| build.gradle
|
\---build
+---distributions
| gradle-bundle-demo-test04-1.0.0.zip
|
\---gradle-bundle-demo-test04-1.0.0
| gradle-war-demo-1.0.0.war
| gradle-war-demo-1.0.0.warbundle
| simple-war-1.7.7.war
| simple-war-1.7.7.warbundle
|
\---META-INF
cics.xml
Führen Sie als Nächstes die Bereitstellungsarbeiten aus. Führen Sie den folgenden Befehl im Verzeichnis gradle-multipart-sample aus.
c:\y\workspace\cicsts56\cics-bundle-gradle\samples\gradle-multipart-sample>gradlew deployCICSBundle
> Task :gradle-bundle-demo-test04:deployCICSBundle
Task deployCICSBundle
BUILD SUCCESSFUL in 12s
5 actionable tasks: 1 executed, 4 up-to-date
Wenn Sie sich den Status von Bundles und gebündelten Teilen im CICS Explorer ansehen, können Sie feststellen, dass sie erfolgreich installiert und aktiviert wurden.
Mit anderen Worten, der obige Gradle-Befehl hat die folgende Verarbeitung durchgeführt.
Build: JavaEE-App kompilieren (Gradle-War-Demo) / WAR erstellen, CICS-Bundle generieren (Gradle-Bundle-Demo) Paket: Verpackung verwandter Module Bereitstellen: Übertragen / Bereitstellen der CICS-Bundle-Datei an USS, Installieren der BUNDLE-Definition
Versuchen Sie, über Ihren Browser auf die auf Liberty bereitgestellte App zuzugreifen, die auf dem Ziel-CICS ausgeführt wird.
Da es als Standardbenutzer "CICSUSER" ausgeführt wird, wird dieser Benutzername angezeigt.
Damit konnte ich bestätigen, dass die Anwendung ordnungsgemäß funktioniert!
Recommended Posts