CICS TS pour z / OS prend en charge l'exécution de Liberty, vous pouvez donc exécuter des applications Java EE sur CICS. Avec la prise en charge de Spring Boot à partir de CICS TS V5.3, les applications Spring Boot peuvent également s'exécuter sur CICS (avec Liberty sur CICS). L'exécution sur CICS signifie que JCICS qui utilise les fonctions de CICS peut être utilisé, de sorte que les applications Web qui appellent des programmes CICS existants, les applications Web qui accèdent à VSAM et TSQ gérées par CICS, etc. ne peuvent être exécutées qu'avec CICS. Cela signifie également qu'il peut être développé à l'aide du framework Spring Boot.
Dans cet article, je vais exécuter un exemple de l'application CICS-Spring Boot fournie sur GitHub ci-dessous. cics-java-liberty-springboot-jcics
Maven et Gradle peuvent être utilisés pour gérer les builds, mais pour l'instant, utilisons Gradle.
Application Java CICS-Exécuter - (1) Exécuter un exemple d'application simple Application Java CICS-Run - (2) Build management by Maven Application Java CICS-Run - (3) Build management by Gradle Application Java CICS-Run - (4) Application Spring Boot
Veuillez utiliser Eclipse, VS Code, etc. qui peuvent développer des applications Java EE selon le cas. Puisque nous utiliserons l'exemple tel qu'il est cette fois, nous n'éditerons pas la source en particulier, nous n'avons donc pas à l'utiliser, mais nous utiliserons généralement une sorte d'environnement de développement. Ce serait bien de pouvoir travailler avec Gradle, git, etc. Si vous souhaitez utiliser CICS Explorer ensemble, vous pouvez utiliser Eclipse.
CICS Explorer
Cela n'est pas non plus obligatoire, mais il peut être utilisé pour vérifier la définition de ressource de CICS. Téléchargez et configurez un outil basé sur Eclipse appelé CICS Explorer en vous référant aux zones suivantes. Référence: Téléchargement et démarrage de CICS Explorer
Gradle Suivez les étapes ci-dessous pour installer. Installing Gradle Fondamentalement, décompressez simplement celui téléchargé et passez-le par le chemin.
Comme prérequis, Java 8 ou version ultérieure est requis.
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)
Téléchargez la dernière version de Gradle V6.5 pour le moment à partir de ce qui suit (gradle-6.5.zip). Releases
Extrayez-le dans un répertoire approprié. (Ici (c: \ x \ Gradle \ gradle-6.5 ) Ajoutez le chutier de destination (C: \ x \ Gradle \ gradle-6.5 \ bin) à votre PATH.
Vérification
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
C'est acceptable.
git
Nous allons obtenir et utiliser l'exemple fourni sur gitHub, donc installez également git. La méthode de configuration est omise car elle traîne.
c:\>git --version
git version 2.21.0.windows.1
Préparez une région CICS pour exécuter l'exemple. Pour l'instant, nous allons utiliser une région nommée ** CT56B4A1 ** sous contrôle CICSplex. Ajoutez une ressource appelée JVMServer pour exécuter des applications Java. Cette fois, nous utiliserons l'exemple pour CICS-Liberty (application JavaEE), donc créez un serveur JVM pour Liberty.
Préparez le profil JVM sur USS. (Les propriétés liées à JVMServer sont effectivement spécifiées dans le fichier sur cet USS. La définition de ressource JVMSERVER pointe vers le nom de fichier de ce profil JVM.) Un échantillon est fourni, alors copiez-le et utilisez-le.
Créez un répertoire appelé / var / cicsts / cicsts56 / CT56B4A1 / JVMProfiles et copiez-y /usr/lpp/cicsts/cicsts56/JVMProfiles/DFHOSGI.jvmprofile (exemple de définition pour OSGi situé sous le répertoire d'installation du CCD). Faire. Personnalisez en fonction de votre environnement.
DFHWLP.extrait jvmprofile
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
Spécifiez le répertoire où se trouve le fichier de propriétés ci-dessus dans le paramètre SIT "JVMPROFILEDIR".
JVMPROFILEDIR=/var/cicsts/cicsts56/CT56B4A1/JVMProfiles
Redémarrez la région pour que les modifications prennent effet.
Préparez la définition de ressource JVMSERVER. Copiez la définition JVMSERVER "DFHWLP" dans le groupe DFH $ WLP fourni par le produit dans un groupe approprié et installez-le.
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
Il est OK s'il est activé en regardant CEMT I JVMSERVER.
I JVMS
STATUS: RESULTS - OVERTYPE TO MODIFY
Jvm(DFHWLP ) Ena Prf(DFHWLP ) Ler(DFHAXRO )
Threadc(005) Threadl( 015 ) Cur(48314096)
Dans cet exemple de procédure d'exécution, il s'agit d'une procédure à déployer manuellement au lieu de procéder à un déploiement automatique, alors ajoutez le paramètre pour cela.
Si vous spécifiez -Dcom.ibm.cics.jvmserver.wlp.autoconfigure = true
dans votre profil JVM, Liberty sera configuré automatiquement. Une fois la définition JVMSERVER installée, Liberty est configuré sous le répertoire de travail (work / CT56B4A1 / DFHWLP / wlp / usr / servers / defaultServer
).
Modifiez server.xml sous ce répertoire pour qu'il ressemble à ceci:
server.xml
...
<applicationMonitor dropins="dropins" dropinsEnabled="true" pollingRate="5s" updateTrigger="polled"/>
...
De cette manière, spécifiez dropsEnabled = "true", updateTrigger = "polled".
Cela détectera automatiquement la guerre placée dans le répertoire drops.
Créez un répertoire drops dans le même répertoire (... / work / CT56B4A1 / DFHWLP / wlp / usr / servers / defaultServer / drops
).
Après avoir apporté des modifications, redémarrez le serveur JVM.
CICS Bundle Deployment API Vous devez avoir configuré l'API de déploiement de bundle CICS, disponible à partir de CICS TS V5.6. (Non requis pour le déploiement manuel de l'exemple de procédure) Cette fonctionnalité a été ajoutée pour le déploiement d'applications en tant que l'une des API de gestion REST appelées CMCI. Configurez CMCI sur le serveur WUI qui gère la région CICS cible et spécifiez les paramètres de l'API de déploiement de bundle CICS dans les propriétés du serveur JVM CMCI. Référence: Fonctionnement: API de déploiement du bundle CICS
Les paramètres minimum requis sont les suivants.
Créez un répertoire sur USS pour le placement de fichiers Bundle. Ici, il s'agit de / var / cicsts / cicsts56 / bundles
.
Définissez les paramètres suivants dans le profil JVM (EYUCMCIJ.jvmprofile) pour le serveur JVM CMCI de WUI.
-Dcom.ibm.cics.jvmserver.cmci.bundles.dir=/var/cicsts/cicsts56/bundles
Tout d'abord, essayez de suivre les étapes fournies sur github. Référence: cics-java-liberty-springboot-jcics
Créez un répertoire approprié et clonez https: // github.com / cicsdev / cics-java-liberty-springboot-jcics.git
sur votre PC local.
c:\y\workspace\cicsts56>git clone https://github.com/cicsdev/cics-java-liberty-springboot-jcics.git
Cloning into 'cics-java-liberty-springboot-jcics'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 67 (delta 12), reused 56 (delta 7), pack-reused 0
Unpacking objects: 100% (67/67), done.
Allez dans le répertoire "cics-java-liberty-springboot-jcics" et regardez la structure du fichier.
c:\y\workspace\cicsts56\cics-java-liberty-springboot-jcics>tree /f /a
Liste des chemins de dossier:Volume Windows
Le numéro de série du volume est 1866-E2FC
C:.
| .classpath
| .gitignore
| .project
| build.gradle
| gradlew
| gradlew.bat
| LICENSE
| mvnw
| mvnw.cmd
| pom.xml
| README.md
| settings.gradle
|
+---.mvn
| \---wrapper
| maven-wrapper.jar
| maven-wrapper.properties
| MavenWrapperDownloader.java
|
+---.settings
| org.eclipse.buildship.core.prefs
| org.eclipse.wst.common.component
| org.eclipse.wst.common.project.facet.core.xml
|
+---gradle
| \---wrapper
| gradle-wrapper.jar
| gradle-wrapper.properties
|
\---src
\---main
+---java
| \---com
| \---ibm
| \---cicsdev
| \---springboot
| \---jcics
| Application.java
| BrowseTSQController.java
| DeleteTSQController.java
| ServletInitializer.java
| TSQInfoController.java
| WriteTSQController.java
|
\---webapp
\---WEB-INF
ibm-web-ext.xml
web.xml
Il s'agit d'un projet unique de la partie application. N'inclut pas le projet CICS Bundle. Il semble qu'il supporte à la fois Maven et Gradle, mais ici nous utiliserons Gradle.
Il existe plusieurs sources, mais jetons un coup d'œil à WriteTSQController.java, par exemple. Ceci est juste un coup d'oeil.
WriteTSQController.java
/* Licensed Materials - Property of IBM */
/* */
/* SAMPLE */
/* */
/* (c) Copyright IBM Corp. 2020 All Rights Reserved */
/* */
/* US Government Users Restricted Rights - Use, duplication or disclosure */
/* restricted by GSA ADP Schedule Contract with IBM Corp */
/* */
package com.ibm.cicsdev.springboot.jcics;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ibm.cics.server.CicsConditionException;
import com.ibm.cics.server.TSQ;
@RestController
public class WriteTSQController {
/**
* The @GetMapping annotation ensures that HTTP GET requests are mapped to the annotated method.
* @throws IOException
**/
@GetMapping("/writeTSQs")
public String writeTSQs(@RequestParam(value = "tsqName", defaultValue = "ANNE") String tsqName,
@RequestParam(value = "tsqContent", defaultValue = "Spring greetings from CICS!") String tsqContent) {
String response = "";
// Write to the TSQ
try {
response = writeTSQ(tsqName, tsqContent);
} catch ( CicsConditionException | UnsupportedEncodingException e) {
// Print the stack trace
e.printStackTrace();
// Return useful information to the user when meeting errors
return "Oops! Unexpected CICS condition exception: " + e.getMessage() + ". Please check stderr for details.";
}
return response;
}
/**
* A method to write a record to a TSQ
*
* @param tsqName, the name of the TSQ to be written to
* @param record, the data to be written to the TSQ
* @return, the result of the write
* @throws UnsupportedEncodingException
* @throws CicsConditionException
*/
private String writeTSQ(String tsqName, String record) throws CicsConditionException, UnsupportedEncodingException{
// Construct the TSQ object
TSQ tsqQ = new TSQ();
tsqQ.setName(tsqName);
// the result of writing an item to the TSQ
String result = "";
// write the record to the TSQ
tsqQ.writeString(record);
result = "Record written to TSQ " + tsqName + ".";
// return the result to the calling servlet
return result;
}
}
C'est une application simple qui écrit simplement des données sur TSQ en utilisant la classe TSQ de JCICS. Le paramètre de requête de l'URI / writeTSQs
reçoit tsqName et tsqContent et écrit la valeur spécifiée par tsqContent dans le TSQ spécifié par tsqName.
Vérifiez la racine du contexte dans ibm-web-ext.xml. Ceci est également une confirmation uniquement.
ibm-web-ext.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-ext
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
version="1.0">
<reload-interval value="3"/>
<context-root uri="cics-java-liberty-springboot-jcics-ding" />
<enable-directory-browsing value="false"/>
<enable-file-serving value="true"/>
<enable-reloading value="true"/>
<enable-serving-servlets-by-class-name value="false" />
</web-ext>
Ouvrez build.gradle et modifiez les spécifications de dépendance pour qu'elles correspondent à la version CICS cible. Puisque nous ciblons CICS TS V5.6 ici, modifiez-le comme suit.
build.gradle
...
compileOnly enforcedPlatform("com.ibm.cics:com.ibm.cics.ts.bom:5.6-20200609123739")
...
La valeur à spécifier sera jugée à partir de ce qui suit. Référence: IBM CICS TS BOM
Construisez avec la commande suivante.
c:\y\workspace\cicsts56\cics-java-liberty-springboot-jcics>gradlew.bat clean bootwar
Downloading https://services.gradle.org/distributions/gradle-6.5-bin.zip
.........10%..........20%..........30%..........40%.........50%..........60%..........70%..........80%.........90%..........100%
Starting a Gradle Daemon (subsequent builds will be faster)
BUILD SUCCESSFUL in 1m 35s
3 actionable tasks: 2 executed, 1 up-to-date
En cas de succès, le WAR suivant sera créé.
build/libs/cics-java-liberty-springboot-jcics-0.1.0.war
La procédure de cet exemple consiste à déployer manuellement le WAR, essayons-le.
Transférez le fichier WAR ci-dessus en mode binaire dans le répertoire drops que vous avez créé précédemment. L'application devrait maintenant être reconnue automatiquement. (La définition BUNDLE n'est pas utilisée pour cette méthode)
À partir du navigateur, essayez de faire la demande suivante à l'hôte: port que le Liberty cible écoute.
http://etp1:56441/cics-java-liberty-springboot-jcics-ding/writeTSQs?tsqName=SPGJCICS&tsqContent=ILOVECICS
Vous mettrez le message ILOVECICS dans le TSQ nommé SPGJCICS.
Espérons que les données seront écrites sur TSQ, alors vérifiez-les avec CEBR à partir du terminal CICS.
J'ai pu confirmer que les données ont été saisies correctement.
En passant, si la procédure ci-dessus est effectuée, le déploiement sera manuel et ce n'est pas intelligent, ajoutons donc un projet CICS Bundle afin que Deploy puisse être exécuté avec Gradle.
Attention! : Si vous avez essayé le déploiement manuel avec la procédure ci-dessus, l'application sera au bâton, supprimez donc la guerre dans le répertoire drops et redémarrez JVMSERVER. </ font>
Ajoutez un projet CICS Bundle et créez un projet parent à combiner avec le WAR fourni dans l'exemple.
Tout d'abord, créez un répertoire appelé le répertoire du projet parent cics-springboot01
. Alors lancez le wrapper gradle.
c:\y\workspace\cicsts56\cics-springboot01>gradle wrapper
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 6s
1 actionable task: 1 executed
c:\y\workspace\cicsts56\cics-springboot01>tree /a /f
Liste des chemins de dossier:Volume Windows
Le numéro de série du volume est 1866-E2FC
C:.
| gradlew
| gradlew.bat
|
+---.gradle
| +---6.5
| | | gc.properties
| | |
| | +---executionHistory
| | | executionHistory.bin
| | | executionHistory.lock
| | |
| | +---fileChanges
| | | last-build.bin
| | |
| | +---fileHashes
| | | fileHashes.bin
| | | fileHashes.lock
| | |
| | \---vcsMetadata-1
| +---buildOutputCleanup
| | buildOutputCleanup.lock
| | cache.properties
| | outputFiles.bin
| |
| +---checksums
| | checksums.lock
| |
| \---vcs-1
| gc.properties
|
\---gradle
\---wrapper
gradle-wrapper.jar
gradle-wrapper.properties
Créez build.gradle et setting.gradle ici comme indiqué ci-dessous.
build.gradle
group 'com.ibm.cicsdev.springboot'
version '1.0.0'
setting.gradle
rootProject.name = 'cics-springboot01'
include 'cics-java-liberty-springboot-jcics'
include 'cics-springboot-bundle04'
Il utilise celui fourni dans l'exemple tel quel. Clonez cics-java-liberty-springboot-jcics avec git clone sous le répertoire du projet parent comme décrit ci-dessus. Modifiez ensuite la ligne compileOnly dans build.gradle pour qu'elle corresponde à la version CICS cible.
Pour cela, en référence à l'article précédent, nous allons créer build.gradle pour le bundle. Référence: CICS-Run Java application- (3) Build management by Gradle
Sous le répertoire du projet parent, créez un répertoire nommé cics-springboot-bundle04
et créez-y build.gradle comme indiqué ci-dessous. Faites correspondre le nom du répertoire au nom spécifié dans le paramètre parent.
build.gradle
plugins {
id 'com.ibm.cics.bundle' version '1.0.0'
}
group 'com.ibm.cicsdev.springboot'
version '1.0.0'
repositories {
mavenCentral()
}
cicsBundle {
build {
defaultJVMServer = 'DFHWLP' // (1)Nom JVMSERVER
}
deploy {
cicsplex = 'C73PLX' // (2)Le nom CICSplex auquel appartient la région CICS cible
region = 'CT56B4A1' // (3)Nom de la région CICS cible
bunddef = 'SPBBUNDL' // (4)Nom de ressource de définition de bundle défini sur la région CICS cible
csdgroup = 'TAGGRP' // (5) (4)Nom du groupe CSD auquel la définition de bundle de
url = 'http://etp1:56002' // (6)URL CMCI WUI
username = 'TAG' // (7)Avec l'utilisateur utilisé lors de l'émission de l'API de déploiement par CMCI
password = 'xxxxxxxx' //mot de passe
//caution: uncomment the line below to disable TLS/SSL checking for certificates
//insecure = true
}
}
dependencies {
cicsBundlePart project(path:':cics-java-liberty-springboot-jcics', configuration: 'archives')
}
La structure finale ressemblera à ceci.
c:\y\workspace\cicsts56\cics-springboot01>tree /a /f
Liste des chemins de dossier:Volume Windows
Le numéro de série du volume est 1866-E2FC
C:.
| build.gradle
| gradlew
| gradlew.bat
| settings.gradle
|
...
+---cics-java-liberty-springboot-jcics
| | .classpath
| | .gitignore
| | .project
| | build.gradle
| | build_original.gradle
| | gradlew
| | gradlew.bat
| | LICENSE
| | mvnw
| | mvnw.cmd
| | pom.xml
| | README.md
| | settings.gradle
| |
| +---.gradle
| | +---6.5
| | | | gc.properties
| | | |
| | | +---executionHistory
| | | | executionHistory.bin
| | | | executionHistory.lock
| | | |
| | | +---fileChanges
| | | | last-build.bin
| | | |
| | | +---fileContent
| | | | fileContent.lock
| | | |
| | | +---fileHashes
| | | | fileHashes.bin
| | | | fileHashes.lock
| | | |
| | | +---javaCompile
| | | | classAnalysis.bin
| | | | javaCompile.lock
| | | | taskHistory.bin
| | | |
| | | \---vcsMetadata-1
| | +---buildOutputCleanup
| | | buildOutputCleanup.lock
| | | cache.properties
| | | outputFiles.bin
| | |
| | +---checksums
| | | checksums.lock
| | | md5-checksums.bin
| | | sha1-checksums.bin
| | |
| | \---vcs-1
| | gc.properties
| |
| +---.mvn
| | \---wrapper
| | maven-wrapper.jar
| | maven-wrapper.properties
| | MavenWrapperDownloader.java
| |
| +---.settings
| | org.eclipse.buildship.core.prefs
| | org.eclipse.wst.common.component
| | org.eclipse.wst.common.project.facet.core.xml
| |
| +---gradle
| | \---wrapper
| | gradle-wrapper.jar
| | gradle-wrapper.properties
| |
| \---src
| \---main
| +---java
| | \---com
| | \---ibm
| | \---cicsdev
| | \---springboot
| | \---jcics
| | Application.java
| | BrowseTSQController.java
| | DeleteTSQController.java
| | ServletInitializer.java
| | TSQInfoController.java
| | WriteTSQController.java
| |
| \---webapp
| \---WEB-INF
| ibm-web-ext.xml
| web.xml
|
+---cics-springboot-bundle04
| build.gradle
|
\---gradle
\---wrapper
gradle-wrapper.jar
gradle-wrapper.properties
Créez une définition de bundle en fonction du contenu spécifié dans build.gradle ci-dessus.
OBJECT CHARACTERISTICS CICS RELEASE = 0730
CEDA View Bundle( SPBBUNDL )
Bundle : SPBBUNDL
Group : TAGGRP
DEScription : CICS-SpringBoot-Sample
Status : Enabled Enabled | Disabled
BUndledir : /var/cicsts/cicsts56/bundles/cics-springboot-bundle04_1.0.
(Mixed Case) : 0
:
:
:
BAsescope :
(Mixed Case) :
:
:
:
DEFINITION SIGNATURE
DEFinetime : 07/07/20 17:03:45
CHANGETime : 07/07/20 17:03:57
SYSID=B4A1 APPLID=CT56B4A1
DSN=CICSTS56.CICS.DFHCSD
Le groupe CSD est spécifié (5), le nom de la définition BUNDLE est (4) et BUNDLEDIR est spécifié en fonction du nom du répertoire du projet et de la valeur des informations de version.
Construisez la WAR Spring Boot comme suit.
c:\y\workspace\cicsts56\cics-springboot01>gradlew bootWar
BUILD SUCCESSFUL in 6s
2 actionable tasks: 2 executed
Ensuite, créez et déployez le bundle CICS.
c:\y\workspace\cicsts56\cics-springboot01>gradlew deployCICSBundle
> Task :cics-springboot-bundle04:buildCICSBundle
Adding Java-based bundle parts from 'cicsBundlePart' dependency configuration
Adding Java-based bundle part: 'C:\y\workspace\cicsts56\cics-springboot01\cics-java-liberty-springboot-jcics\build\libs\cics-java-liberty-springboot-jcics-0.1.0.war'
Adding non-Java-based bundle parts from 'src/main/resources'
> Task :cics-springboot-bundle04:deployCICSBundle
Task deployCICSBundle
BUILD SUCCESSFUL in 29s
4 actionable tasks: 3 executed, 1 up-to-date
C'est OK si vous pouvez confirmer que le bundle et les composants du bundle sont ACTIVÉS à partir de CICS Explorer.
Vous pouvez le déployer avec Gradle!
En passant, si vous regardez les messages.log de Liberty, vous pouvez voir que l'application Spring Boot est en cours d'exécution.
[7/7/20 9:20:35:354 GMT] 000000d0 LogService-87-com.ibm.cics.wlp.bundlepart.impl I CWWKE0703I: [com.ibm.cics.wlp.bundlepart.impl] [CICSLibertyBundlepartControllerImpl] @Info : installBundlepart() - cics-java
-liberty-springboot-jcics-0.1.0, SPBBUNDL, 2, /var/cicsts/cicsts56/bundles/cics-springboot-bundle04_1.0.0/, 1.0.0, 206F2740000001E9, , , -1, -1, -1, CSD_API
[7/7/20 9:20:35:376 GMT] 000000d1 LogService-87-com.ibm.cics.wlp.bundlepart.impl I CWWKE0703I: [com.ibm.cics.wlp.bundlepart.impl] [CICSLibertyBundlepartControllerImpl] @Info : enableBundlepart() - 3549516473
[7/7/20 9:20:36:381 GMT] 00000055 com.ibm.ws.app.manager.AppMessageHelper I CWWKZ0018I: Starting application cics-java-liberty-springboot-jcics-0.1.0.
[7/7/20 9:20:36:382 GMT] 00000055 bm.ws.app.manager.war.internal.WARDeployedAppInfoFactoryImpl I CWWKZ0136I: The cics-java-liberty-springboot-jcics-0.1.0 application is using the archive file at the /var/cicsts/cicsts56/C
T56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/installedApps/cics-java-liberty-springboot-jcics-0.1.0.war location.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.webcontainer.osgi.webapp.WebGroup I SRVE0169I: Loading Web Module: cics-java-liberty-springboot-jcics.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.webcontainer I SRVE0250I: Web Module cics-java-liberty-springboot-jcics has been bound to default_host.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.http.internal.VirtualHostImpl A CWWKT0016I: Web application available (default_host): http://etp1:56441/cics-java-liberty-springboot-jcics-ding/
[7/7/20 9:20:36:725 GMT] 00000055 com.ibm.ws.app.manager.AppMessageHelper A CWWKZ0003I: The application cics-java-liberty-springboot-jcics-0.1.0 updated in 0.344 seconds.
[7/7/20 9:20:36:733 GMT] 0000004d com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator I SRVE9103I: A configuration file for a web server plugin was automatically generated for this server at /var/cicsts/cicsts56/
CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/logs/state/plugin-cfg.xml.
[7/7/20 9:20:36:800 GMT] 0000004b com.ibm.ws.session.WASSessionCore I SESN0176I: A new session context will be created for application key default_host/cics-java-liberty-springboot-jcics-ding
[7/7/20 9:20:36:801 GMT] 0000004b com.ibm.ws.util I SESN0172I: The session manager is using the Java default SecureRandom implementation for session ID generation.
[7/7/20 9:20:37:064 GMT] 0000004b com.ibm.ws.webcontainer.webapp I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.2 Spring WebApplicationInitializers detected on cla
sspath
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O . ____ _ __ _ _
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O \\/ ___)| |_)| | | | | || (_| | ) ) ) )
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O ' |____| .__|_| |_|_| |_\__, | / / / /
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut O =========|_|==============|___/=/_/_/_/
[7/7/20 9:20:37:974 GMT] 0000004b SystemOut O :: Spring Boot :: (v2.3.0.RELEASE)
[7/7/20 9:20:38:131 GMT] 0000004b SystemOut O 2020-07-07 09:20:38.128 INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer : Starting ServletInit
ializer on etp1.tsc.ibm.com with PID 83952403 (/var/cicsts/cicsts56/CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/installedApps/cics-java-liberty-springboot-jcics-0.1.0.war started by STCUSR in /ETP1/var/cic
sts/cicsts56/CT56B4A1/work)
[7/7/20 9:20:38:133 GMT] 0000004b SystemOut O 2020-07-07 09:20:38.133 INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer : No active profile se
t, falling back to default profiles: default
[7/7/20 9:20:38:446 GMT] 00000053 com.ibm.ws.config.xml.internal.ConfigRefresher A CWWKG0016I: Starting server configuration update.
[7/7/20 9:20:38:448 GMT] 00000053 com.ibm.ws.config.xml.internal.XMLConfigParser A CWWKG0028A: Processing included configuration resource: /var/cicsts/cicsts56/CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/d
efaultServer/installedApps.xml
[7/7/20 9:20:38:450 GMT] 00000053 com.ibm.ws.config.xml.internal.ConfigRefresher A CWWKG0018I: The server configuration was not updated. No functional changes were detected.
[7/7/20 9:20:39:214 GMT] 0000004b com.ibm.ws.webcontainer.webapp I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.Initializing Spring embedded WebApplicationContext
[7/7/20 9:20:39:214 GMT] 0000004b SystemOut O 2020-07-07 09:20:39.214 INFO 83952403 --- [RVICE_Thread-28] o.s.web.context.ContextLoader : Root WebApplicationC
ontext: initialization completed in 1011 ms
[7/7/20 9:20:39:608 GMT] 0000004b SystemOut O 2020-07-07 09:20:39.608 INFO 83952403 --- [RVICE_Thread-28] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing Executo
rService 'applicationTaskExecutor'
[7/7/20 9:20:39:847 GMT] 0000004b SystemOut O 2020-07-07 09:20:39.846 INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer : Started ServletIniti
alizer in 2.638 seconds (JVM running for 3347.897)
[7/7/20 9:25:53:853 GMT] 00000045 com.ibm.ws.webcontainer.webapp I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.Initializing Spring DispatcherServlet 'dispatcherSe
rvlet'
[7/7/20 9:25:53:853 GMT] 00000045 SystemOut O 2020-07-07 09:25:53.853 INFO 83952403 --- [HP.TASK205.CJSA] o.s.web.servlet.DispatcherServlet : Initializing Servlet
'dispatcherServlet'
[7/7/20 9:25:53:863 GMT] 00000045 SystemOut O 2020-07-07 09:25:53.863 INFO 83952403 --- [HP.TASK205.CJSA] o.s.web.servlet.DispatcherServlet : Completed initializa
tion in 10 ms
[7/7/20 9:25:53:863 GMT] 00000045 com.ibm.ws.webcontainer.servlet I SRVE0242I: [cics-java-liberty-springboot-jcics-0.1.0] [/cics-java-liberty-springboot-jcics-ding] [dispatcherServlet]: Initia
lization successful.
Comme dans l'exemple précédent, essayez d'exécuter l'application qui écrit sur TSQ à partir de votre navigateur. Cette fois, la chaîne de caractères à écrire est "I LOVE CCDS2". Le résultat a été renvoyé normalement. Lorsque j'ai vérifié avec CEBR depuis le terminal CICS, j'ai pu confirmer que les données étaient correctement écrites!
Avec la base CICS TS V5.5 + APAR PH14856 ou V5.6, vous pouvez traiter l'application Spring Boot comme un programme CICS traditionnel, de sorte que vous pouvez appeler le programme Spring Boot avec EXEC CICS LINK ou avec EXEC CICS START. Vous pourrez l'appeler. Référence: Lien vers une application Java EE ou Spring Boot à partir d'un programme CICS
Ici, nous allons essayer un scénario qui appelle l'application Spring Boot avec EXEC CICS LINK à partir d'un langage tel que COBOL. Lors de l'appel de l'application Spring Boot avec EXEC CICS LINK, Channel & Container est utilisé pour le transfert de données, mais par souci de simplicité, nous ajouterons et implémenterons simplement uniquement la partie appel de programme sans effectuer de transfert de données. ..
Lors de la configuration pour appeler un programme sur Liberty, il est nécessaire d'ajouter cicsts: link-1.0
comme fonction de Liberty qui est le runtime. Ajoutez la fonction comme indiqué ci-dessous et redémarrez le serveur JVM (Disabled => Enabled).
server.xml
...
<featureManager>
<feature>cicsts:core-1.0</feature>
<feature>cicsts:defaultApp-1.0</feature>
<feature>jsp-2.3</feature>
<feature>wab-1.0</feature>
<feature>transportSecurity-1.0</feature>
<feature>cicsts:link-1.0</feature>
</featureManager>
...
Importez l'exemple de projet fourni par GitHub mentionné ci-dessus dans Eclipse. Ici, nous utiliserons Eclipse fourni en tant qu'explorateur CICS.
Installez l'intégration de Buildship Gradle à partir du marché Eclipse.
Dans la vue Explorateur de packages de la perspective Java, cliquez avec le bouton droit de la souris sur - Importer - Projet à partir d'un dossier ou d'une archive, sélectionnez le répertoire du projet cloné et importez-le.
Après l'importation, un x rouge est attaché et une erreur s'affiche.
Faites un clic droit sur le projet --Gradle --Refresh Gradle Project
L'erreur a disparu!
Tout d'abord, ajoutez une dépendance à build.gradle. Ajoutez ce qui suit aux dépendances.
build.gradle
...
dependencies
{
...
// for @CICSProgram annotation
compileOnly ("com.ibm.cics:com.ibm.cics.server.invocation.annotations")
annotationProcessor ("com.ibm.cics:com.ibm.cics.server.invocation:5.6")
}
Exécutez le projet Refresh Gradle.
Créez les fichiers suivants dans le même package que WriteTSQController.java.
WriteTSQLinked.java
package com.ibm.cicsdev.springboot.jcics;
import org.springframework.stereotype.Component;
import com.ibm.cics.server.CicsConditionException;
import com.ibm.cics.server.TSQ;
import com.ibm.cics.server.invocation.CICSProgram;
@Component
public class WriteTSQLinked {
@CICSProgram("WRTTSQ")
public void writeTSQlinked()
{
String tsqName = "SPGJCICS";
String record = "ILOVECICS3";
// Write to the TSQ
try {
// Construct the TSQ object
TSQ tsqQ = new TSQ();
tsqQ.setName(tsqName);
// write the record to the TSQ
tsqQ.writeString(record);
} catch ( CicsConditionException e) {
// Print the stack trace
e.printStackTrace();
}
}
}
L'annotation @ CICSProgram
rend la méthode immédiatement après qu'elle soit reconnue comme un programme CICS nommé" WRTTSQ ".
Si vous souhaitez le reconnaître en tant que programme CICS, vous devez définir la méthode avec une spécification publique et sans argument.
Cette fois, j'ai ajouté la logique pour écrire la valeur ILOVECICS3 au TSQ appelé SPGJCICS en incorporant sans aucun argument.
C:\y\workspace\cicsts56\cics-springboot02>gradlew bootWar
BUILD SUCCESSFUL in 7s
2 actionable tasks: 2 executed
C:\y\workspace\cicsts56\cics-springboot02>gradlew deployCICSBundle
> Task :cics-springboot-bundle04:buildCICSBundle
Adding Java-based bundle parts from 'cicsBundlePart' dependency configuration
Adding Java-based bundle part: 'C:\y\workspace\cicsts56\cics-springboot02\cics-java-liberty-springboot-jcics\build\libs\cics-java-liberty-springboot-jcics-0.1.0.war'
Adding non-Java-based bundle parts from 'src/main/resources'
> Task :cics-springboot-bundle04:deployCICSBundle
Task deployCICSBundle
BUILD SUCCESSFUL in 1m 31s
4 actionable tasks: 3 executed, 1 up-to-date
Une fois terminé, le bundle sera installé et le WAR sera installé en tant que partie du bundle. De plus, la méthode spécifiée par @ CICSProgram
qui y est incluse est reconnue comme un programme CICS, de sorte que le programme CICS" WRTTSQ "est installé.
Les détails de la définition du programme installé sont comme ceci (vérifiez avec CICS Explorer)
Un message comme celui-ci apparaît dans le JOBLOG de la région cible.
DFHRL0107 I 07/08/2020 15:40:30 CT56B4A1 CICSUSER The CICS resource lifecycle manager has started to create the BUNDLE resource
SPBBUNDL.
DFHRL0125 I 07/08/2020 15:40:30 CT56B4A1 CICSUSER BUNDLE resource SPBBUNDL is being created with BUNDLEID cics-springboot-bundle04
and version 1.0.0.
DFHSJ1105 07/08/2020 15:40:30 CT56B4A1 WAR bundle cics-java-liberty-springboot-jcics-0.1.0 version 1.0.0 from BUNDLE SPBBUNDL has
been installed as Disabled.
DFHRL0108 I 07/08/2020 15:40:30 CT56B4A1 CONL The CICS resource lifecycle manager is in the process of creating the BUNDLE resource
SPBBUNDL and the BUNDLE is in the enabling state.
DFHRD0128 I 07/08/2020 15:40:30 CT56B4A1 CICSUSER CONL INSTALL BUNDLE(SPBBUNDL)
???? ??? CONL CICSUSER 07/08/20 15:40:30 INSTALL BUNDLE(SPBBUNDL) GROUP(TAGGRP)
DFHFC0961 07/08/2020 15:40:30 CT56B4A1 Calculation of LSR pool 1 parameters incomplete. Filename DFHDBFK has no DSNAME.
DFHPG0101 07/08/2020 15:40:34 CT56B4A1 CICSUSER CJSP Resource definition for WRTTSQ has been added.
DFHSJ1204 07/08/2020 15:40:34 CT56B4A1 A linkable service has been registered for program WRTTSQ in JVMSERVER DFHWLP with classname
com.ibm.cicsdev.springboot.jcics.WriteTSQLinked, method writeTSQlinked.
DFHSJ1107 07/08/2020 15:40:34 CT56B4A1 WAR bundle with symbolic name cics-java-liberty-springboot-jcics-0.1.0 version 1.0.0 has bee
Enabled.
DFHRL0132 I 07/08/2020 15:40:34 CT56B4A1 CJSL All defined resources for BUNDLE SPBBUNDL are now in the enabled state.
DFHAP1900 07/08/2020 15:40:40 CT56B4A1 NONE CICSUSER CONL SET BUNDLE(SPBBUNDL) ENABLESTATUS(ENABLED) RESP(NORMAL) RESP2(0).
Émettons simplement «CECI LINK PROGRAM (WRTTSQ)» à partir du terminal CICS.
Vérifions le contenu de TSQ "SPG JCICS" avec CEBR.
Le message attendu est écrit! Vous pouvez maintenant voir le déroulement de l'appel de l'application Spring Boot à l'aide de EXEC CICS LINK!
Recommended Posts