cics java application development for everyone

38
CICS Java Application Development for Everyone Stew Francis – CICS Explorer Architect, CICS Developer Experience Technical Lead IBM November 10 th 2020 Session 5as

Upload: others

Post on 02-Jan-2022

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CICS Java Application Development for Everyone

CICS Java Application Development for EveryoneStew Francis – CICS Explorer Architect, CICS Developer Experience Technical LeadIBM

November 10th 2020Session 5as

Page 2: CICS Java Application Development for Everyone

PL/I

Java

C++

COBOLNode

• CICS is great at hosting polyglot applications

• CICS API handles transitioning between components in different languages

Page 3: CICS Java Application Development for Everyone

• CICS provides JVMs with tight integration with native applications, that can participate in business transactions

• We provide an API for interacting with CICS resources and other programs, called JCICS, in all of those JVMs

• Applications can be OSGi bundles, or Java EE web applications

Why’s Java a good choice?

Page 4: CICS Java Application Development for Everyone

WebSphere Liberty Profile• A streamlined version of WebSphere Application Server

• Runs Java web applications written to the Java EE specification

• Provides access to technologies like Servlets, JAX-RS, WebSockets, MicroProfile

• Rich set of capabilities you can use to extend and augment your existing CICS programs

Page 5: CICS Java Application Development for Everyone

5

• https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/(2020)

How popular is Java anyway?

“Over the last nine months, Java and JavaScript have remained the two dominant languages in the enterprise developer landscape…”

https://www.cloudfoundry.org/wp-content/uploads/Developer-Language-Report_FINAL.pdf (2018)

Page 6: CICS Java Application Development for Everyone
Page 7: CICS Java Application Development for Everyone

7

Why do we need CICS bundles?

A CICS bundle is a package for deploying resources into CICS

Once our Java application is deployed, we need some way of referring to it so we can e.g. un-deploy it later

CICS bundle provides us• Identity for a collection of resources• Means of life-cycling them• Means of supplying additional meta-data

For Java applications we must specify which JVM

CICS region JVMA

JVMB

JVMC

JVMD

<warbundlesymbolicname=”javaapp”jvmserver="JVMA"/>

Page 8: CICS Java Application Development for Everyone

8

What are Maven and Gradle?

Pluggable build systems and dependency management for Java applications

Dependency management:• Online catalog of libraries: Maven Central

• Used by both Maven and Gradle builds

• More than 3 million reusable components

• Applications can declare dependencies on these libraries

• Maven and Gradle take care of retrieving the library and using it at build-time / runtime

Page 9: CICS Java Application Development for Everyone

9

What are Maven and Gradle?

Pluggable build systems and dependency management for Java applications

Pluggable build systems• Create plugins which encapsulate build

logic

• Plugins are shareable across projects within an enterprise, or with the world

• Applications can declare dependencies on plugins too

Page 10: CICS Java Application Development for Everyone

10

60%

19%

11%

4%6%

0%

10%

20%

30%

40%

50%

60%

70%

Build tool

Build tool popularity

Maven Gradle Ant Other None

Source: Snyk Java ecosystem report 2018

Page 11: CICS Java Application Development for Everyone

11

How’s this fit into CICS Java development?

Not very smoothly!

• Java libraries for EXEC CICS API etc aren’t available on Maven Central

• We built bespoke support in CICS Explorer for automatically setting up a compilation environment for you• Doesn’t really help you if you want to use

Maven or Gradle, though.

• Once you have the API to code against set up locally, actually writing the code in CICS Explorer is pretty good

• However, to get your Java into CICS, need to use a CICS bundle

Page 12: CICS Java Application Development for Everyone

12

Our solution:

• Put our Java API libraries in Maven central• JCICS

com.ibm.cics.server• Annotations

com.ibm.cics.server.invocation.annotations• Annotation processor

com.ibm.cics.server.invocation

• Create a Maven plugin for authoring CICS bundles, which can be used directly in your Java application build toolchain

• Create a Gradle plugin for authoring CICS bundles, which can be used directly in your Java application build toolchain

<dependency><groupId>com.ibm.cics</groupId><artifactId>com.ibm.cics.server</artifactId><version>1.700.0-5.5-PH10453</version><scope>provided</scope>

</dependency>

<plugin><groupId>com.ibm.cics</groupId><artifactId>cics-bundle-maven-plugin</artifactId><version>0.0.1</version>

</plugin>

Page 13: CICS Java Application Development for Everyone

DevelopmentEnvironment CICS Region

Java application

Native application

DEPLOYJava application

LINK

JCICS Application

Page 14: CICS Java Application Development for Everyone

DevelopmentEnvironment CICS Region

Java applicationDeploy

JCICS Application• Have to deploy

applications to try them out

• Deploying can be awkward, especially when repeated many times

Java application

LINK

Native application

Page 15: CICS Java Application Development for Everyone

DevelopmentEnvironment CICS Region

Java applicationLINK

Native application

JCICSX Application • Can test LINK commands locally in dev environment

• JCICSX applications can then be deployed unchanged to a CICS region

Java applicationDeploy

OR

LINK

Native application

Page 16: CICS Java Application Development for Everyone

Java program

JCICSX-Native

Native program

JCICSX-HTTP Client

DEV ENVIRONMENT

CICS REGION

JCICSX-HTTPServer

• Same program can run in CICS via a native API implementation

• And remotely in development environments via an HTTP implementation

Page 17: CICS Java Application Development for Everyone

<?xml version="1.0" encoding="UTF-8"?><server description="CICS Liberty sample configuration">

