Application Java CICS-Run - (4) Application Spring Boot

introduction

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.

Article associé

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

Préparation préalable

Environnement de développement (PC)

Environnement de développement Java EE approprié

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

Environnement d'exécution (z / OS, CICS)

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.

Profil JVM

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.

Définition du serveur JVM

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)           

Changer server.xml

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

Exemple de contrôle de fonctionnement (1) / Déploiement manuel

Tout d'abord, essayez de suivre les étapes fournies sur github. Référence: cics-java-liberty-springboot-jcics

Clonage local

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.

Comprendre la structure des fichiers

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.

Vérifier / modifier le contenu

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

Construire

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

Déployer

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)

Vérification du fonctionnement de l'application

À 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. image.png J'ai pu confirmer que les données ont été saisies correctement.

Exemple de contrôle de fonctionnement (2) / Déploiement par Gradle

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>

Création multi-projets Gradle

Ajoutez un projet CICS Bundle et créez un projet parent à combiner avec le WAR fourni dans l'exemple.

Projet parent

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'

Pour le projet enfant (1) / WAR

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 le projet enfant (2) / CICS Bundle

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éation de définition de BUNDLE

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.

  • Ici, l'opération d'installation n'est pas encore effectuée.

Exécution de construction / déploiement

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. image.png

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.

Vérification du fonctionnement de l'application

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". image.png 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! image.png

Exemple de personnalisation

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. ..

Changer server.xml

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>
...

Importer un exemple de projet dans Eclipse

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. image.png image.png

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. image.png

Après l'importation, un x rouge est attaché et une erreur s'affiche. image.png

Faites un clic droit sur le projet --Gradle --Refresh Gradle Project image.png

L'erreur a disparu! image.png

Ajouter une logique

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.

Construire / déployer

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é.

image.png

Les détails de la définition du programme installé sont comme ceci (vérifiez avec CICS Explorer) image.png

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).        

Vérification du fonctionnement de l'application

Émettons simplement «CECI LINK PROGRAM (WRTTSQ)» à partir du terminal CICS. image.png

Vérifions le contenu de TSQ "SPG JCICS" avec CEBR. image.png

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

Application Java CICS-Run - (4) Application Spring Boot
Disponibilité de l'application Spring Boot 2.3
[Spring Boot] Création d'applications Web
[Java] Thymeleaf Basic (Spring Boot)
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Spring Java
Développement d'applications Spring Boot dans Eclipse
Points de révision du code de l'application Spring Boot
Elastic Beanstalk (Java) + Spring Boot + https
Créer une application d'enquête avec Spring Boot
Implémenter l'application Spring Boot dans Gradle
[Java] Intégration LINE avec Spring Boot
[Java] [Spring] Spring Boot Mystérieux hamarinet d'injection de dépendances
État de l'application Java 9+
Défi Spring Boot
Créer un projet Java Spring Boot avec IntelliJ
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
Construction de l'environnement de développement Java Spring Boot + Docker
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
[Java] Spring DI ③
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
Configurer l'application Spring Boot avec le module multiple maven
Créez une application Spring Boot à l'aide d'IntelliJ IDEA
Conseils Java - Créez un projet Spring Boot avec Gradle
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Application Java CICS-Run - (1) Exécutez un exemple d'application simple
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Déployer l'application Spring Boot sur Elastic Beanstalk
Procédure de construction de LINE Bot x Java (Spring Boot)
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Apprentissage de Spring Boot [Début]
Rédaction de mémos de démarrage de printemps (2)
Résumé du document Spring Boot 2.2
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot
[Java] [Spring Boot] Spécifier le profil d'exécution --Spring Boot à partir de NetBeans
Essayez d'utiliser OpenID Connect avec Keycloak (application Spring Boot)
Content-Type: application / json n'a pas charset = UTF-8 de Spring Boot 2.2
Remarque sur Java (WebSphere Application Server) [1]
[Spring Boot] Construction de l'environnement (macOS)
[Java / Kotlin] Traitement d'échappement (désinfection) pour HTML5 avec unbescape [Spring Boot]