<featureManager><feature>cicsts:core-1.0</feature><feature>cicsts:jcicsxServer-1.0</feature>

</featureManager>

<httpEndpoint host="*" httpPort="28953" httpsPort="-1"id="defaultHttpEndpoint"/>

<!-- CICS Bundle Installed Applications --><include location="${server.output.dir}/installedApps.xml" onConflict="IGNORE"/>

<webAppSecurity allowFailOverToBasicAuth="true"/><executor id="allowCICSconfigure" maxThreads="15"/>

</server>

Page 18: CICS Java Application Development for Everyone

<?xml version="1.0" encoding="UTF-8"?><server description="Sample Servlet server">

<featureManager><feature>jaxrs-2.0</feature><feature>usr:jcicsxClient-1.0</feature>

</featureManager>

<usr_jcicsxClient serverUri=”http://cicsex56.hursley.ibm.com:28951" />

<httpEndpoint httpPort="53331" id="defaultHttpEndpoint" host="*" /></server>

Page 19: CICS Java Application Development for Everyone
Page 20: CICS Java Application Development for Everyone

20

How does the API work?

DEV1

DEV2

DEV3

CMCI

CSD

CICSzFS

As developer As deploy user As region user

Page 21: CICS Java Application Development for Everyone

Summary

21

• JSON API-enabled a CICS program using a Java servlet

• Used Maven for development

• Tested the application locally using JCICSX remote development support

• Deployed to CICS, and verified the behaviour was identical

Page 22: CICS Java Application Development for Everyone

IntelliJ

22

Page 23: CICS Java Application Development for Everyone

VS Code

23

Page 24: CICS Java Application Development for Everyone

24

Eclipse Che

Page 25: CICS Java Application Development for Everyone
Page 26: CICS Java Application Development for Everyone

GraphQL app Native Program

CMCI JVM Server in CICS

JCICS link to program

Page 27: CICS Java Application Development for Everyone

CMCI JVM Server in CICS

GraphQL app Native Program

JCICSX link to program

Page 28: CICS Java Application Development for Everyone

CMCI JVM Server in CICS

GraphQL app Native Program

JCICSX link to program

JCICSX Server

JCICSX link to program

Local Liberty Server

Page 29: CICS Java Application Development for Everyone

Mock-based testing

Statically defined code-paths are more difficult to test with mock-based testing

JCICS includes some static methods, and requires you use the new keyword, which makes it difficult to inject test-doubles a.k.a. mocks

These tests would typically be accompanied by more exhaustive integration testing, to test all the units together

Page 30: CICS Java Application Development for Everyone

Mock-based testing

JCICSX is designed to accommodate mock-based tests, making it easy to unit test your java business logic in isolation, for exhaustive testing

program.link()

program.link()

Test success

Test failure

Put ”1” in container APut “Jones” in container B

Return to the caller

Throw an exception as if the program didn’t exist

Page 31: CICS Java Application Development for Everyone

Java program(Dev Environment) JCICSX server

Start Transaction

End Transaction

PUT CONTAINER

GET CONTAINER

PUT CONTAINER

LINK PROGRAM

• HTTP API explicitly creates and ends remote transactions

• This ensures that in development setups, transactions are the same

Page 32: CICS Java Application Development for Everyone

Spring Boot

Page 33: CICS Java Application Development for Everyone

Spring Boot • CICS TS 5.6 (and 5.5 by APAR) support Spring Boot applications

• https://developer.ibm.com/tutorials/spring-boot-java-applications-for-cics-part-1-jcics-maven-gradle/

• Starter projects are opinionated about Maven/Gradle, so fits nicely to have our dependencies there

• And now Spring Boot applications are easier to CICS Bundle

Page 34: CICS Java Application Development for Everyone

Requirements and Assumptions

• JCICSX available now in CICS TS 5.6• https://www.ibm.com/support/kno

wledgecenter/SSGMCP_5.6.0/applications/developing/java/jcicsx-api.html

• Remote development client • https://developer.ibm.com/wasdev/

downloads/#asset/features-com.ibm.cics.wlp.jcicsxClient-1.0

• Maven plugin• https://github.com/IBM/cics-

bundle-maven• Gradle plugin• https://github.com/IBM/cics-

bundle-gradle

Page 35: CICS Java Application Development for Everyone

Requirements and Assumptions

• Managed bundles API is available in CICS TS 5.6• https://www.ibm.com/support/kno

wledgecenter/SSGMCP_5.6.0/fundamentals/cpsm/cics-bundle-api.html

• Requires CPSM, we’re investigating support for standalone regions

• Maven samples• https://github.com/IBM/cics-

bundle-maven/tree/master/samples• Gradle samples• https://github.com/IBM/cics-

bundle-gradle/tree/master/samples• JCICSX Samples• https://github.com/cicsdev/cics-

java-jcicsx-samples

Page 36: CICS Java Application Development for Everyone

Q&A

Page 37: CICS Java Application Development for Everyone

Please submit your session feedback!

• Do it online at http://conferences.gse.org.uk/2020/feedback/5as

• This session is 5as

Page 38: CICS Java Application Development for Everyone

GSE UK Conference 2020 Charity

• The GSE UK Region team hope that you find this presentation and others that follow useful and help to expand your knowledge of z Systems. • Please consider showing your appreciation by kindly donating a small

sum to our charity this year, NHS Charities Together. Follow the link below or scan the QR Code:

http://uk.virginmoneygiving.com/GuideShareEuropeUKRegion