From 5a7a7c71a2f7f73da88f5e0c0764f550f5eb02e0 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Feb 2026 10:54:13 +0000 Subject: [PATCH 01/73] Initial Maven build for LINK --- .gitignore | 85 ++++ MAINTAINERS.md | 6 - blog/blog.md | 417 ------------------ blog/graphics/JCICS.png | Bin 17914 -> 0 bytes .../JavaExceptions-1-e1484928035395.png | Bin 155288 -> 0 bytes .../README.md | 13 +- cics-java-jcics-link-app/build.gradle | 28 ++ cics-java-jcics-link-app/pom.xml | 133 ++++++ cics-java-jcics-link-app/src/main/.gitignore | 1 + .../java}/com/ibm/cicsdev/link/LinkProg1.java | 0 .../java}/com/ibm/cicsdev/link/LinkProg2.java | 0 .../java}/com/ibm/cicsdev/link/LinkProg3.java | 0 .../com/ibm/cicsdev/link/LinkProgCommon.java | 0 .../com/ibm/cicsdev/link/LinkServEC01.java | 0 .../com/ibm/cicsdev/link/LinkServEduchan.java | 0 .../src/main/resources}/META-INF/MANIFEST.MF | 2 +- cics-java-jcics-link-bundle/pom.xml | 38 ++ etc/{ => DFHCSDUP}/Link/DFHCSD.txt | 0 etc/{ => DFHCSDUP}/Link/README.md | 0 etc/Serialize/DFHCSD.txt | 16 - etc/Serialize/README.md | 4 - etc/TDQ/DFHCSD.txt | 44 -- etc/TDQ/README.md | 4 - etc/TSQ/DFHCSD.txt | 53 --- etc/TSQ/README.md | 4 - etc/Terminal/DFHCSD.txt | 15 - etc/Terminal/README.md | 4 - etc/VSAM/DEFVSAM.jcl | 38 -- etc/VSAM/DFHCSD.txt | 182 -------- etc/VSAM/README.md | 5 - .../com.ibm.cicsdev.link.cicsbundle/.project | 0 .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 0 .../com.ibm.cicsdev.link.osgibundle | 0 .../.project | 0 .../org.eclipse.core.resources.prefs | 0 .../JAVALIN1.program | 0 .../JAVALIN2.program | 0 .../JAVALIN3.program | 0 .../JLN1.transaction | 0 .../JLN2.transaction | 0 .../JLN3.transaction | 0 .../META-INF/cics.xml | 0 pom.xml | 43 ++ projects/README.md | 45 -- projects/com.ibm.cicsdev.link/.classpath | 8 - projects/com.ibm.cicsdev.link/.gitignore | 1 - projects/com.ibm.cicsdev.link/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 7 - .../.settings/org.eclipse.pde.core.prefs | 4 - .../com.ibm.cicsdev.link/build.properties | 5 - projects/com.ibm.cicsdev.link/lib/EDUPGM.jar | Bin 2867 -> 0 bytes .../.project | 33 -- .../org.eclipse.core.resources.prefs | 3 - .../META-INF/cics.xml | 8 - .../com.ibm.cicsdev.serialize.osgibundle | 2 - .../.project | 33 -- .../org.eclipse.core.resources.prefs | 2 - .../JAVASYN1.program | 1 - .../JSY1.transaction | 1 - .../META-INF/cics.xml | 9 - projects/com.ibm.cicsdev.serialize/.classpath | 7 - projects/com.ibm.cicsdev.serialize/.gitignore | 1 - projects/com.ibm.cicsdev.serialize/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 7 - .../.settings/org.eclipse.pde.core.prefs | 4 - .../META-INF/MANIFEST.MF | 11 - projects/com.ibm.cicsdev.serialize/README.md | 27 -- .../build.properties | 4 - .../cicsdev/serialize/SerializeExample1.java | 180 -------- .../com.ibm.cicsdev.tdq.cicsbundle/.project | 29 -- .../org.eclipse.core.resources.prefs | 3 - .../META-INF/cics.xml | 8 - .../com.ibm.cicsdev.tdq.osgibundle | 2 - .../.project | 29 -- .../org.eclipse.core.resources.prefs | 2 - .../JAVATDQ1.program | 1 - .../JAVATDQ2.program | 1 - .../JAVATDQ3.program | 1 - .../JTD1.transaction | 1 - .../JTD2.transaction | 1 - .../JTD3.transaction | 1 - .../META-INF/cics.xml | 13 - projects/com.ibm.cicsdev.tdq/.classpath | 8 - projects/com.ibm.cicsdev.tdq/.gitignore | 1 - projects/com.ibm.cicsdev.tdq/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 7 - .../.settings/org.eclipse.pde.core.prefs | 4 - .../com.ibm.cicsdev.tdq/META-INF/MANIFEST.MF | 16 - projects/com.ibm.cicsdev.tdq/README.md | 77 ---- projects/com.ibm.cicsdev.tdq/build.properties | 5 - .../com.ibm.cicsdev.tdq/lib/TdqRecord.jar | Bin 7794 -> 0 bytes .../src/com/ibm/cicsdev/tdq/TDQCommon.java | 74 ---- .../src/com/ibm/cicsdev/tdq/TDQExample1.java | 125 ------ .../src/com/ibm/cicsdev/tdq/TDQExample2.java | 153 ------- .../src/com/ibm/cicsdev/tdq/TDQExample3.java | 152 ------- .../.project | 29 -- .../org.eclipse.core.resources.prefs | 3 - .../META-INF/cics.xml | 8 - .../com.ibm.cicsdev.terminal.osgibundle | 2 - .../.project | 33 -- .../org.eclipse.core.resources.prefs | 2 - .../JAVATRM1.program | 1 - .../JTM1.transaction | 1 - .../META-INF/cics.xml | 9 - projects/com.ibm.cicsdev.terminal/.classpath | 7 - projects/com.ibm.cicsdev.terminal/.gitignore | 1 - projects/com.ibm.cicsdev.terminal/.project | 33 -- .../META-INF/MANIFEST.MF | 12 - projects/com.ibm.cicsdev.terminal/README.md | 34 -- .../com.ibm.cicsdev.terminal/build.properties | 4 - .../cicsdev/terminal/TerminalExample1.java | 126 ------ .../com.ibm.cicsdev.tsq.cicsbundle/.project | 29 -- .../org.eclipse.core.resources.prefs | 3 - .../META-INF/cics.xml | 8 - .../com.ibm.cicsdev.tsq.osgibundle | 2 - .../.project | 33 -- .../org.eclipse.core.resources.prefs | 2 - .../JAVATSQ1.program | 1 - .../JAVATSQ2.program | 1 - .../JAVATSQ3.program | 1 - .../JAVATSQ4.program | 1 - .../JTS1.transaction | 1 - .../JTS2.transaction | 1 - .../JTS3.transaction | 1 - .../JTS4.transaction | 1 - .../META-INF/cics.xml | 15 - projects/com.ibm.cicsdev.tsq/.classpath | 8 - projects/com.ibm.cicsdev.tsq/.gitignore | 1 - projects/com.ibm.cicsdev.tsq/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 7 - .../.settings/org.eclipse.pde.core.prefs | 4 - .../com.ibm.cicsdev.tsq/META-INF/MANIFEST.MF | 16 - projects/com.ibm.cicsdev.tsq/README.md | 61 --- projects/com.ibm.cicsdev.tsq/build.properties | 5 - .../com.ibm.cicsdev.tsq/lib/TsqRecord.jar | Bin 7793 -> 0 bytes .../src/com/ibm/cicsdev/tsq/TSQCommon.java | 68 --- .../src/com/ibm/cicsdev/tsq/TSQExample1.java | 133 ------ .../src/com/ibm/cicsdev/tsq/TSQExample2.java | 161 ------- .../src/com/ibm/cicsdev/tsq/TSQExample3.java | 160 ------- .../src/com/ibm/cicsdev/tsq/TSQExample4.java | 129 ------ .../com.ibm.cicsdev.vsam.cicsbundle/.project | 29 -- .../org.eclipse.core.resources.prefs | 3 - .../META-INF/cics.xml | 8 - .../com.ibm.cicsdev.vsam.osgibundle | 2 - .../.project | 29 -- .../org.eclipse.core.resources.prefs | 2 - .../JAVAVES1.program | 1 - .../JAVAVES2.program | 1 - .../JAVAVES3.program | 1 - .../JAVAVES4.program | 1 - .../JAVAVES5.program | 1 - .../JAVAVKS1.program | 1 - .../JAVAVKS2.program | 1 - .../JAVAVKS3.program | 1 - .../JAVAVKS4.program | 1 - .../JAVAVKS5.program | 1 - .../JAVAVRR1.program | 1 - .../JAVAVRR2.program | 1 - .../JAVAVRR3.program | 1 - .../JAVAVRR4.program | 1 - .../JAVAVRR5.program | 1 - .../JVE1.transaction | 1 - .../JVE2.transaction | 1 - .../JVE3.transaction | 1 - .../JVE4.transaction | 1 - .../JVE5.transaction | 1 - .../JVK1.transaction | 1 - .../JVK2.transaction | 1 - .../JVK3.transaction | 1 - .../JVK4.transaction | 1 - .../JVK5.transaction | 1 - .../JVR1.transaction | 1 - .../JVR2.transaction | 1 - .../JVR3.transaction | 1 - .../JVR4.transaction | 1 - .../JVR5.transaction | 1 - .../META-INF/cics.xml | 37 -- projects/com.ibm.cicsdev.vsam/.classpath | 8 - projects/com.ibm.cicsdev.vsam/.gitignore | 1 - projects/com.ibm.cicsdev.vsam/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 7 - .../.settings/org.eclipse.pde.core.prefs | 4 - .../com.ibm.cicsdev.vsam/META-INF/MANIFEST.MF | 28 -- projects/com.ibm.cicsdev.vsam/README.md | 32 -- .../com.ibm.cicsdev.vsam/build.properties | 5 - projects/com.ibm.cicsdev.vsam/lib/vsam.jar | Bin 7443 -> 0 bytes .../com/ibm/cicsdev/vsam/StockPartHelper.java | 234 ---------- .../ibm/cicsdev/vsam/VsamExampleCommon.java | 62 --- .../ibm/cicsdev/vsam/esds/EsdsExample1.java | 55 --- .../ibm/cicsdev/vsam/esds/EsdsExample2.java | 63 --- .../ibm/cicsdev/vsam/esds/EsdsExample3.java | 86 ---- .../ibm/cicsdev/vsam/esds/EsdsExample4.java | 37 -- .../ibm/cicsdev/vsam/esds/EsdsExample5.java | 96 ---- .../cicsdev/vsam/esds/EsdsExampleCommon.java | 268 ----------- .../ibm/cicsdev/vsam/ksds/KsdsExample1.java | 55 --- .../ibm/cicsdev/vsam/ksds/KsdsExample2.java | 65 --- .../ibm/cicsdev/vsam/ksds/KsdsExample3.java | 89 ---- .../ibm/cicsdev/vsam/ksds/KsdsExample4.java | 85 ---- .../ibm/cicsdev/vsam/ksds/KsdsExample5.java | 102 ----- .../cicsdev/vsam/ksds/KsdsExampleCommon.java | 361 --------------- .../ibm/cicsdev/vsam/rrds/RrdsExample1.java | 61 --- .../ibm/cicsdev/vsam/rrds/RrdsExample2.java | 68 --- .../ibm/cicsdev/vsam/rrds/RrdsExample3.java | 89 ---- .../ibm/cicsdev/vsam/rrds/RrdsExample4.java | 86 ---- .../ibm/cicsdev/vsam/rrds/RrdsExample5.java | 94 ---- .../cicsdev/vsam/rrds/RrdsExampleCommon.java | 388 ---------------- 207 files changed, 339 insertions(+), 5905 deletions(-) create mode 100644 .gitignore delete mode 100644 MAINTAINERS.md delete mode 100644 blog/blog.md delete mode 100644 blog/graphics/JCICS.png delete mode 100644 blog/graphics/JavaExceptions-1-e1484928035395.png rename {projects/com.ibm.cicsdev.link => cics-java-jcics-link-app}/README.md (67%) create mode 100644 cics-java-jcics-link-app/build.gradle create mode 100644 cics-java-jcics-link-app/pom.xml create mode 100644 cics-java-jcics-link-app/src/main/.gitignore rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkProg1.java (100%) rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkProg2.java (100%) rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkProg3.java (100%) rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkProgCommon.java (100%) rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkServEC01.java (100%) rename {projects/com.ibm.cicsdev.link/src => cics-java-jcics-link-app/src/main/java}/com/ibm/cicsdev/link/LinkServEduchan.java (100%) rename {projects/com.ibm.cicsdev.link => cics-java-jcics-link-app/src/main/resources}/META-INF/MANIFEST.MF (96%) create mode 100644 cics-java-jcics-link-bundle/pom.xml rename etc/{ => DFHCSDUP}/Link/DFHCSD.txt (100%) rename etc/{ => DFHCSDUP}/Link/README.md (100%) delete mode 100644 etc/Serialize/DFHCSD.txt delete mode 100644 etc/Serialize/README.md delete mode 100644 etc/TDQ/DFHCSD.txt delete mode 100644 etc/TDQ/README.md delete mode 100644 etc/TSQ/DFHCSD.txt delete mode 100644 etc/TSQ/README.md delete mode 100644 etc/Terminal/DFHCSD.txt delete mode 100644 etc/Terminal/README.md delete mode 100644 etc/VSAM/DEFVSAM.jcl delete mode 100644 etc/VSAM/DFHCSD.txt delete mode 100644 etc/VSAM/README.md rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.cicsbundle/.project (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/.project (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction (100%) rename {projects => etc/eclipse_projects}/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml (100%) create mode 100644 pom.xml delete mode 100644 projects/README.md delete mode 100644 projects/com.ibm.cicsdev.link/.classpath delete mode 100644 projects/com.ibm.cicsdev.link/.gitignore delete mode 100644 projects/com.ibm.cicsdev.link/.project delete mode 100644 projects/com.ibm.cicsdev.link/.settings/org.eclipse.jdt.core.prefs delete mode 100644 projects/com.ibm.cicsdev.link/.settings/org.eclipse.pde.core.prefs delete mode 100644 projects/com.ibm.cicsdev.link/build.properties delete mode 100644 projects/com.ibm.cicsdev.link/lib/EDUPGM.jar delete mode 100644 projects/com.ibm.cicsdev.serialize.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle delete mode 100644 projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program delete mode 100644 projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction delete mode 100644 projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.serialize/.classpath delete mode 100644 projects/com.ibm.cicsdev.serialize/.gitignore delete mode 100644 projects/com.ibm.cicsdev.serialize/.project delete mode 100644 projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.jdt.core.prefs delete mode 100644 projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.pde.core.prefs delete mode 100644 projects/com.ibm.cicsdev.serialize/META-INF/MANIFEST.MF delete mode 100644 projects/com.ibm.cicsdev.serialize/README.md delete mode 100644 projects/com.ibm.cicsdev.serialize/build.properties delete mode 100644 projects/com.ibm.cicsdev.serialize/src/com/ibm/cicsdev/serialize/SerializeExample1.java delete mode 100644 projects/com.ibm.cicsdev.tdq.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction delete mode 100644 projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.tdq/.classpath delete mode 100644 projects/com.ibm.cicsdev.tdq/.gitignore delete mode 100644 projects/com.ibm.cicsdev.tdq/.project delete mode 100644 projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.jdt.core.prefs delete mode 100644 projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.pde.core.prefs delete mode 100644 projects/com.ibm.cicsdev.tdq/META-INF/MANIFEST.MF delete mode 100644 projects/com.ibm.cicsdev.tdq/README.md delete mode 100644 projects/com.ibm.cicsdev.tdq/build.properties delete mode 100644 projects/com.ibm.cicsdev.tdq/lib/TdqRecord.jar delete mode 100644 projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQCommon.java delete mode 100644 projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample1.java delete mode 100644 projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample2.java delete mode 100644 projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample3.java delete mode 100644 projects/com.ibm.cicsdev.terminal.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle delete mode 100644 projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program delete mode 100644 projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction delete mode 100644 projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.terminal/.classpath delete mode 100644 projects/com.ibm.cicsdev.terminal/.gitignore delete mode 100644 projects/com.ibm.cicsdev.terminal/.project delete mode 100644 projects/com.ibm.cicsdev.terminal/META-INF/MANIFEST.MF delete mode 100644 projects/com.ibm.cicsdev.terminal/README.md delete mode 100644 projects/com.ibm.cicsdev.terminal/build.properties delete mode 100644 projects/com.ibm.cicsdev.terminal/src/com/ibm/cicsdev/terminal/TerminalExample1.java delete mode 100644 projects/com.ibm.cicsdev.tsq.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction delete mode 100644 projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.tsq/.classpath delete mode 100644 projects/com.ibm.cicsdev.tsq/.gitignore delete mode 100644 projects/com.ibm.cicsdev.tsq/.project delete mode 100644 projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.jdt.core.prefs delete mode 100644 projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.pde.core.prefs delete mode 100644 projects/com.ibm.cicsdev.tsq/META-INF/MANIFEST.MF delete mode 100644 projects/com.ibm.cicsdev.tsq/README.md delete mode 100644 projects/com.ibm.cicsdev.tsq/build.properties delete mode 100644 projects/com.ibm.cicsdev.tsq/lib/TsqRecord.jar delete mode 100644 projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQCommon.java delete mode 100644 projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample1.java delete mode 100644 projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java delete mode 100644 projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample3.java delete mode 100644 projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample4.java delete mode 100644 projects/com.ibm.cicsdev.vsam.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction delete mode 100644 projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml delete mode 100644 projects/com.ibm.cicsdev.vsam/.classpath delete mode 100644 projects/com.ibm.cicsdev.vsam/.gitignore delete mode 100644 projects/com.ibm.cicsdev.vsam/.project delete mode 100644 projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.jdt.core.prefs delete mode 100644 projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.pde.core.prefs delete mode 100644 projects/com.ibm.cicsdev.vsam/META-INF/MANIFEST.MF delete mode 100644 projects/com.ibm.cicsdev.vsam/README.md delete mode 100644 projects/com.ibm.cicsdev.vsam/build.properties delete mode 100644 projects/com.ibm.cicsdev.vsam/lib/vsam.jar delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/StockPartHelper.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/VsamExampleCommon.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample1.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample2.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample3.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample4.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample5.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java delete mode 100644 projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d26f39 --- /dev/null +++ b/.gitignore @@ -0,0 +1,85 @@ +# Maven ignores +target/ +local-repo/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +# Eclipse m2e generated files +# Eclipse Core +#.project +# JDT-specific (Eclipse Java Development Tools) +#.classpath + + +# Gradle ignores +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +#.project +# JDT-specific (Eclipse Java Development Tools) +#.classpath + + +# Java ignores +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + + +# VSCode ignores +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix diff --git a/MAINTAINERS.md b/MAINTAINERS.md deleted file mode 100644 index e49e43f..0000000 --- a/MAINTAINERS.md +++ /dev/null @@ -1,6 +0,0 @@ -# Maintainers - -- Phil Wakelin [@PhilWakelin](https://github.com/PhilWakelin) -- Ian Burnett [@ian-burnett](https://github.com/ian-burnett) - -*Last reviewed:* November 2024 diff --git a/blog/blog.md b/blog/blog.md deleted file mode 100644 index a702506..0000000 --- a/blog/blog.md +++ /dev/null @@ -1,417 +0,0 @@ -# Getting to grips with JCICS - - -JCICS provides a simple object hierarchy for accessing the CICS API from Java, and is similar to the EXEC CICS command API supported for other languages such as COBOL or assembler. Unlike other CICS high level languages, no translation step is necessary during compilation as the underlying EXEC CICS calls are dynamically generated via the Java Native Interface (JNI). JCICS is a fairly simple API and if you understand the EXEC CICS API and have some knowledge of Java then its a small jump to make. This does mean its not as object oriented as it could be, so if you have an OO outlook on life you may need to bite your tongue at times. - -![JCICS](graphics/JCICS.png) - -The following tutorial summarizes how to use the most popular parts of the JCICS API within CICS Java programs for deployment to an OSGi JVM server. You can also use JCICS in a Web application deployed into a Liberty JVM server in integrated mode, and the code samples provided are equally applicable to this environment.. - -# Application development - -The JCICS API is provided in the com.ibm.cics.server.jar library in the $USSHOME/lib directory on zFS, however, it is also integrated into the [CICS Explorer](https://developer.ibm.com/cics/category/cics-explorer/) SDK for Java which can be installed into an Eclipse development environment and provides all the function needed to easily develop JCICS applications on a workstation and deploy onto the zFS filing system on z/OS. The JCICS API can be used in any CICS JVM server environment including both OSGi and Liberty JVM servers. In this article we show how to create components for an OSGi JVM server that can be linked to from other CICS programs, but the samples provided can easily be reused in a Java EE web application for deployment into a Liberty JVM server. - -At the last count there were around 80 different classes that map to the underlying CICS commands or variants thereof, and you can view the full set in the online [Javadoc](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.jcics.javadoc/overview-tree.html). Most JCICS classes have a one to one relationship with the EXEC CICS API commands but this is not always the case. The most commonly used JCICS classes are Task, Program, Channel, Container, TSQ, TDQ and KSDS and we will give an overview of how to use these within a CICS Java program for deployment into an OSGi JVM server. - -| Class | Function | -| --------- | -------- | -| Task | Represents the CICS task | -| Program | Provides the ability to LINK to other CICS programs | -| Channel and Container | Support for CICS channels and containers | -| TSQ | Access to CICS temporary storage queues | -| TDQ | Access to CICS transient data queues | -| KSDS | Access to VSAM KSDS files | - -> There is no support for the CICS Systems Programming interface (SPI) such as `EXEC CICS INQUIRE` or `SET` commands and so Java applications that need to use these commands should link to non\-Java components to perform SPI commands - -## Tasks and programs - -Lets first take a look at the two classes you are most likely to need *Task* and *Program*. The Program class maps to the [EXEC CICS LINK](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_link.html) command and its variants, and the Task class maps to the [](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html)[ASSIGN](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html) and [ADDRESS](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_address.html) commands but also provides a set of helper methods to access the EIB and to control syncpoints and abends, but more about this later. - -The following code snippet shows how to use Task and Program to link to another CICS program, and is described in more detail using the line numbers below. A full working example is available in the [LinkProg1](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java) sample. - - -```java -private static final String PROG_NAME = "EC01"; -private static final int CA_LEN = 18 ; -.... -public static void main(String[] args) -{ -... - Task task = Task.getTask(); - task.out.println("Hello world"); - - Program prog = new Program(); - prog.setName(PROG_NAME); - prog.setSyncOnReturn(false); - byte[] ca = new byte[CA_LEN]; - prog.link(ca); -``` - - -Lines **1\-2.** Initialize constants including name of CICS program and length of COMMAREA input -Line **4.** The `main(String[] args)` constructor signifies this as the entry point for this CICS program, which allows this class to be named in the CICS\-MainClass header in the OSGi bundle manifest -Line **7.** Get the Task object representing the CICS task which the current Java thread is using, this will drive the underlying CICS ASSIGN command on first usage -Line **8.** Send output to the print writer which will be directed to either the user’s terminal or the stdout if there is no terminal -Line **10.** Instantiate an instance of a Program, and then set properties such as the name and whether or not the LINK will use the SYNCONRETURN option -Line **13.** Create a byte array and then pass this as input on the `Program.link()` method. This will drive an `EXEC CICS LINK` command to the CICS program named in line 11 -The COMMAREA will be passed as a byte array, which is an unstructured array of bytes of the specified length. Most CICS programs expect structured data as input and if you need to build a Java bean to map to this you can use the IBM Record Generator for Java or the Rational J2C Tools to build wrapper classes to map the records, see [Building Java records from COBOL with the IBM Record Generator for Java](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/). Note, there is no return type from the `Program.link()` method, this is often the case in JCICS and instead the data is updated in situ within the referenced COMMAREA. - -The program that is invoked by a link command can also be written in Java, and in our case will be passed the COMMAREA as a simple byte array. A sample Java version of the EC01 CICS COBOL program is shown below which shows how to use the *CommAreaHolder* class to receive the byte array mapping to the COMMAREA. A full working example is available in the [LinkServEC01](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java) sample. - -```java -public class LinkServEC01 -{ - private static final int CA_LEN = 18 ; - private static final String CA_LEN_ABCODE = "LEN"; - private static final SimpleDateFormat dfTime = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); - private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - public static void main(CommAreaHolder cah) - { - - Task task = Task.getTask(); - - if (cah.getValue().length < CA_LEN ) - { - task.abend(CA_LEN_ABCODE); - } - - Date timestamp = new Date(); - byte ba[] = dfTime.format(timestamp).getBytes(CCSID); - System.arraycopy (ba, 0, cah.getValue(), 0, ba.length); - ... - } -``` - - -Lines **3\-5.** Initialize constants -Line **6.** Get the local encoding of the CICS region, this defaults to EBCDIC -Lines **13\-16.** Check input array is long enough, and terminate the task using an abend if input is too short -Lines **18\-19.** Build time string for return to caller -Lines **20\-21.** Create byte array from the time string using the CICS encoding and copy into the CommAreaHolder for return to the calling program as the COMMAREA - -## Exception handling - -In Java errors other than *RuntimeException* that extend the *Exception* class are known as checked exceptions and must either be caught or declared as part of the method signature using the throws keyword. Any Java code which calls a method declared as throwing a checked exception must either provide logic to catch the checked exception, or add the exception to it’s own method signature, in order to propagate the exception further up the stack. The constraints on checked exceptions are enforced at compile time, and failure to adhere to the specification will result in a compilation error. - -By contrast in traditional high level languages such as COBOL, when a CICS command returns an error (such as unknown program on a link), then it will return a response code (PGMIDERR) to the application using the data area supplied in the RESP parameter of the CICS command . This enables the application to handle or ignore errors on a call by call basis. - -```cobol -EXEC CICS LINK PROGRAM('ECIPROG') RESP(RESP) - END-EXEC -IF RESP = DFHRESP(INVREQ) - ....... -END-IF -``` - -In Java things are pretty similar as just about all JCICS commands can throw sub classes of the checked *CICSConditionException*, which represent error response codes from the underlying EXEC CICS commands. For a INVREQ this maps to an InvalidRequestException which looks like this in the class hierarchy. - -```java -java.lang.Exception - com.ibm.cics.server.CicsException - com.ibm.cics.server.CicsConditionException - com.ibm.cics.server.CicsResponseConditionException - com.ibm.cics.server.InvalidRequestException -``` - -Now let’s see how this can be used in our `Program.link()` call. Each sub class of `CicsConditionException` can be individually caught so specific errors can be actioned or ignored. -Order is important, a compilation error is displayed if a catch clause for a more generic exception appears before a catch clause for a more specific one (that is, for one of its subclasses). In our example we just log a message for the `InvalidRequestException` and carry on processing. Note this means the transaction will continue normal processing and thus potentially commit any recoverable data, so make sure you don’t do this for fatal errors. We then catch all other CICS errors (**17**) and throw them up the stack using a new `RuntimeException` to drive subsequent error handling, which by default will abend the CICS task and rollback the transaction, but more about that later. - -```java -task task = Task.getTask(); -task.out.println("Hello world"); - -try -{ - Program prog = new Program(); - prog.setName(PROG_NAME); - prog.setSyncOnReturn(false); - byte[] ca = new byte[CA_LEN]; - prog.link(ca); - -} -catch (InvalidRequestException ire) -{ - task.out.println("Invalid request on link - INVREQ"); -} -catch (CicsConditionException cce) -{ - throw new RuntimeException(cce); -} -``` - -## Channels and containers - -The other method of passing data from one CICS program to another is by using channels and containers. A channel is an interface between programs, it typically holds one or more containers to be passed between the programs. A container is a named data area. Channels and containers offer the advantage that more than 32KB of data can be passed, and both character and binary data can be specified. Character data (or strings in Java terms) is automatically converted at the API level, whereas binary data (or a byte array in Java terms) is flowed unconverted. By contrast, COMMAREAs are confined to a 32KB limit and are unstructured byte arrays. Multiple containers can be passed between programs within a channel, providing a high degree of flexibility about how to structure data. - -The following abbreviated code snippet shows how to use channels and containers to pass a character string input container on a LINK and then to retrieve and read both a character string and a binary container. A full working example is available in the [LinkProg3](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java) sample and the corresponding back end program is available at [LinkServEduchan](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java). - - -```java - - private static final String PROG_NAME = "EDUCHAN"; - private static final String CHANNEL="EDUCHAN"; - private static final String INPUT_CONTAINER="INPUTDATA"; - private static final String DATE_CONTAINER="CICSTIME"; - private static final String CICSRC_CONTAINER="CICSRC"; - private static final String INPUTSTRING="Hello from Java"; -.... - - Task task = Task.getTask(); - Program prog = new Program(); - prog.setName(PROG_NAME); -.... - - Channel testChannel = task.createChannel(CHANNEL); - Container inputContainer = testChannel.createContainer(INPUT_CONTAINER); - inputContainer.putString(INPUTSTRING); - - prog.link(testChannel); - - Container charContainer = testChannel.getContainer(DATE_CONTAINER); - if (charContainer!=null) - { - resultStr = charContainer.getString(); - } - - Container bitContainer = testChannel.getContainer(CICSRC_CONTAINER); - if (bitContainer!=null) - { - byte[] ba = bitContainer.get(); - ByteBuffer bb = ByteBuffer.wrap(ba); - cicsrc = bb.getInt(); - -``` - - -Lines **1\-6.** Initialize constants to define program name, and container data and names. -Line **14.** Create a `Channel` object which will be associated with the task. -Lines **15\-16.** Create the input container named `INPUTDATA`, the `createContainer()` method signature takes the String *Hello from Java* as input which will cause CICS to create a character based container as opposed to a binary container. The encoding of this data will be stored internally in UTF\-16 when created in Java in order to handle the Unicode String data, and will be automatically converted to the local EBCDIC encoding if read from a COBOL program. -Line **18.** Pass the channel as a reference on the `Program.link()` method, our invoked program [EDUCHAN](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/src/Cobol/EDUCHAN.cbl) will receive the `INPUTDATA` container, and will reverse the input data, and return the formatted time in a character container along with an integer return code in a binary container. -Lines **20\-23.** Create a new container object `charContainer` and get the character container defined as CICSTIME from the channel. This will return null (rather than throw a CICSConditionException which is the usual JCICS error model) if it does not exist, so we first test for null before reading the string data from it using the `Container.getString()` method. -Lines **26\-32.** Create a new container object `bitContainer` and get the binary container defined as CICSRC from the channel. Again this could return null if its not present so we first test for null. Next we create a byte array and get the data from the `bitContainer`. The data is actually a 32\-bit integer from a CICS response code, so we need to wrap this into a `ByteBuffer` and then read the integer from this. - -## TS and TD queues - -A temporary storage (TS) queue is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically created at runtime, unlike transient data (TD) queues that must be defined in advance. - -The following snippets show how to use the *TSQ* class to write string data to a TSQ and then read it back using a JCICS holder. A full working example of this code available in the [TSQExample2](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java) sample. - -```java -public class TSQExample2 extends TSQCommon -{ - private static final String TSQ_NAME = "MYTSQ"; - private static final int DEPTH_COUNT = 5; - private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - public static void main(String[] args) - { - TSQ tsq = new TSQ(); - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - for (int i = 1; i <= DEPTH_COUNT; i++) - { - - String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); - byte[] data; - try - { - data = msg.getBytes(CCSID); - } - catch (UnsupportedEncodingException uee) - { - throw new RuntimeException(uee); - } - try { - this.tsq.writeItem(data); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } - } - } -``` - - -Lines **3\-5.** Initialize constants -Lines **9\-11.** Create `TSQ` object and set TSQ name and storage type as MAIN (in memory) -Line **13.** Loop around writing multiple records to the TSQ -Lines **17\-21.** Create byte array from the input string using the CICS encoding -Line **27.** Write each item to the TSQ using the `TSQ.writeItem()` method - -The following method `readFromQueue()` shows how to use a JCICS `ItemHolder` to read bytes from a TSQ. - -```java -public void readFromQueue() -{ - ItemHolder holder = new ItemHolder(); - - for (int i = 1; i <= DEPTH_COUNT; i++) - { - - try - { - this.tsq.readItem(i, holder); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } - - byte[] data = holder.getValue(); - String strData; - try - { - strData = new String(data, CCSID); - } - catch (UnsupportedEncodingException uee) - { - throw new RuntimeException(uee); - } - .... - } -} -``` - - -Line **3.** Create a JCICS `ItemHolder` to be used to read bytes from the TSQ -Line **10.** Use the `TSQ.readItem()` method to loop around reading items from the TSQ into the ItemHolder, starting from an index of 1 as this is the first record in a TS queue > -Line **17.** Extract the byte array from the item holder -Line **21.** Create a new string using the CICS encoding - -Writing data to a TD queue is similar to TS and a set of examples is provided in the [com.ibm.cicsdev.tdq](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.tdq) project. - -## VSAM files - -VSAM is a high performance file storage access method widely used in CICS applications. There are 3 different types of VSAM files, key\-sequenced, entry\-sequence and relative record. In this article we will just cover the most popular type the key\-sequenced data set (KSDS) which is represented in JCICS via the *KSDS* class. - -The following snippets show how to use the KSDS class to read and write structured records to VSAM file. In this example a `StockPart` record is used to represent the structured record, and was created from a COBOL copybook structure using the [JZOS record generation](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/) tool. A full working example of this code is available in the [KsdsExample1](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds) sample which extends the class KsdsExampleCommon. - -```java -private static final String FILE_NAME = "XMPLKSDS"; -private final KSDS ksds; -.... - -public void addRecord(StockPart sp) -{ - this.ksds = new KSDS(); - this.ksds.setName(FILE_NAME); - byte[] record = sp.getByteBuffer(); - - byte[] key = StockPartHelper.getKey(sp); - - try - { - this.ksds.write(key, record); - } - catch (DuplicateRecordException dre) - { // Collision on the generated key - String strMsg = "Tried to insert duplicate key 0x%08X"; - Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); - throw new RuntimeException(dre); - } - catch (InvalidRequestException ire) - { - if ( ire.getRESP2() == 20 ) // File not addable - { - String strMsg = "Add operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } -} -``` - - -Line **9.** Get the byte structure from the generated record using the getByteBuffer() method on the StockPark record -Line **11.** Create a byte array containing the key for this record -Line **15.** Write the record into the VSAM file using the specified key -Lines **17&23.** Catch specific responses from the WRITE FILE commmand -Line **33.** Catch all other responses and throw an exception to abend the task - -## Unchecked exceptions, abends and rollbacks - -In Java unexpected error conditions are represented by Java classes which extend the `RuntimeException` class, and are known as *unchecked exceptions*. Unchecked exceptions are not subject to the compile time checking mandated for checked exceptions, although they can be caught if required. There are only a few unchecked exceptions in the JCICS API, and they all extend the `CICSRuntimeException` class. - -![JavaExceptions](graphics/JavaExceptions-1-e1484928035395.png) - -All of these unchecked exceptions that extend `CICSRuntimeException` represent conditions within CICS that should **not** generally be handled by an application. Java code running in CICS should not catch these exceptions without re\-throwing them, either explicitly in a catch block, or implicitly by catching a superclass of these exceptions such as `Exception` or `Throwable` as shown below. - -```java -try -{ - ... -} -catch ( Exception e ) -{ - ... -} -``` - - -Instead, they should be allowed to propagate out of the Java environment and back to CICS, where the task will abend. Note, included in this list is `AbendException` which represents an abend of a CICS task, and should only be caught if you wish to develop your own Java abend handling routine and re\-throw the Exception. If a Java exception such as a null pointer exception is allowed to propagate out of the Java code and back to the JVM server runtime, this is generally surfaced as one of the CICS abends prefixed with AJ. Most commonly, an uncaught exception will result in an AJ04 abend, and the transaction will be rolled\-back. The following snippet shows how to catch and log both trivial exceptions, CICS abends and other unchecked exceptions. - - -```java -try -{ -... -} -catch (TrivialException te) -{ - LOGGER.warn(); -} -catch (AbendException ae) -{ - LOGGER.warn("CICS Abend:" ae.getABCODE() + " Task:" + Task.getTask().getTaskNumber() ); - throw ae; -} -catch (Exception e) -{ - LOGGER.warn(); - throw e; -} -``` - -It is also possible for a Java application to rollback or abend the CICS task directly. This can be achieved using the `Task.rollback(`) or `Task.abend()` methods in the Task class, as shown in the LinkServEC01 sample. Abending the CICS task is similar in concept to the throwing of Java exception, as it allows a CICS abend handler written in COBOL (or another language) to take control of error processing. - - -```java -Task.getTask().abend(ABCODE) - -``` - -The various forms of the `Task.abend()` method allow an application to optionally specify an abend code or whether a dump is required. The forceAbend() methods provide the same options as the equivalent abend methods, but are equivalent to specifying the CANCEL keyword on the EXEC CICS ABEND command. Invoking a force abend method will always terminate the task abnormally, and overrides any existing CICS abend handlers that have been established for the task. - -Rolling back the transaction is equivalent to issuing an `EXEC CICS SYNCPOINT ROLLBACK` command, and will allow the task to continue but rollback all the updates that have taken place so far in the current unit\-of\-work. In JCICS this is achieved using the `Task.rollback()` method as shown below. - - -```java -try -{ - Task.getTask().rollback(); -} -catch (InvalidRequestException ire) -{ - ..... -} -``` - - -> **Note**: When accessing resources controlled by the Liberty transaction manager, such as a remote DB2 database using JDBC type 4 connectivity then it is necessary to use the Java transaction API (JTA) to create a Java transaction to control the global transaction scope, including the subordinate CICS unit\-of\-work. In this case it is not possible to use the `Task.rollback()` method and instead the JTA API should be used. For further details refer to this article [Using Java Transaction in CICS Liberty to coordinate JDBC updates](https://github.com/cicsdev/blog-cics-java-jta-jdbc/blob/main/blog.md). - ---- - -### Reference materials - -All the sample code for this tutorial is available at the following CICSDev GitHub repository [cics\-java\-jcics\-samples](https://github.com/cicsdev/cics-java-jcics-samples). - -For a more detailed discussion of JCICS and how to use it to integrate Java applications with CICS programs refer to the following Video Education course [Extending a CICS web application using JCICS](http://www.redbooks.ibm.com/redbooks.nsf/redbookabstracts/crse0302.html?Open) diff --git a/blog/graphics/JCICS.png b/blog/graphics/JCICS.png deleted file mode 100644 index 71d5e5a3164615ff2ba3c1e63b0a78ee7d278a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17914 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 Ksp4mb{{I^m$nn4c diff --git a/blog/graphics/JavaExceptions-1-e1484928035395.png b/blog/graphics/JavaExceptions-1-e1484928035395.png deleted file mode 100644 index cc83f76f57a23d4f7949db9983d33077ed5cf010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155288 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

?hw1zo{OIu__kfbtV*CfMBoVGkN1Cz9LGWh{ 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 + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-link + 1.0.0 + + + cics-java-jcics-link-app + bundle + CICS Java JCICS link application - Application + + + + cics-java-jcics-edupgm + Project libraries + file://${project.basedir}/local-repo + + ignore + + + + + + + com.ibm.cics + com.ibm.cics.server + + + + + com.ibm.cicsdev + cics-java-jcics-edupgm + 1.0 + + + + + + + org.apache.felix + maven-bundle-plugin + 6.0.0 + true + + + + com.ibm.cics.server;version="[1.500.0,3.0.0)",com.ibm.jzos.fields;resolution:=optional + + + + cics-java-jcics-edupgm + lib + ${bundle.symbolicName} + ${pom.version} + + + + + + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-link-app/src/main/.gitignore b/cics-java-jcics-link-app/src/main/.gitignore new file mode 100644 index 0000000..8de0bed --- /dev/null +++ b/cics-java-jcics-link-app/src/main/.gitignore @@ -0,0 +1 @@ +./njava/ \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg1.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg1.java diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg2.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg2.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg2.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg2.java diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg3.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProg3.java diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProgCommon.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProgCommon.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProgCommon.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkProgCommon.java diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkServEC01.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkServEC01.java diff --git a/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java b/cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkServEduchan.java similarity index 100% rename from projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java rename to cics-java-jcics-link-app/src/main/java/com/ibm/cicsdev/link/LinkServEduchan.java diff --git a/projects/com.ibm.cicsdev.link/META-INF/MANIFEST.MF b/cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF similarity index 96% rename from projects/com.ibm.cicsdev.link/META-INF/MANIFEST.MF rename to cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF index 520bf1d..5ecf150 100644 --- a/projects/com.ibm.cicsdev.link/META-INF/MANIFEST.MF +++ b/cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Sample JCICS code for use of LINK Bundle-SymbolicName: com.ibm.cicsdev.link -Bundle-Version: 1.0.0 +Bundle-Version: 1.0.1 Bundle-Vendor: IBM Bundle-RequiredExecutionEnvironment: JavaSE-1.8 CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, diff --git a/cics-java-jcics-link-bundle/pom.xml b/cics-java-jcics-link-bundle/pom.xml new file mode 100644 index 0000000..02d54ca --- /dev/null +++ b/cics-java-jcics-link-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-link + 1.0.0 + + + cics-java-jcics-link-bundle + cics-bundle + CICS Java JCICS link application - CICS bundle + + + + ${project.groupId} + cics-java-jcics-link-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.7 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/etc/Link/DFHCSD.txt b/etc/DFHCSDUP/Link/DFHCSD.txt similarity index 100% rename from etc/Link/DFHCSD.txt rename to etc/DFHCSDUP/Link/DFHCSD.txt diff --git a/etc/Link/README.md b/etc/DFHCSDUP/Link/README.md similarity index 100% rename from etc/Link/README.md rename to etc/DFHCSDUP/Link/README.md diff --git a/etc/Serialize/DFHCSD.txt b/etc/Serialize/DFHCSD.txt deleted file mode 100644 index 4eed5f8..0000000 --- a/etc/Serialize/DFHCSD.txt +++ /dev/null @@ -1,16 +0,0 @@ - - DEFINE PROGRAM(JAVASYN1) GROUP(JCICSAMP) - DESCRIPTION(Java synchronization sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.serialize.SerializeExample1) - - DEFINE TRANSACTION(JSY1) GROUP(JCICSAMP) PROGRAM(JAVASYN1) - DESCRIPTION(Java synchronization sample) - TASKDATALOC(ANY) - - DEFINE BUNDLE(JCICSYNC) GROUP(JCICSAMP) - DESCRIPTION(JCICS synchronization sample) - BUNDLEDIR(/u/cics1/com.ibm.cicsdev.serialize.cicsbundle_1.0.0) - diff --git a/etc/Serialize/README.md b/etc/Serialize/README.md deleted file mode 100644 index f7330d9..0000000 --- a/etc/Serialize/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Supporting materials used in conjunction with the JCICS serialization samples. - -* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. - diff --git a/etc/TDQ/DFHCSD.txt b/etc/TDQ/DFHCSD.txt deleted file mode 100644 index 14fe8d1..0000000 --- a/etc/TDQ/DFHCSD.txt +++ /dev/null @@ -1,44 +0,0 @@ - - DEFINE PROGRAM(JAVATDQ1) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tdq.TDQExample1) - - DEFINE PROGRAM(JAVATDQ2) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tdq.TDQExample2) - - DEFINE PROGRAM(JAVATDQ3) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tdq.TDQExample3) - - DEFINE TRANSACTION(JTD1) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - PROGRAM(JAVATDQ1) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JTD2) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - PROGRAM(JAVATDQ2) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JTD3) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - PROGRAM(JAVATDQ3) - TASKDATALOC(ANY) - - DEFINE BUNDLE(JCICSTDQ) GROUP(JCICSAMP) - DESCRIPTION(Java TDQ sample) - BUNDLEDIR(/u/cics1/com.ibm.cicsdev.tdq.cicsbundle_1.0.0) - - DEFINE TDQUEUE(MYQ1) GROUP(JCICSAMP) - DESCRIPTION(Intrapartition TDQ for JCICS samples) - TYPE(INTRA) diff --git a/etc/TDQ/README.md b/etc/TDQ/README.md deleted file mode 100644 index 097cc2a..0000000 --- a/etc/TDQ/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Supporting materials used in conjunction with the JCICS TDQ samples. - -* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. - diff --git a/etc/TSQ/DFHCSD.txt b/etc/TSQ/DFHCSD.txt deleted file mode 100644 index d928ea4..0000000 --- a/etc/TSQ/DFHCSD.txt +++ /dev/null @@ -1,53 +0,0 @@ - - DEFINE PROGRAM(JAVATSQ1) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tsq.TSQExample1) - - - DEFINE PROGRAM(JAVATSQ2) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tsq.TSQExample2) - - DEFINE PROGRAM(JAVATSQ3) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tsq.TSQExample3) - - DEFINE PROGRAM(JAVATSQ4) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.tsq.TSQExample4) - - DEFINE TRANSACTION(JTS1) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - PROGRAM(JAVATSQ1) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JTS2) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - PROGRAM(JAVATSQ2) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JTS3) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - PROGRAM(JAVATSQ3) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JTS4) GROUP(JCICSAMP) - DESCRIPTION(Java TSQ sample) - PROGRAM(JAVATSQ4) - TASKDATALOC(ANY) - - DEFINE BUNDLE(JCICSTSQ) GROUP(JCICSAMP) - DESCRIPTION(JCICS TSQ SAMPLE) - BUNDLEDIR(/u/cics1/com.ibm.cicsdev.tsq.cicsbundle_1.0.0) diff --git a/etc/TSQ/README.md b/etc/TSQ/README.md deleted file mode 100644 index 7db2181..0000000 --- a/etc/TSQ/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Supporting materials used in conjunction with the JCICS TSQ samples. - -* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. - diff --git a/etc/Terminal/DFHCSD.txt b/etc/Terminal/DFHCSD.txt deleted file mode 100644 index 5a975b6..0000000 --- a/etc/Terminal/DFHCSD.txt +++ /dev/null @@ -1,15 +0,0 @@ - - DEFINE PROGRAM(JAVATRM1) GROUP(JCICSAMP) - DESCRIPTION(Java terminal sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - JVMCLASS(com.ibm.cicsdev.terminal.TerminalExample1) - - DEFINE TRANSACTION(JTM1) GROUP(JCICSAMP) PROGRAM(JAVATRM1) - DESCRIPTION(Java terminal sample) - TASKDATALOC(ANY) - - DEFINE BUNDLE(JCICTERM) GROUP(JCICSAMP) - DESCRIPTION(JCICS terminal sample) - BUNDLEDIR(/u/cics1/com.ibm.cicsdev.terminal.cicsbundle_1.0.0) - diff --git a/etc/Terminal/README.md b/etc/Terminal/README.md deleted file mode 100644 index 83c7a2c..0000000 --- a/etc/Terminal/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Supporting materials used in conjunction with the JCICS terminal samples. - -* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. - diff --git a/etc/VSAM/DEFVSAM.jcl b/etc/VSAM/DEFVSAM.jcl deleted file mode 100644 index dd65e22..0000000 --- a/etc/VSAM/DEFVSAM.jcl +++ /dev/null @@ -1,38 +0,0 @@ -//DEFVSAM JOB MSGLEVEL=(1,1),MSGCLASS=A,REGION=4M,MEMLIMIT=0M, -// NOTIFY=&SYSUID. -//* -//DEFINE EXEC PGM=IDCAMS -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - - DELETE JAVAED.TEST.KSDS.STOCK CLUSTER PURGE - DELETE JAVAED.TEST.ESDS.STOCK CLUSTER PURGE - DELETE JAVAED.TEST.RRDS.STOCK CLUSTER PURGE - - SET MAXCC = 0 - - DEFINE CLUSTER ( - - NAME ( JAVAED.TEST.KSDS.STOCK ) - - RECORDS ( 100 10 ) - - INDEXED - - KEYS ( 8 0 ) - - RECORDSIZE ( 80 80 ) - - ) - - DEFINE CLUSTER ( - - NAME ( JAVAED.TEST.ESDS.STOCK ) - - RECORDS ( 100 10 ) - - NONINDEXED - - KEYS ( 8 0 ) - - RECORDSIZE ( 80 80 ) - - ) - - DEFINE CLUSTER ( - - NAME ( JAVAED.TEST.RRDS.STOCK ) - - RECORDS ( 100 10 ) - - NUMBERED - - RECORDSIZE ( 80 80 ) - - ) - -/* -// diff --git a/etc/VSAM/DFHCSD.txt b/etc/VSAM/DFHCSD.txt deleted file mode 100644 index 10442e4..0000000 --- a/etc/VSAM/DFHCSD.txt +++ /dev/null @@ -1,182 +0,0 @@ - - DEFINE PROGRAM(JAVAVES1) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample1) - - DEFINE PROGRAM(JAVAVES2) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample2) - - DEFINE PROGRAM(JAVAVES3) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample3) - - DEFINE PROGRAM(JAVAVES4) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample4) - - DEFINE PROGRAM(JAVAVES5) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.esds.KsdsExample5) - - DEFINE PROGRAM(JAVAVKS1) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample1) - - DEFINE PROGRAM(JAVAVKS2) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample2) - - DEFINE PROGRAM(JAVAVKS3) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample3) - - DEFINE PROGRAM(JAVAVKS4) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample4) - - DEFINE PROGRAM(JAVAVKS5) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample5) - - DEFINE PROGRAM(JAVAVRR1) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample1) - - DEFINE PROGRAM(JAVAVRR2) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample2) - - DEFINE PROGRAM(JAVAVRR3) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample3) - - DEFINE PROGRAM(JAVAVRR4) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample4) - - DEFINE PROGRAM(JAVAVRR5) GROUP(JCICSAMP) - DESCRIPTION(Java VSAM sample) - CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) - JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) - EXECKEY(CICS) - JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample5) - - DEFINE TRANSACTION(JVE1) GROUP(JCICSAMP) PROGRAM(JAVAVES1) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVE2) GROUP(JCICSAMP) PROGRAM(JAVAVES2) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVE3) GROUP(JCICSAMP) PROGRAM(JAVAVES3) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVE4) GROUP(JCICSAMP) PROGRAM(JAVAVES4) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVE5) GROUP(JCICSAMP) PROGRAM(JAVAVES5) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVK1) GROUP(JCICSAMP) PROGRAM(JAVAVKS1) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVK2) GROUP(JCICSAMP) PROGRAM(JAVAVKS2) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVK3) GROUP(JCICSAMP) PROGRAM(JAVAVKS3) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVK4) GROUP(JCICSAMP) PROGRAM(JAVAVKS4) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVK5) GROUP(JCICSAMP) PROGRAM(JAVAVKS5) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVR1) GROUP(JCICSAMP) PROGRAM(JAVAVRR1) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVR2) GROUP(JCICSAMP) PROGRAM(JAVAVRR2) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVR3) GROUP(JCICSAMP) PROGRAM(JAVAVRR3) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVR4) GROUP(JCICSAMP) PROGRAM(JAVAVRR4) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE TRANSACTION(JVR5) GROUP(JCICSAMP) PROGRAM(JAVAVRR5) - DESCRIPTION(Java VSAM sample) - TASKDATALOC(ANY) - - DEFINE FILE(XMPLKSDS) GROUP(JCICSAMP) - READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(YES) - DSNAME(JAVAED.TEST.KSDS.STOCK) - - DEFINE FILE(XMPLESDS) GROUP(JCICSAMP) - READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(NO) - DSNAME(JAVAED.TEST.ESDS.STOCK) - - DEFINE FILE(XMPLRRDS) GROUP(JCICSAMP) - READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(YES) - DSNAME(JAVAED.TEST.RRDS.STOCK) - - DEFINE BUNDLE(JCICVSAM) GROUP(JCICSAMP) - DESCRIPTION(JCICS VSAM sample) - BUNDLEDIR(/u/cics1/com.ibm.cicsdev.vsam.cicsbundle_1.0.0) - diff --git a/etc/VSAM/README.md b/etc/VSAM/README.md deleted file mode 100644 index 8c41510..0000000 --- a/etc/VSAM/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Supporting materials used in conjunction with the JCICS VSAM samples. - -* DEFVSAM.jcl - Sample job to define the KSDS, ESDS, and RRDS VSAM files required. -* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. - diff --git a/projects/com.ibm.cicsdev.link.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project similarity index 100% rename from projects/com.ibm.cicsdev.link.cicsbundle/.project rename to etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project diff --git a/projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs diff --git a/projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml similarity index 100% rename from projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml rename to etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml diff --git a/projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle similarity index 100% rename from projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle rename to etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/.project rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction diff --git a/projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml similarity index 100% rename from projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml rename to etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..dd9074c --- /dev/null +++ b/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + + pom + + + com.ibm.cicsdev + cics-java-jcics-link + 1.0.0 + CICS Java JCICS link application + + + + DFHOSGI + + 8 + UTF-8 + ${java.version} + ${java.version} + ${java.version} + + + + + + + com.ibm.cics + com.ibm.cics.ts.bom + 5.5-20200519131930-PH25409 + pom + import + + + + + + cics-java-jcics-link-app + cics-java-jcics-link-bundle + + \ No newline at end of file diff --git a/projects/README.md b/projects/README.md deleted file mode 100644 index 2f38587..0000000 --- a/projects/README.md +++ /dev/null @@ -1,45 +0,0 @@ -projects -=== - -Complete Eclipse projects demonstrating how to use the JCICS API in an OSGi JVM server environment. - - -## Overall project structure - -* `com.ibm.cicsdev.*` - Eclipse project containing the Java source code. -* `com.ibm.cicsdev.*.cicsbundle` - Eclipse project for a CICS bundle that can be deployed into a CICS region. -* `com.ibm.cicsdev.*.resources.cicsbundle` - Eclipse project for a CICS bundle that defines the required -program and transaction resources for the sample. - - -## Samples overview - -* [`com.ibm.cicsdev.link`](com.ibm.cicsdev.link) - Performing CICS LINK operations using both commareas, -and channels and containers. -* [`com.ibm.cicsdev.serialize`](com.ibm.cicsdev.serialize) - Serializing access to a common resource using -the CICS ENQ and DEQ mechanism. -* [`com.ibm.cicsdev.tdq`](com.ibm.cicsdev.tdq) - Accessing transient data queues. -* [`com.ibm.cicsdev.terminal`](com.ibm.cicsdev.terminal) - Reading in data from a terminal for an OSGi application. -* [`com.ibm.cicsdev.tsq`](com.ibm.cicsdev.tsq) - Accessing temporary storage queues. -* [`com.ibm.cicsdev.vsam`](com.ibm.cicsdev.vsam) - Accessing KSDS, ESDS, and RRDS VSAM files. - - -## Adding the resources to Eclipse - -1. Using an Eclipse development environment import the project from the project folder using the menu -**File** -> **Import** -> **Existing Projects into Workspace**. -1. Define and set a CICS Target Platform for the workspace using the menu **Window** -> **Preferences** -> -**Target Platform**. - - -## Generated resources - - -The TS, TD, VSAM and LINK sample projects manipulate byte-oriented record structures using Java classes -generated using the IBM Record Generator for Java. The generated classes can be found packaged in a JAR -file, found in the `lib/` subdirectory of the relevant project. Only the compiled helper classes are -required to compile and run the application, however the generated source files are included for reference. - -If you are manually adding source files to your Eclipse development environment, you will need to add the -generated JAR file to the build path in order to compile the samples, using the project context menu -**Build Path** -> **Configure Build Path** -> **Libraries**. diff --git a/projects/com.ibm.cicsdev.link/.classpath b/projects/com.ibm.cicsdev.link/.classpath deleted file mode 100644 index 040a2c6..0000000 --- a/projects/com.ibm.cicsdev.link/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/projects/com.ibm.cicsdev.link/.gitignore b/projects/com.ibm.cicsdev.link/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.link/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.link/.project b/projects/com.ibm.cicsdev.link/.project deleted file mode 100644 index 0a6f2c8..0000000 --- a/projects/com.ibm.cicsdev.link/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.link - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.link/.settings/org.eclipse.jdt.core.prefs b/projects/com.ibm.cicsdev.link/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f42de36..0000000 --- a/projects/com.ibm.cicsdev.link/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/projects/com.ibm.cicsdev.link/.settings/org.eclipse.pde.core.prefs b/projects/com.ibm.cicsdev.link/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index e8ff8be..0000000 --- a/projects/com.ibm.cicsdev.link/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.equinox=false -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/projects/com.ibm.cicsdev.link/build.properties b/projects/com.ibm.cicsdev.link/build.properties deleted file mode 100644 index 3378d9f..0000000 --- a/projects/com.ibm.cicsdev.link/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - lib/EDUPGM.jar diff --git a/projects/com.ibm.cicsdev.link/lib/EDUPGM.jar b/projects/com.ibm.cicsdev.link/lib/EDUPGM.jar deleted file mode 100644 index 13fe2e414ab88db91a12df197698fb6a64092c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2867 zcmb7`c{CJUAIHa*Eo7$6)i&cXvUJQdCHPRHJB+y z7_!A6hKlUVpn0q>?|I+n>3Pn1|9HRm+;i_e_xt_*?m73L4;0M8Dg@x*-~i~@j$Q)% zB2EA+0AlW73beAeP}}PO09XJ}FgwSggZV!;=>H509XS3BLrkr$EX?g4R3R30NLS}& zFi^FZ2Mkp1?&_(tJ3F9B`;JltK~$_Dy%7Xf&b)bXMgJ&+Ka}-mM1{YJ%H;rr1J+Qh zD5ih6uc@m!ZhTPOZZZoZz_xaQ@be>CULJlb2nB9sUdsnaU+f*y3lx|(@>IeY6(S3dPBwB zDY)tz&X+dcIemtAEP0zM;Z1j3+Rm5c3;m;r%K-CUVln5DM_+hZ7s!a;-N-!TA9Yr0m7t`ptzQ+K6RxZ1^5Y9}uzzB7eiQvF8B<$ad|Sl6h#`~}J5}og zx?dJac)AK88YXB93b+I(dORYC^9^EcATJ-`Barm=yv_!%5M65l_uQi7w z{YI_V(leD~->N@Do;p4tz@#l!j6bEomzx&w#5(i5j^7Ee1Nn<@w!h8 z-g-)^oTgvi%Q78s^yUW@D?H^%H)8Rfk22y(qPU^kLzRWvy3H+}(M;-bWah++neQL5 zks%&ZH+C9>a)XYVr`(tnyKN(DHZpw{c`f)Sevb)I-Y*DCkaEVjt_Ed(dBjH?djgNPTVFTJ-e#2Du9+05BN zJ7%bjNNplvkmo8q>>;p9*H%%E%e7HXc5NU4Q7wHN=%cYFhfdiVek8O8PG0QHjR8p+Yv(BgAPU zO3mtFmsIlkQxY2ir`XxWQ@l) zEohGHZV?TFbSFKngIf|Umz%CEeVU=_Rm{qjX*ZS1mgQ!pudjg~mwqeBCG_$hr<)~B z)QndZYip;ZOO`nqJ~K`OS#E1(ZKf)98Cn3@U_NI^=ZM$WB+e^^dAHO|HY5>+lsh9@ z2(=Yp6%TaAylSY4Qw^Wj~`{q^Hhtk}vTC%IeoS*Z^rWod{CBJDnTik=HT99H@_Ye zXu@#8$D&^(L_YFQgQ?4iCEVkbzLUiir5~Zb$Sn(XwLBu6@$yGHDVul?ehc$caHqZ% zoxza0C|IRQ#}!RdvCdXx(RA9NK+L3;2&DLKn}*BIMJBq9Abs9yOB^H^2~g{ zlT{<3{AhqIeNLXU<>J+6R;qSlr28*AAVMUd5b2pLBX}Ah4`ivNutOD`T?nwDwLEhG z8VW$$0niUw^!$YZ?*{Dv8yX1)rxW1ifB0k?;TZQ2BZaxiL6|Pv z0>lL{BN8N@9OoD2T+JG2bA3XN8QJF8Vx}xZ)0ccMFv48CQZC-yIltN;EHg2~u@^nH z&Ab}-fHnSO*U#`Aq<7#R#6zwaw-r9v0TV$^b++zkaqitc=;z*a=jad!>0RK{+z}-> z3OTTP0jm3yt8D?*_5fr$4Vll<*lV}KtHhXlM0*OgET$p(7d2%WqrPP1bAd;R25Z=A z9qw`4_Mej2_*_P_C1yf_e6F1iBvW2Fpp)zb<|P067gXB|3M)X%y#53&vG!R2kS+y!_&V2lV$*w diff --git a/projects/com.ibm.cicsdev.serialize.cicsbundle/.project b/projects/com.ibm.cicsdev.serialize.cicsbundle/.project deleted file mode 100644 index b61da14..0000000 --- a/projects/com.ibm.cicsdev.serialize.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.serialize.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.serialize.cicsbundle - - - majorVersion - 1 - - - microVersion - 0 - - - minorVersion - 0 - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index d6abd2d..0000000 --- a/projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.serialize.osgibundle=UTF-8 diff --git a/projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml deleted file mode 100644 index eca6125..0000000 --- a/projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-12-13T15:47:28.565Z - - - - diff --git a/projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle deleted file mode 100644 index 697c985..0000000 --- a/projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project b/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project deleted file mode 100644 index 6c207f0..0000000 --- a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.serialize.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.serialize.resources.cicsbundle - - - majorVersion - 1 - - - microVersion - 0 - - - minorVersion - 0 - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program b/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program deleted file mode 100644 index cd5b93c..0000000 --- a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction b/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction deleted file mode 100644 index 4f53b8f..0000000 --- a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 382b4ca..0000000 --- a/projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 2016-12-13T15:49:54.727Z - - - - - diff --git a/projects/com.ibm.cicsdev.serialize/.classpath b/projects/com.ibm.cicsdev.serialize/.classpath deleted file mode 100644 index 4f83b23..0000000 --- a/projects/com.ibm.cicsdev.serialize/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/projects/com.ibm.cicsdev.serialize/.gitignore b/projects/com.ibm.cicsdev.serialize/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.serialize/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.serialize/.project b/projects/com.ibm.cicsdev.serialize/.project deleted file mode 100644 index a753c8a..0000000 --- a/projects/com.ibm.cicsdev.serialize/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.serialize - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.jdt.core.prefs b/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f42de36..0000000 --- a/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.pde.core.prefs b/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index e8ff8be..0000000 --- a/projects/com.ibm.cicsdev.serialize/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.equinox=false -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/projects/com.ibm.cicsdev.serialize/META-INF/MANIFEST.MF b/projects/com.ibm.cicsdev.serialize/META-INF/MANIFEST.MF deleted file mode 100644 index 8e3d352..0000000 --- a/projects/com.ibm.cicsdev.serialize/META-INF/MANIFEST.MF +++ /dev/null @@ -1,11 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS serialization code -Bundle-SymbolicName: com.ibm.cicsdev.serialize -Bundle-Version: 1.0.0 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)" -Bundle-ClassPath: . -CICS-MainClass: com.ibm.cicsdev.serialize.SerializeExample1 -Automatic-Module-Name: com.ibm.cicsdev.serialize diff --git a/projects/com.ibm.cicsdev.serialize/README.md b/projects/com.ibm.cicsdev.serialize/README.md deleted file mode 100644 index 3af1bfb..0000000 --- a/projects/com.ibm.cicsdev.serialize/README.md +++ /dev/null @@ -1,27 +0,0 @@ -com.ibm.cicsdev.serialize -=== - -Provides an example for serializing access to a common resource using the CICS ENQ and DEQ mechanism. - -* `SerializeExample1` - a simple class to demonstrate using the CICS ENQ and DEQ mechanism from a JCICS environment. - - -## Supporting files - -* [`/etc/Serialize`](../../etc/Serialize) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. - - -## Running the Example - -At a 3270 terminal screen, enter the transaction you wish to run, for example JSY1 will run example 1. - - JSY1 - -and the following output will be returned - - JSY1 - Starting SerializeExample1 - Attempting to acquire resource lock MYAPP.SYNC.RES1 - Resource lock has been acquired - Resource lock has been released - Completed SerializeExample1 - diff --git a/projects/com.ibm.cicsdev.serialize/build.properties b/projects/com.ibm.cicsdev.serialize/build.properties deleted file mode 100644 index 34d2e4d..0000000 --- a/projects/com.ibm.cicsdev.serialize/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/projects/com.ibm.cicsdev.serialize/src/com/ibm/cicsdev/serialize/SerializeExample1.java b/projects/com.ibm.cicsdev.serialize/src/com/ibm/cicsdev/serialize/SerializeExample1.java deleted file mode 100644 index 5512b0e..0000000 --- a/projects/com.ibm.cicsdev.serialize/src/com/ibm/cicsdev/serialize/SerializeExample1.java +++ /dev/null @@ -1,180 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.serialize; - -import java.util.concurrent.ThreadLocalRandom; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.LengthErrorException; -import com.ibm.cics.server.NameResource; -import com.ibm.cics.server.ResourceUnavailableException; -import com.ibm.cics.server.Task; - -/** - * Simple example of resource serialization using the CICS enqueue and dequeue - * mechanism from the JCICS API. - */ -public class SerializeExample1 -{ - /** - * The name of the lock used to protect the shared resource. - * - * The name is defined by an application and has no special meaning - * to CICS. - * - * This string must be a maximum of 255 bytes after conversion from - * a Java String to a byte array in the local CCSID. - * - * This string must be a minimum of 1 character in length. - */ - private static final String RESOURCE_LOCK_NAME = "MYAPP.SYNC.RES1"; - - /** - * A constant to represent the number of times we will attempt to - * lock the common application resource before giving up. - */ - private static final int RESOURCE_TRY_COUNT = 10; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Flag to indicate we have the lock - boolean bHaveLock = false; - - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting SerializeExample1"); - - // Create a named synchronization resource - NameResource lock = new NameResource(); - lock.setName(RESOURCE_LOCK_NAME); - - // Attempt to access the lock multiple times - for ( int i = 0; i < RESOURCE_TRY_COUNT; i++ ) { - - // We are trying to acquire the lock - String strMsg = "Attempting to acquire resource lock %s"; - task.out.println( String.format(strMsg, RESOURCE_LOCK_NAME) ); - - // Try to acquire the lock - bHaveLock = acquireLock(lock); - - // Did we get the lock? - // No : Wait for a random period of time before retry - // Yes : Exit loop - if ( ! bHaveLock ) { - randomSleep(); - } - else { - break; - } - } - - // Verify we have the lock. If not, perform some crude error-handling - if ( ! bHaveLock ) { - Task.getTask().abend("LOCK", false); - } - - // Now have the lock at this point - confirm to the user - task.out.println("Resource lock has been acquired"); - - try { - // Perform update of some shared resource - doUpdate(); - } - catch (CicsConditionException cce) { - // No clever exception handling here - keep it simple for demo purposes - throw new RuntimeException(cce); - } - finally { - try { - // Release the lock inside the finally block for correct error-handling - lock.dequeue(); - - // Confirmation we have released the lock - task.out.println("Resource lock has been released"); - } - catch (CicsConditionException cce) { - // No clever exception handling here - keep it simple for demo purposes - throw new RuntimeException(cce); - } - } - - // Completion message - task.out.println("Completed SerializeExample1"); - } - - /** - * Attempts to acquire the shared resource lock. This method calls the - * {@link NameResource#enqueue()} method. Using the {@link NameResource#tryEnqueue()} - * method would perform the same operation, but would not block waiting for the - * lock to become available. - * - * @param lock the lock to acquire - * - * @return a boolean flag to indicate the lock has been successfully acquired. - * - * @throws CicsConditionException if there was an error accessing the lock resource. - */ - private static boolean acquireLock(NameResource lock) - { - try { - // Attempt to acquire the lock - lock.enqueue(); - - // We have successfully obtained the lock - return true; - } - catch (LengthErrorException lee) { - // Corresponds to LENGERR - bad programming - // Crude error-handling in this case: simply wrapper and throw - throw new RuntimeException(lee); - } - catch (ResourceUnavailableException e) { - // Corresponds to ENQBUSY - return lock not held - return false; - } - } - - /** - * Sleep this thread for a random interval. - */ - private static void randomSleep() - { - // Generate 1 <= t < 21 - long t = ThreadLocalRandom.current().nextLong(1, 21); - - try { - // Sleep for the random period of time - Thread.sleep(t); - } - catch (InterruptedException ie) { - // We have been awoken - that is all - } - } - - /** - * Provides a dummy method to represent an update of some shared application - * resource. - * - * @throws CicsConditionException never thrown, but declared to - * give the caller something to worry about. - */ - private static void doUpdate() throws CicsConditionException - { - // Null block for demonstration purposes - } -} diff --git a/projects/com.ibm.cicsdev.tdq.cicsbundle/.project b/projects/com.ibm.cicsdev.tdq.cicsbundle/.project deleted file mode 100644 index 1cf858f..0000000 --- a/projects/com.ibm.cicsdev.tdq.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tdq.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 2541fc0..0000000 --- a/projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.tdq.osgibundle=UTF-8 diff --git a/projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 135eafc..0000000 --- a/projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-11-04T15:15:01.777Z - - - - diff --git a/projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle b/projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle deleted file mode 100644 index 6f723cd..0000000 --- a/projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project deleted file mode 100644 index 7ff732f..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tdq.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program deleted file mode 100644 index b7ce498..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program deleted file mode 100644 index ea67922..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program deleted file mode 100644 index c514dd6..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction deleted file mode 100644 index 434e8a6..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction deleted file mode 100644 index 28fe38a..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction deleted file mode 100644 index d4d1a46..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 53703ba..0000000 --- a/projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - 2016-11-11T11:00:30.401Z - - - - - - - - - diff --git a/projects/com.ibm.cicsdev.tdq/.classpath b/projects/com.ibm.cicsdev.tdq/.classpath deleted file mode 100644 index 6837d9d..0000000 --- a/projects/com.ibm.cicsdev.tdq/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/projects/com.ibm.cicsdev.tdq/.gitignore b/projects/com.ibm.cicsdev.tdq/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.tdq/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.tdq/.project b/projects/com.ibm.cicsdev.tdq/.project deleted file mode 100644 index 3bcc476..0000000 --- a/projects/com.ibm.cicsdev.tdq/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.tdq - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.jdt.core.prefs b/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f42de36..0000000 --- a/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.pde.core.prefs b/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index e8ff8be..0000000 --- a/projects/com.ibm.cicsdev.tdq/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.equinox=false -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/projects/com.ibm.cicsdev.tdq/META-INF/MANIFEST.MF b/projects/com.ibm.cicsdev.tdq/META-INF/MANIFEST.MF deleted file mode 100644 index fc559f9..0000000 --- a/projects/com.ibm.cicsdev.tdq/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS code for use of transient data queues -Bundle-SymbolicName: com.ibm.cicsdev.tdq -Bundle-Version: 1.0.0 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -CICS-MainClass: com.ibm.cicsdev.tdq.TDQExample1, - com.ibm.cicsdev.tdq.TDQExample2, - com.ibm.cicsdev.tdq.TDQExample3 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)", - com.ibm.jzos.fields;resolution:=optional -Automatic-Module-Name: com.ibm.cicsdev.tdq -Bundle-ClassPath: lib/TdqRecord.jar, - . - diff --git a/projects/com.ibm.cicsdev.tdq/README.md b/projects/com.ibm.cicsdev.tdq/README.md deleted file mode 100644 index 5a34f61..0000000 --- a/projects/com.ibm.cicsdev.tdq/README.md +++ /dev/null @@ -1,77 +0,0 @@ -com.ibm.cicsdev.tdq -=== - -This project contains various sample programs to demonstrate use of the JCICS API for manipulating a transient -data queue (TDQ). A TDQ is a queue of data items that is stored in sequential queues. Transient queues are -resources whose name may contain up to 4 characters and must be defined before use, unlike temporary storage -queues that can be dynamically defined. - -* **Intrapartition** queues are accessible only by CICS transactions within the CICS region -* **Extrapartition** queues are sequential data sets on tape or disk. -* Intrapartition and extrapartition queues can be referenced through **indirect** destinations to provide -flexibility in program maintenance. Queue definitions can be changed without having to recompile existing -programs. - -All of the examples in this repository use an intrapartition queue named `MYQ1`. - -* `TDQExample1` - a simple class that writes Java strings to a TDQ and then reads them back. -* `TDQExample2` - an alternative implementation of `TDQExample1` that writes and reads Java strings, but performing all of the codepage conversion manually. This avoids the pre-requisite of CICS TS V5.1, but is slightly more work to code in Java. -* `TDQExample3` - a more complex example that writes structured records to a TDQ and then reads them back. -* `TDQCommon` - Superclass used to provide common services for the TDQ samples. - -For the sake of brevity, all of the examples lack comprehensive error-handling logic. -To demonstrate exactly where an exception may be thrown when using the JCICS API, one `try { ... } catch { ... }` -block has been included per API call that may thrown an exception. - - -## Supporting files - -* `lib/TdqRecord.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in `TDQExample3` (includes source). -* [`/etc/TDQ`](../../etc/TDQ) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. - - -## Structured record - -The class `TdqRecord` is produced by the JZOS record generator utility from a COBOL copybook. This class -is used in example 3 to write a structured record to the TDQ. The `TdqRecord` class is used to -demonstrate how a Java application would interact with non-Java implementations when communicating using a TDQ. - -The COBOL structure that is mapped by the `TdqRecord` class is as follows: - - 01 TDQ-RECORD. - 03 RECORD-ID PIC 9(8) COMP. - 03 BINARY-DIGIT PIC 9(4) COMP. - 03 CHARACTER-STRING PIC X(30). - 03 NUMERIC-VALUE PIC 9(18). - 03 PACKED-DEC PIC 9(15) COMP-3. - 03 SIGNED-PACKED PIC S9(12) COMP-3. - - -## Configuration - -Note you must define an intrapartition transient data queue named `MYQ1` before using these samples. -The simplest way to define this TDQ is using the `CECI` transaction: - - CECI CREATE TDQUEUE(MYQ1) ATTRIBUTES('TYPE(INTRA)') - -Press send twice - firstly to confirm the command, and secondly to receive the message: - - STATUS: COMMAND EXECUTION COMPLETE - - -## Running the Example - -At a 3270 terminal screen, enter the transaction you wish to run, for example JTD1 will run TDQ example 1. - - JTD1 - -and the following output will be returned - - JTD1 - Starting TDQExample1 - Read data from queue "TDQ write from JCICS item 1" - Read data from queue "TDQ write from JCICS item 2" - Read data from queue "TDQ write from JCICS item 3" - Read data from queue "TDQ write from JCICS item 4" - Read data from queue "TDQ write from JCICS item 5" - Completed TDQExample1 - diff --git a/projects/com.ibm.cicsdev.tdq/build.properties b/projects/com.ibm.cicsdev.tdq/build.properties deleted file mode 100644 index b327764..0000000 --- a/projects/com.ibm.cicsdev.tdq/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - lib/TdqRecord.jar diff --git a/projects/com.ibm.cicsdev.tdq/lib/TdqRecord.jar b/projects/com.ibm.cicsdev.tdq/lib/TdqRecord.jar deleted file mode 100644 index 49975b27ac949cdd2ccffdeda09ed68c002f0c11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7794 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%0AP;eW4sLtL2RenVk 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 I<-gVc0Ya+{-2eap diff --git a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQCommon.java b/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQCommon.java deleted file mode 100644 index 3b6930e..0000000 --- a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQCommon.java +++ /dev/null @@ -1,74 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tdq; - -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.InvalidQueueIdException; -import com.ibm.cics.server.TDQ; -import com.ibm.cics.server.Task; - -/** - * Superclass used to provide common services used in all of the TDQ - * examples. - */ -public abstract class TDQCommon -{ - /** - * A field to hold a reference to the CICS transient - * data queue this instance will access. - */ - protected final TDQ tdq; - - /** - * Constructor used to initialise this class with some - * common data used by all TDQ examples. - * - * @param tdq - a reference to the transient data queue we will - * be manipulating in this example. - */ - protected TDQCommon(TDQ tdq) - { - // Save reference to the TDQ - this.tdq = tdq; - - // Delete any old TDQ that's lying around - deleteQueue(); - } - - /** - * Deletes all the data associated with the instance transient data queue. - */ - private void deleteQueue() - { - try { - // Empty the TDQ - this.tdq.delete(); - } - catch (InvalidQueueIdException iqe) { - - // QIDERR occurs when the queue cannot be found. - // Unlike the TSQ case, this is NOT an acceptable condition, - // because TDQs cannot be generated dynamically - String msg = MessageFormat.format("Could not find queue \"{0}\"", this.tdq.getName()); - Task.getTask().out.println(msg); - - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(iqe); - } - catch (CicsConditionException cce) { - // All other errors - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } -} diff --git a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample1.java b/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample1.java deleted file mode 100644 index 6329360..0000000 --- a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample1.java +++ /dev/null @@ -1,125 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tdq; - -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DataHolder; -import com.ibm.cics.server.TDQ; -import com.ibm.cics.server.Task; - -/** - * Example to demonstrate writing reading simple text-based records - * to and from a TDQ using JCICS. - */ -public class TDQExample1 extends TDQCommon -{ - /** - * Name of the TDQ to use. - */ - private static final String TDQ_NAME = "MYQ1"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Main entry point to this CICS Java program. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TDQExample1"); - - // Create a reference to the TDQ - TDQ tdq = new TDQ(); - tdq.setName(TDQ_NAME); - - // Create a new instance of this class - TDQExample1 ex = new TDQExample1(tdq); - - // Write text to the queue - ex.writeToQueue(); - - // Read text from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TDQExample1"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tdq - the transient data queue reference we will - * be manipulating in this example. - */ - public TDQExample1(TDQ tdq) - { - super(tdq); - } - - /** - * Write some sample data to the instance TDQ. - */ - public void writeToQueue() - { - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Construct a message for writing to the queue - String msg = MessageFormat.format("TDQ write from JCICS item {0}", i); - - try { - // Write the data to the TDQ - // No codepage conversion required for this method - // Requires CICS TS V5.1 and later (JCICS 1.401.0) - this.tdq.writeString(msg); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - } - - /** - * Simple read of string data from a TDQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - DataHolder holder = new DataHolder(); - - for ( int i = 1; i <= DEPTH_COUNT; i++ ) { - - try { - // Read the queue sequentially (destructive read) - this.tdq.readData(holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Assume this is a valid character string in the CICS local CCSID - // Requires CICS TS V5.1 and later (JCICS 1.401.0) - String strData = holder.getStringValue(); - - // Write out to the console - String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample2.java b/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample2.java deleted file mode 100644 index 2311438..0000000 --- a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample2.java +++ /dev/null @@ -1,153 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tdq; - -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DataHolder; -import com.ibm.cics.server.TDQ; -import com.ibm.cics.server.Task; - -/** - * Example to demonstrate writing reading simple text-based records - * to and from a TDQ using JCICS, with manual maintenance of codepages. - */ -public class TDQExample2 extends TDQCommon -{ - /** - * Name of the TDQ to use. - */ - private static final String TDQ_NAME = "MYQ1"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Resolved at runtime to be the CCSID of the region. - */ - private static final String CCSID = - System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - /** - * Main entry point to this CICS Java program. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TDQExample2"); - - // Create a reference to the TDQ - TDQ tdq = new TDQ(); - tdq.setName(TDQ_NAME); - - // Create a new instance of this class - TDQExample2 ex = new TDQExample2(tdq); - - // Write text to the queue - ex.writeToQueue(); - - // Read text from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TDQExample2"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tdq - the transient data queue reference we will - * be manipulating in this example. - */ - public TDQExample2(TDQ tdq) - { - super(tdq); - } - - /** - * Write some sample data to the instance TDQ. - */ - public void writeToQueue() - { - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Data to write to the TDQ - byte[] data; - - // Construct a message for writing to the queue - String msg = MessageFormat.format("TDQ write from JCICS item {0}", i); - - try { - // Convert the string to a byte[] - data = msg.getBytes(CCSID); - } - catch (UnsupportedEncodingException uee) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(uee); - } - - try { - // Write the data to the TDQ - this.tdq.writeData(data); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - } - - /** - * Simple read of string data from a TDQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - DataHolder holder = new DataHolder(); - - for ( int i = 1; i <= DEPTH_COUNT; i++ ) { - - try { - // Read the queue sequentially (destructive read) - this.tdq.readData(holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Extract the byte[] data - byte[] data = holder.getValue(); - - // String object to create - String strData; - - try { - // Assume this is a valid character string in the CICS local CCSID - strData = new String(data, CCSID); - } - catch (UnsupportedEncodingException uee) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(uee); - } - - // Write out to the console - String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample3.java b/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample3.java deleted file mode 100644 index 952a27f..0000000 --- a/projects/com.ibm.cicsdev.tdq/src/com/ibm/cicsdev/tdq/TDQExample3.java +++ /dev/null @@ -1,152 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tdq; - -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DataHolder; -import com.ibm.cics.server.TDQ; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.TdqRecord; - -/** - * Example to demonstrate writing reading simple text-based records - * to and from a TDQ using JCICS. - */ -public class TDQExample3 extends TDQCommon -{ - /** - * Name of the TDQ to use. - */ - private static final String TDQ_NAME = "MYQ1"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Main entry point to this CICS Java program. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TDQExample3"); - - // Create a reference to the TDQ - TDQ tdq = new TDQ(); - tdq.setName(TDQ_NAME); - - // Create a new instance of this class - TDQExample3 ex = new TDQExample3(tdq); - - // Write text to the queue - ex.writeToQueue(); - - // Read text from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TDQExample3"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tdq - the transient data queue reference we will - * be manipulating in this example. - */ - public TDQExample3(TDQ tdq) - { - super(tdq); - } - - /** - * Write of byte[] data to the instance TDQ. - */ - public void writeToQueue() - { - // Create a wrapper object to write to the queue - // This class has been generated using the JZOS record generator utility - TdqRecord data = new TdqRecord(); - - // Populate with some dummy data - data.setBinaryDigit(42); - data.setCharacterString("TDQ test example"); - data.setNumericValue(123456789); - data.setPackedDec(123); - data.setSignedPacked(-99); - - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Update record for this iteration - data.setRecordId(i); - - // Extract the byte data from the wrapper object - // The generated class handles any codepage conversion required - byte[] record = data.getByteBuffer(); - - try { - // Write the data to the TDQ - this.tdq.writeData(record); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - - } - - /** - * Read of byte[] data from a TDQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - DataHolder holder = new DataHolder(); - - // Read data from the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - try { - // Read the data from CICS - this.tdq.readData(holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Obtain the raw bytes from the TDQ item - byte[] itemData = holder.getValue(); - - // Convert to Java object form - // This class has been generated using the JZOS record generator utility - TdqRecord record = new TdqRecord(itemData); - - // Break the record apart - String msg = MessageFormat.format("Record: ({0}) ({1}) ({2}) ({3}) ({4}) ({5})", - record.getRecordId(), - record.getBinaryDigit(), - record.getCharacterString(), - record.getNumericValue(), - record.getPackedDec(), - record.getSignedPacked()); - - // Write out the record to the terminal - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.terminal.cicsbundle/.project b/projects/com.ibm.cicsdev.terminal.cicsbundle/.project deleted file mode 100644 index 79a7046..0000000 --- a/projects/com.ibm.cicsdev.terminal.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.terminal.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 6b035fe..0000000 --- a/projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.terminal.osgibundle=UTF-8 diff --git a/projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml deleted file mode 100644 index d4e0d4c..0000000 --- a/projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-11-04T15:15:33.327Z - - - - diff --git a/projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle b/projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle deleted file mode 100644 index 1693bf9..0000000 --- a/projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project b/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project deleted file mode 100644 index 8111cca..0000000 --- a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.terminal.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.terminal.resources.cicsbundle - - - majorVersion - 1 - - - microVersion - 0 - - - minorVersion - 0 - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program b/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program deleted file mode 100644 index a25aa0c..0000000 --- a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction b/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction deleted file mode 100644 index 618ab18..0000000 --- a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index c706aae..0000000 --- a/projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 2016-11-11T11:05:46.741Z - - - - - diff --git a/projects/com.ibm.cicsdev.terminal/.classpath b/projects/com.ibm.cicsdev.terminal/.classpath deleted file mode 100644 index 22f3064..0000000 --- a/projects/com.ibm.cicsdev.terminal/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/projects/com.ibm.cicsdev.terminal/.gitignore b/projects/com.ibm.cicsdev.terminal/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.terminal/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.terminal/.project b/projects/com.ibm.cicsdev.terminal/.project deleted file mode 100644 index 1af6b4f..0000000 --- a/projects/com.ibm.cicsdev.terminal/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.terminal - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.terminal/META-INF/MANIFEST.MF b/projects/com.ibm.cicsdev.terminal/META-INF/MANIFEST.MF deleted file mode 100644 index 194f7e2..0000000 --- a/projects/com.ibm.cicsdev.terminal/META-INF/MANIFEST.MF +++ /dev/null @@ -1,12 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS terminal code -Bundle-SymbolicName: com.ibm.cicsdev.terminal -Bundle-Version: 1.0.0 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -CICS-MainClass: com.ibm.cicsdev.terminal.TerminalExample1 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)" -Bundle-ClassPath: . -Automatic-Module-Name: com.ibm.cicsdev.terminal - diff --git a/projects/com.ibm.cicsdev.terminal/README.md b/projects/com.ibm.cicsdev.terminal/README.md deleted file mode 100644 index 329e2ee..0000000 --- a/projects/com.ibm.cicsdev.terminal/README.md +++ /dev/null @@ -1,34 +0,0 @@ -com.ibm.cicsdev.terminal -=== - -Provides some sample Java code to show how to parse arguments when a Java program is used as an -initial program on a transaction, and the transaction is started from a terminal. - -The code first checks we are associated with a terminal, and then performs `receive()` call -to obtain the data supplied at the terminal. - -This data is then broken down using the `java.util.StringTokenizer` class to split the -supplied arguments on word boundaries. - -* `TerminalExample1` - a simple class to demonstrate receiving arguments from a terminal in a JCICS environment. - -## Supporting files - -* [`/etc/Terminal`](../../etc/Terminal) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. - - -## Running the Example - -At a 3270 terminal screen, enter the transaction you wish to run, followed by some optional arguments. - - JTM1 Hello from CICS! - -and the following output will be returned (assuming upper-casing is enabled for the terminal): - - JTM1 Hello from CICS! - Starting TerminalExample1 - Arg 0 : JTM1 - Arg 1 : HELLO - Arg 2 : FROM - Arg 3 : CICS! - Completed TerminalExample1 - diff --git a/projects/com.ibm.cicsdev.terminal/build.properties b/projects/com.ibm.cicsdev.terminal/build.properties deleted file mode 100644 index 34d2e4d..0000000 --- a/projects/com.ibm.cicsdev.terminal/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/projects/com.ibm.cicsdev.terminal/src/com/ibm/cicsdev/terminal/TerminalExample1.java b/projects/com.ibm.cicsdev.terminal/src/com/ibm/cicsdev/terminal/TerminalExample1.java deleted file mode 100644 index ffe53de..0000000 --- a/projects/com.ibm.cicsdev.terminal/src/com/ibm/cicsdev/terminal/TerminalExample1.java +++ /dev/null @@ -1,126 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.terminal; - -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DataHolder; -import com.ibm.cics.server.EndOfChainIndicatorException; -import com.ibm.cics.server.Task; -import com.ibm.cics.server.TerminalPrincipalFacility; - -/** - * Provides an example of receiving arguments to a transaction at a 3270 terminal. - */ -public class TerminalExample1 -{ - /** - * Main entry point to a CICS OSGi program. - */ - public static void main(String[] args) throws CicsConditionException - { - // Get details about our current CICS task - Task task = Task.getTask(); - - // Retrieve the raw string from the terminal - // This will need to be issued before we write anything out - String strTerm = getTerminalString(); - - // Now we can report status to the terminal - task.out.println(" - Starting TerminalExample1"); - - // Do we have terminal arguments? - if (strTerm != null) { - - // Parse to individual elements - String[] termArgs = parseTerminalString(strTerm); - - // Display arguments - for (int i = 0; i < termArgs.length; i++) { - task.out.println( String.format("Arg %d : %s", i, termArgs[i]) ); - } - } - - // Completion message - task.out.println("Completed TerminalExample1"); - } - - /** - * Verifies the current task is associated with a terminal and then - * receives the input data. The received data is converted to a Java - * string and returned. - * - * @return a String containing the data input at the terminal. If the - * transaction's principal facility is not a terminal, then null - * will be returned. - */ - private static String getTerminalString() throws CicsConditionException - { - // Get the current task's principal facility - Object pf = Task.getTask().getPrincipalFacility(); - - // Are we of a suitable type? - if ( pf instanceof TerminalPrincipalFacility ) { - - // Cast to correct type - TerminalPrincipalFacility tpf = (TerminalPrincipalFacility) pf; - - // Create a holder object to store the data - DataHolder holder = new DataHolder(); - - try { - // Perform the receive from the terminal - tpf.receive(holder); - } - catch (EndOfChainIndicatorException e) { - // Normal operation - ignore this one - } - catch (CicsConditionException cce) { - // Propagate all other problems - throw cce; - } - - // Convert the received data into a valid String - // Assume this is a valid character string in the CICS local CCSID - // Requires CICS TS V5.1 and later (JCICS 1.401.0) - return holder.getStringValue(); - } - else { - // Not a terminal principal facility - return null; - } - } - - /** - * Breaks down the input string into - * @param strTerm - * @return - */ - private static String[] parseTerminalString(String strTerm) - { - // A place to store the output collection - List args = new ArrayList<>(); - - // Tokenize the input string using standard whitespace characters - StringTokenizer tok = new StringTokenizer(strTerm); - - // Add each of the tokens to the output collection - while ( tok.hasMoreTokens() ) { - args.add(tok.nextToken()); - } - - // Convert the collection to an array - return args.toArray( new String[args.size()] ); - } -} diff --git a/projects/com.ibm.cicsdev.tsq.cicsbundle/.project b/projects/com.ibm.cicsdev.tsq.cicsbundle/.project deleted file mode 100644 index 44b6bb5..0000000 --- a/projects/com.ibm.cicsdev.tsq.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tsq.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 6cf0a61..0000000 --- a/projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.tsq.osgibundle=UTF-8 diff --git a/projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml deleted file mode 100644 index fbb0279..0000000 --- a/projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-11-04T15:15:33.327Z - - - - diff --git a/projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle b/projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle deleted file mode 100644 index 7a93389..0000000 --- a/projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project deleted file mode 100644 index baf323f..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.tsq.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.tsq.resources.cicsbundle - - - majorVersion - - - - microVersion - - - - minorVersion - - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program deleted file mode 100644 index f18651f..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program deleted file mode 100644 index 984aa55..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program deleted file mode 100644 index 2e34327..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program deleted file mode 100644 index 22a7abb..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction deleted file mode 100644 index cb562c4..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction deleted file mode 100644 index 104e315..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction deleted file mode 100644 index 918159b..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction deleted file mode 100644 index f0e1ac3..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 20ea96d..0000000 --- a/projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - 2016-11-11T11:05:46.741Z - - - - - - - - - - - diff --git a/projects/com.ibm.cicsdev.tsq/.classpath b/projects/com.ibm.cicsdev.tsq/.classpath deleted file mode 100644 index 2a5fd75..0000000 --- a/projects/com.ibm.cicsdev.tsq/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/projects/com.ibm.cicsdev.tsq/.gitignore b/projects/com.ibm.cicsdev.tsq/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.tsq/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.tsq/.project b/projects/com.ibm.cicsdev.tsq/.project deleted file mode 100644 index 999be5d..0000000 --- a/projects/com.ibm.cicsdev.tsq/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.tsq - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.jdt.core.prefs b/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f42de36..0000000 --- a/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.pde.core.prefs b/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index e8ff8be..0000000 --- a/projects/com.ibm.cicsdev.tsq/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.equinox=false -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/projects/com.ibm.cicsdev.tsq/META-INF/MANIFEST.MF b/projects/com.ibm.cicsdev.tsq/META-INF/MANIFEST.MF deleted file mode 100644 index bbe9a98..0000000 --- a/projects/com.ibm.cicsdev.tsq/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS code for use of temporary storage queues -Bundle-SymbolicName: com.ibm.cicsdev.tsq -Bundle-Version: 1.0.0 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -CICS-MainClass: com.ibm.cicsdev.tsq.TSQExample1, - com.ibm.cicsdev.tsq.TSQExample2, - com.ibm.cicsdev.tsq.TSQExample3, - com.ibm.cicsdev.tsq.TSQExample4 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)", - com.ibm.jzos.fields;resolution:=optional -Automatic-Module-Name: com.ibm.cicsdev.tsq -Bundle-ClassPath: lib/TsqRecord.jar, - . diff --git a/projects/com.ibm.cicsdev.tsq/README.md b/projects/com.ibm.cicsdev.tsq/README.md deleted file mode 100644 index eaadd0e..0000000 --- a/projects/com.ibm.cicsdev.tsq/README.md +++ /dev/null @@ -1,61 +0,0 @@ -com.ibm.cicsdev.tsq -=== - -This repository contains various Java sample programs to demonstrate use of the JCICS API for manipulating -a temporary storage queue (TSQ). - -A TSQ is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically -created at runtime, unlike transient data queues that must be defined in advance. - -All of the examples in this repository use the sample queue named `MYTSQ`. - -* `TSQExample1` - a simple class that writes Java strings to a TSQ and then reads them back. -* `TSQExample2` - an alternative implementation of `TSQExample1`, that writes and reads Java strings, but performs all -of the byte array to string conversion manually. This avoids the pre-requisite of CICS TS V5.1, but is slightly more work to code in Java. -* `TSQExample3` - a more complex example that uses a JZOS generated record to write a structured record to a TSQ and then read it back. -* `TSQExample4` - an extension of the `TSQExample3` sample program, which populates a TSQ, updates items within the queue, then -reads them back to confirm. -* `TSQCommon` - superclass used to provide common services for the TSQ samples. The constructor of this class will -delete any existing TSQ before executing the test, in order to avoid multiple executions of the program from producing -incorrect results. - -For the sake of brevity, all of the examples lack comprehensive error-handling logic. -To demonstrate exactly where an exception may be thrown when using the JCICS API, -one `try { ... } catch { ... }` block has been included per API call that may throw an exception. - - -## Supporting files - -* `lib/TsqRecord.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in `TSQExample3` (includes source). -* [`/etc/TSQ`](../../etc/TSQ) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. - - -## Structured record - -The COBOL structure that is mapped by the TsqRecord class is as follows: - - 01 TSQ-RECORD. - 03 RECORD-ID PIC 9(8) COMP. - 03 BINARY-DIGIT PIC 9(4) COMP. - 03 CHARACTER-STRING PIC X(30). - 03 NUMERIC-VALUE PIC 9(18). - 03 PACKED-DEC PIC 9(15) COMP-3. - 03 SIGNED-PACKED PIC S9(12) COMP-3. - - -## Running the Example - -At a 3270 terminal screen, enter the transaction you wish to run, for example JTS1 will run TSQ example 1. - - JTS1 - -and the following output will be returned - - JTS1 - Starting TSQExample1 - Read data from queue "TSQ write from JCICS item 1" - Read data from queue "TSQ write from JCICS item 2" - Read data from queue "TSQ write from JCICS item 3" - Read data from queue "TSQ write from JCICS item 4" - Read data from queue "TSQ write from JCICS item 5" - Completed TSQExample1 - diff --git a/projects/com.ibm.cicsdev.tsq/build.properties b/projects/com.ibm.cicsdev.tsq/build.properties deleted file mode 100644 index 05edc89..0000000 --- a/projects/com.ibm.cicsdev.tsq/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - lib/TsqRecord.jar diff --git a/projects/com.ibm.cicsdev.tsq/lib/TsqRecord.jar b/projects/com.ibm.cicsdev.tsq/lib/TsqRecord.jar deleted file mode 100644 index 990a58f42a5b89b853e4eef8b6e371b925612c94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7793 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 IQ2wj_5Ba1WoB#j- diff --git a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQCommon.java b/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQCommon.java deleted file mode 100644 index 771bd7b..0000000 --- a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQCommon.java +++ /dev/null @@ -1,68 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tsq; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.InvalidQueueIdException; -import com.ibm.cics.server.TSQ; - -/** - * Superclass used to provide common services used in all of the TSQ - * examples. - * - * For the sake of brevity, this example does not include comprehensive - * error-handling logic. See the CICS Java samples around error-handling - * for more details on catching CICS Exceptions in Java. - */ -public abstract class TSQCommon -{ - /** - * A field to hold a reference to the CICS temporary - * storage queue this instance will access. - */ - protected final TSQ tsq; - - /** - * Constructor used to initialise this class with some - * common data used by all TSQ examples. - * - * @param tsq - a reference to the temporary storage queue we will - * be manipulating in this example. - */ - protected TSQCommon(TSQ tsq) - { - // Save reference to the supplied TSQ - this.tsq = tsq; - - // Delete any old TSQ that's lying around - deleteQueue(); - } - - /** - * Deletes a temporary storage queue. - */ - private void deleteQueue() - { - try { - // Delete the TSQ - this.tsq.delete(); - } - catch (InvalidQueueIdException iqe) { - // QIDERR occurs when the queue cannot be found - // This is an acceptable condition in this program - } - catch (CicsConditionException cce) { - // All other errors - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } -} diff --git a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample1.java b/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample1.java deleted file mode 100644 index 0f3a50f..0000000 --- a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample1.java +++ /dev/null @@ -1,133 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tsq; - -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.ItemHolder; -import com.ibm.cics.server.TSQ; -import com.ibm.cics.server.TSQType; -import com.ibm.cics.server.Task; - -/** - * Simple example to demonstrate writing and reading a Java String to - * and from a TSQ using JCICS. - */ -public class TSQExample1 extends TSQCommon -{ - /** - * Name of the TSQ to use. - */ - private static final String TSQ_NAME = "MYTSQ"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TSQExample1"); - - // Create a reference to the TSQ - TSQ tsq = new TSQ(); - - // Specify the queue name and that we are using main storage - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - // Create a new instance of this class - TSQExample1 ex = new TSQExample1(tsq); - - // Write text to the queue - ex.writeToQueue(); - - // Read text from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TSQExample1"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tsq - the temporary storage queue reference we will - * be manipulating in this example. - */ - public TSQExample1(TSQ tsq) - { - super(tsq); - } - - /** - * Write of Java string data to a TSQ. - */ - public void writeToQueue() - { - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Construct a message for writing to the queue - String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); - - try { - // Write the data to the TSQ - // No codepage conversion required for this method - // Requires CICS TS V5.1 and later (JCICS 1.401.0) - this.tsq.writeString(msg); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - } - - /** - * Simple read of string data from a TSQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - ItemHolder holder = new ItemHolder(); - - // Read data from the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - try { - // Read the data from CICS (TSQ indices are 1-based) - this.tsq.readItem(i, holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Assume this is a valid character string in the CICS local CCSID - // Requires CICS TS V5.1 and later (JCICS 1.401.0) - String strData = holder.getStringValue(); - - // Write out to the console - String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java b/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java deleted file mode 100644 index 8ea9a67..0000000 --- a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java +++ /dev/null @@ -1,161 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tsq; - -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.ItemHolder; -import com.ibm.cics.server.TSQ; -import com.ibm.cics.server.TSQType; -import com.ibm.cics.server.Task; - -/** - * Simple example to demonstrate writing and reading a Java String to - * and from a TSQ using JCICS, with manual maintenance of codepages. - */ -public class TSQExample2 extends TSQCommon -{ - /** - * Name of the TSQ to use. - */ - private static final String TSQ_NAME = "MYTSQ"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Resolved at runtime to be the CCSID of the region - */ - private static final String CCSID = - System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TSQExample2"); - - // Create a reference to the TSQ - TSQ tsq = new TSQ(); - - // Specify the queue name and that we are using main storage - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - // Create a new instance of this class - TSQExample2 ex = new TSQExample2(tsq); - - // Write text to the queue - ex.writeToQueue(); - - // Read text from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TSQExample2"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tsq - the temporary storage queue reference we will - * be manipulating in this example. - */ - public TSQExample2(TSQ tsq) - { - super(tsq); - } - - /** - * Write of Java string data to a TSQ. - */ - public void writeToQueue() - { - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Data to write to the TSQ - byte[] data; - - // Construct a message for writing to the queue - String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); - - try { - // Convert the string to a byte[] - data = msg.getBytes(CCSID); - } - catch (UnsupportedEncodingException uee) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(uee); - } - - try { - // Write the data to the TSQ - this.tsq.writeItem(data); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - } - - /** - * Simple read of string data from a TSQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - ItemHolder holder = new ItemHolder(); - - // Read data from the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - try { - // Read the data from CICS (TSQ indices are 1-based) - this.tsq.readItem(i, holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Extract the byte[] data - byte[] data = holder.getValue(); - - // String object to create - String strData; - - try { - // Assume this is a valid character string in the CICS local CCSID - strData = new String(data, CCSID); - } - catch (UnsupportedEncodingException uee) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(uee); - } - - // Write out to the console - String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample3.java b/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample3.java deleted file mode 100644 index 1d578c1..0000000 --- a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample3.java +++ /dev/null @@ -1,160 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tsq; - -import java.text.MessageFormat; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.ItemHolder; -import com.ibm.cics.server.TSQ; -import com.ibm.cics.server.TSQType; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.TsqRecord; - -/** - * More complex example to demonstrate writing and reading - * a record to and from a TSQ using JCICS. - * - * This uses the generated class {@link TsqRecord}. - */ -public class TSQExample3 extends TSQCommon -{ - /** - * Name of the TSQ to use. - */ - private static final String TSQ_NAME = "MYTSQ"; - - /** - * Number of items to write to the queue. - */ - private static final int DEPTH_COUNT = 5; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TSQExample3"); - - // Create a reference to the TSQ - TSQ tsq = new TSQ(); - - // Specify the queue name and that we are using main storage - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - // Create a new instance of this class - TSQExample3 ex = new TSQExample3(tsq); - - // Write data to the queue - ex.writeToQueue(); - - // Read data from the queue - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TSQExample3"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tsq - the temporary storage queue reference we will - * be manipulating in this example. - */ - public TSQExample3(TSQ tsq) - { - super(tsq); - } - - /** - * Write of byte[] data to a TSQ. - */ - public void writeToQueue() - { - // Create a wrapper object to write to the queue - // This class has been generated using the JZOS record generator utility - TsqRecord data = new TsqRecord(); - - // Populate with some dummy data - data.setBinaryDigit(42); - data.setCharacterString("TSQ test example"); - data.setNumericValue(123456789); - data.setPackedDec(123); - data.setSignedPacked(-99); - - // Write several items to the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - // Update record for this iteration - data.setRecordId(i); - - // Extract the byte data from the wrapper object - // The generated class handles any codepage conversion required - byte[] record = data.getByteBuffer(); - - try { - // Write the data to the TSQ - this.tsq.writeItem(record); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - } - - /** - * Read of byte[] data from a TSQ. - */ - public void readFromQueue() - { - // A holder object to receive the data from CICS - ItemHolder holder = new ItemHolder(); - - // Read data from the queue - for (int i = 1; i <= DEPTH_COUNT; i++) { - - try { - // Read the data from CICS (TSQ indices are 1-based) - this.tsq.readItem(i, holder); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Obtain the raw bytes from the TSQ item - byte[] itemData = holder.getValue(); - - // Convert to Java object form - // This class has been generated using the JZOS record generator utility - TsqRecord record = new TsqRecord(itemData); - - // Break the record apart - String msg = MessageFormat.format("Record: ({0}) ({1}) ({2}) ({3}) ({4}) ({5})", - record.getRecordId(), - record.getBinaryDigit(), - record.getCharacterString(), - record.getNumericValue(), - record.getPackedDec(), - record.getSignedPacked()); - - // Write out the record to the terminal - Task.getTask().out.println(msg); - } - } -} diff --git a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample4.java b/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample4.java deleted file mode 100644 index 537012d..0000000 --- a/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample4.java +++ /dev/null @@ -1,129 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2016 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.tsq; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.ItemErrorException; -import com.ibm.cics.server.ItemHolder; -import com.ibm.cics.server.TSQ; -import com.ibm.cics.server.TSQType; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.TsqRecord; - -/** - * Extends the {@link TSQExample3} class by including a method which - * updates items in the queue. - */ -public class TSQExample4 extends TSQExample3 -{ - /** - * Name of the TSQ to use. - */ - private static final String TSQ_NAME = "MYTSQ"; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting TSQExample4"); - - // Create a reference to the TSQ - TSQ tsq = new TSQ(); - - // Specify the queue name and that we are using main storage - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - // Create a new instance of this class - TSQExample4 ex = new TSQExample4(tsq); - - // Write some initial data to the TSQ - ex.writeToQueue(); - - // Update the TSQ with a browse and rewrite - ex.updateQueue(); - - // Read from the TSQ to confirm update - ex.readFromQueue(); - - // Completion message - task.out.println("Completed TSQExample4"); - } - - /** - * Constructor used to pass data to superclass constructor. - * - * @param tsq - the temporary storage queue reference we will - * be manipulating in this example. - */ - public TSQExample4(TSQ tsq) - { - super(tsq); - } - - /** - * Browses through a queue created by {@link TSQExample3} and updates each record. - * - * Each item in the queue is assumed to have a layout specified by the generated - * {@link TsqRecord} class. - */ - public void updateQueue() - { - // Current item we are reading (TSQ indices are 1-based) - int currentItem = 1; - - // Holder to receive data from TSQ - ItemHolder holder = new ItemHolder(); - - // Loop until we break out at end of queue - while ( true ) { - - try { - // Browse through the queue sequentially - this.tsq.readNextItem(holder); - } - catch (ItemErrorException iee) { - // ITEMERR represents end of browse - normal condition here - break; - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Extract the record - // This class has been generated using the JZOS record generator utility - TsqRecord record = new TsqRecord(holder.getValue()); - - // Update the record ID and character fields - record.setRecordId(record.getRecordId() + 100); - record.setCharacterString("Updated: " + record.getCharacterString()); - - try { - // Write record back to the queue - this.tsq.rewriteItem(currentItem, record.getByteBuffer()); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - - // Next queue item - currentItem++; - } - } -} diff --git a/projects/com.ibm.cicsdev.vsam.cicsbundle/.project b/projects/com.ibm.cicsdev.vsam.cicsbundle/.project deleted file mode 100644 index 77b4485..0000000 --- a/projects/com.ibm.cicsdev.vsam.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.vsam.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index e7b581e..0000000 --- a/projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.vsam.osgibundle=UTF-8 diff --git a/projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 9d6f64c..0000000 --- a/projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-12-13T15:47:28.565Z - - - - diff --git a/projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle b/projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle deleted file mode 100644 index 080e914..0000000 --- a/projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project deleted file mode 100644 index 9883310..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.vsam.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program deleted file mode 100644 index 1fc6d81..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program deleted file mode 100644 index df220b3..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program deleted file mode 100644 index 73c671e..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program deleted file mode 100644 index 0c46a5a..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program deleted file mode 100644 index 130025b..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program deleted file mode 100644 index 4055171..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program deleted file mode 100644 index a268cb8..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program deleted file mode 100644 index 40b4683..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program deleted file mode 100644 index 1725aad..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program deleted file mode 100644 index fcdd685..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program deleted file mode 100644 index 572590b..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program deleted file mode 100644 index eda5324..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program deleted file mode 100644 index 1f1f882..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program deleted file mode 100644 index 75ab66e..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program deleted file mode 100644 index 4306587..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction deleted file mode 100644 index 1c1c79c..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction deleted file mode 100644 index 5fdf6fd..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction deleted file mode 100644 index 996fbc2..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction deleted file mode 100644 index fd35736..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction deleted file mode 100644 index e62e3f5..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction deleted file mode 100644 index e9369dc..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction deleted file mode 100644 index 3847aec..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction deleted file mode 100644 index ba86766..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction deleted file mode 100644 index 90525aa..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction deleted file mode 100644 index f0458a3..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction deleted file mode 100644 index 1fce412..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction deleted file mode 100644 index 672790e..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction deleted file mode 100644 index b2c4a20..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction deleted file mode 100644 index 6d2bd29..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction deleted file mode 100644 index 913e900..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction +++ /dev/null @@ -1 +0,0 @@ - diff --git a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml b/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index c43345d..0000000 --- a/projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - 2016-12-13T15:49:54.727Z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/com.ibm.cicsdev.vsam/.classpath b/projects/com.ibm.cicsdev.vsam/.classpath deleted file mode 100644 index 7840347..0000000 --- a/projects/com.ibm.cicsdev.vsam/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/projects/com.ibm.cicsdev.vsam/.gitignore b/projects/com.ibm.cicsdev.vsam/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/projects/com.ibm.cicsdev.vsam/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/projects/com.ibm.cicsdev.vsam/.project b/projects/com.ibm.cicsdev.vsam/.project deleted file mode 100644 index 2104167..0000000 --- a/projects/com.ibm.cicsdev.vsam/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.vsam - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.jdt.core.prefs b/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f42de36..0000000 --- a/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.pde.core.prefs b/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index e8ff8be..0000000 --- a/projects/com.ibm.cicsdev.vsam/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -pluginProject.equinox=false -pluginProject.extensions=false -resolve.requirebundle=false diff --git a/projects/com.ibm.cicsdev.vsam/META-INF/MANIFEST.MF b/projects/com.ibm.cicsdev.vsam/META-INF/MANIFEST.MF deleted file mode 100644 index 018169d..0000000 --- a/projects/com.ibm.cicsdev.vsam/META-INF/MANIFEST.MF +++ /dev/null @@ -1,28 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS VSAM code -Bundle-SymbolicName: com.ibm.cicsdev.vsam -Bundle-Version: 1.0.0 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)", - com.ibm.jzos.fields;resolution:=optional -Bundle-ClassPath: lib/vsam.jar, - . -CICS-MainClass: com.ibm.cicsdev.vsam.ksds.KsdsExample1, - com.ibm.cicsdev.vsam.ksds.KsdsExample2, - com.ibm.cicsdev.vsam.ksds.KsdsExample3, - com.ibm.cicsdev.vsam.ksds.KsdsExample4, - com.ibm.cicsdev.vsam.ksds.KsdsExample5, - com.ibm.cicsdev.vsam.esds.EsdsExample1, - com.ibm.cicsdev.vsam.esds.EsdsExample2, - com.ibm.cicsdev.vsam.esds.EsdsExample3, - com.ibm.cicsdev.vsam.esds.EsdsExample4, - com.ibm.cicsdev.vsam.esds.EsdsExample5, - com.ibm.cicsdev.vsam.rrds.RrdsExample1, - com.ibm.cicsdev.vsam.rrds.RrdsExample2, - com.ibm.cicsdev.vsam.rrds.RrdsExample3, - com.ibm.cicsdev.vsam.rrds.RrdsExample4, - com.ibm.cicsdev.vsam.rrds.RrdsExample5 -Automatic-Module-Name: com.ibm.cicsdev.vsam - diff --git a/projects/com.ibm.cicsdev.vsam/README.md b/projects/com.ibm.cicsdev.vsam/README.md deleted file mode 100644 index 3b55a36..0000000 --- a/projects/com.ibm.cicsdev.vsam/README.md +++ /dev/null @@ -1,32 +0,0 @@ -com.ibm.cicsdev.vsam -=== - -Provides examples for using VSAM files from a JCICS environment. -All examples have a ESDS, KSDS, and RRDS variant. -The numbered example classes are driving classes, with the ExampleCommon classes performing the JCICS calls. - -* `*Example1` - Writes a single record to a file. -* `*Example2` - Reads a single record from a file. -* `*Example3` - Updates a single record in a file. -* `*Example4` - Deletes a single record in a file (not ESDS). -* `*Example5` - Browses a VSAM file. -* `*ExampleCommon` - Various routines that perform the required JCICS calls. - -## Supporting files - -* `lib/vsam.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in all the VSAM samples (includes source). -* [`/etc/VSAM`](../../etc/VSAM) - contains sample JCL to define the required VSAM files, and the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. - - -## Running the Example - -At a 3270 terminal screen, enter the transaction you wish to run, for example JVK1 will run the VSAM KSDS example 1. - - JVK1 - -and the following output will be returned - - JVK1 - Starting KsdsExample1 - VSAM KSDS record addition example - Wrote record with key 0x0003E712 - Completed KsdsExample1 diff --git a/projects/com.ibm.cicsdev.vsam/build.properties b/projects/com.ibm.cicsdev.vsam/build.properties deleted file mode 100644 index 0a54e52..0000000 --- a/projects/com.ibm.cicsdev.vsam/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - lib/vsam.jar diff --git a/projects/com.ibm.cicsdev.vsam/lib/vsam.jar b/projects/com.ibm.cicsdev.vsam/lib/vsam.jar deleted file mode 100644 index 623af6f917ede44af54e23f04ae6db413f387adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7443 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 diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/StockPartHelper.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/StockPartHelper.java deleted file mode 100644 index 6d8aa76..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/StockPartHelper.java +++ /dev/null @@ -1,234 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam; - -import java.math.BigDecimal; -import java.util.Calendar; -import java.util.concurrent.ThreadLocalRandom; - -import com.ibm.cicsdev.bean.StockPart; - -/** - * Provides various routines that assist in the creation of sample data. - * - * This class serves no purpose in the application interface to CICS. It is merely provided - * to generate random data, without any requirements to pre-load datasets with sample data. - */ -public class StockPartHelper -{ - /** - * Constant used to represent the milliseconds time value as of Jan 1st 2010 00:00:00.000. - */ - private static final long JANUARY_1ST_2010 = 1262304000000l; - - /** - * Constant used to represent the number of milliseconds between Jan 1st 2010 and Jan 1st 2020. - */ - private static final long TEN_YEARS = 315532800000l; - - /** - * Constant used to represent the number of milliseconds in eight weeks. - */ - private static final long EIGHT_WEEKS = 4838400000l; - - /** - * A selection of possible sizes for the description. Maximum length should be 11 characters. - */ - public static final String[] SIZE = - { "Tiny", "Small", "Medium", "Large", "Extra large", "Huge" }; - - /** - * A selection of possible colours for the description. Maximum length should be 6 characters. - */ - public static final String[] COLOUR = - { "blue", "red", "orange", "green", "yellow", "white", "black", "purple" }; - - /** - * A selection of possible shapes for the description. Maximum length should be 6 characters. - */ - public static final String[] SHAPE = - { "round", "square", "oval", "flat" }; - - /** - * A selection of possible materials for the description. Maximum length should be 7 characters. - */ - public static final String[] MATERIAL = - { "plastic", "metal", "card" }; - - /** - * A selection of possible object types for the description. Maximum length should be 6 characters. - */ - public static final String[] NOUN = - { "widget", "thing", "plug", "nut", "bit", "part", "panel" }; - - - /** - * Generates a random key. - * - * @return a byte array representing a random key value - */ - public static byte[] generateKey() { - - // Source of random numbers - ThreadLocalRandom rand = ThreadLocalRandom.current(); - - // Create a new StockPart instance - StockPart sp = new StockPart(); - - // Generate a random part number as an integer (range is 0 <= n < 100,000,000) - sp.setPartId(rand.nextInt(100_000_000)); - - // Convert to a byte array using helper method - return getKey(sp); - } - - /** - * Generates a byte array representing the lowest possible key. - * - * @return a byte array representing the lowest possible key for - * a {@link StockPart} instance. - */ - public static byte[] getKeyZero() { - - // Create a new StockPart instance - StockPart sp = new StockPart(); - - // Key zero is for stock part with ID of zero - sp.setPartId(0); - - // Convert to a byte array using helper method - return getKey(sp); - } - - /** - * Extracts the key from the supplied {@link StockPart} instance as - * a byte array, suitable for use in a keyed VSAM file. - * - * @param sp the StockPart instance to use. - * - * @return a byte array which can be used as a key to identify the - * supplied StockPart record. - */ - public static byte[] getKey(StockPart sp) { - - // Get the flat byte structure from the StockPart instance - byte[] record = sp.getByteBuffer(); - - // Get a byte array containing the record key - byte[] key = new byte[8]; - System.arraycopy(record, 0, key, 0, key.length); - - // Return the key as a byte array - return key; - } - - /** - * Extracts the key from the supplied part ID, which represents a - * {@link StockPart} instance, as a byte array, suitable for use - * in a keyed VSAM file. - * - * @param partId the part ID to reference. - * - * @return a byte array which can be used as a key to identify the - * supplied StockPart record. - */ - public static byte[] getKey(int partId) - { - // Create a new StockPart instance and delegate - StockPart sp = new StockPart(); - sp.setPartId(partId); - return getKey(sp); - } - - /** - * Generate a StockPart object which contains random, but valid data. - * - * @return A newly-created StockPart object. - */ - public static StockPart generate() { - - // Source of random numbers - ThreadLocalRandom rand = ThreadLocalRandom.current(); - - // New record to create - StockPart sp = new StockPart(); - - // Generate a random part number as an integer (range is 1 <= n < 100,000,000) - sp.setPartId(rand.nextInt(1, 100_000_00)); - - // Generate a random supplier number as an integer (range is 1 <= n < 100,000,000) - sp.setSupplier(rand.nextInt(1, 100_000_000)); - - // Last order date is some time in the ten years after January 1st 2010 - long lLastOrderDate = JANUARY_1ST_2010 + rand.nextLong(TEN_YEARS); - Calendar cLastOrderDate = Calendar.getInstance(); - cLastOrderDate.setTimeInMillis(lLastOrderDate); - - // Set each of the fields - sp.setLastOrderDateYy(String.format("%1$ty", cLastOrderDate)); - sp.setLastOrderDateMm(String.format("%1$tm", cLastOrderDate)); - sp.setLastOrderDateDd(String.format("%1$td", cLastOrderDate)); - - // Next order date is eight weeks after last order date - long lNextOrderDate = lLastOrderDate + EIGHT_WEEKS; - Calendar cNextOrderDate = Calendar.getInstance(); - cNextOrderDate.setTimeInMillis(lNextOrderDate); - - // Set each of the fields - sp.setNextOrderDateYy(String.format("%1$ty", cNextOrderDate)); - sp.setNextOrderDateMm(String.format("%1$tm", cNextOrderDate)); - sp.setNextOrderDateDd(String.format("%1$td", cNextOrderDate)); - - // Generate a random description - sp.setDescription(generateDescription()); - - // Generate a random stock quantity (range of 0 <= n < 10,000) - int iStock = rand.nextInt(0, 10_000); - sp.setStockQuantity(iStock); - - // Generate a random price (range is 100 <= n < 10,000) - double dPrice = rand.nextInt(100, 10_000) / 100.0d; - sp.setUnitPrice(new BigDecimal(dPrice)); - - // Return to the caller - return sp; - } - - /** - * Generates a description for a random part using the arrays of constants - * {@link #SIZE}, {@link #COLOUR}, {@link #SHAPE}, {@link #MATERIAL}, and - * {@link #NOUN}. The description will be a string of maximum length 40 characters. - * - * @return a human-readable description of an object - */ - public static String generateDescription() { - - // Source of random numbers - ThreadLocalRandom r = ThreadLocalRandom.current(); - - // Buffer to hold the generated description - max possible length of 40 characters - StringBuilder sb = new StringBuilder(40); - - // Generate a random sequence of adjectives and finish with a noun - sb.append(SIZE[r.nextInt(SIZE.length)]); - sb.append(' '); - sb.append(COLOUR[r.nextInt(COLOUR.length)]); - sb.append(' '); - sb.append(SHAPE[r.nextInt(SHAPE.length)]); - sb.append(' '); - sb.append(MATERIAL[r.nextInt(MATERIAL.length)]); - sb.append(' '); - sb.append(NOUN[r.nextInt(NOUN.length)]); - - // Return the created description - return sb.toString(); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/VsamExampleCommon.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/VsamExampleCommon.java deleted file mode 100644 index ee344bc..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/VsamExampleCommon.java +++ /dev/null @@ -1,62 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam; - -import com.ibm.cics.server.InvalidRequestException; -import com.ibm.cics.server.RolledBackException; -import com.ibm.cics.server.Task; - - -/** - * An abstract class that provides services common across all of the VSAM - * sample classes. - */ -public abstract class VsamExampleCommon -{ - /** - * Example of committing a unit of work within an OSGi JVM server. - * - * When performing a commit in Java, the following two exceptions may be thrown: - * - *

    - *
  • RolledBackException - CICS was unable to commit the current - * UoW because a remote system was unable to commit.
  • - * - *
  • InvalidRequestException - This can happen in Java on a commit - * for one of two reasons: - *
      - *
    1. Task.commit() was called in a program that is linked to from a remote system - * that has not specified the SYNCONRETURN option, or if it has been linked to - * locally and is defined with EXECUTIONSET=DPLSUBSET.
    2. - *
    3. Task.commit() was called in a Java environment where we also have a JTA - * transaction active. (This is not an issue in an OSGi JVM server).
    4. - *
  • - * - *
- */ - public void commitUnitOfWork() - { - try { - // Issue a CICS syncpoint - Task.getTask().commit(); - } - catch (RolledBackException rbe) { - // See javadoc for description - // For this example, propagate the error out of the Java program - throw new RuntimeException(rbe); - } - catch (InvalidRequestException ire) { - // See javadoc for description - // For this example, propagate the error out of the Java program - throw new RuntimeException(ire); - } - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample1.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample1.java deleted file mode 100644 index f8df822..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample1.java +++ /dev/null @@ -1,55 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate adding a record to a VSAM ESDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link EsdsExampleCommon}. - */ -public class EsdsExample1 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting EsdsExample1"); - task.out.println("VSAM ESDS record addition example"); - - // Create a new instance of the common ESDS class - EsdsExampleCommon ex = new EsdsExampleCommon(); - - // Create a new random record for writing to the file - StockPart sp = StockPartHelper.generate(); - - // Add a new record to the file - long rba = ex.addRecord(sp); - - // Write out the RBA of the new record - task.out.println( String.format("Wrote record with RBA 0x%016X", rba) ); - - // Unit of work containing the write will be committed at normal end of task - - // Completion message - task.out.println("Completed EsdsExample1"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample2.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample2.java deleted file mode 100644 index 6f90433..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample2.java +++ /dev/null @@ -1,63 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; -import com.ibm.cicsdev.vsam.ksds.KsdsExampleCommon; - - -/** - * Simple example to demonstrate reading a record from a VSAM ESDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link KsdsExampleCommon}. - */ -public class EsdsExample2 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting EsdsExample2"); - task.out.println("VSAM ESDS record read example"); - - // Create a new instance of the common ESDS class - EsdsExampleCommon ex = new EsdsExampleCommon(); - - // Add a new record to the file so we have something to work with - StockPart spNew = StockPartHelper.generate(); - long rba = ex.addRecord(spNew); - - // Commit the current unit of work to harden new record to the file - ex.commitUnitOfWork(); - - // Write out the RBA of the record we have just written - task.out.println( String.format("Wrote record with RBA 0x%016X", rba) ); - - // Now read the record with the specified RBA - StockPart spRead = ex.readRecord(rba); - - // Display the read description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); - - // Completion message - task.out.println("Completed EsdsExample2"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample3.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample3.java deleted file mode 100644 index 74f61b5..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample3.java +++ /dev/null @@ -1,86 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate updating a record in a VSAM ESDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link EsdsExampleCommon}. - */ -public class EsdsExample3 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting EsdsExample3"); - task.out.println("VSAM ESDS record update example"); - - // Create a new instance of the common ESDS class - EsdsExampleCommon ex = new EsdsExampleCommon(); - - - /* - * Create a record in the file so we have something to work with. - */ - - // Keep track of the RBA of the new record - long rba; - - // Scoping of local variables - { - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - rba = ex.addRecord(sp); - - // Commit the unit of work - ex.commitUnitOfWork(); - - // Write out the RBA and description - String strMsg = "Wrote to RBA 0x%016X with description %s"; - task.out.println( String.format(strMsg, rba, sp.getDescription().trim()) ); - } - - - /* - * Now update this known record with a new description. - */ - - // Scoping of local variables - { - // Generate a new part description - String strDesc = StockPartHelper.generateDescription(); - - // Update the known record with a specified description - StockPart sp = ex.updateRecord(rba, strDesc); - - // Display the updated description - String strMsg = "Updated record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Unit of work containing the update will be committed at normal end of task - - // Completion message - task.out.println("Completed EsdsExample3"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample4.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample4.java deleted file mode 100644 index fb7fedf..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample4.java +++ /dev/null @@ -1,37 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import com.ibm.cics.server.Task; - - -/** - * This is a dummy test class to remain consistent with the KSDS and RRDS examples. - * - * Records cannot be deleted from an ESDS dataset, either in JCICS or in the - * EXEC CICS API. - */ -public class EsdsExample4 -{ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting EsdsExample4"); - task.out.println("VSAM ESDS record delete example"); - - // VSAM ESDS does not allow record deletion - task.out.println("Record deletion not permitted for VSAM ESDS files"); - - // Completion message - task.out.println("Completed EsdsExample4"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample5.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample5.java deleted file mode 100644 index bb4a482..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExample5.java +++ /dev/null @@ -1,96 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import java.util.List; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate browsing a VSAM ESDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link EsdsExampleCommon}. - */ -public class EsdsExample5 -{ - /** - * Number of records to add and then browse through. - */ - private static final int RECORDS_TO_BROWSE = 5; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting EsdsExample5"); - task.out.println("VSAM ESDS file browse example"); - - // Create a new instance of the common example class - EsdsExampleCommon ex = new EsdsExampleCommon(); - - - /* - * Create some records in the file so we have something to work with. - */ - - // ESDS records are always stored in the sequence they were added - long rbaFirst = -1; - - // Add 5 records - for ( int i = 0; i < RECORDS_TO_BROWSE; i++ ) { - - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - long rba = ex.addRecord(sp); - - // Write out the RBA of the new record - task.out.println( String.format("Wrote to RBA 0x%016X", rba) ); - - // Keep track of the RBA of the first insert - if ( rbaFirst == -1 ) { - rbaFirst = rba; - } - } - - // Commit the unit of work to harden the inserts to the file - ex.commitUnitOfWork(); - - - /* - * Browse through the file, starting at the lowest RBA. - * - * The above code will have guaranteed sufficient records exist. - */ - - // Browse through the records, starting at the lowest known RBA - List list = ex.browse(rbaFirst, RECORDS_TO_BROWSE); - - // Iterate over this list - for ( StockPart sp : list ) { - - // Display the description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Completion message - task.out.println("Completed EsdsExample5"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java deleted file mode 100644 index dcbc92a..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java +++ /dev/null @@ -1,268 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.esds; - -import java.util.ArrayList; -import java.util.List; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DuplicateRecordException; -import com.ibm.cics.server.ESDS; -import com.ibm.cics.server.ESDS_Browse; -import com.ibm.cics.server.EndOfFileException; -import com.ibm.cics.server.InvalidRequestException; -import com.ibm.cics.server.RecordHolder; -import com.ibm.cics.server.RecordNotFoundException; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.VsamExampleCommon; - -/** - * Example class to demonstrate various operations which may be - * useful when manipulating VSAM ESDS files. - * - * Records in an ESDS file are located using their Relative Byte - * Address (RBA). - */ -public class EsdsExampleCommon extends VsamExampleCommon -{ - /** - * Name of the file resource to use. - */ - private static final String FILE_NAME = "XMPLESDS"; - - /** - * A field to hold a reference to the VSAM ESDS file this - * instance will access. - */ - private final ESDS esds; - - /** - * Constructor to initialise the reference to the sample file. - */ - public EsdsExampleCommon() - { - // Create a new ESDS instance and initialise - this.esds = new ESDS(); - this.esds.setName(FILE_NAME); - } - - /** - * Provides a simple example of adding a record to a VSAM ESDS file. - * - * @param sp the {@link StockPart} instance to write to the file. - * - * @return the RBA for the new record. - */ - public long addRecord(StockPart sp) - { - // Get the flat byte structure from the JZOS object - byte[] record = sp.getByteBuffer(); - - try { - // Write the record into the file - long rba = this.esds.write(record); - - // Return the new RBA for this record - return rba; - } - catch (DuplicateRecordException dre) { - - // Collision on the generated key - String strMsg = "Tried to insert duplicate record 0x%016X"; - Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); - throw new RuntimeException(dre); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for WRITE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not addable - String strMsg = "Add operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of updating a single record in a VSAM ESDS file. - * - * This method uses the supplied RBA to locate and lock a record using - * the readForUpdate() method, uses the supplied description to update the - * record that has been read, and then writes the new record back to the file - * using the rewrite() method. - * - * @param rba the RBA of the record to update. - * @param strDescription the new description to store in the VSAM file. - * - * @return the updated {@link StockPart} instance. - */ - public StockPart updateRecord(long rba, String strDescription) - { - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record at the specified RBA and lock - this.esds.readForUpdate(rba, rh); - - // Create a StockPart instance from the record - byte[] readBytes = rh.getValue(); - StockPart sp = new StockPart(readBytes); - - // Update the description - sp.setDescription(strDescription); - - // Rewrite the record with the updated data - this.esds.rewrite( sp.getByteBuffer() ); - - // Return the updated StockPart instance - return sp; - } - catch (RecordNotFoundException rnfe) { - // Initial read failed - key not found in file - String strMsg = "Record with RBA 0x%016X not found in file"; - Task.getTask().out.println( String.format(strMsg, rba) ); - throw new RuntimeException(rnfe); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read or update operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of reading a single record from a VSAM ESDS file. - * - * @param rba the RBA of the record to locate in the VSAM file. - * - * @return a {@link StockPart} instance representing the record in the VSAM file - * identified by the specified key. - */ - public StockPart readRecord(long rba) - { - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record identified by the supplied RBA - this.esds.read(rba, rh); - - // Create a StockPart instance from the record - return new StockPart( rh.getValue() ); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read operation not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (RecordNotFoundException rnfe) { - // The requested record was not found - String strMsg = "Record with RBA 0x%016X was not found"; - Task.getTask().out.println( String.format(strMsg, rba) ); - throw new RuntimeException(rnfe); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides an example of browsing a VSAM ESDS dataset. - * - * @param rbaStart the RBA from which the browse should begin. - * @param count the maximum number of records to return. - * - * @return a list of StockPart objects. - */ - public List browse(long rbaStart, int count) - { - // The list instance to return - List list = new ArrayList<>(count); - - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - try { - // Start the browse of the file - ESDS_Browse esdsBrowse = this.esds.startBrowse(rbaStart); - - // Loop until we reach maximum count - for ( int i = 0; i < count; i++ ) { - - // Read a record from the file (discard the returned RBA) - esdsBrowse.next(rh); - - // Get the record and convert to a StockPart - StockPart sp = new StockPart( rh.getValue() ); - - // Add this object to our return array - list.add(sp); - } - } - catch (RecordNotFoundException rnfe) { - // Initial browse failed - no records matching the supplied RBA - } - catch (EndOfFileException eof) { - // Normal termination of loop - no further records - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for STARTBR to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Browse operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - - // Return the list - return list; - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java deleted file mode 100644 index a032f0c..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java +++ /dev/null @@ -1,55 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate adding a record to a VSAM KSDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link KsdsExampleCommon}. - */ -public class KsdsExample1 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting KsdsExample1"); - task.out.println("VSAM KSDS record addition example"); - - // Create a new instance of the common KSDS class - KsdsExampleCommon ex = new KsdsExampleCommon(); - - // Create a new random record for writing to the file - StockPart sp = StockPartHelper.generate(); - - // Add a new record to the file - ex.addRecord(sp); - - // Write out the part ID - task.out.println( String.format("Wrote record with key 0x%08X", sp.getPartId()) ); - - // Unit of work containing the write will be committed at normal end of task - - // Completion message - task.out.println("Completed KsdsExample1"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java deleted file mode 100644 index 13d910d..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java +++ /dev/null @@ -1,65 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - - -/** - * Simple example to demonstrate reading a record from a VSAM KSDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * superclass {@link KsdsExampleCommon}. - */ -public class KsdsExample2 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting KsdsExample2"); - task.out.println("VSAM KSDS record read example"); - - // Create a new instance of the common example class - KsdsExampleCommon ex = new KsdsExampleCommon(); - - // Add a new record to the file so we have something to work with - StockPart spNew = StockPartHelper.generate(); - ex.addRecord(spNew); - - // Keep track of the key - int key = spNew.getPartId(); - - // Write out the original description - task.out.println( String.format("Wrote record with key 0x%08X", key) ); - - // Commit the current unit of work harden new record to the file - ex.commitUnitOfWork(); - - // Now read the record with the specified key - StockPart spRead = ex.readRecord(key); - - // Display the read description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); - - // Completion message - task.out.println("Completed KsdsExample2"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java deleted file mode 100644 index ace83e2..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java +++ /dev/null @@ -1,89 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate updating a record in a VSAM KSDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link KsdsExampleCommon}. - */ -public class KsdsExample3 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting KsdsExample3"); - task.out.println("VSAM KSDS record update example"); - - // Create a new instance of the common example class - KsdsExampleCommon ex = new KsdsExampleCommon(); - - - /* - * Create a record in the file so we have something to work with. - */ - - // Keep track of the key of the new record - int key; - - // Scoping of local variables - { - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(sp); - - // Commit the unit of work - ex.commitUnitOfWork(); - - // Get hold of the new part ID - key = sp.getPartId(); - - // Write out the key and description - String strMsg = "Wrote to key 0x%08X with description %s"; - task.out.println( String.format(strMsg, key, sp.getDescription().trim()) ); - } - - - /* - * Now update this known record with a new description. - */ - - // Scoping of local variables - { - // Generate a new part description - String strDesc = StockPartHelper.generateDescription(); - - // Now update the known record with a specified description - StockPart sp = ex.updateRecord(key, strDesc); - - // Display the updated description - String strMsg = "Updated record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Unit of work containing the update will be committed at normal end of task - - // Completion message - task.out.println("Completed KsdsExample3"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java deleted file mode 100644 index 0e4da23..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java +++ /dev/null @@ -1,85 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate deleting a record from a VSAM KSDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link KsdsExampleCommon}. - */ -public class KsdsExample4 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting KsdsExample4"); - task.out.println("VSAM KSDS record delete example"); - - // Create a new instance of the common example class - KsdsExampleCommon ex = new KsdsExampleCommon(); - - - /* - * Create a record in the file so we have something to work with. - */ - - // Keep track of the generated key - int key; - - // Scoping of local variables - { - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(sp); - - // Commit the unit of work - ex.commitUnitOfWork(); - - // Get hold of the new part ID - key = sp.getPartId(); - - // Write out the key - task.out.println( String.format("Wrote to key 0x%08X", key) ); - } - - - /* - * Delete the record. - */ - - // Scoping of local variables - { - // Now delete this known record - StockPart sp = ex.deleteRecord(key); - - // Display the result - String strMsg = "Deleted record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Unit of work containing the delete will be committed at normal end of task - - // Completion message - task.out.println("Completed KsdsExample4"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java deleted file mode 100644 index bdc62b8..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java +++ /dev/null @@ -1,102 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import java.util.List; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate browsing a VSAM KSDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link KsdsExampleCommon}. - */ -public class KsdsExample5 -{ - /** - * Number of records to add and then browse through. - */ - private static final int RECORDS_TO_BROWSE = 5; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting KsdsExample5"); - task.out.println("VSAM KSDS file browse example"); - - // Create a new instance of the common example class - KsdsExampleCommon ex = new KsdsExampleCommon(); - - - /* - * Create some records in the file so we have something to work with. - */ - - // Keep track of the lowest generated key - int key = Integer.MAX_VALUE; - - // Add records, keeping track of the lowest key - for ( int i = 0; i < RECORDS_TO_BROWSE; i++ ) { - - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(sp); - - // Get the key of the new record - int newKey = sp.getPartId(); - - // Write out the key and description - task.out.println( String.format("Wrote to key 0x%08X", newKey) ); - - // Decide if this is lowest key so far - key = newKey < key ? newKey : key; - } - - // Commit the unit of work to harden the inserts to the file - ex.commitUnitOfWork(); - - - /* - * Browse through the file, starting at the lowest key. - * - * Note the next n records we find may not necessarily be the n records we - * added above. It will depend on what existing records were already in - * the KSDS file. - * - * The above code will have guaranteed that at least RECORDS_TO_BROWSE - * records exist. - */ - - // Browse through the records, starting at the lowest known key - List list = ex.browse(key, RECORDS_TO_BROWSE); - - // Iterate over this list - for ( StockPart sp : list ) { - - // Display the description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Completion message - task.out.println("Completed KsdsExample5"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java deleted file mode 100644 index e387011..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java +++ /dev/null @@ -1,361 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; - -import java.util.ArrayList; -import java.util.List; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DuplicateRecordException; -import com.ibm.cics.server.EndOfFileException; -import com.ibm.cics.server.InvalidRequestException; -import com.ibm.cics.server.KSDS; -import com.ibm.cics.server.KeyHolder; -import com.ibm.cics.server.KeyedFileBrowse; -import com.ibm.cics.server.RecordHolder; -import com.ibm.cics.server.RecordNotFoundException; -import com.ibm.cics.server.SearchType; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; -import com.ibm.cicsdev.vsam.VsamExampleCommon; - -/** - * Example class to demonstrate various operations which may be - * useful when manipulating VSAM ESDS files. - */ -public class KsdsExampleCommon extends VsamExampleCommon -{ - /** - * Name of the file resource to use. - */ - private static final String FILE_NAME = "XMPLKSDS"; - - /** - * A field to hold a reference to the VSAM KSDS file this - * instance will access. - */ - private final KSDS ksds; - - /** - * Constructor to initialise the reference to the sample file. - */ - public KsdsExampleCommon() - { - // Create a new KSDS instance and initialise - this.ksds = new KSDS(); - this.ksds.setName(FILE_NAME); - } - - /** - * Provides a simple example of adding a record to a VSAM KSDS file. - * - * @param sp the {@link StockPart} instance to write to the file. - */ - public void addRecord(StockPart sp) - { - // Get the flat byte structure from the JZOS object - byte[] record = sp.getByteBuffer(); - - // Get a byte array containing the key for this record - byte[] key = StockPartHelper.getKey(sp); - - try { - // Write the record into the file at the specified key - this.ksds.write(key, record); - } - catch (DuplicateRecordException dre) { - - // Collision on the generated key - String strMsg = "Tried to insert duplicate key 0x%08X"; - Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); - throw new RuntimeException(dre); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for WRITE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not addable - String strMsg = "Add operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of updating a single record in a VSAM KSDS file. - * - * This method uses the supplied part ID to locate and lock a record using - * the readForUpdate() method, uses the supplied description to update the - * record that has been read, and then writes the new record back to the file - * using the rewrite() method. - * - * @param partId the part ID of the record to update. - * @param strDescription the new description to store in the VSAM file. - * - * @return the updated {@link StockPart} instance. - */ - public StockPart updateRecord(int partId, String strDescription) - { - // Use the StockPartHelper class to get a byte[] from this part ID - byte[] keyBytes = StockPartHelper.getKey(partId); - - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record at the specified key and lock - this.ksds.readForUpdate(keyBytes, SearchType.EQUAL, rh); - - // Create a StockPart instance from the record - byte[] readBytes = rh.getValue(); - StockPart sp = new StockPart(readBytes); - - // Update the description - sp.setDescription(strDescription); - - // Rewrite the record with the updated data - this.ksds.rewrite( sp.getByteBuffer() ); - - // Return the updated StockPart instance - return sp; - } - catch (RecordNotFoundException rnfe) { - // Initial read failed - key not found in file - String strMsg = "Record with key 0x%08X not found in file"; - Task.getTask().out.println( String.format(strMsg, partId) ); - throw new RuntimeException(rnfe); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read or update operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of reading a single record from a VSAM KSDS file. - * - * @param partId the key of the record to locate in the VSAM file. - * - * @return a {@link StockPart} instance representing the record in the VSAM file - * identified by the specified key. - */ - public StockPart readRecord(int partId) - { - // Use the StockPartHelper class to get a byte[] from this part ID - byte[] keyBytes = StockPartHelper.getKey(partId); - - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record identified by the supplied key - this.ksds.read(keyBytes, SearchType.EQUAL, rh); - - // Create a StockPart instance from the record - return new StockPart( rh.getValue() ); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read operation not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (RecordNotFoundException rnfe) { - // The requested record was not found - String strMsg = "Record with key 0x%08X was not found"; - Task.getTask().out.println( String.format(strMsg, partId) ); - throw new RuntimeException(rnfe); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides an example of browsing a VSAM KSDS dataset. - * - * @param partIdStart the part ID from which the browse should begin. - * @param count the maximum number of records to return. - * - * @return a list of StockPart objects. - */ - public List browse(int partIdStart, int count) - { - // Start a browse of the file at the supplied key - byte[] key = StockPartHelper.getKey(partIdStart); - - // The list instance to return - List list = new ArrayList<>(count); - - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - KeyHolder kh = new KeyHolder(); - - try { - // Start the browse of the file - KeyedFileBrowse kfb = this.ksds.startBrowse(key, SearchType.GTEQ); - - // Loop until we reach maximum count - for ( int i = 0; i < count; i++ ) { - - // Read a record from the file - kfb.next(rh, kh); - - // Get the record and convert to a StockPart - StockPart sp = new StockPart( rh.getValue() ); - - // Add this object to our return array - list.add(sp); - } - } - catch (RecordNotFoundException rnfe) { - // Initial browse failed - no records matching the supplied part ID - } - catch (EndOfFileException eof) { - // Normal termination of loop - no further records - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for STARTBR to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Browse operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - - // Return the list - return list; - } - - /** - * Provides a simple example of deleting a single record from a VSAM KSDS file. - * - * @param partId the key of the record to locate in the VSAM file. - * - * @return a {@link StockPart} instance representing the record in the VSAM file - * identified by the specified key before it was deleted. - */ - public StockPart deleteRecord(int partId) - { - // Use the StockPartHelper class to get a byte[] from this key - byte[] keyBytes = StockPartHelper.getKey(partId); - - // The record as it stood before deletion - StockPart sp; - - /* - * Lock the record for an update. - */ - - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record at the specified key and lock - this.ksds.readForUpdate(keyBytes, SearchType.EQUAL, rh); - - // Convert to a StockPart object - sp = new StockPart( rh.getValue() ); - } - catch (RecordNotFoundException rnfe) { - // Initial read failed - key not found in file - String strMsg = "Record with key 0x%08X not found in file"; - Task.getTask().out.println( String.format(strMsg, partId) ); - throw new RuntimeException(rnfe); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read or update operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - - - /* - * Now perform the delete. - */ - - try { - // Delete the selected record - this.ksds.delete(); - - // Return the record as it stood before deletion - return sp; - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for DELETE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Delete operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java deleted file mode 100644 index 0f15a78..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java +++ /dev/null @@ -1,61 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate adding a record to a VSAM RRDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link RrdsExampleCommon}. - */ -public class RrdsExample1 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting RrdsExample1"); - task.out.println("VSAM RRDS record addition example"); - - // Create a new instance of the common ESDS class - RrdsExampleCommon ex = new RrdsExampleCommon(); - - // Unlike the KSDS and ESDS examples, we need an empty file before we start - ex.emptyFile(); - - // Create a new random record for writing to the file - StockPart sp = StockPartHelper.generate(); - - // Add a new record to the file at RRN 1 - long rrn = 1; - - // Perform the add - ex.addRecord(rrn, sp); - - // Write out the new RRN - task.out.println( String.format("Wrote record with RRN 0x%016X", rrn) ); - - // Unit of work containing the write will be committed at normal end of task - - // Completion message - task.out.println("Completed RrdsExample1"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java deleted file mode 100644 index a33d222..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java +++ /dev/null @@ -1,68 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - - -/** - * Simple example to demonstrate reading a record from a VSAM RRDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link RrdsExampleCommon}. - */ -public class RrdsExample2 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting RrdsExample2"); - task.out.println("VSAM RRDS record read example"); - - // Create a new instance of this class - RrdsExampleCommon ex = new RrdsExampleCommon(); - - // Unlike the KSDS and ESDS examples, we need an empty file before we start - ex.emptyFile(); - - // We will always add and read RRN 1 - long rrn = 1; - - // Add a new record to the file so we have something to work with - StockPart spNew = StockPartHelper.generate(); - ex.addRecord(rrn, spNew); - - // Write out the RRN of the new record - task.out.println( String.format("Wrote record with RRN 0x%016X", rrn) ); - - // Commit the current unit of work to harden new record to the file - ex.commitUnitOfWork(); - - // Now read the record with the specified key - StockPart spRead = ex.readRecord(rrn); - - // Display the read description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); - - // Completion message - task.out.println("Completed RrdsExample2"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java deleted file mode 100644 index 403eca2..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java +++ /dev/null @@ -1,89 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate updating a record in a VSAM RRDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link RrdsExampleCommon}. - */ -public class RrdsExample3 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting RrdsExample3"); - task.out.println("VSAM RRDS record update example"); - - // Create a new instance of the common example class - RrdsExampleCommon ex = new RrdsExampleCommon(); - - // Unlike the KSDS and ESDS examples, we need an empty file before we start - ex.emptyFile(); - - // We will always add and read RRN 1 - long rrn = 1; - - - /* - * Create a record in the file so we have something to work with. - */ - - // Scoping of local variables - { - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(rrn, sp); - - // Commit the unit of work - ex.commitUnitOfWork(); - - // Write out the key and description - String strMsg = "Wrote to RRN 0x%016X with description %s"; - task.out.println( String.format(strMsg, rrn, sp.getDescription().trim()) ); - } - - - /* - * Now update this known record with a new description. - */ - - // Scoping of local variables - { - // Generate a new part description - String strDesc = StockPartHelper.generateDescription(); - - // Now update the known record with a specified description - StockPart sp = ex.updateRecord(rrn, strDesc); - - // Display the updated description - String strMsg = "Updated record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Unit of work containing the update will be committed at normal end of task - - // Completion message - task.out.println("Completed RrdsExample3"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java deleted file mode 100644 index ff3ed26..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java +++ /dev/null @@ -1,86 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - - -/** - * Simple example to demonstrate deleting a record from a VSAM RRDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link RrdsExampleCommon}. - */ -public class RrdsExample4 -{ - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting RrdsExample4"); - task.out.println("VSAM RRDS record delete example"); - - // Create a new instance of the common example class - RrdsExampleCommon ex = new RrdsExampleCommon(); - - // Unlike the KSDS and ESDS examples, we need an empty file before we start - ex.emptyFile(); - - // We will always add and delete RRN 1 - long rrn = 1; - - - /* - * Create a record in the file so we have something to work with. - */ - - // Scoping of local variables - { - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(rrn, sp); - - // Commit the unit of work - ex.commitUnitOfWork(); - - // Write out the key and description - task.out.println( String.format("Wrote to RRN 0x%016X", rrn) ); - } - - - /* - * Delete the record. - */ - - // Scoping of local variables - { - // Now delete this known record - StockPart sp = ex.deleteRecord(rrn); - - // Display the result - String strMsg = "Deleted record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Unit of work containing the delete will be committed at normal end of task - - // Completion message - task.out.println("Completed RrdsExample4"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java deleted file mode 100644 index d62bbca..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java +++ /dev/null @@ -1,94 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import java.util.List; - -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.StockPartHelper; - -/** - * Simple example to demonstrate browsing a VSAM RRDS file using JCICS. - * - * This class is just the driver of the test. The main JCICS work is done in the - * common class {@link RrdsExampleCommon}. - */ -public class RrdsExample5 -{ - /** - * Number of records to add and then browse through. - */ - private static final int RECORDS_TO_BROWSE = 5; - - /** - * Main entry point to a CICS OSGi program. - * - * The FQ name of this class should be added to the CICS-MainClass entry in - * the parent OSGi bundle's manifest. - */ - public static void main(String[] args) - { - // Get details about our current CICS task - Task task = Task.getTask(); - task.out.println(" - Starting RrdsExample5"); - task.out.println("VSAM RRDS file browse example"); - - // Create a new instance of the common example class - RrdsExampleCommon ex = new RrdsExampleCommon(); - - // Unlike the KSDS and ESDS examples, we need an empty file before we start - ex.emptyFile(); - - // We will always start from RRN 1 - long rrnStart = 1; - - - /* - * Create some records in the file so we have something to work with. - */ - - // Add records - for ( long rrn = rrnStart; rrn <= RECORDS_TO_BROWSE; rrn++ ) { - - // Add a new record to the file - StockPart sp = StockPartHelper.generate(); - ex.addRecord(rrn, sp); - - // Write out the key and description - task.out.println( String.format("Wrote to RRN 0x%016X", rrn) ); - } - - // Commit the unit of work to harden the inserts to the file - ex.commitUnitOfWork(); - - - /* - * Browse through the file, starting at the lowest key. - * - * The above code will have guaranteed that sufficient records exist. - */ - - // Browse through the records, starting at the initial RRN - List list = ex.browse(rrnStart, RECORDS_TO_BROWSE); - - // Iterate over this list - for ( StockPart sp : list ) { - - // Display the description - String strMsg = "Read record with description %s"; - task.out.println( String.format(strMsg, sp.getDescription().trim()) ); - } - - // Completion message - task.out.println("Completed RrdsExample5"); - } -} diff --git a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java b/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java deleted file mode 100644 index bfd187e..0000000 --- a/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java +++ /dev/null @@ -1,388 +0,0 @@ -/* Licensed Materials - Property of IBM */ -/* */ -/* SAMPLE */ -/* */ -/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; - -import java.util.ArrayList; -import java.util.List; - -import com.ibm.cics.server.CicsConditionException; -import com.ibm.cics.server.DuplicateRecordException; -import com.ibm.cics.server.EndOfFileException; -import com.ibm.cics.server.InvalidRequestException; -import com.ibm.cics.server.RRDS; -import com.ibm.cics.server.RRDS_Browse; -import com.ibm.cics.server.RecordHolder; -import com.ibm.cics.server.RecordNotFoundException; -import com.ibm.cics.server.Task; -import com.ibm.cicsdev.bean.StockPart; -import com.ibm.cicsdev.vsam.VsamExampleCommon; - -/** - * Example class to demonstrate various operations which may be - * useful when manipulating VSAM RRDS files. - * - * In a VSAM RRDS, records are addressed using their Relative Record - * Number (RRN). - */ -public class RrdsExampleCommon extends VsamExampleCommon -{ - /** - * Name of the file resource to use. - */ - private static final String FILE_NAME = "XMPLRRDS"; - - /** - * A field to hold a reference to the VSAM RRDS file this - * instance will access. - */ - private final RRDS rrds; - - /** - * Constructor to initialise the reference to the sample file. - */ - public RrdsExampleCommon() - { - // Create a new RRDS instance and initialise - this.rrds = new RRDS(); - this.rrds.setName(FILE_NAME); - } - - /** - * Provides a simple example of adding a record to a VSAM RRDS file. - * - * @param rrn the RRN of the record to write to the file. - * @param sp the {@link StockPart} instance to write to the file. - */ - public void addRecord(long rrn, StockPart sp) - { - // Get the flat byte structure from the JZOS object - byte[] record = sp.getByteBuffer(); - - try { - // Write the record into the file at the specified RRN - this.rrds.write(rrn, record); - } - catch (DuplicateRecordException dre) { - - // Collision on the record number - String strMsg = "Tried to insert duplicate record at RRN 0x%016X"; - Task.getTask().out.println( String.format(strMsg, rrn) ); - throw new RuntimeException(dre); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for WRITE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not addable - String strMsg = "Add operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of updating a single record in a VSAM RRDS file. - * - * This method uses the supplied RRN to locate and lock a record using - * the readForUpdate() method, uses the supplied description to update the - * record that has been read, and then writes the new record back to the file - * using the rewrite() method. - * - * @param rrn the RRN of the record to update. - * @param strDescription the new description to store in the VSAM file. - * - * @return the updated {@link StockPart} instance. - */ - public StockPart updateRecord(long rrn, String strDescription) - { - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record at the specified RRN and lock - this.rrds.readForUpdate(rrn, rh); - - // Create a StockPart instance from the record - byte[] readBytes = rh.getValue(); - StockPart sp = new StockPart(readBytes); - - // Update the description - sp.setDescription(strDescription); - - // Rewrite the record with the updated data - this.rrds.rewrite( sp.getByteBuffer() ); - - // Return the updated StockPart instance - return sp; - } - catch (RecordNotFoundException rnfe) { - // Initial read failed - key not found in file - String strMsg = "Record with RRN 0x%016X not found in file"; - Task.getTask().out.println( String.format(strMsg, rrn) ); - throw new RuntimeException(rnfe); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read or update operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides a simple example of reading a single record from a VSAM RRDS file. - * - * @param rrn the RRN of the record to locate in the VSAM file. - * - * @return a {@link StockPart} instance representing the record in the VSAM file - * identified by the specified key. - */ - public StockPart readRecord(long rrn) - { - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record identified by the supplied RRN - this.rrds.read(rrn, rh); - - // Create a StockPart instance from the record - return new StockPart( rh.getValue() ); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read operation not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (RecordNotFoundException rnfe) { - // The requested record was not found - String strMsg = "Record with RRN 0x%016X was not found"; - Task.getTask().out.println( String.format(strMsg, rrn) ); - throw new RuntimeException(rnfe); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Provides an example of browsing a VSAM RRDS dataset. - * - * @param rrnStart the RRN from which the browse should begin. - * @param count the maximum number of records to return. - * - * @return a list of StockPart objects. - */ - public List browse(long rrnStart, int count) - { - // The list instance to return - List list = new ArrayList<>(count); - - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - try { - // Start the browse of the file - RRDS_Browse rrdsBrowse = this.rrds.startBrowse(rrnStart); - - // Loop until we reach maximum count - for ( int i = 0; i < count; i++ ) { - - // Read a record from the file (discard the returned RRN) - rrdsBrowse.next(rh); - - // Get the record and convert to a StockPart - StockPart sp = new StockPart( rh.getValue() ); - - // Add this object to our return array - list.add(sp); - } - } - catch (RecordNotFoundException rnfe) { - // No records matching the supplied RRN - } - catch (EndOfFileException eof) { - // Normal termination of loop - no further records - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for STARTBR to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Browse operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - - // Return the list - return list; - } - - /** - * Provides a simple example of deleting a single record from a VSAM RRDS file. - * - * @param rrn the RRN of the record to locate in the VSAM file. - * - * @return a {@link StockPart} instance representing the record in the VSAM file - * identified by the specified key before it was deleted. - */ - public StockPart deleteRecord(long rrn) - { - // The record as it stood before deletion - StockPart sp; - - /* - * Lock the record for an update. - */ - - try { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - // Read the record at the specified RRN and lock - this.rrds.readForUpdate(rrn, rh); - - // Convert to a StockPart object - sp = new StockPart( rh.getValue() ); - } - catch (RecordNotFoundException rnfe) { - // Initial read failed - RRN not found in file - String strMsg = "Record with RRN 0x%016X not found in file"; - Task.getTask().out.println( String.format(strMsg, rrn) ); - throw new RuntimeException(rnfe); - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read or update operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - - - /* - * Now perform the delete. - */ - - try { - // Delete the selected record - this.rrds.delete(); - - // Return the record as it stood before deletion - return sp; - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for DELETE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Delete operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Some other CICS failure - throw new RuntimeException(cce); - } - } - - /** - * Loops through all the records in the file, deleting them as we go. - * Not expected to be very useful in a real-world scenario, but makes - * coding an RRDS example much easier, as the file will be in a known - * state before we begin the real update logic. - */ - public void emptyFile() - { - // Holder object to receive the data - RecordHolder rh = new RecordHolder(); - - try { - // Read each record, deleting as we go - for ( long rrn = 1; rrn < Integer.MAX_VALUE; rrn++ ) { - - // Lock this record and delete - this.rrds.readForUpdate(rrn, rh); - this.rrds.delete(); - } - } - catch (RecordNotFoundException rnfe) { - // Normal exit from loop - record ID not found - } - catch (InvalidRequestException ire) { - - // Invalid request may occur for several reasons - find out the root cause - // See the CICS API documentation for READ UPDATE to see the full list - if ( ire.getRESP2() == 20 ) { - // File not readable or updateable - String strMsg = "Read, update, or delete operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); - } - - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) { - // Crude error handling - propagate an exception back to caller - throw new RuntimeException(cce); - } - } -} From cf860cab33d1cddf7a0cd63546f2b0ad3da76185 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Feb 2026 11:42:52 +0000 Subject: [PATCH 02/73] Add IRG JAR to build --- .gitignore | 3 +++ cics-java-jcics-link-app/README.md | 5 ++++- etc/lib/.gitignore | 2 ++ etc/lib/EDUPGM.jar | Bin 0 -> 2867 bytes 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 etc/lib/.gitignore create mode 100644 etc/lib/EDUPGM.jar diff --git a/.gitignore b/.gitignore index 2d26f39..df381c5 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,6 @@ replay_pid* # Built Visual Studio Code Extensions *.vsix + +#Allow IRG JAR +!etc/lib/EDUPGM.jar diff --git a/cics-java-jcics-link-app/README.md b/cics-java-jcics-link-app/README.md index dc2ea90..fb5796b 100644 --- a/cics-java-jcics-link-app/README.md +++ b/cics-java-jcics-link-app/README.md @@ -21,7 +21,10 @@ Provides examples for performing CICS LINK operations using both commareas, and ## Building Download the IRG generated JAR EDUPGM.jar -Install the JAR file into a local Maven repository by running the following Maven command in a local command prompt `mvn org.apache.maven.plugins:maven-install-plugin:3.1.3:install-file "-Dfile=lib/EDUPGM.jar" "-DgroupId=com.ibm.cicsdev" "-DartifactId=cics-java-jcics-edupgm" "-Dversion=1.0" "-Dpackaging=jar" "-DlocalRepositoryPath=local-repo"` +Install the JAR file into a local Maven repository by running the following Maven command in a local command prompt +``` +mvn org.apache.maven.plugins:maven-install-plugin:3.1.3:install-file "-Dfile=etc/lib/EDUPGM.jar" "-DgroupId=com.ibm.cicsdev" "-DartifactId=cics-java-jcics-edupgm" "-Dversion=1.0" "-Dpackaging=jar" "-DlocalRepositoryPath=local-repo" +``` ## Configuration diff --git a/etc/lib/.gitignore b/etc/lib/.gitignore new file mode 100644 index 0000000..8bddd36 --- /dev/null +++ b/etc/lib/.gitignore @@ -0,0 +1,2 @@ +#Ensure JAR files in this dir are part of repo +!*.jar \ No newline at end of file diff --git a/etc/lib/EDUPGM.jar b/etc/lib/EDUPGM.jar new file mode 100644 index 0000000000000000000000000000000000000000..13fe2e414ab88db91a12df197698fb6a64092c3f GIT binary patch literal 2867 zcmb7`c{CJUAIHa*Eo7$6)i&cXvUJQdCHPRHJB+y z7_!A6hKlUVpn0q>?|I+n>3Pn1|9HRm+;i_e_xt_*?m73L4;0M8Dg@x*-~i~@j$Q)% zB2EA+0AlW73beAeP}}PO09XJ}FgwSggZV!;=>H509XS3BLrkr$EX?g4R3R30NLS}& zFi^FZ2Mkp1?&_(tJ3F9B`;JltK~$_Dy%7Xf&b)bXMgJ&+Ka}-mM1{YJ%H;rr1J+Qh zD5ih6uc@m!ZhTPOZZZoZz_xaQ@be>CULJlb2nB9sUdsnaU+f*y3lx|(@>IeY6(S3dPBwB zDY)tz&X+dcIemtAEP0zM;Z1j3+Rm5c3;m;r%K-CUVln5DM_+hZ7s!a;-N-!TA9Yr0m7t`ptzQ+K6RxZ1^5Y9}uzzB7eiQvF8B<$ad|Sl6h#`~}J5}og zx?dJac)AK88YXB93b+I(dORYC^9^EcATJ-`Barm=yv_!%5M65l_uQi7w z{YI_V(leD~->N@Do;p4tz@#l!j6bEomzx&w#5(i5j^7Ee1Nn<@w!h8 z-g-)^oTgvi%Q78s^yUW@D?H^%H)8Rfk22y(qPU^kLzRWvy3H+}(M;-bWah++neQL5 zks%&ZH+C9>a)XYVr`(tnyKN(DHZpw{c`f)Sevb)I-Y*DCkaEVjt_Ed(dBjH?djgNPTVFTJ-e#2Du9+05BN zJ7%bjNNplvkmo8q>>;p9*H%%E%e7HXc5NU4Q7wHN=%cYFhfdiVek8O8PG0QHjR8p+Yv(BgAPU zO3mtFmsIlkQxY2ir`XxWQ@l) zEohGHZV?TFbSFKngIf|Umz%CEeVU=_Rm{qjX*ZS1mgQ!pudjg~mwqeBCG_$hr<)~B z)QndZYip;ZOO`nqJ~K`OS#E1(ZKf)98Cn3@U_NI^=ZM$WB+e^^dAHO|HY5>+lsh9@ z2(=Yp6%TaAylSY4Qw^Wj~`{q^Hhtk}vTC%IeoS*Z^rWod{CBJDnTik=HT99H@_Ye zXu@#8$D&^(L_YFQgQ?4iCEVkbzLUiir5~Zb$Sn(XwLBu6@$yGHDVul?ehc$caHqZ% zoxza0C|IRQ#}!RdvCdXx(RA9NK+L3;2&DLKn}*BIMJBq9Abs9yOB^H^2~g{ zlT{<3{AhqIeNLXU<>J+6R;qSlr28*AAVMUd5b2pLBX}Ah4`ivNutOD`T?nwDwLEhG z8VW$$0niUw^!$YZ?*{Dv8yX1)rxW1ifB0k?;TZQ2BZaxiL6|Pv z0>lL{BN8N@9OoD2T+JG2bA3XN8QJF8Vx}xZ)0ccMFv48CQZC-yIltN;EHg2~u@^nH z&Ab}-fHnSO*U#`Aq<7#R#6zwaw-r9v0TV$^b++zkaqitc=;z*a=jad!>0RK{+z}-> z3OTTP0jm3yt8D?*_5fr$4Vll<*lV}KtHhXlM0*OgET$p(7d2%WqrPP1bAd;R25Z=A z9qw`4_Mej2_*_P_C1yf_e6F1iBvW2Fpp)zb<|P067gXB|3M)X%y#53&vG!R2kS+y!_&V2lV$*w literal 0 HcmV?d00001 From 193001ef0e2ca5620ce37eeb1e163719fd8d3dc4 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Feb 2026 16:04:59 +0000 Subject: [PATCH 03/73] Move IRG Jar to Maven local repo --- .gitignore | 29 ------ cics-java-jcics-link-app/pom.xml | 87 +++--------------- etc/lib/.gitignore | 2 - etc/lib/EDUPGM.jar | Bin 2867 -> 0 bytes .../1.0/_remote.repositories | 4 + .../1.0/cics-java-jcics-edupgm-1.0.pom | 9 ++ .../maven-metadata-local.xml | 12 +++ 7 files changed, 38 insertions(+), 105 deletions(-) delete mode 100644 etc/lib/.gitignore delete mode 100644 etc/lib/EDUPGM.jar create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/_remote.repositories create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.pom create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/maven-metadata-local.xml diff --git a/.gitignore b/.gitignore index df381c5..6b95ec8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Maven ignores target/ -local-repo/ pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup @@ -9,16 +8,8 @@ release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties -# https://github.com/takari/maven-wrapper#usage-without-binary-jar .mvn/wrapper/maven-wrapper.jar -# Eclipse m2e generated files -# Eclipse Core -#.project -# JDT-specific (Eclipse Java Development Tools) -#.classpath - - # Gradle ignores .gradle **/build/ @@ -36,13 +27,6 @@ gradle-app.setting # Cache of project .gradletasknamecache -# Eclipse Gradle plugin generated files -# Eclipse Core -#.project -# JDT-specific (Eclipse Java Development Tools) -#.classpath - - # Java ignores # Compiled class file *.class @@ -50,12 +34,6 @@ gradle-app.setting # Log file *.log -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - # Package Files # *.jar *.war @@ -65,10 +43,6 @@ gradle-app.setting *.tar.gz *.rar -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* - # VSCode ignores .vscode/* @@ -83,6 +57,3 @@ replay_pid* # Built Visual Studio Code Extensions *.vsix - -#Allow IRG JAR -!etc/lib/EDUPGM.jar diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index 97fde3b..21d5950 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -30,8 +30,7 @@ com.ibm.cics.server - + com.ibm.cicsdev cics-java-jcics-edupgm @@ -46,8 +45,9 @@ maven-bundle-plugin 6.0.0 true - + + true com.ibm.cics.server;version="[1.500.0,3.0.0)",com.ibm.jzos.fields;resolution:=optional @@ -56,78 +56,17 @@ cics-java-jcics-edupgm lib ${bundle.symbolicName} - ${pom.version} - + ${project.version} + com.ibm.cicsdev.link.LinkProg1, + com.ibm.cicsdev.link.LinkProg2, + com.ibm.cicsdev.link.LinkProg3, + com.ibm.cicsdev.link.LinkServEduchan, + com.ibm.cicsdev.link.LinkServEC01 + + - - - - maven-dependency-plugin - - - copy-dependencies - package - - copy-dependencies - - - - - - - + + \ No newline at end of file diff --git a/etc/lib/.gitignore b/etc/lib/.gitignore deleted file mode 100644 index 8bddd36..0000000 --- a/etc/lib/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -#Ensure JAR files in this dir are part of repo -!*.jar \ No newline at end of file diff --git a/etc/lib/EDUPGM.jar b/etc/lib/EDUPGM.jar deleted file mode 100644 index 13fe2e414ab88db91a12df197698fb6a64092c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2867 zcmb7`c{CJUAIHa*Eo7$6)i&cXvUJQdCHPRHJB+y z7_!A6hKlUVpn0q>?|I+n>3Pn1|9HRm+;i_e_xt_*?m73L4;0M8Dg@x*-~i~@j$Q)% zB2EA+0AlW73beAeP}}PO09XJ}FgwSggZV!;=>H509XS3BLrkr$EX?g4R3R30NLS}& zFi^FZ2Mkp1?&_(tJ3F9B`;JltK~$_Dy%7Xf&b)bXMgJ&+Ka}-mM1{YJ%H;rr1J+Qh zD5ih6uc@m!ZhTPOZZZoZz_xaQ@be>CULJlb2nB9sUdsnaU+f*y3lx|(@>IeY6(S3dPBwB zDY)tz&X+dcIemtAEP0zM;Z1j3+Rm5c3;m;r%K-CUVln5DM_+hZ7s!a;-N-!TA9Yr0m7t`ptzQ+K6RxZ1^5Y9}uzzB7eiQvF8B<$ad|Sl6h#`~}J5}og zx?dJac)AK88YXB93b+I(dORYC^9^EcATJ-`Barm=yv_!%5M65l_uQi7w z{YI_V(leD~->N@Do;p4tz@#l!j6bEomzx&w#5(i5j^7Ee1Nn<@w!h8 z-g-)^oTgvi%Q78s^yUW@D?H^%H)8Rfk22y(qPU^kLzRWvy3H+}(M;-bWah++neQL5 zks%&ZH+C9>a)XYVr`(tnyKN(DHZpw{c`f)Sevb)I-Y*DCkaEVjt_Ed(dBjH?djgNPTVFTJ-e#2Du9+05BN zJ7%bjNNplvkmo8q>>;p9*H%%E%e7HXc5NU4Q7wHN=%cYFhfdiVek8O8PG0QHjR8p+Yv(BgAPU zO3mtFmsIlkQxY2ir`XxWQ@l) zEohGHZV?TFbSFKngIf|Umz%CEeVU=_Rm{qjX*ZS1mgQ!pudjg~mwqeBCG_$hr<)~B z)QndZYip;ZOO`nqJ~K`OS#E1(ZKf)98Cn3@U_NI^=ZM$WB+e^^dAHO|HY5>+lsh9@ z2(=Yp6%TaAylSY4Qw^Wj~`{q^Hhtk}vTC%IeoS*Z^rWod{CBJDnTik=HT99H@_Ye zXu@#8$D&^(L_YFQgQ?4iCEVkbzLUiir5~Zb$Sn(XwLBu6@$yGHDVul?ehc$caHqZ% zoxza0C|IRQ#}!RdvCdXx(RA9NK+L3;2&DLKn}*BIMJBq9Abs9yOB^H^2~g{ zlT{<3{AhqIeNLXU<>J+6R;qSlr28*AAVMUd5b2pLBX}Ah4`ivNutOD`T?nwDwLEhG z8VW$$0niUw^!$YZ?*{Dv8yX1)rxW1ifB0k?;TZQ2BZaxiL6|Pv z0>lL{BN8N@9OoD2T+JG2bA3XN8QJF8Vx}xZ)0ccMFv48CQZC-yIltN;EHg2~u@^nH z&Ab}-fHnSO*U#`Aq<7#R#6zwaw-r9v0TV$^b++zkaqitc=;z*a=jad!>0RK{+z}-> z3OTTP0jm3yt8D?*_5fr$4Vll<*lV}KtHhXlM0*OgET$p(7d2%WqrPP1bAd;R25Z=A z9qw`4_Mej2_*_P_C1yf_e6F1iBvW2Fpp)zb<|P067gXB|3M)X%y#53&vG!R2kS+y!_&V2lV$*w diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/_remote.repositories b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/_remote.repositories new file mode 100644 index 0000000..29594cc --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Feb 19 10:14:44 GMT 2026 +cics-java-jcics-edupgm-1.0.jar>= +cics-java-jcics-edupgm-1.0.pom>= diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.pom b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.pom new file mode 100644 index 0000000..4512f34 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.ibm.cicsdev + cics-java-jcics-edupgm + 1.0 + COMMAREA Java record for EDUPGM generated by IBM Record Generator + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/maven-metadata-local.xml b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/maven-metadata-local.xml new file mode 100644 index 0000000..27c84c0 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/maven-metadata-local.xml @@ -0,0 +1,12 @@ + + + com.ibm.cicsdev + cics-java-jcics-edupgm + + 1.0 + + 1.0 + + 20260219101443 + + From 904dba65e5de321fcd936c40409fe6a225dcf9f4 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 16:58:53 +0000 Subject: [PATCH 04/73] Maven and Gradle wrappers --- .mvn/wrapper/maven-wrapper.properties | 3 + gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 240 +++++++++++++++++++++++ gradlew.bat | 91 +++++++++ mvnw.cmd | 189 ++++++++++++++++++ 5 files changed, 528 insertions(+) create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 mvnw.cmd diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8dea6c2 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..03b32a2 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f127cfd --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" From ec92225e8209658736caf32c41abaaf5adb775e6 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 16:59:24 +0000 Subject: [PATCH 05/73] Restructure etc --- etc/{DFHCSDUP => }/Link/DFHCSD.txt | 0 etc/Link/META-INF/MANIFEST.MF | 18 ++ etc/{DFHCSDUP => }/Link/README.md | 0 etc/Serialize/DFHCSD.txt | 16 ++ etc/Serialize/META-INF/MANIFEST.MF | 11 ++ etc/Serialize/README.md | 4 + .../.project | 33 ++++ .../org.eclipse.core.resources.prefs | 3 + .../META-INF/cics.xml | 8 + .../com.ibm.cicsdev.serialize.osgibundle | 2 + .../.project | 33 ++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVASYN1.program | 1 + .../JSY1.transaction | 1 + .../META-INF/cics.xml | 9 + etc/src/Cobol/EC01.cbl | 118 ++++++++++++ etc/src/Cobol/EDUCHAN.cbl | 172 ++++++++++++++++++ etc/src/README.md | 6 + 18 files changed, 437 insertions(+) rename etc/{DFHCSDUP => }/Link/DFHCSD.txt (100%) create mode 100644 etc/Link/META-INF/MANIFEST.MF rename etc/{DFHCSDUP => }/Link/README.md (100%) create mode 100644 etc/Serialize/DFHCSD.txt create mode 100644 etc/Serialize/META-INF/MANIFEST.MF create mode 100644 etc/Serialize/README.md create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction create mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/src/Cobol/EC01.cbl create mode 100644 etc/src/Cobol/EDUCHAN.cbl create mode 100644 etc/src/README.md diff --git a/etc/DFHCSDUP/Link/DFHCSD.txt b/etc/Link/DFHCSD.txt similarity index 100% rename from etc/DFHCSDUP/Link/DFHCSD.txt rename to etc/Link/DFHCSD.txt diff --git a/etc/Link/META-INF/MANIFEST.MF b/etc/Link/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5db8d57 --- /dev/null +++ b/etc/Link/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS code for use of LINK +Bundle-SymbolicName: com.ibm.cicsdev.link +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, + com.ibm.cicsdev.link.LinkProg2, + com.ibm.cicsdev.link.LinkProg3, + com.ibm.cicsdev.link.LinkServEduchan, + com.ibm.cicsdev.link.LinkServEC01 +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", + com.ibm.jzos.fields;resolution:=optional +Automatic-Module-Name: com.ibm.cicsdev.link +Bundle-ClassPath: lib/EDUPGM.jar, + . + diff --git a/etc/DFHCSDUP/Link/README.md b/etc/Link/README.md similarity index 100% rename from etc/DFHCSDUP/Link/README.md rename to etc/Link/README.md diff --git a/etc/Serialize/DFHCSD.txt b/etc/Serialize/DFHCSD.txt new file mode 100644 index 0000000..4eed5f8 --- /dev/null +++ b/etc/Serialize/DFHCSD.txt @@ -0,0 +1,16 @@ + + DEFINE PROGRAM(JAVASYN1) GROUP(JCICSAMP) + DESCRIPTION(Java synchronization sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.serialize.SerializeExample1) + + DEFINE TRANSACTION(JSY1) GROUP(JCICSAMP) PROGRAM(JAVASYN1) + DESCRIPTION(Java synchronization sample) + TASKDATALOC(ANY) + + DEFINE BUNDLE(JCICSYNC) GROUP(JCICSAMP) + DESCRIPTION(JCICS synchronization sample) + BUNDLEDIR(/u/cics1/com.ibm.cicsdev.serialize.cicsbundle_1.0.0) + diff --git a/etc/Serialize/META-INF/MANIFEST.MF b/etc/Serialize/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8e3d352 --- /dev/null +++ b/etc/Serialize/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS serialization code +Bundle-SymbolicName: com.ibm.cicsdev.serialize +Bundle-Version: 1.0.0 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)" +Bundle-ClassPath: . +CICS-MainClass: com.ibm.cicsdev.serialize.SerializeExample1 +Automatic-Module-Name: com.ibm.cicsdev.serialize diff --git a/etc/Serialize/README.md b/etc/Serialize/README.md new file mode 100644 index 0000000..f7330d9 --- /dev/null +++ b/etc/Serialize/README.md @@ -0,0 +1,4 @@ +Supporting materials used in conjunction with the JCICS serialization samples. + +* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. + diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project new file mode 100644 index 0000000..b61da14 --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.serialize.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.serialize.cicsbundle + + + majorVersion + 1 + + + microVersion + 0 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..d6abd2d --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.serialize.osgibundle=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..eca6125 --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-12-13T15:47:28.565Z + + + + diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle new file mode 100644 index 0000000..697c985 --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project new file mode 100644 index 0000000..6c207f0 --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.serialize.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.serialize.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 0 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program new file mode 100644 index 0000000..cd5b93c --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction new file mode 100644 index 0000000..4f53b8f --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..382b4ca --- /dev/null +++ b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,9 @@ + + + + 2016-12-13T15:49:54.727Z + + + + + diff --git a/etc/src/Cobol/EC01.cbl b/etc/src/Cobol/EC01.cbl new file mode 100644 index 0000000..94c2b98 --- /dev/null +++ b/etc/src/Cobol/EC01.cbl @@ -0,0 +1,118 @@ + + *----------------------------------------------------------------* + * Licensed Materials - Property of IBM * + * SAMPLE * + * (c) Copyright IBM Corp. 2016 All Rights Reserved * + * US Government Users Restricted Rights - Use, duplication or * + * disclosure restricted by GSA ADP Schedule Contract with * + * IBM Corp * + *----------------------------------------------------------------* + + ****************************************************************** + * * + * Module Name EC01.CBL * + * * + * CICS LINK back-end COMMAREA sample * + * * + * This program expects to be invoked with a COMMARAEA * + * and returns the date and time. Note sample orginally supplied * + * with IBM CICS Transaction Gateway. * + ****************************************************************** + + + IDENTIFICATION DIVISION. + PROGRAM-ID. EC01. + + ENVIRONMENT DIVISION. + DATA DIVISION. + WORKING-STORAGE SECTION. + ***************************************************************** + * WORKING STORAGE STARTS HERE * + ***************************************************************** + 01 FILLER PIC X(32) VALUE + '** WORKING STORAGE STARTS HERE**'. + + ***************************************************************** + * THIS WS AREA CONTAINS ALL WORKING VARIABLES. * + ***************************************************************** + 01 FILLER PIC X(8) VALUE 'WS-'. + 01 WS-DEBUG-AREA. + 05 WS-RAWTIME PIC S9(15) COMP-3. + 05 WS-DATE-DEBUG-AREA PIC X(8). + 05 WS-TIME-DEBUG-AREA PIC X(8). + 05 WS-EIBRESP-DISP PIC S9(9) + SIGN LEADING SEPARATE. + 05 WS-CICS-RESP OCCURS 2 TIMES + PIC X(10). + 05 WS-DEBUG-ON-FLAG PIC X VALUE 'Y'. + 88 DEBUG-ON VALUE 'Y'. + + + ***************** + LINKAGE SECTION. + ***************** + 01 DFHCOMMAREA. + 05 LK-DATE-OUT PIC X(8). + 05 LK-SPACE-OUT PIC X(1). + 05 LK-TIME-OUT PIC X(8). + 05 LK-LOWVAL-OUT PIC X(1). + + ******************** + PROCEDURE DIVISION. + ******************** + A-CONTROL SECTION. + + IF DEBUG-ON + EXEC CICS HANDLE CONDITION ERROR (ZZX-CICS-ERROR-ROUTINE) + END-EXEC + END-IF. + + IF EIBCALEN < LENGTH OF DFHCOMMAREA + THEN + PERFORM ZZX-CICS-ERROR-ROUTINE + END-IF. + + MOVE SPACES TO DFHCOMMAREA. + + EXEC CICS + ASKTIME ABSTIME(WS-RAWTIME) + END-EXEC. + + EXEC CICS + FORMATTIME ABSTIME(WS-RAWTIME) + DDMMYY(LK-DATE-OUT) + DATESEP('/') + TIME(LK-TIME-OUT) + TIMESEP(':') + END-EXEC. + MOVE LOW-VALUES TO LK-LOWVAL-OUT. + + MOVE LK-DATE-OUT TO WS-DATE-DEBUG-AREA. + MOVE LK-TIME-OUT TO WS-TIME-DEBUG-AREA. + + EXEC CICS RETURN END-EXEC. + + GOBACK. + + ******************************** + ZZX-CICS-ERROR-ROUTINE SECTION. + ******************************** + + IF EIBCALEN < LENGTH OF DFHCOMMAREA + THEN + EXEC CICS + ABEND + ABCODE('ECOM') + END-EXEC + ELSE + EXEC CICS + ABEND + ABCODE('ERRO') + END-EXEC + END-IF. + GOBACK. + + ZZX-EXIT. + EXIT. + EJECT + *END OF PROGRAM diff --git a/etc/src/Cobol/EDUCHAN.cbl b/etc/src/Cobol/EDUCHAN.cbl new file mode 100644 index 0000000..e031fe3 --- /dev/null +++ b/etc/src/Cobol/EDUCHAN.cbl @@ -0,0 +1,172 @@ + *----------------------------------------------------------------* + * Licensed Materials - Property of IBM * + * SAMPLE * + * (c) Copyright IBM Corp. 2016 All Rights Reserved * + * US Government Users Restricted Rights - Use, duplication or * + * disclosure restricted by GSA ADP Schedule Contract with * + * IBM Corp * + *----------------------------------------------------------------* + + ****************************************************************** + * * + * Module Name EDUCHAN.CBL * + * Version 1.0 * + * Date 22/10/2016 * + * * + * CICS back-end channel/container sample * + * * + * This program expects to be invoked with a CHAR container named * + * INPUTDATA and returns the following containers: * + * A CHAR container containing the reversed input string * + * A CHAR container containing the time * + * A BIT container containing the CICS return code from reading * + * the input container * + ****************************************************************** + + IDENTIFICATION DIVISION. + PROGRAM-ID. EDUCHAN. + + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + DATA DIVISION. + WORKING-STORAGE SECTION. + + * Container name declarations + * Channel and container names are case sensitive + 01 DATE-CONT PIC X(16) VALUE 'CICSTIME'. + 01 INPUT-CONT PIC X(16) VALUE 'INPUTDATA'. + 01 OUTPUT-CONT PIC X(16) VALUE 'OUTPUTDATA'. + 01 LENGTH-CONT PIC X(16) VALUE 'INPUTDATALENGTH'. + 01 ERROR-CONT PIC X(16) VALUE 'ERRORDATA'. + 01 RESP-CONT PIC X(16) VALUE 'CICSRC'. + + + * Data fields used by the program + 01 INPUTLENGTH PIC S9(8) COMP-4. + 01 DATALENGTH PIC S9(8) COMP-4. + 01 CURRENTTIME PIC S9(15) COMP-3. + 01 ABENDCODE PIC X(4) VALUE SPACES. + 01 CHANNELNAME PIC X(16) VALUE SPACES. + 01 INPUTSTRING PIC X(72) VALUE SPACES. + 01 OUTPUTSTRING PIC X(72) VALUE SPACES. + 01 RESPCODE PIC S9(8) COMP-4 VALUE 0. + 01 RESPCODE2 PIC S9(8) COMP-4 VALUE 0. + 01 DATE-TIME. + 03 DATESTRING PIC X(10) VALUE SPACES. + 03 TIME-SEP PIC X(1) VALUE SPACES. + 03 TIMESTRING PIC X(8) VALUE SPACES. + 01 RC-RECORD PIC S9(8) COMP-4 VALUE 0. + 01 ERR-RECORD. + 03 ERRORCMD PIC X(16) VALUE SPACES. + 03 ERRORSTRING PIC X(32) VALUE SPACES. + + + PROCEDURE DIVISION. + * ----------------------------------------------------------- + MAIN-PROCESSING SECTION. + * ----------------------------------------------------------- + + * Get name of channel + EXEC CICS ASSIGN CHANNEL(CHANNELNAME) + END-EXEC. + + * If no channel passed in, terminate with abend code NOCH + IF CHANNELNAME = SPACES THEN + MOVE 'NOCH' TO ABENDCODE + PERFORM ABEND-ROUTINE + END-IF. + + + * Read content and length of input container + MOVE LENGTH OF INPUTSTRING TO INPUTLENGTH. + EXEC CICS GET CONTAINER(INPUT-CONT) + CHANNEL(CHANNELNAME) + FLENGTH(INPUTLENGTH) + INTO(INPUTSTRING) + RESP(RESPCODE) + RESP2(RESPCODE2) + END-EXEC. + + * Place RC in binary container for return to caller + MOVE RESPCODE TO RC-RECORD. + EXEC CICS PUT CONTAINER(RESP-CONT) + FROM(RC-RECORD) + FLENGTH(LENGTH OF RC-RECORD) + BIT + RESP(RESPCODE) + END-EXEC. + + IF RESPCODE NOT = DFHRESP(NORMAL) + PERFORM RESP-ERROR + END-IF. + + * Place reversed string in output container + MOVE FUNCTION REVERSE(INPUTSTRING) TO OUTPUTSTRING. + + EXEC CICS PUT CONTAINER(OUTPUT-CONT) + FROM(OUTPUTSTRING) + FLENGTH(LENGTH OF OUTPUTSTRING) + CHAR + RESP(RESPCODE) + END-EXEC. + + IF RESPCODE NOT = DFHRESP(NORMAL) + PERFORM RESP-ERROR + END-IF. + + * Get the current time + EXEC CICS ASKTIME ABSTIME(CURRENTTIME) + END-EXEC. + + * Format date and time + EXEC CICS FORMATTIME + ABSTIME(CURRENTTIME) + DDMMYYYY(DATESTRING) + DATESEP('/') + TIME(TIMESTRING) + TIMESEP(':') + RESP(RESPCODE) + END-EXEC. + + * Check return code + IF RESPCODE NOT = DFHRESP(NORMAL) + STRING 'Failed' DELIMITED BY SIZE + INTO DATESTRING END-STRING + END-IF. + + * Place current date in container CICSTIME + EXEC CICS PUT CONTAINER(DATE-CONT) + FROM(DATE-TIME) + FLENGTH(LENGTH OF DATE-TIME) + CHAR + RESP(RESPCODE) + END-EXEC. + * Check return code + IF RESPCODE NOT = DFHRESP(NORMAL) + PERFORM RESP-ERROR + END-IF. + + + + * Return back to caller + PERFORM END-PGM. + + * ----------------------------------------------------------- + RESP-ERROR. + MOVE 'EDUC' TO ABENDCODE + PERFORM ABEND-ROUTINE. + + PERFORM END-PGM. + + * ----------------------------------------------------------- + * Abnormal end + * ----------------------------------------------------------- + ABEND-ROUTINE. + EXEC CICS ABEND ABCODE(ABENDCODE) END-EXEC. + + * ----------------------------------------------------------- + * Finish + * ----------------------------------------------------------- + END-PGM. + EXEC CICS RETURN END-EXEC. + diff --git a/etc/src/README.md b/etc/src/README.md new file mode 100644 index 0000000..99e7ad4 --- /dev/null +++ b/etc/src/README.md @@ -0,0 +1,6 @@ +src +=== +Supporting non-Java programs used in conjunction with the JCICS samples. + +See also the [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) repository for the `EDUPGM` COBOL program. + From 958c9283a1eff7ed3e4bf0f538d35d551e6f4309 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 16:59:34 +0000 Subject: [PATCH 06/73] Add blog archive --- blog/blog.md | 417 ++++++++++++++++++ blog/graphics/JCICS.png | Bin 0 -> 17914 bytes .../JavaExceptions-1-e1484928035395.png | Bin 0 -> 155288 bytes 3 files changed, 417 insertions(+) create mode 100644 blog/blog.md create mode 100644 blog/graphics/JCICS.png create mode 100644 blog/graphics/JavaExceptions-1-e1484928035395.png diff --git a/blog/blog.md b/blog/blog.md new file mode 100644 index 0000000..a702506 --- /dev/null +++ b/blog/blog.md @@ -0,0 +1,417 @@ +# Getting to grips with JCICS + + +JCICS provides a simple object hierarchy for accessing the CICS API from Java, and is similar to the EXEC CICS command API supported for other languages such as COBOL or assembler. Unlike other CICS high level languages, no translation step is necessary during compilation as the underlying EXEC CICS calls are dynamically generated via the Java Native Interface (JNI). JCICS is a fairly simple API and if you understand the EXEC CICS API and have some knowledge of Java then its a small jump to make. This does mean its not as object oriented as it could be, so if you have an OO outlook on life you may need to bite your tongue at times. + +![JCICS](graphics/JCICS.png) + +The following tutorial summarizes how to use the most popular parts of the JCICS API within CICS Java programs for deployment to an OSGi JVM server. You can also use JCICS in a Web application deployed into a Liberty JVM server in integrated mode, and the code samples provided are equally applicable to this environment.. + +# Application development + +The JCICS API is provided in the com.ibm.cics.server.jar library in the $USSHOME/lib directory on zFS, however, it is also integrated into the [CICS Explorer](https://developer.ibm.com/cics/category/cics-explorer/) SDK for Java which can be installed into an Eclipse development environment and provides all the function needed to easily develop JCICS applications on a workstation and deploy onto the zFS filing system on z/OS. The JCICS API can be used in any CICS JVM server environment including both OSGi and Liberty JVM servers. In this article we show how to create components for an OSGi JVM server that can be linked to from other CICS programs, but the samples provided can easily be reused in a Java EE web application for deployment into a Liberty JVM server. + +At the last count there were around 80 different classes that map to the underlying CICS commands or variants thereof, and you can view the full set in the online [Javadoc](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.jcics.javadoc/overview-tree.html). Most JCICS classes have a one to one relationship with the EXEC CICS API commands but this is not always the case. The most commonly used JCICS classes are Task, Program, Channel, Container, TSQ, TDQ and KSDS and we will give an overview of how to use these within a CICS Java program for deployment into an OSGi JVM server. + +| Class | Function | +| --------- | -------- | +| Task | Represents the CICS task | +| Program | Provides the ability to LINK to other CICS programs | +| Channel and Container | Support for CICS channels and containers | +| TSQ | Access to CICS temporary storage queues | +| TDQ | Access to CICS transient data queues | +| KSDS | Access to VSAM KSDS files | + +> There is no support for the CICS Systems Programming interface (SPI) such as `EXEC CICS INQUIRE` or `SET` commands and so Java applications that need to use these commands should link to non\-Java components to perform SPI commands + +## Tasks and programs + +Lets first take a look at the two classes you are most likely to need *Task* and *Program*. The Program class maps to the [EXEC CICS LINK](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_link.html) command and its variants, and the Task class maps to the [](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html)[ASSIGN](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html) and [ADDRESS](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_address.html) commands but also provides a set of helper methods to access the EIB and to control syncpoints and abends, but more about this later. + +The following code snippet shows how to use Task and Program to link to another CICS program, and is described in more detail using the line numbers below. A full working example is available in the [LinkProg1](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java) sample. + + +```java +private static final String PROG_NAME = "EC01"; +private static final int CA_LEN = 18 ; +.... +public static void main(String[] args) +{ +... + Task task = Task.getTask(); + task.out.println("Hello world"); + + Program prog = new Program(); + prog.setName(PROG_NAME); + prog.setSyncOnReturn(false); + byte[] ca = new byte[CA_LEN]; + prog.link(ca); +``` + + +Lines **1\-2.** Initialize constants including name of CICS program and length of COMMAREA input +Line **4.** The `main(String[] args)` constructor signifies this as the entry point for this CICS program, which allows this class to be named in the CICS\-MainClass header in the OSGi bundle manifest +Line **7.** Get the Task object representing the CICS task which the current Java thread is using, this will drive the underlying CICS ASSIGN command on first usage +Line **8.** Send output to the print writer which will be directed to either the user’s terminal or the stdout if there is no terminal +Line **10.** Instantiate an instance of a Program, and then set properties such as the name and whether or not the LINK will use the SYNCONRETURN option +Line **13.** Create a byte array and then pass this as input on the `Program.link()` method. This will drive an `EXEC CICS LINK` command to the CICS program named in line 11 +The COMMAREA will be passed as a byte array, which is an unstructured array of bytes of the specified length. Most CICS programs expect structured data as input and if you need to build a Java bean to map to this you can use the IBM Record Generator for Java or the Rational J2C Tools to build wrapper classes to map the records, see [Building Java records from COBOL with the IBM Record Generator for Java](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/). Note, there is no return type from the `Program.link()` method, this is often the case in JCICS and instead the data is updated in situ within the referenced COMMAREA. + +The program that is invoked by a link command can also be written in Java, and in our case will be passed the COMMAREA as a simple byte array. A sample Java version of the EC01 CICS COBOL program is shown below which shows how to use the *CommAreaHolder* class to receive the byte array mapping to the COMMAREA. A full working example is available in the [LinkServEC01](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java) sample. + +```java +public class LinkServEC01 +{ + private static final int CA_LEN = 18 ; + private static final String CA_LEN_ABCODE = "LEN"; + private static final SimpleDateFormat dfTime = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); + private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + public static void main(CommAreaHolder cah) + { + + Task task = Task.getTask(); + + if (cah.getValue().length < CA_LEN ) + { + task.abend(CA_LEN_ABCODE); + } + + Date timestamp = new Date(); + byte ba[] = dfTime.format(timestamp).getBytes(CCSID); + System.arraycopy (ba, 0, cah.getValue(), 0, ba.length); + ... + } +``` + + +Lines **3\-5.** Initialize constants +Line **6.** Get the local encoding of the CICS region, this defaults to EBCDIC +Lines **13\-16.** Check input array is long enough, and terminate the task using an abend if input is too short +Lines **18\-19.** Build time string for return to caller +Lines **20\-21.** Create byte array from the time string using the CICS encoding and copy into the CommAreaHolder for return to the calling program as the COMMAREA + +## Exception handling + +In Java errors other than *RuntimeException* that extend the *Exception* class are known as checked exceptions and must either be caught or declared as part of the method signature using the throws keyword. Any Java code which calls a method declared as throwing a checked exception must either provide logic to catch the checked exception, or add the exception to it’s own method signature, in order to propagate the exception further up the stack. The constraints on checked exceptions are enforced at compile time, and failure to adhere to the specification will result in a compilation error. + +By contrast in traditional high level languages such as COBOL, when a CICS command returns an error (such as unknown program on a link), then it will return a response code (PGMIDERR) to the application using the data area supplied in the RESP parameter of the CICS command . This enables the application to handle or ignore errors on a call by call basis. + +```cobol +EXEC CICS LINK PROGRAM('ECIPROG') RESP(RESP) + END-EXEC +IF RESP = DFHRESP(INVREQ) + ....... +END-IF +``` + +In Java things are pretty similar as just about all JCICS commands can throw sub classes of the checked *CICSConditionException*, which represent error response codes from the underlying EXEC CICS commands. For a INVREQ this maps to an InvalidRequestException which looks like this in the class hierarchy. + +```java +java.lang.Exception + com.ibm.cics.server.CicsException + com.ibm.cics.server.CicsConditionException + com.ibm.cics.server.CicsResponseConditionException + com.ibm.cics.server.InvalidRequestException +``` + +Now let’s see how this can be used in our `Program.link()` call. Each sub class of `CicsConditionException` can be individually caught so specific errors can be actioned or ignored. +Order is important, a compilation error is displayed if a catch clause for a more generic exception appears before a catch clause for a more specific one (that is, for one of its subclasses). In our example we just log a message for the `InvalidRequestException` and carry on processing. Note this means the transaction will continue normal processing and thus potentially commit any recoverable data, so make sure you don’t do this for fatal errors. We then catch all other CICS errors (**17**) and throw them up the stack using a new `RuntimeException` to drive subsequent error handling, which by default will abend the CICS task and rollback the transaction, but more about that later. + +```java +task task = Task.getTask(); +task.out.println("Hello world"); + +try +{ + Program prog = new Program(); + prog.setName(PROG_NAME); + prog.setSyncOnReturn(false); + byte[] ca = new byte[CA_LEN]; + prog.link(ca); + +} +catch (InvalidRequestException ire) +{ + task.out.println("Invalid request on link - INVREQ"); +} +catch (CicsConditionException cce) +{ + throw new RuntimeException(cce); +} +``` + +## Channels and containers + +The other method of passing data from one CICS program to another is by using channels and containers. A channel is an interface between programs, it typically holds one or more containers to be passed between the programs. A container is a named data area. Channels and containers offer the advantage that more than 32KB of data can be passed, and both character and binary data can be specified. Character data (or strings in Java terms) is automatically converted at the API level, whereas binary data (or a byte array in Java terms) is flowed unconverted. By contrast, COMMAREAs are confined to a 32KB limit and are unstructured byte arrays. Multiple containers can be passed between programs within a channel, providing a high degree of flexibility about how to structure data. + +The following abbreviated code snippet shows how to use channels and containers to pass a character string input container on a LINK and then to retrieve and read both a character string and a binary container. A full working example is available in the [LinkProg3](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java) sample and the corresponding back end program is available at [LinkServEduchan](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java). + + +```java + + private static final String PROG_NAME = "EDUCHAN"; + private static final String CHANNEL="EDUCHAN"; + private static final String INPUT_CONTAINER="INPUTDATA"; + private static final String DATE_CONTAINER="CICSTIME"; + private static final String CICSRC_CONTAINER="CICSRC"; + private static final String INPUTSTRING="Hello from Java"; +.... + + Task task = Task.getTask(); + Program prog = new Program(); + prog.setName(PROG_NAME); +.... + + Channel testChannel = task.createChannel(CHANNEL); + Container inputContainer = testChannel.createContainer(INPUT_CONTAINER); + inputContainer.putString(INPUTSTRING); + + prog.link(testChannel); + + Container charContainer = testChannel.getContainer(DATE_CONTAINER); + if (charContainer!=null) + { + resultStr = charContainer.getString(); + } + + Container bitContainer = testChannel.getContainer(CICSRC_CONTAINER); + if (bitContainer!=null) + { + byte[] ba = bitContainer.get(); + ByteBuffer bb = ByteBuffer.wrap(ba); + cicsrc = bb.getInt(); + +``` + + +Lines **1\-6.** Initialize constants to define program name, and container data and names. +Line **14.** Create a `Channel` object which will be associated with the task. +Lines **15\-16.** Create the input container named `INPUTDATA`, the `createContainer()` method signature takes the String *Hello from Java* as input which will cause CICS to create a character based container as opposed to a binary container. The encoding of this data will be stored internally in UTF\-16 when created in Java in order to handle the Unicode String data, and will be automatically converted to the local EBCDIC encoding if read from a COBOL program. +Line **18.** Pass the channel as a reference on the `Program.link()` method, our invoked program [EDUCHAN](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/src/Cobol/EDUCHAN.cbl) will receive the `INPUTDATA` container, and will reverse the input data, and return the formatted time in a character container along with an integer return code in a binary container. +Lines **20\-23.** Create a new container object `charContainer` and get the character container defined as CICSTIME from the channel. This will return null (rather than throw a CICSConditionException which is the usual JCICS error model) if it does not exist, so we first test for null before reading the string data from it using the `Container.getString()` method. +Lines **26\-32.** Create a new container object `bitContainer` and get the binary container defined as CICSRC from the channel. Again this could return null if its not present so we first test for null. Next we create a byte array and get the data from the `bitContainer`. The data is actually a 32\-bit integer from a CICS response code, so we need to wrap this into a `ByteBuffer` and then read the integer from this. + +## TS and TD queues + +A temporary storage (TS) queue is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically created at runtime, unlike transient data (TD) queues that must be defined in advance. + +The following snippets show how to use the *TSQ* class to write string data to a TSQ and then read it back using a JCICS holder. A full working example of this code available in the [TSQExample2](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java) sample. + +```java +public class TSQExample2 extends TSQCommon +{ + private static final String TSQ_NAME = "MYTSQ"; + private static final int DEPTH_COUNT = 5; + private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + public static void main(String[] args) + { + TSQ tsq = new TSQ(); + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + for (int i = 1; i <= DEPTH_COUNT; i++) + { + + String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); + byte[] data; + try + { + data = msg.getBytes(CCSID); + } + catch (UnsupportedEncodingException uee) + { + throw new RuntimeException(uee); + } + try { + this.tsq.writeItem(data); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } + } + } +``` + + +Lines **3\-5.** Initialize constants +Lines **9\-11.** Create `TSQ` object and set TSQ name and storage type as MAIN (in memory) +Line **13.** Loop around writing multiple records to the TSQ +Lines **17\-21.** Create byte array from the input string using the CICS encoding +Line **27.** Write each item to the TSQ using the `TSQ.writeItem()` method + +The following method `readFromQueue()` shows how to use a JCICS `ItemHolder` to read bytes from a TSQ. + +```java +public void readFromQueue() +{ + ItemHolder holder = new ItemHolder(); + + for (int i = 1; i <= DEPTH_COUNT; i++) + { + + try + { + this.tsq.readItem(i, holder); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } + + byte[] data = holder.getValue(); + String strData; + try + { + strData = new String(data, CCSID); + } + catch (UnsupportedEncodingException uee) + { + throw new RuntimeException(uee); + } + .... + } +} +``` + + +Line **3.** Create a JCICS `ItemHolder` to be used to read bytes from the TSQ +Line **10.** Use the `TSQ.readItem()` method to loop around reading items from the TSQ into the ItemHolder, starting from an index of 1 as this is the first record in a TS queue > +Line **17.** Extract the byte array from the item holder +Line **21.** Create a new string using the CICS encoding + +Writing data to a TD queue is similar to TS and a set of examples is provided in the [com.ibm.cicsdev.tdq](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.tdq) project. + +## VSAM files + +VSAM is a high performance file storage access method widely used in CICS applications. There are 3 different types of VSAM files, key\-sequenced, entry\-sequence and relative record. In this article we will just cover the most popular type the key\-sequenced data set (KSDS) which is represented in JCICS via the *KSDS* class. + +The following snippets show how to use the KSDS class to read and write structured records to VSAM file. In this example a `StockPart` record is used to represent the structured record, and was created from a COBOL copybook structure using the [JZOS record generation](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/) tool. A full working example of this code is available in the [KsdsExample1](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds) sample which extends the class KsdsExampleCommon. + +```java +private static final String FILE_NAME = "XMPLKSDS"; +private final KSDS ksds; +.... + +public void addRecord(StockPart sp) +{ + this.ksds = new KSDS(); + this.ksds.setName(FILE_NAME); + byte[] record = sp.getByteBuffer(); + + byte[] key = StockPartHelper.getKey(sp); + + try + { + this.ksds.write(key, record); + } + catch (DuplicateRecordException dre) + { // Collision on the generated key + String strMsg = "Tried to insert duplicate key 0x%08X"; + Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); + throw new RuntimeException(dre); + } + catch (InvalidRequestException ire) + { + if ( ire.getRESP2() == 20 ) // File not addable + { + String strMsg = "Add operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } +} +``` + + +Line **9.** Get the byte structure from the generated record using the getByteBuffer() method on the StockPark record +Line **11.** Create a byte array containing the key for this record +Line **15.** Write the record into the VSAM file using the specified key +Lines **17&23.** Catch specific responses from the WRITE FILE commmand +Line **33.** Catch all other responses and throw an exception to abend the task + +## Unchecked exceptions, abends and rollbacks + +In Java unexpected error conditions are represented by Java classes which extend the `RuntimeException` class, and are known as *unchecked exceptions*. Unchecked exceptions are not subject to the compile time checking mandated for checked exceptions, although they can be caught if required. There are only a few unchecked exceptions in the JCICS API, and they all extend the `CICSRuntimeException` class. + +![JavaExceptions](graphics/JavaExceptions-1-e1484928035395.png) + +All of these unchecked exceptions that extend `CICSRuntimeException` represent conditions within CICS that should **not** generally be handled by an application. Java code running in CICS should not catch these exceptions without re\-throwing them, either explicitly in a catch block, or implicitly by catching a superclass of these exceptions such as `Exception` or `Throwable` as shown below. + +```java +try +{ + ... +} +catch ( Exception e ) +{ + ... +} +``` + + +Instead, they should be allowed to propagate out of the Java environment and back to CICS, where the task will abend. Note, included in this list is `AbendException` which represents an abend of a CICS task, and should only be caught if you wish to develop your own Java abend handling routine and re\-throw the Exception. If a Java exception such as a null pointer exception is allowed to propagate out of the Java code and back to the JVM server runtime, this is generally surfaced as one of the CICS abends prefixed with AJ. Most commonly, an uncaught exception will result in an AJ04 abend, and the transaction will be rolled\-back. The following snippet shows how to catch and log both trivial exceptions, CICS abends and other unchecked exceptions. + + +```java +try +{ +... +} +catch (TrivialException te) +{ + LOGGER.warn(); +} +catch (AbendException ae) +{ + LOGGER.warn("CICS Abend:" ae.getABCODE() + " Task:" + Task.getTask().getTaskNumber() ); + throw ae; +} +catch (Exception e) +{ + LOGGER.warn(); + throw e; +} +``` + +It is also possible for a Java application to rollback or abend the CICS task directly. This can be achieved using the `Task.rollback(`) or `Task.abend()` methods in the Task class, as shown in the LinkServEC01 sample. Abending the CICS task is similar in concept to the throwing of Java exception, as it allows a CICS abend handler written in COBOL (or another language) to take control of error processing. + + +```java +Task.getTask().abend(ABCODE) + +``` + +The various forms of the `Task.abend()` method allow an application to optionally specify an abend code or whether a dump is required. The forceAbend() methods provide the same options as the equivalent abend methods, but are equivalent to specifying the CANCEL keyword on the EXEC CICS ABEND command. Invoking a force abend method will always terminate the task abnormally, and overrides any existing CICS abend handlers that have been established for the task. + +Rolling back the transaction is equivalent to issuing an `EXEC CICS SYNCPOINT ROLLBACK` command, and will allow the task to continue but rollback all the updates that have taken place so far in the current unit\-of\-work. In JCICS this is achieved using the `Task.rollback()` method as shown below. + + +```java +try +{ + Task.getTask().rollback(); +} +catch (InvalidRequestException ire) +{ + ..... +} +``` + + +> **Note**: When accessing resources controlled by the Liberty transaction manager, such as a remote DB2 database using JDBC type 4 connectivity then it is necessary to use the Java transaction API (JTA) to create a Java transaction to control the global transaction scope, including the subordinate CICS unit\-of\-work. In this case it is not possible to use the `Task.rollback()` method and instead the JTA API should be used. For further details refer to this article [Using Java Transaction in CICS Liberty to coordinate JDBC updates](https://github.com/cicsdev/blog-cics-java-jta-jdbc/blob/main/blog.md). + +--- + +### Reference materials + +All the sample code for this tutorial is available at the following CICSDev GitHub repository [cics\-java\-jcics\-samples](https://github.com/cicsdev/cics-java-jcics-samples). + +For a more detailed discussion of JCICS and how to use it to integrate Java applications with CICS programs refer to the following Video Education course [Extending a CICS web application using JCICS](http://www.redbooks.ibm.com/redbooks.nsf/redbookabstracts/crse0302.html?Open) diff --git a/blog/graphics/JCICS.png b/blog/graphics/JCICS.png new file mode 100644 index 0000000000000000000000000000000000000000..71d5e5a3164615ff2ba3c1e63b0a78ee7d278a84 GIT binary patch literal 17914 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 Ksp4mb{{I^m$nn4c literal 0 HcmV?d00001 diff --git a/blog/graphics/JavaExceptions-1-e1484928035395.png b/blog/graphics/JavaExceptions-1-e1484928035395.png new file mode 100644 index 0000000000000000000000000000000000000000..cc83f76f57a23d4f7949db9983d33077ed5cf010 GIT binary patch literal 155288 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

?hw1zo{OIu__kfbtV*CfMBoVGkN1Cz9LGWh{ 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 Date: Tue, 24 Feb 2026 17:00:10 +0000 Subject: [PATCH 07/73] Update build files --- cics-java-jcics-link-app/build.gradle | 28 +++++++----- cics-java-jcics-link-app/pom.xml | 6 +-- cics-java-jcics-link-bundle/build.gradle | 18 ++++++++ cics-java-jcics-link-bundle/pom.xml | 6 +-- cics-java-jcics-serialize-app/build.gradle | 32 +++++++++++++ cics-java-jcics-serialize-app/pom.xml | 52 ++++++++++++++++++++++ cics-java-jcics-serialize-bundle/pom.xml | 38 ++++++++++++++++ settings.gradle | 9 ++++ 8 files changed, 171 insertions(+), 18 deletions(-) create mode 100644 cics-java-jcics-link-bundle/build.gradle create mode 100644 cics-java-jcics-serialize-app/build.gradle create mode 100644 cics-java-jcics-serialize-app/pom.xml create mode 100644 cics-java-jcics-serialize-bundle/pom.xml create mode 100644 settings.gradle diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index 31af7b0..acb3a12 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -1,28 +1,32 @@ - plugins { id 'java' } +description = 'CICS Java JCICS link sample - Application' + +java +{ + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} dependencies { - //Define the CICS Bill of Materials and apply to compile and annotation processor - def bom = "com.ibm.cics:com.ibm.cics.ts.bom:6.1-20240903141936-PH59389" - compileOnly enforcedPlatform(bom) - annotationProcessor enforcedPlatform(bom) + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) // JCICS library compileOnly("com.ibm.cics:com.ibm.cics.server") + + //Compile using the IRG generated JAR from the local maven repo + compileOnly ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") - // CICS annotation processor for @CICSProgram support - annotationProcessor("com.ibm.cics:com.ibm.cics.server.invocation") - -} + } -description = 'CICS OSGi link application' +// Manually add the OSGI manifest using the sample provided jar { manifest { - from 'src/main/resources/META-INF/MANIFEST.MF' + from '../etc/Link/META-INF/MANIFEST.MF' } -} \ No newline at end of file +} diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index 21d5950..79aeab0 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -5,13 +5,13 @@ com.ibm.cicsdev - cics-java-jcics-link + cics-java-jcics-samples 1.0.0 cics-java-jcics-link-app bundle - CICS Java JCICS link application - Application + CICS Java JCICS link sample - Application @@ -49,7 +49,7 @@ true - com.ibm.cics.server;version="[1.500.0,3.0.0)",com.ibm.jzos.fields;resolution:=optional + com.ibm.cics.server;version="[1.700.0,3.0.0)",com.ibm.jzos.fields;resolution:=optional diff --git a/cics-java-jcics-link-bundle/build.gradle b/cics-java-jcics-link-bundle/build.gradle new file mode 100644 index 0000000..0fd1ec9 --- /dev/null +++ b/cics-java-jcics-link-bundle/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" + +} + +description = 'CICS Java JCICS link sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-link-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + diff --git a/cics-java-jcics-link-bundle/pom.xml b/cics-java-jcics-link-bundle/pom.xml index 02d54ca..23d143c 100644 --- a/cics-java-jcics-link-bundle/pom.xml +++ b/cics-java-jcics-link-bundle/pom.xml @@ -5,13 +5,13 @@ com.ibm.cicsdev - cics-java-jcics-link + cics-java-jcics-samples 1.0.0 cics-java-jcics-link-bundle cics-bundle - CICS Java JCICS link application - CICS bundle + CICS Java JCICS link sample - CICS bundle @@ -27,7 +27,7 @@ com.ibm.cics cics-bundle-maven-plugin - 1.0.7 + 1.0.8 true ${cics.jvmserver} diff --git a/cics-java-jcics-serialize-app/build.gradle b/cics-java-jcics-serialize-app/build.gradle new file mode 100644 index 0000000..e877240 --- /dev/null +++ b/cics-java-jcics-serialize-app/build.gradle @@ -0,0 +1,32 @@ +plugins { + id 'java' + id 'eclipse' +} + +description = 'CICS Java JCICS serialize sample - Application' + +// If in Eclipse, add Javadoc to the local project classpath +eclipse +{ + classpath + { + downloadJavadoc = true + } +} + +java +{ + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + compileOnly enforcedPlatform(bom) + compileOnly 'com.ibm.cics:com.ibm.cics.server' +} + +jar { + manifest { + from '../etc/Serialize/META-INF/MANIFEST.MF' + } +} \ No newline at end of file diff --git a/cics-java-jcics-serialize-app/pom.xml b/cics-java-jcics-serialize-app/pom.xml new file mode 100644 index 0000000..8b84789 --- /dev/null +++ b/cics-java-jcics-serialize-app/pom.xml @@ -0,0 +1,52 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.0 + + + cics-java-jcics-serialize-app + bundle + CICS Java JCICS serialize sample - Application + + + + + + + com.ibm.cics + com.ibm.cics.server + + + + + + + + org.apache.felix + maven-bundle-plugin + 6.0.0 + true + + + true + + com.ibm.cics.server;version="[1.700.0,3.0.0)" + + + + ${bundle.symbolicName} + ${project.version} + com.ibm.cicsdev.serialize.SerializeExample1 + + + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-serialize-bundle/pom.xml b/cics-java-jcics-serialize-bundle/pom.xml new file mode 100644 index 0000000..77a17b9 --- /dev/null +++ b/cics-java-jcics-serialize-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.0 + + + cics-java-jcics-serialize-bundle + cics-bundle + CICS Java JCICS serialize sample - CICS bundle + + + + ${project.groupId} + cics-java-jcics-serialize-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.7 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..746f1a3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,9 @@ +rootProject.name = 'cics-java-jcics-samples' +include(':cics-java-jcics-serialize-app') +include(':cics-java-jcics-serialize-bundle') +include(':cics-java-jcics-link-app') +include(':cics-java-jcics-link-bundle') + + + + From a0c98a94225e703e1c4984c8fc5c11b63a94fc43 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:00:21 +0000 Subject: [PATCH 08/73] Update README --- cics-java-jcics-link-app/README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/cics-java-jcics-link-app/README.md b/cics-java-jcics-link-app/README.md index fb5796b..2aabca2 100644 --- a/cics-java-jcics-link-app/README.md +++ b/cics-java-jcics-link-app/README.md @@ -1,7 +1,7 @@ com.ibm.cicsdev.link === -Provides examples for performing CICS LINK operations using both commareas, and channels and containers. +Provides examples for performing CICS LINK operations using both COMMAREAs, and channels and containers. * `LinkProg1` - a class that demonstrates linking to the COBOL application `EC01` using a COMMAREA. * `LinkProg2` - a class that demonstrates linking to the COBOL application `EDUPGM` using a COMMAREA mapped using a JZOS generated record. @@ -13,21 +13,17 @@ Provides examples for performing CICS LINK operations using both commareas, and ## Supporting files -* `lib/EDUPGM.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in the `EDUPGM` COBOL sample. The generated class `JZOSCommareaWrapperclass` is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. +* `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/). * [`/etc/Link`](../../etc/Link) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. * [`/src/Cobol`](../../src/Cobol) - contains the COBOL programs `EC01` and `EDUCHAN` required by these samples. * [cics-java-jzosprog repo](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) - repository containing the `EDUPGM` COBOL program. -## Building +## Building the Java programs -Download the IRG generated JAR EDUPGM.jar -Install the JAR file into a local Maven repository by running the following Maven command in a local command prompt -``` -mvn org.apache.maven.plugins:maven-install-plugin:3.1.3:install-file "-Dfile=etc/lib/EDUPGM.jar" "-DgroupId=com.ibm.cicsdev" "-DartifactId=cics-java-jcics-edupgm" "-Dversion=1.0" "-Dpackaging=jar" "-DlocalRepositoryPath=local-repo" -``` -## Configuration + +## Configuring CICS 1. Compile and deploy the COBOL programs `EC01`, `EDUPGM`, and `EDUCHAN`. 1. Define the resource definitions for the Transaction IDs and Java programs using the DFHCSDUP source in etc/Link/DFHCSD.txt From 0f9fc2c0473d99b13f3f964251590ac40da03c18 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:00:55 +0000 Subject: [PATCH 09/73] Add Serialize sample --- .../cicsdev/serialize/SerializeExample1.java | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 cics-java-jcics-serialize-app/src/main/java/com/ibm/cicsdev/serialize/SerializeExample1.java diff --git a/cics-java-jcics-serialize-app/src/main/java/com/ibm/cicsdev/serialize/SerializeExample1.java b/cics-java-jcics-serialize-app/src/main/java/com/ibm/cicsdev/serialize/SerializeExample1.java new file mode 100644 index 0000000..5512b0e --- /dev/null +++ b/cics-java-jcics-serialize-app/src/main/java/com/ibm/cicsdev/serialize/SerializeExample1.java @@ -0,0 +1,180 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.serialize; + +import java.util.concurrent.ThreadLocalRandom; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.LengthErrorException; +import com.ibm.cics.server.NameResource; +import com.ibm.cics.server.ResourceUnavailableException; +import com.ibm.cics.server.Task; + +/** + * Simple example of resource serialization using the CICS enqueue and dequeue + * mechanism from the JCICS API. + */ +public class SerializeExample1 +{ + /** + * The name of the lock used to protect the shared resource. + * + * The name is defined by an application and has no special meaning + * to CICS. + * + * This string must be a maximum of 255 bytes after conversion from + * a Java String to a byte array in the local CCSID. + * + * This string must be a minimum of 1 character in length. + */ + private static final String RESOURCE_LOCK_NAME = "MYAPP.SYNC.RES1"; + + /** + * A constant to represent the number of times we will attempt to + * lock the common application resource before giving up. + */ + private static final int RESOURCE_TRY_COUNT = 10; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Flag to indicate we have the lock + boolean bHaveLock = false; + + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting SerializeExample1"); + + // Create a named synchronization resource + NameResource lock = new NameResource(); + lock.setName(RESOURCE_LOCK_NAME); + + // Attempt to access the lock multiple times + for ( int i = 0; i < RESOURCE_TRY_COUNT; i++ ) { + + // We are trying to acquire the lock + String strMsg = "Attempting to acquire resource lock %s"; + task.out.println( String.format(strMsg, RESOURCE_LOCK_NAME) ); + + // Try to acquire the lock + bHaveLock = acquireLock(lock); + + // Did we get the lock? + // No : Wait for a random period of time before retry + // Yes : Exit loop + if ( ! bHaveLock ) { + randomSleep(); + } + else { + break; + } + } + + // Verify we have the lock. If not, perform some crude error-handling + if ( ! bHaveLock ) { + Task.getTask().abend("LOCK", false); + } + + // Now have the lock at this point - confirm to the user + task.out.println("Resource lock has been acquired"); + + try { + // Perform update of some shared resource + doUpdate(); + } + catch (CicsConditionException cce) { + // No clever exception handling here - keep it simple for demo purposes + throw new RuntimeException(cce); + } + finally { + try { + // Release the lock inside the finally block for correct error-handling + lock.dequeue(); + + // Confirmation we have released the lock + task.out.println("Resource lock has been released"); + } + catch (CicsConditionException cce) { + // No clever exception handling here - keep it simple for demo purposes + throw new RuntimeException(cce); + } + } + + // Completion message + task.out.println("Completed SerializeExample1"); + } + + /** + * Attempts to acquire the shared resource lock. This method calls the + * {@link NameResource#enqueue()} method. Using the {@link NameResource#tryEnqueue()} + * method would perform the same operation, but would not block waiting for the + * lock to become available. + * + * @param lock the lock to acquire + * + * @return a boolean flag to indicate the lock has been successfully acquired. + * + * @throws CicsConditionException if there was an error accessing the lock resource. + */ + private static boolean acquireLock(NameResource lock) + { + try { + // Attempt to acquire the lock + lock.enqueue(); + + // We have successfully obtained the lock + return true; + } + catch (LengthErrorException lee) { + // Corresponds to LENGERR - bad programming + // Crude error-handling in this case: simply wrapper and throw + throw new RuntimeException(lee); + } + catch (ResourceUnavailableException e) { + // Corresponds to ENQBUSY - return lock not held + return false; + } + } + + /** + * Sleep this thread for a random interval. + */ + private static void randomSleep() + { + // Generate 1 <= t < 21 + long t = ThreadLocalRandom.current().nextLong(1, 21); + + try { + // Sleep for the random period of time + Thread.sleep(t); + } + catch (InterruptedException ie) { + // We have been awoken - that is all + } + } + + /** + * Provides a dummy method to represent an update of some shared application + * resource. + * + * @throws CicsConditionException never thrown, but declared to + * give the caller something to worry about. + */ + private static void doUpdate() throws CicsConditionException + { + // Null block for demonstration purposes + } +} From 03eba93b3cb8e1894ccffbae4ce83125d1e6a20c Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:07:44 +0000 Subject: [PATCH 10/73] README updates --- README.md | 171 ++++++++++++++++++++++++++++++++++++++++++-------- src/README.md | 6 -- 2 files changed, 144 insertions(+), 33 deletions(-) delete mode 100644 src/README.md diff --git a/README.md b/README.md index b2fb87f..02015f9 100644 --- a/README.md +++ b/README.md @@ -4,49 +4,165 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Samples overview -* [`com.ibm.cicsdev.link`](projects/com.ibm.cicsdev.link) - Performing CICS LINK operations using both commareas, and channels and containers. -* [`com.ibm.cicsdev.serialize`](projects/com.ibm.cicsdev.serialize) - Serializing access to a common resource using the CICS ENQ and DEQ mechanism. -* [`com.ibm.cicsdev.tdq`](projects/com.ibm.cicsdev.tdq) - Accessing transient data queues. -* [`com.ibm.cicsdev.terminal`](projects/com.ibm.cicsdev.terminal) - Reading in data from a terminal for an OSGi application. -* [`com.ibm.cicsdev.tsq`](projects/com.ibm.cicsdev.tsq) - Accessing temporary storage queues. -* [`com.ibm.cicsdev.vsam`](projects/com.ibm.cicsdev.vsam) - Accessing KSDS, ESDS, and RRDS VSAM files. +* [`cics-java-jcics-link-app`](cics-java-jcics-link-app) - Java project covering LINK commands using both COMMAREAs and channels and containers +* [`cics-java-jcics-link-bundle`](cics-java-jcics-link-bundle) - CICS bundle plug-in based project for cics-java-jcics-link-app +* [`com.ibm.cicsdev.serialize`](projects/com.ibm.cicsdev.serialize) - Java project covering serializing access to a common resource using the CICS ENQ and DEQ commands. +mechanism. +* [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in based project for cics-java-jcics-serialize-app + ## Repository structure * [`etc/`](etc) - Supporting materials used to define CICS and z/OS resources needed for the samples. -* [`projects/`](projects) - Complete Eclipse projects suitable for importing into a CICS Explorer environment. -* [`src/`](src) - Supporting source code for non-Java programs. +* [`etc/eclipse_projects/`](etc/eclipse_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. +* [`etc/src/`](etc/src) - Supporting source code for COBOL programs. ## Pre-requisites -* Java SE 1.8 or later on the workstation -* Eclipse with the IBM CICS SDK for Java or any IDE that supports usage of the Maven Central artifact [com.ibm.cics:com.ibm.cics.server.](https://search.maven.org/artifact/com.ibm.cics/com.ibm.cics.server) - +* IBM CICS TS V5.5 or later +* IBM Semeru Runtime Certified Edition Version 17.0 or later on the workstation +* Either Gradle or Apache Maven on the workstation (optional if using Wrappers) +* An Eclipse development environment on the workstation (optional) + + +## Downloading + +- Clone the repository using your IDEs support, such as the Eclipse Git plugin +- **or**, download the sample as a [ZIP](https://github.com/cicsdev/cics-java-jcics-samples/archive/refs/heads/cicsts/v5.5.zip) and unzip onto the workstation + + +## Building +The sample includes an Eclipse project configuration, a Gradle build, a Maven POM, and Gradle/Maven Wrappers offering a wide range of build options with the tooling and IDE of your choice. + +Choose from the following approach: +* Use the built-in Eclipse and CICS Explorer SDK capability +* Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven. +* Use the command line, or IDE terminal, to drive Gradle or Apache Maven (if installed on your workstation) +* Use the command line, or IDE terminal, or IDE support for Wrappers, to drive the supplied Gradle or Apache Maven Wrappers (with no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed) + + +** Note: ** If you import the project to your IDE, you might experience local project compile errors. To resolve these errors follow the relevant build section below. + + +### Option 1 - Building with Gradle + + +The CICS JVM server name should be modified in the `cics.jvmserver` property in the gradle build files or alternatively can be set on the command line (see below). + +If you have the Gradle buildship plug-in available, use the right-click **Run As...** menu on the cics-java-osgi-link project to configure and run the `clean` and `build` tasks. Otherwise choose from the command-line approaches. + +**Gradle Wrapper (Linux/Mac):** +```shell +./gradlew clean build +``` + +**Gradle Wrapper (Windows):** +```shell +gradle.bat clean build +``` + +**Gradle (command-line):** +```shell +gradle clean build +``` + +**Gradle (command-line & setting jvmserver):** +```shell +gradle clean build -Pcics.jvmserver=MYJVM +``` + + +A JAR file is created inside the Java sub-project `build/libs` directory and a CICS bundle ZIP file inside the CICS bundle project `build/distributions` directory. + + +### Option 2 - Building with Apache Maven + +You don't necessarily need to fix the local errors, but to do so, you can run a tooling refresh on the cics-java-jcics-samples project. For example, in Eclipse: right-click on "Project", select "Maven -> Update Project...". + +> [!TIP] +> In Eclipse, Gradle (buildship) is able to fully refresh and resolve the local classpath even if the project was previously updated by Maven. However, Maven (m2e) does not currently reciprocate that capability. If you previously refreshed the project with Gradle or with the CICS Explorer SDK Java Libraries, you'll need to manually remove the 'Project Dependencies' entry on the Java build-path of your Project Properties to avoid duplication errors when performing a Maven Project Update. + +The CICS JVM server name should be modified in the `` property in the [`pom.xml`](pom.xml) to match the required CICS JVMSERVER resource name, or alternatively can be set on the command line (see below). + +If you have the Maven m2e plug-in available, use the right-click **Run As...** menu on the Eclipse project to configure and run the `clean` and `verify` tasks. Otherwise choose from the command-line approaches. + +**Maven Wrapper (Linux/Mac):** +```shell +./mvnw clean verify +``` + +**Maven Wrapper (Windows):** +```shell +mvnw.cmd clean verify +``` + +**Maven (command-line):** +```shell +mvn clean verify +``` + +**Maven (command-line & setting jvmserver):** +```shell +mvn clean verify -Dcics.jvmserver=MYJVM +``` + +A JAR file is created inside the Java sub-project `target` directory and a CICS bundle ZIP file inside the CICS bundle project `target` directory. + + + +### Option 3 - Building with Eclipse + +The sample comes pre-configured for use with a standard Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for a Java 17, or does not have CICS Explorer SDK installed with the correct 'target platform' set, you might experience local project compile errors. + +To resolve issues: +* ensure you have the CICS Explorer SDK plug-in installed +* configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings +* set the CICS TS Target Platform to your intended CICS target (Hint: Window | Preferences | Plug-in Development | Target Platform | Add | Template | Other...) + +--- + + ## Configuration The sample Java classes are designed to be added to an OSGi bundle and deployed into a CICS OSGi JVM server, but can also be used as the basis for extending Web applications deployed into a Liberty JVM server. -### Starting a JVM server in CICS -1. Enable Java support in the CICS region by adding the `SDFJAUTH` library to the `STEPLIB` concatenation and setting `USSHOME` and the `JVMPROFILE` SIT parameters. -1. Define an OSGi JVM server called `DFHJVMS` using the CICS-supplied sample definition in the CSD group `DFH$OSGI`. -1. Copy the CICS supplied `DFHOSGI.jvmprofile` zFS file to the zFS directory specified by the `JVMPROFILE` SIT parameter, and ensure the `JAVA_HOME` variable is set correctly. -1. Install the `DFHJVMS` resource defined in step 2 and ensure it becomes enabled. + +## Deploying to zFS -### Import the resources into your IDE +### Option 1 - Deploying using command line tools +1. Upload the built CICS bundle ZIP file from your *target* or */build/distributions* directory to zFS on the host system (e.g. FTP). +2. Connect to USS on the host system (e.g. SSH). +3. Create the bundle directory for the project. +4. Move the CICS bundle ZIP file into the bundle directory. +5. Change directory into the bundle directoy. +6. Extract the CICS bundle ZIP file. This can be done using the `jar` command. For example: + ```shell + jar xf file.zip + ``` -1. Ensure you have an Eclipse-based IDE with the CICS Explorer SDK installed. -1. Import the relevant projects into your Eclipse environment as described in [Adding the resources to Eclipse](/projects#adding-the-resources-to-eclipse). -1. Follow the instructions in the [Generated resources](/projects#generated-resources) section to add any required binary libraries to the build path. +### Option 2 - Deploying using CICS Explorer (Remote System Explorer) and CICS Bundle ZIP +1. Connect to USS on the host system +2. Create the bundle directory for the project. +3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory to zFS on the host system into the bundle directory. +4. Extract the ZIP by right-clicking on the ZIP file > User Action > unjar... +5. Refresh the bundle directory + +### Option 3 - Deploying using CICS Explorer SDK and the provided CICS bundle project +1. Deploy the CICS bundle project from CICS Explorer using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and optionally the transaction and bundle resources to run the sample. -### To deploy the samples into a CICS region -1. Using the CICS Explorer export the `com.ibm.cicsdev.*.cicsbundle` projects to a zFS directory. The sample definitions use the following style of zFS location `/u/cics1/com.ibm.cicsdev.link.cicsbundle_1.0.0`. -1. Define and install CICS `BUNDLE` resource defintions referring to the deployed bundle directory in step 1, and ensure all resources are enabled. -1. Create the required transaction and program definitions using either the supplied `DFHCSD.txt` files as input to a CSD define job, or using the supplied CICS bundle projects. -1. See the individual project directories for any additional supporting resources required. +### Deploying to CICS + +1. Define an OSGi JVM server resource called `DFHJVMS` based on the CICS-supplied sample definition in the CSD group `DFH$OSGI`. + +1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt). Alternatively they can be installed using the bundle parts supplied with the Eclipse CICS bundle projects in the [`eclipse_projects`](etc/eclipse_projects) directory. +See the individual project directories for any additional supporting resources required. + +1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resourceS and ensure the JVM server becomes enabled along with all associated bundles. + ## License @@ -54,6 +170,7 @@ This project is licensed under [Apache License Version 2.0](LICENSE). ## Reference -* CICSDev tutorial archive [Getting to Grips with JCICS](blog/blog.md) +* Developer works tutorial archive [Getting to Grips with JCICS](blog/blog.md) * For further details on using the IBM Record Generator for Java see this [tutorial](https://developer.ibm.com/tutorials/build-java-records-from-cobol-with-ibm-record-generator/) -* For details on how to define a CICS OSGi JVM server refer to the Knowledge Center topic [Configuring an OSGi JVM server](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.java.doc/JVMserver/config_jvmserver_app.html) +* For details on how to define a CICS OSGi JVM server refer to the Knowledge Center topic [Configuring an OSGi JVM server](https://www.ibm.com/docs/en/cics-ts/5.5.0?topic=server-configuring-osgi-jvm) + diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 99e7ad4..0000000 --- a/src/README.md +++ /dev/null @@ -1,6 +0,0 @@ -src -=== -Supporting non-Java programs used in conjunction with the JCICS samples. - -See also the [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) repository for the `EDUPGM` COBOL program. - From 6b2396f025d74d2274367c27576beee4b81900b3 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:09:25 +0000 Subject: [PATCH 11/73] File deletions --- .../src/main/resources/META-INF/MANIFEST.MF | 18 -- src/Cobol/EC01.cbl | 118 ------------ src/Cobol/EDUCHAN.cbl | 172 ------------------ 3 files changed, 308 deletions(-) delete mode 100644 cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF delete mode 100644 src/Cobol/EC01.cbl delete mode 100644 src/Cobol/EDUCHAN.cbl diff --git a/cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF b/cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 5ecf150..0000000 --- a/cics-java-jcics-link-app/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,18 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS code for use of LINK -Bundle-SymbolicName: com.ibm.cicsdev.link -Bundle-Version: 1.0.1 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, - com.ibm.cicsdev.link.LinkProg2, - com.ibm.cicsdev.link.LinkProg3, - com.ibm.cicsdev.link.LinkServEduchan, - com.ibm.cicsdev.link.LinkServEC01 -Import-Package: com.ibm.cics.server;version="[1.401.0,3.0.0)", - com.ibm.jzos.fields;resolution:=optional -Automatic-Module-Name: com.ibm.cicsdev.link -Bundle-ClassPath: lib/EDUPGM.jar, - . - diff --git a/src/Cobol/EC01.cbl b/src/Cobol/EC01.cbl deleted file mode 100644 index 94c2b98..0000000 --- a/src/Cobol/EC01.cbl +++ /dev/null @@ -1,118 +0,0 @@ - - *----------------------------------------------------------------* - * Licensed Materials - Property of IBM * - * SAMPLE * - * (c) Copyright IBM Corp. 2016 All Rights Reserved * - * US Government Users Restricted Rights - Use, duplication or * - * disclosure restricted by GSA ADP Schedule Contract with * - * IBM Corp * - *----------------------------------------------------------------* - - ****************************************************************** - * * - * Module Name EC01.CBL * - * * - * CICS LINK back-end COMMAREA sample * - * * - * This program expects to be invoked with a COMMARAEA * - * and returns the date and time. Note sample orginally supplied * - * with IBM CICS Transaction Gateway. * - ****************************************************************** - - - IDENTIFICATION DIVISION. - PROGRAM-ID. EC01. - - ENVIRONMENT DIVISION. - DATA DIVISION. - WORKING-STORAGE SECTION. - ***************************************************************** - * WORKING STORAGE STARTS HERE * - ***************************************************************** - 01 FILLER PIC X(32) VALUE - '** WORKING STORAGE STARTS HERE**'. - - ***************************************************************** - * THIS WS AREA CONTAINS ALL WORKING VARIABLES. * - ***************************************************************** - 01 FILLER PIC X(8) VALUE 'WS-'. - 01 WS-DEBUG-AREA. - 05 WS-RAWTIME PIC S9(15) COMP-3. - 05 WS-DATE-DEBUG-AREA PIC X(8). - 05 WS-TIME-DEBUG-AREA PIC X(8). - 05 WS-EIBRESP-DISP PIC S9(9) - SIGN LEADING SEPARATE. - 05 WS-CICS-RESP OCCURS 2 TIMES - PIC X(10). - 05 WS-DEBUG-ON-FLAG PIC X VALUE 'Y'. - 88 DEBUG-ON VALUE 'Y'. - - - ***************** - LINKAGE SECTION. - ***************** - 01 DFHCOMMAREA. - 05 LK-DATE-OUT PIC X(8). - 05 LK-SPACE-OUT PIC X(1). - 05 LK-TIME-OUT PIC X(8). - 05 LK-LOWVAL-OUT PIC X(1). - - ******************** - PROCEDURE DIVISION. - ******************** - A-CONTROL SECTION. - - IF DEBUG-ON - EXEC CICS HANDLE CONDITION ERROR (ZZX-CICS-ERROR-ROUTINE) - END-EXEC - END-IF. - - IF EIBCALEN < LENGTH OF DFHCOMMAREA - THEN - PERFORM ZZX-CICS-ERROR-ROUTINE - END-IF. - - MOVE SPACES TO DFHCOMMAREA. - - EXEC CICS - ASKTIME ABSTIME(WS-RAWTIME) - END-EXEC. - - EXEC CICS - FORMATTIME ABSTIME(WS-RAWTIME) - DDMMYY(LK-DATE-OUT) - DATESEP('/') - TIME(LK-TIME-OUT) - TIMESEP(':') - END-EXEC. - MOVE LOW-VALUES TO LK-LOWVAL-OUT. - - MOVE LK-DATE-OUT TO WS-DATE-DEBUG-AREA. - MOVE LK-TIME-OUT TO WS-TIME-DEBUG-AREA. - - EXEC CICS RETURN END-EXEC. - - GOBACK. - - ******************************** - ZZX-CICS-ERROR-ROUTINE SECTION. - ******************************** - - IF EIBCALEN < LENGTH OF DFHCOMMAREA - THEN - EXEC CICS - ABEND - ABCODE('ECOM') - END-EXEC - ELSE - EXEC CICS - ABEND - ABCODE('ERRO') - END-EXEC - END-IF. - GOBACK. - - ZZX-EXIT. - EXIT. - EJECT - *END OF PROGRAM diff --git a/src/Cobol/EDUCHAN.cbl b/src/Cobol/EDUCHAN.cbl deleted file mode 100644 index e031fe3..0000000 --- a/src/Cobol/EDUCHAN.cbl +++ /dev/null @@ -1,172 +0,0 @@ - *----------------------------------------------------------------* - * Licensed Materials - Property of IBM * - * SAMPLE * - * (c) Copyright IBM Corp. 2016 All Rights Reserved * - * US Government Users Restricted Rights - Use, duplication or * - * disclosure restricted by GSA ADP Schedule Contract with * - * IBM Corp * - *----------------------------------------------------------------* - - ****************************************************************** - * * - * Module Name EDUCHAN.CBL * - * Version 1.0 * - * Date 22/10/2016 * - * * - * CICS back-end channel/container sample * - * * - * This program expects to be invoked with a CHAR container named * - * INPUTDATA and returns the following containers: * - * A CHAR container containing the reversed input string * - * A CHAR container containing the time * - * A BIT container containing the CICS return code from reading * - * the input container * - ****************************************************************** - - IDENTIFICATION DIVISION. - PROGRAM-ID. EDUCHAN. - - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - DATA DIVISION. - WORKING-STORAGE SECTION. - - * Container name declarations - * Channel and container names are case sensitive - 01 DATE-CONT PIC X(16) VALUE 'CICSTIME'. - 01 INPUT-CONT PIC X(16) VALUE 'INPUTDATA'. - 01 OUTPUT-CONT PIC X(16) VALUE 'OUTPUTDATA'. - 01 LENGTH-CONT PIC X(16) VALUE 'INPUTDATALENGTH'. - 01 ERROR-CONT PIC X(16) VALUE 'ERRORDATA'. - 01 RESP-CONT PIC X(16) VALUE 'CICSRC'. - - - * Data fields used by the program - 01 INPUTLENGTH PIC S9(8) COMP-4. - 01 DATALENGTH PIC S9(8) COMP-4. - 01 CURRENTTIME PIC S9(15) COMP-3. - 01 ABENDCODE PIC X(4) VALUE SPACES. - 01 CHANNELNAME PIC X(16) VALUE SPACES. - 01 INPUTSTRING PIC X(72) VALUE SPACES. - 01 OUTPUTSTRING PIC X(72) VALUE SPACES. - 01 RESPCODE PIC S9(8) COMP-4 VALUE 0. - 01 RESPCODE2 PIC S9(8) COMP-4 VALUE 0. - 01 DATE-TIME. - 03 DATESTRING PIC X(10) VALUE SPACES. - 03 TIME-SEP PIC X(1) VALUE SPACES. - 03 TIMESTRING PIC X(8) VALUE SPACES. - 01 RC-RECORD PIC S9(8) COMP-4 VALUE 0. - 01 ERR-RECORD. - 03 ERRORCMD PIC X(16) VALUE SPACES. - 03 ERRORSTRING PIC X(32) VALUE SPACES. - - - PROCEDURE DIVISION. - * ----------------------------------------------------------- - MAIN-PROCESSING SECTION. - * ----------------------------------------------------------- - - * Get name of channel - EXEC CICS ASSIGN CHANNEL(CHANNELNAME) - END-EXEC. - - * If no channel passed in, terminate with abend code NOCH - IF CHANNELNAME = SPACES THEN - MOVE 'NOCH' TO ABENDCODE - PERFORM ABEND-ROUTINE - END-IF. - - - * Read content and length of input container - MOVE LENGTH OF INPUTSTRING TO INPUTLENGTH. - EXEC CICS GET CONTAINER(INPUT-CONT) - CHANNEL(CHANNELNAME) - FLENGTH(INPUTLENGTH) - INTO(INPUTSTRING) - RESP(RESPCODE) - RESP2(RESPCODE2) - END-EXEC. - - * Place RC in binary container for return to caller - MOVE RESPCODE TO RC-RECORD. - EXEC CICS PUT CONTAINER(RESP-CONT) - FROM(RC-RECORD) - FLENGTH(LENGTH OF RC-RECORD) - BIT - RESP(RESPCODE) - END-EXEC. - - IF RESPCODE NOT = DFHRESP(NORMAL) - PERFORM RESP-ERROR - END-IF. - - * Place reversed string in output container - MOVE FUNCTION REVERSE(INPUTSTRING) TO OUTPUTSTRING. - - EXEC CICS PUT CONTAINER(OUTPUT-CONT) - FROM(OUTPUTSTRING) - FLENGTH(LENGTH OF OUTPUTSTRING) - CHAR - RESP(RESPCODE) - END-EXEC. - - IF RESPCODE NOT = DFHRESP(NORMAL) - PERFORM RESP-ERROR - END-IF. - - * Get the current time - EXEC CICS ASKTIME ABSTIME(CURRENTTIME) - END-EXEC. - - * Format date and time - EXEC CICS FORMATTIME - ABSTIME(CURRENTTIME) - DDMMYYYY(DATESTRING) - DATESEP('/') - TIME(TIMESTRING) - TIMESEP(':') - RESP(RESPCODE) - END-EXEC. - - * Check return code - IF RESPCODE NOT = DFHRESP(NORMAL) - STRING 'Failed' DELIMITED BY SIZE - INTO DATESTRING END-STRING - END-IF. - - * Place current date in container CICSTIME - EXEC CICS PUT CONTAINER(DATE-CONT) - FROM(DATE-TIME) - FLENGTH(LENGTH OF DATE-TIME) - CHAR - RESP(RESPCODE) - END-EXEC. - * Check return code - IF RESPCODE NOT = DFHRESP(NORMAL) - PERFORM RESP-ERROR - END-IF. - - - - * Return back to caller - PERFORM END-PGM. - - * ----------------------------------------------------------- - RESP-ERROR. - MOVE 'EDUC' TO ABENDCODE - PERFORM ABEND-ROUTINE. - - PERFORM END-PGM. - - * ----------------------------------------------------------- - * Abnormal end - * ----------------------------------------------------------- - ABEND-ROUTINE. - EXEC CICS ABEND ABCODE(ABENDCODE) END-EXEC. - - * ----------------------------------------------------------- - * Finish - * ----------------------------------------------------------- - END-PGM. - EXEC CICS RETURN END-EXEC. - From 6e3bf3d92c30701938bdb9410c3f24ec8220b695 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:09:47 +0000 Subject: [PATCH 12/73] Update build files --- build.gradle | 26 ++++++++++++++++++++++++++ pom.xml | 10 ++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 build.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..7cb1b68 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ + +description = 'CICS Java JCICS samples' + +allprojects { + group = 'com.ibm.cicsdev' + version = '1.0.0' + + repositories { + + mavenCentral() + + // Local Maven repo for IRG generated file + maven { + url = uri("file:///../local-repo") + } + } + } + + +//Define the CICS Bill of Materials for compilation +ext { + bom = "com.ibm.cics:com.ibm.cics.ts.bom:5.5-20200519131930-PH25409" +} + + + diff --git a/pom.xml b/pom.xml index dd9074c..0d12c4e 100644 --- a/pom.xml +++ b/pom.xml @@ -8,15 +8,15 @@ com.ibm.cicsdev - cics-java-jcics-link + cics-java-jcics-samples 1.0.0 - CICS Java JCICS link application + CICS Java JCICS samples - DFHOSGI + DFHJVMS - 8 + 17 UTF-8 ${java.version} ${java.version} @@ -39,5 +39,7 @@ cics-java-jcics-link-app cics-java-jcics-link-bundle + cics-java-jcics-serialize-app + cics-java-jcics-serialize-bundle \ No newline at end of file From fb19a80ee173be54cab98a999aaf191a6aa50315 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Feb 2026 17:14:11 +0000 Subject: [PATCH 13/73] Maven wrapper --- mvnw | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 mvnw diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..bd8896b --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" From 1251090b9e4e8aa684ad6eb9787fb0c711449165 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Feb 2026 09:22:07 +0000 Subject: [PATCH 14/73] Update README --- README.md | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 02015f9..3c7f665 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Choose from the following approach: ### Option 1 - Building with Gradle -The CICS JVM server name should be modified in the `cics.jvmserver` property in the gradle build files or alternatively can be set on the command line (see below). +The CICS JVM server name should be modified in the `cics.jvmserver` property in the gradle build file or alternatively can be set on the command line (see below). If you have the Gradle buildship plug-in available, use the right-click **Run As...** menu on the cics-java-osgi-link project to configure and run the `clean` and `build` tasks. Otherwise choose from the command-line approaches. @@ -61,30 +61,19 @@ If you have the Gradle buildship plug-in available, use the right-click **Run As gradle.bat clean build ``` -**Gradle (command-line):** -```shell -gradle clean build -``` - **Gradle (command-line & setting jvmserver):** ```shell gradle clean build -Pcics.jvmserver=MYJVM ``` - -A JAR file is created inside the Java sub-project `build/libs` directory and a CICS bundle ZIP file inside the CICS bundle project `build/distributions` directory. +A JAR file for each CICS bundle project is created inside the application project `build/libs/` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `build/distributions` directory. ### Option 2 - Building with Apache Maven -You don't necessarily need to fix the local errors, but to do so, you can run a tooling refresh on the cics-java-jcics-samples project. For example, in Eclipse: right-click on "Project", select "Maven -> Update Project...". - -> [!TIP] -> In Eclipse, Gradle (buildship) is able to fully refresh and resolve the local classpath even if the project was previously updated by Maven. However, Maven (m2e) does not currently reciprocate that capability. If you previously refreshed the project with Gradle or with the CICS Explorer SDK Java Libraries, you'll need to manually remove the 'Project Dependencies' entry on the Java build-path of your Project Properties to avoid duplication errors when performing a Maven Project Update. -The CICS JVM server name should be modified in the `` property in the [`pom.xml`](pom.xml) to match the required CICS JVMSERVER resource name, or alternatively can be set on the command line (see below). +The CICS JVM server name should be modified in the `` property in the build files to match the required CICS JVMSERVER resource name, or alternatively can be set on the command line (see below). -If you have the Maven m2e plug-in available, use the right-click **Run As...** menu on the Eclipse project to configure and run the `clean` and `verify` tasks. Otherwise choose from the command-line approaches. **Maven Wrapper (Linux/Mac):** ```shell @@ -96,23 +85,17 @@ If you have the Maven m2e plug-in available, use the right-click **Run As...** m mvnw.cmd clean verify ``` -**Maven (command-line):** -```shell -mvn clean verify -``` - **Maven (command-line & setting jvmserver):** ```shell mvn clean verify -Dcics.jvmserver=MYJVM ``` -A JAR file is created inside the Java sub-project `target` directory and a CICS bundle ZIP file inside the CICS bundle project `target` directory. - +A JAR file for each CICS bundle project is created inside the application project `target` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `target` directory. ### Option 3 - Building with Eclipse -The sample comes pre-configured for use with a standard Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for a Java 17, or does not have CICS Explorer SDK installed with the correct 'target platform' set, you might experience local project compile errors. +The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for a Java 17, or does not have CICS Explorer SDK installed with the correct 'target platform' set, you might experience local project compile errors. To resolve issues: * ensure you have the CICS Explorer SDK plug-in installed @@ -136,10 +119,9 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed 2. Connect to USS on the host system (e.g. SSH). 3. Create the bundle directory for the project. 4. Move the CICS bundle ZIP file into the bundle directory. -5. Change directory into the bundle directoy. -6. Extract the CICS bundle ZIP file. This can be done using the `jar` command. For example: +5. Extract the CICS bundle ZIP file. This can be done using the `jar` command. For example: ```shell - jar xf file.zip + jar -xvf bundle.zip ``` ### Option 2 - Deploying using CICS Explorer (Remote System Explorer) and CICS Bundle ZIP From acbd6b0d6f6a514bc23e3ce8f6db415a72409061 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Feb 2026 10:02:58 +0000 Subject: [PATCH 15/73] More README updates --- README.md | 36 ++++++++++++++++-------------- cics-java-jcics-link-app/README.md | 25 +++++++++------------ 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 3c7f665..7393e1d 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,23 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM server environment. -## Samples overview +## Sample projects overview * [`cics-java-jcics-link-app`](cics-java-jcics-link-app) - Java project covering LINK commands using both COMMAREAs and channels and containers -* [`cics-java-jcics-link-bundle`](cics-java-jcics-link-bundle) - CICS bundle plug-in based project for cics-java-jcics-link-app -* [`com.ibm.cicsdev.serialize`](projects/com.ibm.cicsdev.serialize) - Java project covering serializing access to a common resource using the CICS ENQ and DEQ commands. -mechanism. -* [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in based project for cics-java-jcics-serialize-app +* [`cics-java-jcics-link-bundle`](cics-java-jcics-link-bundle) - CICS bundle plug-in project for cics-java-jcics-link-app +* [`cics-java-jcics-serialize-app`](cics-java-jcics-serialize-app) - Java project covering serializing access to a common resource using the CICS ENQ and DEQ commands. +* [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in project for cics-java-jcics-serialize-app ## Repository structure +* [`gradle/`](gradle) - Gradle wrapper +* [`.mvn/`](.mvn/wrapper) - Maven wrapper +* [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. * [`etc/`](etc) - Supporting materials used to define CICS and z/OS resources needed for the samples. * [`etc/eclipse_projects/`](etc/eclipse_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. +* [`blog/`](blog/blog.md) - Archive of developer works JCICS tutorial. ## Pre-requisites @@ -27,25 +30,23 @@ mechanism. ## Downloading +-Download the sample as a [ZIP](https://github.com/cicsdev/cics-java-jcics-samples/archive/refs/heads/cicsts/v5.5.zip) and unzip onto the workstation **or** - Clone the repository using your IDEs support, such as the Eclipse Git plugin -- **or**, download the sample as a [ZIP](https://github.com/cicsdev/cics-java-jcics-samples/archive/refs/heads/cicsts/v5.5.zip) and unzip onto the workstation ## Building The sample includes an Eclipse project configuration, a Gradle build, a Maven POM, and Gradle/Maven Wrappers offering a wide range of build options with the tooling and IDE of your choice. Choose from the following approach: +* Use the command line to drive Gradle or Apache Maven (if installed on your workstation) +* Use the command line or IDE support for Wrappers, to drive the supplied Gradle or Apache Maven Wrappers (with no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed) * Use the built-in Eclipse and CICS Explorer SDK capability * Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven. -* Use the command line, or IDE terminal, to drive Gradle or Apache Maven (if installed on your workstation) -* Use the command line, or IDE terminal, or IDE support for Wrappers, to drive the supplied Gradle or Apache Maven Wrappers (with no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed) - - -** Note: ** If you import the project to your IDE, you might experience local project compile errors. To resolve these errors follow the relevant build section below. ### Option 1 - Building with Gradle +The sample comes pre-configured with a Gradle wrapper and build files to facilitate automated builds. The CICS JVM server name should be modified in the `cics.jvmserver` property in the gradle build file or alternatively can be set on the command line (see below). @@ -71,6 +72,7 @@ A JAR file for each CICS bundle project is created inside the application projec ### Option 2 - Building with Apache Maven +The sample comes pre-configured with a Maven wrapper and build files to facilitate automated builds. The CICS JVM server name should be modified in the `` property in the build files to match the required CICS JVMSERVER resource name, or alternatively can be set on the command line (see below). @@ -111,10 +113,10 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed -## Deploying to zFS +### Deploying to zFS -### Option 1 - Deploying using command line tools +#### Option 1 - Deploying using command line tools 1. Upload the built CICS bundle ZIP file from your *target* or */build/distributions* directory to zFS on the host system (e.g. FTP). 2. Connect to USS on the host system (e.g. SSH). 3. Create the bundle directory for the project. @@ -124,14 +126,14 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed jar -xvf bundle.zip ``` -### Option 2 - Deploying using CICS Explorer (Remote System Explorer) and CICS Bundle ZIP +#### Option 2 - Deploying using CICS Explorer (Remote System Explorer) and CICS Bundle ZIP 1. Connect to USS on the host system 2. Create the bundle directory for the project. 3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory to zFS on the host system into the bundle directory. 4. Extract the ZIP by right-clicking on the ZIP file > User Action > unjar... 5. Refresh the bundle directory -### Option 3 - Deploying using CICS Explorer SDK and the provided CICS bundle project +#### Option 3 - Deploying using CICS Explorer SDK and the provided CICS bundle project 1. Deploy the CICS bundle project from CICS Explorer using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and optionally the transaction and bundle resources to run the sample. @@ -152,7 +154,7 @@ This project is licensed under [Apache License Version 2.0](LICENSE). ## Reference -* Developer works tutorial archive [Getting to Grips with JCICS](blog/blog.md) + * For further details on using the IBM Record Generator for Java see this [tutorial](https://developer.ibm.com/tutorials/build-java-records-from-cobol-with-ibm-record-generator/) * For details on how to define a CICS OSGi JVM server refer to the Knowledge Center topic [Configuring an OSGi JVM server](https://www.ibm.com/docs/en/cics-ts/5.5.0?topic=server-configuring-osgi-jvm) - +* Developer works tutorial archive [Getting to Grips with JCICS](blog/blog.md) diff --git a/cics-java-jcics-link-app/README.md b/cics-java-jcics-link-app/README.md index 2aabca2..fc43002 100644 --- a/cics-java-jcics-link-app/README.md +++ b/cics-java-jcics-link-app/README.md @@ -1,8 +1,10 @@ -com.ibm.cicsdev.link +cics-java-jcics-link === Provides examples for performing CICS LINK operations using both COMMAREAs, and channels and containers. +The following Java source code files are provided: + * `LinkProg1` - a class that demonstrates linking to the COBOL application `EC01` using a COMMAREA. * `LinkProg2` - a class that demonstrates linking to the COBOL application `EDUPGM` using a COMMAREA mapped using a JZOS generated record. * `LinkProg3` - a class that demonstrates linking to COBOL application `EDUCHAN` using channels and containers. @@ -14,33 +16,26 @@ Provides examples for performing CICS LINK operations using both COMMAREAs, and ## Supporting files * `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/). -* [`/etc/Link`](../../etc/Link) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. -* [`/src/Cobol`](../../src/Cobol) - contains the COBOL programs `EC01` and `EDUCHAN` required by these samples. -* [cics-java-jzosprog repo](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) - repository containing the `EDUPGM` COBOL program. - -## Building the Java programs - - +* [`/etc/Link`](../../etc/Link) - Contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. +* [`/src/Cobol`](../../src/Cobol) - Contains the COBOL programs `EC01` and `EDUCHAN` required by these samples. +* [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) - Repository containing the source code for the `EDUPGM` COBOL program. ## Configuring CICS 1. Compile and deploy the COBOL programs `EC01`, `EDUPGM`, and `EDUCHAN`. -1. Define the resource definitions for the Transaction IDs and Java programs using the DFHCSDUP source in etc/Link/DFHCSD.txt -1. Define the resource definitions for the Transaction IDs and Java programs using the DFHCSDUP source in etc/Link/DFHCSD.txt -1. Optionally if you wish to replace the EDUCHAN and EC01 COBOL programs with the Java implementations then use the commented out information supplied in etc/Link/DFHCSD.txt -1. If program autoinstall is not enabledd define PROGRAM definitions for the COBOL programs. - +1. Define the resource definitions for the Transaction IDs and Java programs using the DFHCSDUP source in `etc/Link/DFHCSD.txt` +1. Optionally if you wish to replace the EDUCHAN and EC01 COBOL programs with the Java implementations then use the commented out information supplied in et`DFHCSD.txt` +1. If program autoinstall is not enabledd define PROGRAM definitions for the COBOL programs. ## Running the Example At a 3270 terminal screen, enter the transaction you wish to run, for example JLN1 will run the LINK example 1. - JLN1 +> JLN1 and the following output will be returned JLN1 - Starting LinkProg1 Returned from link to EC01 with 19/08/16 09:17:01 - From bcd2524bb5b42d2651614345a5b3ecbd0fbe5027 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Feb 2026 10:03:15 +0000 Subject: [PATCH 16/73] Build file updates --- cics-java-jcics-link-app/build.gradle | 5 ++++- cics-java-jcics-link-app/pom.xml | 2 +- cics-java-jcics-link-bundle/build.gradle | 3 +-- cics-java-jcics-link-bundle/pom.xml | 2 +- cics-java-jcics-serialize-app/pom.xml | 2 +- cics-java-jcics-serialize-bundle/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index acb3a12..3c986ae 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -19,7 +19,7 @@ dependencies { compileOnly("com.ibm.cics:com.ibm.cics.server") //Compile using the IRG generated JAR from the local maven repo - compileOnly ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") + implementation ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") } @@ -29,4 +29,7 @@ jar { manifest { from '../etc/Link/META-INF/MANIFEST.MF' } + from("$projectDir") { + include 'lib/**' + } } diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index 79aeab0..dfffe0f 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -6,7 +6,7 @@ com.ibm.cicsdev cics-java-jcics-samples - 1.0.0 + 1.0.1 cics-java-jcics-link-app diff --git a/cics-java-jcics-link-bundle/build.gradle b/cics-java-jcics-link-bundle/build.gradle index 0fd1ec9..e3cb7c0 100644 --- a/cics-java-jcics-link-bundle/build.gradle +++ b/cics-java-jcics-link-bundle/build.gradle @@ -1,6 +1,5 @@ plugins { - id 'com.ibm.cics.bundle' version "1.0.8" - + id 'com.ibm.cics.bundle' version "1.0.8" } description = 'CICS Java JCICS link sample - CICS bundle' diff --git a/cics-java-jcics-link-bundle/pom.xml b/cics-java-jcics-link-bundle/pom.xml index 23d143c..e91cf68 100644 --- a/cics-java-jcics-link-bundle/pom.xml +++ b/cics-java-jcics-link-bundle/pom.xml @@ -6,7 +6,7 @@ com.ibm.cicsdev cics-java-jcics-samples - 1.0.0 + 1.0.1 cics-java-jcics-link-bundle diff --git a/cics-java-jcics-serialize-app/pom.xml b/cics-java-jcics-serialize-app/pom.xml index 8b84789..9bc15e1 100644 --- a/cics-java-jcics-serialize-app/pom.xml +++ b/cics-java-jcics-serialize-app/pom.xml @@ -6,7 +6,7 @@ com.ibm.cicsdev cics-java-jcics-samples - 1.0.0 + 1.0.1 cics-java-jcics-serialize-app diff --git a/cics-java-jcics-serialize-bundle/pom.xml b/cics-java-jcics-serialize-bundle/pom.xml index 77a17b9..f98d398 100644 --- a/cics-java-jcics-serialize-bundle/pom.xml +++ b/cics-java-jcics-serialize-bundle/pom.xml @@ -6,7 +6,7 @@ com.ibm.cicsdev cics-java-jcics-samples - 1.0.0 + 1.0.1 cics-java-jcics-serialize-bundle diff --git a/pom.xml b/pom.xml index 0d12c4e..3a81eb8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.ibm.cicsdev cics-java-jcics-samples - 1.0.0 + 1.0.1 CICS Java JCICS samples From 7dca53c568a05f606685ff2201aeb4ac64f5536f Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Feb 2026 10:03:24 +0000 Subject: [PATCH 17/73] Fix JAR in manifest --- etc/Link/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/Link/META-INF/MANIFEST.MF b/etc/Link/META-INF/MANIFEST.MF index 5db8d57..5528c87 100644 --- a/etc/Link/META-INF/MANIFEST.MF +++ b/etc/Link/META-INF/MANIFEST.MF @@ -13,6 +13,6 @@ CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", com.ibm.jzos.fields;resolution:=optional Automatic-Module-Name: com.ibm.cicsdev.link -Bundle-ClassPath: lib/EDUPGM.jar, +Bundle-ClassPath: lib/cics-java-jcics-edupgm-1.0.jar, . From 8269079f00794dccab9671f060183cdcf49369f0 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 2 Mar 2026 15:30:38 +0000 Subject: [PATCH 18/73] Move blog --- README.md | 5 +- blog/blog.md | 417 ------------------ blog/graphics/JCICS.png | Bin 17914 -> 0 bytes .../JavaExceptions-1-e1484928035395.png | Bin 155288 -> 0 bytes etc/Serialize/META-INF/MANIFEST.MF | 6 +- 5 files changed, 6 insertions(+), 422 deletions(-) delete mode 100644 blog/blog.md delete mode 100644 blog/graphics/JCICS.png delete mode 100644 blog/graphics/JavaExceptions-1-e1484928035395.png diff --git a/README.md b/README.md index 7393e1d..2c182a1 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,16 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM * [`gradle/`](gradle) - Gradle wrapper * [`.mvn/`](.mvn/wrapper) - Maven wrapper * [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. -* [`etc/`](etc) - Supporting materials used to define CICS and z/OS resources needed for the samples. +* [`etc/`](etc) - Supporting materials including DFHCSDUP definition files and sample OSGi bundle manifests. * [`etc/eclipse_projects/`](etc/eclipse_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. -* [`blog/`](blog/blog.md) - Archive of developer works JCICS tutorial. +* [`blog/`](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/blog/blog.md) - Archive of developer works JCICS tutorial. ## Pre-requisites * IBM CICS TS V5.5 or later * IBM Semeru Runtime Certified Edition Version 17.0 or later on the workstation +* IBM Semeru Runtime Certified Edition Version 17.0 or later on z/OS * Either Gradle or Apache Maven on the workstation (optional if using Wrappers) * An Eclipse development environment on the workstation (optional) diff --git a/blog/blog.md b/blog/blog.md deleted file mode 100644 index a702506..0000000 --- a/blog/blog.md +++ /dev/null @@ -1,417 +0,0 @@ -# Getting to grips with JCICS - - -JCICS provides a simple object hierarchy for accessing the CICS API from Java, and is similar to the EXEC CICS command API supported for other languages such as COBOL or assembler. Unlike other CICS high level languages, no translation step is necessary during compilation as the underlying EXEC CICS calls are dynamically generated via the Java Native Interface (JNI). JCICS is a fairly simple API and if you understand the EXEC CICS API and have some knowledge of Java then its a small jump to make. This does mean its not as object oriented as it could be, so if you have an OO outlook on life you may need to bite your tongue at times. - -![JCICS](graphics/JCICS.png) - -The following tutorial summarizes how to use the most popular parts of the JCICS API within CICS Java programs for deployment to an OSGi JVM server. You can also use JCICS in a Web application deployed into a Liberty JVM server in integrated mode, and the code samples provided are equally applicable to this environment.. - -# Application development - -The JCICS API is provided in the com.ibm.cics.server.jar library in the $USSHOME/lib directory on zFS, however, it is also integrated into the [CICS Explorer](https://developer.ibm.com/cics/category/cics-explorer/) SDK for Java which can be installed into an Eclipse development environment and provides all the function needed to easily develop JCICS applications on a workstation and deploy onto the zFS filing system on z/OS. The JCICS API can be used in any CICS JVM server environment including both OSGi and Liberty JVM servers. In this article we show how to create components for an OSGi JVM server that can be linked to from other CICS programs, but the samples provided can easily be reused in a Java EE web application for deployment into a Liberty JVM server. - -At the last count there were around 80 different classes that map to the underlying CICS commands or variants thereof, and you can view the full set in the online [Javadoc](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.jcics.javadoc/overview-tree.html). Most JCICS classes have a one to one relationship with the EXEC CICS API commands but this is not always the case. The most commonly used JCICS classes are Task, Program, Channel, Container, TSQ, TDQ and KSDS and we will give an overview of how to use these within a CICS Java program for deployment into an OSGi JVM server. - -| Class | Function | -| --------- | -------- | -| Task | Represents the CICS task | -| Program | Provides the ability to LINK to other CICS programs | -| Channel and Container | Support for CICS channels and containers | -| TSQ | Access to CICS temporary storage queues | -| TDQ | Access to CICS transient data queues | -| KSDS | Access to VSAM KSDS files | - -> There is no support for the CICS Systems Programming interface (SPI) such as `EXEC CICS INQUIRE` or `SET` commands and so Java applications that need to use these commands should link to non\-Java components to perform SPI commands - -## Tasks and programs - -Lets first take a look at the two classes you are most likely to need *Task* and *Program*. The Program class maps to the [EXEC CICS LINK](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_link.html) command and its variants, and the Task class maps to the [](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html)[ASSIGN](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html) and [ADDRESS](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_address.html) commands but also provides a set of helper methods to access the EIB and to control syncpoints and abends, but more about this later. - -The following code snippet shows how to use Task and Program to link to another CICS program, and is described in more detail using the line numbers below. A full working example is available in the [LinkProg1](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java) sample. - - -```java -private static final String PROG_NAME = "EC01"; -private static final int CA_LEN = 18 ; -.... -public static void main(String[] args) -{ -... - Task task = Task.getTask(); - task.out.println("Hello world"); - - Program prog = new Program(); - prog.setName(PROG_NAME); - prog.setSyncOnReturn(false); - byte[] ca = new byte[CA_LEN]; - prog.link(ca); -``` - - -Lines **1\-2.** Initialize constants including name of CICS program and length of COMMAREA input -Line **4.** The `main(String[] args)` constructor signifies this as the entry point for this CICS program, which allows this class to be named in the CICS\-MainClass header in the OSGi bundle manifest -Line **7.** Get the Task object representing the CICS task which the current Java thread is using, this will drive the underlying CICS ASSIGN command on first usage -Line **8.** Send output to the print writer which will be directed to either the user’s terminal or the stdout if there is no terminal -Line **10.** Instantiate an instance of a Program, and then set properties such as the name and whether or not the LINK will use the SYNCONRETURN option -Line **13.** Create a byte array and then pass this as input on the `Program.link()` method. This will drive an `EXEC CICS LINK` command to the CICS program named in line 11 -The COMMAREA will be passed as a byte array, which is an unstructured array of bytes of the specified length. Most CICS programs expect structured data as input and if you need to build a Java bean to map to this you can use the IBM Record Generator for Java or the Rational J2C Tools to build wrapper classes to map the records, see [Building Java records from COBOL with the IBM Record Generator for Java](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/). Note, there is no return type from the `Program.link()` method, this is often the case in JCICS and instead the data is updated in situ within the referenced COMMAREA. - -The program that is invoked by a link command can also be written in Java, and in our case will be passed the COMMAREA as a simple byte array. A sample Java version of the EC01 CICS COBOL program is shown below which shows how to use the *CommAreaHolder* class to receive the byte array mapping to the COMMAREA. A full working example is available in the [LinkServEC01](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java) sample. - -```java -public class LinkServEC01 -{ - private static final int CA_LEN = 18 ; - private static final String CA_LEN_ABCODE = "LEN"; - private static final SimpleDateFormat dfTime = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); - private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - public static void main(CommAreaHolder cah) - { - - Task task = Task.getTask(); - - if (cah.getValue().length < CA_LEN ) - { - task.abend(CA_LEN_ABCODE); - } - - Date timestamp = new Date(); - byte ba[] = dfTime.format(timestamp).getBytes(CCSID); - System.arraycopy (ba, 0, cah.getValue(), 0, ba.length); - ... - } -``` - - -Lines **3\-5.** Initialize constants -Line **6.** Get the local encoding of the CICS region, this defaults to EBCDIC -Lines **13\-16.** Check input array is long enough, and terminate the task using an abend if input is too short -Lines **18\-19.** Build time string for return to caller -Lines **20\-21.** Create byte array from the time string using the CICS encoding and copy into the CommAreaHolder for return to the calling program as the COMMAREA - -## Exception handling - -In Java errors other than *RuntimeException* that extend the *Exception* class are known as checked exceptions and must either be caught or declared as part of the method signature using the throws keyword. Any Java code which calls a method declared as throwing a checked exception must either provide logic to catch the checked exception, or add the exception to it’s own method signature, in order to propagate the exception further up the stack. The constraints on checked exceptions are enforced at compile time, and failure to adhere to the specification will result in a compilation error. - -By contrast in traditional high level languages such as COBOL, when a CICS command returns an error (such as unknown program on a link), then it will return a response code (PGMIDERR) to the application using the data area supplied in the RESP parameter of the CICS command . This enables the application to handle or ignore errors on a call by call basis. - -```cobol -EXEC CICS LINK PROGRAM('ECIPROG') RESP(RESP) - END-EXEC -IF RESP = DFHRESP(INVREQ) - ....... -END-IF -``` - -In Java things are pretty similar as just about all JCICS commands can throw sub classes of the checked *CICSConditionException*, which represent error response codes from the underlying EXEC CICS commands. For a INVREQ this maps to an InvalidRequestException which looks like this in the class hierarchy. - -```java -java.lang.Exception - com.ibm.cics.server.CicsException - com.ibm.cics.server.CicsConditionException - com.ibm.cics.server.CicsResponseConditionException - com.ibm.cics.server.InvalidRequestException -``` - -Now let’s see how this can be used in our `Program.link()` call. Each sub class of `CicsConditionException` can be individually caught so specific errors can be actioned or ignored. -Order is important, a compilation error is displayed if a catch clause for a more generic exception appears before a catch clause for a more specific one (that is, for one of its subclasses). In our example we just log a message for the `InvalidRequestException` and carry on processing. Note this means the transaction will continue normal processing and thus potentially commit any recoverable data, so make sure you don’t do this for fatal errors. We then catch all other CICS errors (**17**) and throw them up the stack using a new `RuntimeException` to drive subsequent error handling, which by default will abend the CICS task and rollback the transaction, but more about that later. - -```java -task task = Task.getTask(); -task.out.println("Hello world"); - -try -{ - Program prog = new Program(); - prog.setName(PROG_NAME); - prog.setSyncOnReturn(false); - byte[] ca = new byte[CA_LEN]; - prog.link(ca); - -} -catch (InvalidRequestException ire) -{ - task.out.println("Invalid request on link - INVREQ"); -} -catch (CicsConditionException cce) -{ - throw new RuntimeException(cce); -} -``` - -## Channels and containers - -The other method of passing data from one CICS program to another is by using channels and containers. A channel is an interface between programs, it typically holds one or more containers to be passed between the programs. A container is a named data area. Channels and containers offer the advantage that more than 32KB of data can be passed, and both character and binary data can be specified. Character data (or strings in Java terms) is automatically converted at the API level, whereas binary data (or a byte array in Java terms) is flowed unconverted. By contrast, COMMAREAs are confined to a 32KB limit and are unstructured byte arrays. Multiple containers can be passed between programs within a channel, providing a high degree of flexibility about how to structure data. - -The following abbreviated code snippet shows how to use channels and containers to pass a character string input container on a LINK and then to retrieve and read both a character string and a binary container. A full working example is available in the [LinkProg3](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java) sample and the corresponding back end program is available at [LinkServEduchan](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java). - - -```java - - private static final String PROG_NAME = "EDUCHAN"; - private static final String CHANNEL="EDUCHAN"; - private static final String INPUT_CONTAINER="INPUTDATA"; - private static final String DATE_CONTAINER="CICSTIME"; - private static final String CICSRC_CONTAINER="CICSRC"; - private static final String INPUTSTRING="Hello from Java"; -.... - - Task task = Task.getTask(); - Program prog = new Program(); - prog.setName(PROG_NAME); -.... - - Channel testChannel = task.createChannel(CHANNEL); - Container inputContainer = testChannel.createContainer(INPUT_CONTAINER); - inputContainer.putString(INPUTSTRING); - - prog.link(testChannel); - - Container charContainer = testChannel.getContainer(DATE_CONTAINER); - if (charContainer!=null) - { - resultStr = charContainer.getString(); - } - - Container bitContainer = testChannel.getContainer(CICSRC_CONTAINER); - if (bitContainer!=null) - { - byte[] ba = bitContainer.get(); - ByteBuffer bb = ByteBuffer.wrap(ba); - cicsrc = bb.getInt(); - -``` - - -Lines **1\-6.** Initialize constants to define program name, and container data and names. -Line **14.** Create a `Channel` object which will be associated with the task. -Lines **15\-16.** Create the input container named `INPUTDATA`, the `createContainer()` method signature takes the String *Hello from Java* as input which will cause CICS to create a character based container as opposed to a binary container. The encoding of this data will be stored internally in UTF\-16 when created in Java in order to handle the Unicode String data, and will be automatically converted to the local EBCDIC encoding if read from a COBOL program. -Line **18.** Pass the channel as a reference on the `Program.link()` method, our invoked program [EDUCHAN](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/src/Cobol/EDUCHAN.cbl) will receive the `INPUTDATA` container, and will reverse the input data, and return the formatted time in a character container along with an integer return code in a binary container. -Lines **20\-23.** Create a new container object `charContainer` and get the character container defined as CICSTIME from the channel. This will return null (rather than throw a CICSConditionException which is the usual JCICS error model) if it does not exist, so we first test for null before reading the string data from it using the `Container.getString()` method. -Lines **26\-32.** Create a new container object `bitContainer` and get the binary container defined as CICSRC from the channel. Again this could return null if its not present so we first test for null. Next we create a byte array and get the data from the `bitContainer`. The data is actually a 32\-bit integer from a CICS response code, so we need to wrap this into a `ByteBuffer` and then read the integer from this. - -## TS and TD queues - -A temporary storage (TS) queue is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically created at runtime, unlike transient data (TD) queues that must be defined in advance. - -The following snippets show how to use the *TSQ* class to write string data to a TSQ and then read it back using a JCICS holder. A full working example of this code available in the [TSQExample2](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java) sample. - -```java -public class TSQExample2 extends TSQCommon -{ - private static final String TSQ_NAME = "MYTSQ"; - private static final int DEPTH_COUNT = 5; - private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); - - public static void main(String[] args) - { - TSQ tsq = new TSQ(); - tsq.setName(TSQ_NAME); - tsq.setType(TSQType.MAIN); - - for (int i = 1; i <= DEPTH_COUNT; i++) - { - - String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); - byte[] data; - try - { - data = msg.getBytes(CCSID); - } - catch (UnsupportedEncodingException uee) - { - throw new RuntimeException(uee); - } - try { - this.tsq.writeItem(data); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } - } - } -``` - - -Lines **3\-5.** Initialize constants -Lines **9\-11.** Create `TSQ` object and set TSQ name and storage type as MAIN (in memory) -Line **13.** Loop around writing multiple records to the TSQ -Lines **17\-21.** Create byte array from the input string using the CICS encoding -Line **27.** Write each item to the TSQ using the `TSQ.writeItem()` method - -The following method `readFromQueue()` shows how to use a JCICS `ItemHolder` to read bytes from a TSQ. - -```java -public void readFromQueue() -{ - ItemHolder holder = new ItemHolder(); - - for (int i = 1; i <= DEPTH_COUNT; i++) - { - - try - { - this.tsq.readItem(i, holder); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } - - byte[] data = holder.getValue(); - String strData; - try - { - strData = new String(data, CCSID); - } - catch (UnsupportedEncodingException uee) - { - throw new RuntimeException(uee); - } - .... - } -} -``` - - -Line **3.** Create a JCICS `ItemHolder` to be used to read bytes from the TSQ -Line **10.** Use the `TSQ.readItem()` method to loop around reading items from the TSQ into the ItemHolder, starting from an index of 1 as this is the first record in a TS queue > -Line **17.** Extract the byte array from the item holder -Line **21.** Create a new string using the CICS encoding - -Writing data to a TD queue is similar to TS and a set of examples is provided in the [com.ibm.cicsdev.tdq](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.tdq) project. - -## VSAM files - -VSAM is a high performance file storage access method widely used in CICS applications. There are 3 different types of VSAM files, key\-sequenced, entry\-sequence and relative record. In this article we will just cover the most popular type the key\-sequenced data set (KSDS) which is represented in JCICS via the *KSDS* class. - -The following snippets show how to use the KSDS class to read and write structured records to VSAM file. In this example a `StockPart` record is used to represent the structured record, and was created from a COBOL copybook structure using the [JZOS record generation](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/) tool. A full working example of this code is available in the [KsdsExample1](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds) sample which extends the class KsdsExampleCommon. - -```java -private static final String FILE_NAME = "XMPLKSDS"; -private final KSDS ksds; -.... - -public void addRecord(StockPart sp) -{ - this.ksds = new KSDS(); - this.ksds.setName(FILE_NAME); - byte[] record = sp.getByteBuffer(); - - byte[] key = StockPartHelper.getKey(sp); - - try - { - this.ksds.write(key, record); - } - catch (DuplicateRecordException dre) - { // Collision on the generated key - String strMsg = "Tried to insert duplicate key 0x%08X"; - Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); - throw new RuntimeException(dre); - } - catch (InvalidRequestException ire) - { - if ( ire.getRESP2() == 20 ) // File not addable - { - String strMsg = "Add operations not permitted for file %s"; - Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); - } - // Throw an exception to rollback the current UoW - throw new RuntimeException(ire); - } - catch (CicsConditionException cce) - { - throw new RuntimeException(cce); - } -} -``` - - -Line **9.** Get the byte structure from the generated record using the getByteBuffer() method on the StockPark record -Line **11.** Create a byte array containing the key for this record -Line **15.** Write the record into the VSAM file using the specified key -Lines **17&23.** Catch specific responses from the WRITE FILE commmand -Line **33.** Catch all other responses and throw an exception to abend the task - -## Unchecked exceptions, abends and rollbacks - -In Java unexpected error conditions are represented by Java classes which extend the `RuntimeException` class, and are known as *unchecked exceptions*. Unchecked exceptions are not subject to the compile time checking mandated for checked exceptions, although they can be caught if required. There are only a few unchecked exceptions in the JCICS API, and they all extend the `CICSRuntimeException` class. - -![JavaExceptions](graphics/JavaExceptions-1-e1484928035395.png) - -All of these unchecked exceptions that extend `CICSRuntimeException` represent conditions within CICS that should **not** generally be handled by an application. Java code running in CICS should not catch these exceptions without re\-throwing them, either explicitly in a catch block, or implicitly by catching a superclass of these exceptions such as `Exception` or `Throwable` as shown below. - -```java -try -{ - ... -} -catch ( Exception e ) -{ - ... -} -``` - - -Instead, they should be allowed to propagate out of the Java environment and back to CICS, where the task will abend. Note, included in this list is `AbendException` which represents an abend of a CICS task, and should only be caught if you wish to develop your own Java abend handling routine and re\-throw the Exception. If a Java exception such as a null pointer exception is allowed to propagate out of the Java code and back to the JVM server runtime, this is generally surfaced as one of the CICS abends prefixed with AJ. Most commonly, an uncaught exception will result in an AJ04 abend, and the transaction will be rolled\-back. The following snippet shows how to catch and log both trivial exceptions, CICS abends and other unchecked exceptions. - - -```java -try -{ -... -} -catch (TrivialException te) -{ - LOGGER.warn(); -} -catch (AbendException ae) -{ - LOGGER.warn("CICS Abend:" ae.getABCODE() + " Task:" + Task.getTask().getTaskNumber() ); - throw ae; -} -catch (Exception e) -{ - LOGGER.warn(); - throw e; -} -``` - -It is also possible for a Java application to rollback or abend the CICS task directly. This can be achieved using the `Task.rollback(`) or `Task.abend()` methods in the Task class, as shown in the LinkServEC01 sample. Abending the CICS task is similar in concept to the throwing of Java exception, as it allows a CICS abend handler written in COBOL (or another language) to take control of error processing. - - -```java -Task.getTask().abend(ABCODE) - -``` - -The various forms of the `Task.abend()` method allow an application to optionally specify an abend code or whether a dump is required. The forceAbend() methods provide the same options as the equivalent abend methods, but are equivalent to specifying the CANCEL keyword on the EXEC CICS ABEND command. Invoking a force abend method will always terminate the task abnormally, and overrides any existing CICS abend handlers that have been established for the task. - -Rolling back the transaction is equivalent to issuing an `EXEC CICS SYNCPOINT ROLLBACK` command, and will allow the task to continue but rollback all the updates that have taken place so far in the current unit\-of\-work. In JCICS this is achieved using the `Task.rollback()` method as shown below. - - -```java -try -{ - Task.getTask().rollback(); -} -catch (InvalidRequestException ire) -{ - ..... -} -``` - - -> **Note**: When accessing resources controlled by the Liberty transaction manager, such as a remote DB2 database using JDBC type 4 connectivity then it is necessary to use the Java transaction API (JTA) to create a Java transaction to control the global transaction scope, including the subordinate CICS unit\-of\-work. In this case it is not possible to use the `Task.rollback()` method and instead the JTA API should be used. For further details refer to this article [Using Java Transaction in CICS Liberty to coordinate JDBC updates](https://github.com/cicsdev/blog-cics-java-jta-jdbc/blob/main/blog.md). - ---- - -### Reference materials - -All the sample code for this tutorial is available at the following CICSDev GitHub repository [cics\-java\-jcics\-samples](https://github.com/cicsdev/cics-java-jcics-samples). - -For a more detailed discussion of JCICS and how to use it to integrate Java applications with CICS programs refer to the following Video Education course [Extending a CICS web application using JCICS](http://www.redbooks.ibm.com/redbooks.nsf/redbookabstracts/crse0302.html?Open) diff --git a/blog/graphics/JCICS.png b/blog/graphics/JCICS.png deleted file mode 100644 index 71d5e5a3164615ff2ba3c1e63b0a78ee7d278a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17914 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 Ksp4mb{{I^m$nn4c diff --git a/blog/graphics/JavaExceptions-1-e1484928035395.png b/blog/graphics/JavaExceptions-1-e1484928035395.png deleted file mode 100644 index cc83f76f57a23d4f7949db9983d33077ed5cf010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155288 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

?hw1zo{OIu__kfbtV*CfMBoVGkN1Cz9LGWh{ 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 Date: Mon, 2 Mar 2026 15:30:52 +0000 Subject: [PATCH 19/73] Gradle updates --- build.gradle | 3 ++- cics-java-jcics-link-app/build.gradle | 30 +++++++++++++++++++--- cics-java-jcics-serialize-app/build.gradle | 15 +++++++---- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 7cb1b68..b40330d 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ description = 'CICS Java JCICS samples' allprojects { group = 'com.ibm.cicsdev' - version = '1.0.0' + version = '1.0.1' repositories { @@ -20,6 +20,7 @@ allprojects { //Define the CICS Bill of Materials for compilation ext { bom = "com.ibm.cics:com.ibm.cics.ts.bom:5.5-20200519131930-PH25409" + java_version=JavaVersion.VERSION_17 } diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index 3c986ae..187347f 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -1,15 +1,21 @@ plugins { id 'java' + id 'biz.aQute.bnd.builder' version '6.3.0' } description = 'CICS Java JCICS link sample - Application' java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = java_version + targetCompatibility = java_version } +configurations { + jarLibs +} + + dependencies { // Use the CICS TS BOM to set the JCICS library version @@ -19,12 +25,14 @@ dependencies { compileOnly("com.ibm.cics:com.ibm.cics.server") //Compile using the IRG generated JAR from the local maven repo - implementation ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") - + implementation ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") + } + // Manually add the OSGI manifest using the sample provided +/* jar { manifest { from '../etc/Link/META-INF/MANIFEST.MF' @@ -33,3 +41,17 @@ jar { include 'lib/**' } } +*/ +jar { + bundle{ + bnd ( + 'CICS-MainClass': 'com.ibm.cicsdev.link.LinkProg1, com.ibm.cicsdev.link.LinkProg2, com.ibm.cicsdev.link.LinkProg3, com.ibm.cicsdev.link.LinkServEduchan, com.ibm.cicsdev.link.LinkServEC01', + 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)", com.ibm.jzos.fields;resolution:=optional', + 'Bundle-ClassPath': 'lib/cics-java-jcics-edupgm-1.0.jar, .' + ) + } + from("../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0") { + include '**.jar' + into "lib" + } +} diff --git a/cics-java-jcics-serialize-app/build.gradle b/cics-java-jcics-serialize-app/build.gradle index e877240..0805491 100644 --- a/cics-java-jcics-serialize-app/build.gradle +++ b/cics-java-jcics-serialize-app/build.gradle @@ -1,6 +1,8 @@ plugins { id 'java' id 'eclipse' + id 'biz.aQute.bnd.builder' version '6.3.0' + } description = 'CICS Java JCICS serialize sample - Application' @@ -16,8 +18,8 @@ eclipse java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = java_version + targetCompatibility = java_version } dependencies { @@ -26,7 +28,10 @@ dependencies { } jar { - manifest { - from '../etc/Serialize/META-INF/MANIFEST.MF' - } + bundle{ + bnd ( + 'CICS-MainClass': 'com.ibm.cicsdev.serialize.SerializeExample1', + 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)"' + ) + } } \ No newline at end of file From 6d0612089bf443e8f956f413eddac7beb3d517c1 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 2 Mar 2026 15:31:03 +0000 Subject: [PATCH 20/73] README update --- cics-java-jcics-link-app/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cics-java-jcics-link-app/README.md b/cics-java-jcics-link-app/README.md index fc43002..8a1c58a 100644 --- a/cics-java-jcics-link-app/README.md +++ b/cics-java-jcics-link-app/README.md @@ -15,10 +15,11 @@ The following Java source code files are provided: ## Supporting files -* `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/). -* [`/etc/Link`](../../etc/Link) - Contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. -* [`/src/Cobol`](../../src/Cobol) - Contains the COBOL programs `EC01` and `EDUCHAN` required by these samples. -* [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) - Repository containing the source code for the `EDUPGM` COBOL program. +* [`/etc/Link`](../etc/Link) - DFHCSDUP input files needed to define the required programs and transactions. +* [`/src/Cobol`](../etc/src/Cobol) - COBOL programs `EC01` and `EDUCHAN` required by these samples. +* `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/) and the source is available in the [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) repository. + + ## Configuring CICS From 8b82804bfbb13de4ee8f298df01cb96c5fa51692 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 2 Mar 2026 15:31:18 +0000 Subject: [PATCH 21/73] Java prereq in manifest --- etc/Link/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/Link/META-INF/MANIFEST.MF b/etc/Link/META-INF/MANIFEST.MF index 5528c87..6dcebf6 100644 --- a/etc/Link/META-INF/MANIFEST.MF +++ b/etc/Link/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Sample JCICS code for use of LINK Bundle-SymbolicName: com.ibm.cicsdev.link Bundle-Version: 1.0.1 Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-17 CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, com.ibm.cicsdev.link.LinkProg2, com.ibm.cicsdev.link.LinkProg3, From 9bdbadebe323d4c111e47525b73efab59b2032b8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 4 Mar 2026 16:29:03 +0000 Subject: [PATCH 22/73] Update .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6b95ec8..7643e37 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ buildNumber.properties **/build/ !src/**/build/ +#Eclipse ignores +bin/ + # Ignore Gradle GUI config gradle-app.setting From 938839a52d3160b4c8d69fc4d150808e92ccc07f Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 4 Mar 2026 16:29:39 +0000 Subject: [PATCH 23/73] Update build.gradle --- cics-java-jcics-link-app/build.gradle | 29 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index 187347f..04009bd 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -3,6 +3,7 @@ plugins { id 'biz.aQute.bnd.builder' version '6.3.0' } + description = 'CICS Java JCICS link sample - Application' java @@ -42,16 +43,30 @@ jar { } } */ + +// from("../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0") { +// include '**.jar' +// into "lib" +// } + +//'Bundle-ClassPath': 'lib/cics-java-jcics-edupgm-1.0.jar, .', + +// "-plugin.maven": "aQute.bnd.repository.maven.provider.MavenBndRepository; name=local-repo; local=../local-repo/", +// "-includeresource": "lib/cics-java-jcics-edupgm-1.0.jar=../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar; lib:=true" + + + + + jar { - bundle{ + bundle { bnd ( + 'Bundle-SymbolicName': 'com.ibm.cicsdev.link', + 'Bundle-Version': '1.0.1', 'CICS-MainClass': 'com.ibm.cicsdev.link.LinkProg1, com.ibm.cicsdev.link.LinkProg2, com.ibm.cicsdev.link.LinkProg3, com.ibm.cicsdev.link.LinkServEduchan, com.ibm.cicsdev.link.LinkServEC01', - 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)", com.ibm.jzos.fields;resolution:=optional', - 'Bundle-ClassPath': 'lib/cics-java-jcics-edupgm-1.0.jar, .' + 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)", com.ibm.jzos.fields;resolution:=optional', + "-includeresource": "lib/cics-java-jcics-edupgm-1.0.jar=../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar; lib:=true" ) } - from("../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0") { - include '**.jar' - into "lib" - } + } From 27d6d49386387e0c3e0b1f6fe1d9940126193dcd Mon Sep 17 00:00:00 2001 From: Stew Francis Date: Thu, 5 Mar 2026 08:44:11 +0000 Subject: [PATCH 24/73] repo uris don't like relative paths (#24) --- .gitignore | 4 ++-- build.gradle | 6 +++++- cics-java-jcics-link-app/build.gradle | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7643e37..2a5c0be 100644 --- a/.gitignore +++ b/.gitignore @@ -21,8 +21,6 @@ bin/ # Ignore Gradle GUI config gradle-app.setting -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar # Avoid ignore Gradle wrappper properties !gradle-wrapper.properties @@ -46,6 +44,8 @@ gradle-app.setting *.tar.gz *.rar +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar # VSCode ignores .vscode/* diff --git a/build.gradle b/build.gradle index b40330d..7dda3b2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,10 @@ description = 'CICS Java JCICS samples' +ext { + localRepo = file('local-repo') +} + allprojects { group = 'com.ibm.cicsdev' version = '1.0.1' @@ -11,7 +15,7 @@ allprojects { // Local Maven repo for IRG generated file maven { - url = uri("file:///../local-repo") + url = uri("file://${localRepo}") } } } diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index 04009bd..bb63b8c 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -28,7 +28,7 @@ dependencies { //Compile using the IRG generated JAR from the local maven repo implementation ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") - } +} From a13eae01d0246ca1eb7248528a640c1c50c22007 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 08:55:01 +0000 Subject: [PATCH 25/73] build.gradle and wrapper --- build.gradle | 12 ++++-------- gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes 2 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 gradle/wrapper/gradle-wrapper.jar diff --git a/build.gradle b/build.gradle index 7dda3b2..1cb0b33 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,11 @@ description = 'CICS Java JCICS samples' +//Define variables for sub projects ext { - localRepo = file('local-repo') + bom = "com.ibm.cics:com.ibm.cics.ts.bom:5.5-20200519131930-PH25409" + java_version=JavaVersion.VERSION_17 + localRepo = file('local-repo') } allprojects { @@ -21,11 +24,4 @@ allprojects { } -//Define the CICS Bill of Materials for compilation -ext { - bom = "com.ibm.cics:com.ibm.cics.ts.bom:5.5-20200519131930-PH25409" - java_version=JavaVersion.VERSION_17 -} - - diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 Date: Thu, 5 Mar 2026 13:17:58 +0000 Subject: [PATCH 26/73] Remove archive of eclipse projects --- .../com.ibm.cicsdev.link.cicsbundle/.project | 29 ---------------- .../org.eclipse.core.resources.prefs | 3 -- .../META-INF/cics.xml | 8 ----- .../com.ibm.cicsdev.link.osgibundle | 2 -- .../.project | 29 ---------------- .../org.eclipse.core.resources.prefs | 2 -- .../JAVALIN1.program | 1 - .../JAVALIN2.program | 1 - .../JAVALIN3.program | 1 - .../JLN1.transaction | 1 - .../JLN2.transaction | 1 - .../JLN3.transaction | 1 - .../META-INF/cics.xml | 13 -------- .../.project | 33 ------------------- .../org.eclipse.core.resources.prefs | 3 -- .../META-INF/cics.xml | 8 ----- .../com.ibm.cicsdev.serialize.osgibundle | 2 -- .../.project | 33 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../JAVASYN1.program | 1 - .../JSY1.transaction | 1 - .../META-INF/cics.xml | 9 ----- 22 files changed, 184 deletions(-) delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction delete mode 100644 etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project deleted file mode 100644 index cbdae67..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.link.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 6a6ff5e..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.link.osgibundle=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 4fd7191..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-11-04T15:14:04.215Z - - - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle b/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle deleted file mode 100644 index 5f6b476..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project deleted file mode 100644 index 04b7f91..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.link.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program deleted file mode 100644 index e346795..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program deleted file mode 100644 index 504f77f..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program deleted file mode 100644 index 4e5d133..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction deleted file mode 100644 index c8703cc..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction deleted file mode 100644 index 461d4d3..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction deleted file mode 100644 index c25d8e7..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 222a486..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - 2016-11-11T10:54:14.028Z - - - - - - - - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project deleted file mode 100644 index b61da14..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.serialize.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.serialize.cicsbundle - - - majorVersion - 1 - - - microVersion - 0 - - - minorVersion - 0 - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index d6abd2d..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 -encoding/com.ibm.cicsdev.serialize.osgibundle=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml deleted file mode 100644 index eca6125..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2016-12-13T15:47:28.565Z - - - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle deleted file mode 100644 index 697c985..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project deleted file mode 100644 index 6c207f0..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - com.ibm.cicsdev.serialize.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - com.ibm.cicsdev.serialize.resources.cicsbundle - - - majorVersion - 1 - - - microVersion - 0 - - - minorVersion - 0 - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8ddaf77..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program deleted file mode 100644 index cd5b93c..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction deleted file mode 100644 index 4f53b8f..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml b/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml deleted file mode 100644 index 382b4ca..0000000 --- a/etc/eclipse_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 2016-12-13T15:49:54.727Z - - - - - From c2ad6728aa7e64483bc9152d9613de99bafb39e8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 13:18:09 +0000 Subject: [PATCH 27/73] Add gradle wrapper --- gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 From c8e093d5fcdc4aed9b985a4362fd08ed7650e8ef Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 13:18:48 +0000 Subject: [PATCH 28/73] Add eclipse properties --- cics-java-jcics-link-app/.classpath | 52 +++++++++++++++++++ cics-java-jcics-link-app/.project | 45 ++++++++++++++++ .../org.eclipse.buildship.core.prefs | 13 +++++ .../org.eclipse.core.resources.prefs | 3 ++ .../.settings/org.eclipse.jdt.apt.core.prefs | 5 ++ .../.settings/org.eclipse.jdt.core.prefs | 16 ++++++ .../.settings/org.eclipse.m2e.core.prefs | 4 ++ cics-java-jcics-link-app/META-INF/MANIFEST.MF | 18 +++++++ cics-java-jcics-link-app/build.gradle | 48 +++-------------- cics-java-jcics-link-app/build.properties | 6 +++ 10 files changed, 169 insertions(+), 41 deletions(-) create mode 100644 cics-java-jcics-link-app/.classpath create mode 100644 cics-java-jcics-link-app/.project create mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-link-app/META-INF/MANIFEST.MF create mode 100644 cics-java-jcics-link-app/build.properties diff --git a/cics-java-jcics-link-app/.classpath b/cics-java-jcics-link-app/.classpath new file mode 100644 index 0000000..1a70f43 --- /dev/null +++ b/cics-java-jcics-link-app/.classpath @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cics-java-jcics-link-app/.project b/cics-java-jcics-link-app/.project new file mode 100644 index 0000000..0bfac64 --- /dev/null +++ b/cics-java-jcics-link-app/.project @@ -0,0 +1,45 @@ + + + cics-java-jcics-link-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + org.eclipse.pde.PluginNature + + diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..60b1463 --- /dev/null +++ b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false \ No newline at end of file diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/cics-java-jcics-link-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..fa6bcfb --- /dev/null +++ b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ecb498c --- /dev/null +++ b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,16 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-link-app/META-INF/MANIFEST.MF b/cics-java-jcics-link-app/META-INF/MANIFEST.MF new file mode 100644 index 0000000..6dcebf6 --- /dev/null +++ b/cics-java-jcics-link-app/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS code for use of LINK +Bundle-SymbolicName: com.ibm.cicsdev.link +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-17 +CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, + com.ibm.cicsdev.link.LinkProg2, + com.ibm.cicsdev.link.LinkProg3, + com.ibm.cicsdev.link.LinkServEduchan, + com.ibm.cicsdev.link.LinkServEC01 +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", + com.ibm.jzos.fields;resolution:=optional +Automatic-Module-Name: com.ibm.cicsdev.link +Bundle-ClassPath: lib/cics-java-jcics-edupgm-1.0.jar, + . + diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index bb63b8c..4fb3adf 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -1,6 +1,5 @@ plugins { - id 'java' - id 'biz.aQute.bnd.builder' version '6.3.0' + id 'java' } @@ -12,10 +11,6 @@ java targetCompatibility = java_version } -configurations { - jarLibs -} - dependencies { @@ -31,42 +26,13 @@ dependencies { } - -// Manually add the OSGI manifest using the sample provided -/* +// Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo jar { manifest { - from '../etc/Link/META-INF/MANIFEST.MF' + from 'META-INF/MANIFEST.MF' } - from("$projectDir") { - include 'lib/**' - } -} -*/ - -// from("../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0") { -// include '**.jar' -// into "lib" -// } - -//'Bundle-ClassPath': 'lib/cics-java-jcics-edupgm-1.0.jar, .', - -// "-plugin.maven": "aQute.bnd.repository.maven.provider.MavenBndRepository; name=local-repo; local=../local-repo/", -// "-includeresource": "lib/cics-java-jcics-edupgm-1.0.jar=../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar; lib:=true" - - - - - -jar { - bundle { - bnd ( - 'Bundle-SymbolicName': 'com.ibm.cicsdev.link', - 'Bundle-Version': '1.0.1', - 'CICS-MainClass': 'com.ibm.cicsdev.link.LinkProg1, com.ibm.cicsdev.link.LinkProg2, com.ibm.cicsdev.link.LinkProg3, com.ibm.cicsdev.link.LinkServEduchan, com.ibm.cicsdev.link.LinkServEC01', - 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)", com.ibm.jzos.fields;resolution:=optional', - "-includeresource": "lib/cics-java-jcics-edupgm-1.0.jar=../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar; lib:=true" - ) - } - + from("${localRepo}/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0") { + include '**.jar' + into "lib" + } } diff --git a/cics-java-jcics-link-app/build.properties b/cics-java-jcics-link-app/build.properties new file mode 100644 index 0000000..266da4f --- /dev/null +++ b/cics-java-jcics-link-app/build.properties @@ -0,0 +1,6 @@ +bin.includes = META-INF/,\ + .,\ + lib/ +source.. = src/main/java/,\ + .apt_generated/ +jre.compilation.profile = JavaSE-1.8 From b5347a6fd9b5f7411ea1b13a21f32fa38ca64dea Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 13:19:01 +0000 Subject: [PATCH 29/73] Update pom --- cics-java-jcics-link-app/pom.xml | 73 ++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index dfffe0f..511c24e 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -10,7 +10,7 @@ cics-java-jcics-link-app - bundle + jar CICS Java JCICS link sample - Application @@ -30,43 +30,62 @@ com.ibm.cics.server - + com.ibm.cicsdev cics-java-jcics-edupgm 1.0 - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.15.0 + + - org.apache.felix - maven-bundle-plugin - 6.0.0 - true + org.apache.maven.plugins + maven-resources-plugin + 3.4.0 + + + copy-external-jars-into-lib + process-resources + + copy-resources + + + ${project.build.outputDirectory}/lib + + + ./lib + + **/*.jar + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.0 - - true - - com.ibm.cics.server;version="[1.700.0,3.0.0)",com.ibm.jzos.fields;resolution:=optional - - - - cics-java-jcics-edupgm - lib - ${bundle.symbolicName} - ${project.version} - com.ibm.cicsdev.link.LinkProg1, - com.ibm.cicsdev.link.LinkProg2, - com.ibm.cicsdev.link.LinkProg3, - com.ibm.cicsdev.link.LinkServEduchan, - com.ibm.cicsdev.link.LinkServEC01 - - + + META-INF/MANIFEST.MF + - - + + + \ No newline at end of file From c8314970107071191504db07d8d46c2d0ce6808c Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 14:04:47 +0000 Subject: [PATCH 30/73] Eclipse project updates --- cics-java-jcics-link-app/.classpath | 1 + cics-java-jcics-link-app/META-INF/MANIFEST.MF | 1 - cics-java-jcics-link-app/build.properties | 7 +++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cics-java-jcics-link-app/.classpath b/cics-java-jcics-link-app/.classpath index 1a70f43..5cfca5b 100644 --- a/cics-java-jcics-link-app/.classpath +++ b/cics-java-jcics-link-app/.classpath @@ -6,6 +6,7 @@ + diff --git a/cics-java-jcics-link-app/META-INF/MANIFEST.MF b/cics-java-jcics-link-app/META-INF/MANIFEST.MF index 6dcebf6..8fd55a0 100644 --- a/cics-java-jcics-link-app/META-INF/MANIFEST.MF +++ b/cics-java-jcics-link-app/META-INF/MANIFEST.MF @@ -15,4 +15,3 @@ Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", Automatic-Module-Name: com.ibm.cicsdev.link Bundle-ClassPath: lib/cics-java-jcics-edupgm-1.0.jar, . - diff --git a/cics-java-jcics-link-app/build.properties b/cics-java-jcics-link-app/build.properties index 266da4f..916ff2a 100644 --- a/cics-java-jcics-link-app/build.properties +++ b/cics-java-jcics-link-app/build.properties @@ -1,6 +1,9 @@ bin.includes = META-INF/,\ .,\ - lib/ + lib/,\ + lib/cics-java-jcics-edupgm-1.0.jar source.. = src/main/java/,\ .apt_generated/ -jre.compilation.profile = JavaSE-1.8 +jre.compilation.profile = JavaSE-17 +jars.compile.order = .,\ + lib/cics-java-jcics-edupgm-1.0.jar From bae4cfb7f34f4cfdb5930200b752fb93209c87e8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 5 Mar 2026 17:26:55 +0000 Subject: [PATCH 31/73] Eclipse and pom updates --- .project | 34 +++++++++++ .settings/org.eclipse.buildship.core.prefs | 13 +++++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 15 +++++ .vscode/settings.json | 3 + cics-java-jcics-link-app/.classpath | 48 ++-------------- cics-java-jcics-link-app/.project | 11 ++++ .../org.eclipse.buildship.core.prefs | 14 ++--- cics-java-jcics-link-app/META-INF/MANIFEST.MF | 4 +- cics-java-jcics-link-app/pom.xml | 28 ++++------ cics-java-jcics-link-bundle/.project | 34 +++++++++++ .../org.eclipse.buildship.core.prefs | 13 +++++ .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 ++ cics-java-jcics-serialize-app/.classpath | 43 ++++++++++++++ cics-java-jcics-serialize-app/.project | 56 +++++++++++++++++++ .../org.eclipse.buildship.core.prefs | 13 +++++ .../org.eclipse.core.resources.prefs | 6 ++ .../.settings/org.eclipse.jdt.apt.core.prefs | 5 ++ .../.settings/org.eclipse.jdt.core.prefs | 16 ++++++ .../.settings/org.eclipse.m2e.core.prefs | 4 ++ .../META-INF/MANIFEST.MF | 0 cics-java-jcics-serialize-app/build.gradle | 34 +++++------ .../build.properties | 6 ++ cics-java-jcics-serialize-app/pom.xml | 40 +++++-------- cics-java-jcics-serialize-bundle/.project | 17 ++++++ .../org.eclipse.buildship.core.prefs | 13 +++++ etc/Link/META-INF/MANIFEST.MF | 18 ------ pom.xml | 22 ++++---- 30 files changed, 378 insertions(+), 142 deletions(-) create mode 100644 .project create mode 100644 .settings/org.eclipse.buildship.core.prefs create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .vscode/settings.json create mode 100644 cics-java-jcics-link-bundle/.project create mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-serialize-app/.classpath create mode 100644 cics-java-jcics-serialize-app/.project create mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs rename {etc/Serialize => cics-java-jcics-serialize-app}/META-INF/MANIFEST.MF (100%) create mode 100644 cics-java-jcics-serialize-app/build.properties create mode 100644 cics-java-jcics-serialize-bundle/.project create mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 etc/Link/META-INF/MANIFEST.MF diff --git a/.project b/.project new file mode 100644 index 0000000..1f07a2c --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ + + + cics-java-jcics-samples + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + + + + 1772729611934 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..d7b0045 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=cics-java-jcics-samples +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..896a9a5 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 \ No newline at end of file diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..a361f77 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0e14d8e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "disabled" +} \ No newline at end of file diff --git a/cics-java-jcics-link-app/.classpath b/cics-java-jcics-link-app/.classpath index 5cfca5b..1016f15 100644 --- a/cics-java-jcics-link-app/.classpath +++ b/cics-java-jcics-link-app/.classpath @@ -1,53 +1,17 @@ - + - - - - - - - - + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/cics-java-jcics-link-app/.project b/cics-java-jcics-link-app/.project index 0bfac64..43610b0 100644 --- a/cics-java-jcics-link-app/.project +++ b/cics-java-jcics-link-app/.project @@ -42,4 +42,15 @@ org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature + + + 1772729611886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs index 60b1463..f9fd529 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ -arguments= +arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= +connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.project.dir=../cics-java-jcics-serialize-bundle eclipse.preferences.version=1 gradle.user.home= -java.home= +java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk jvm.arguments= offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false \ No newline at end of file +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/cics-java-jcics-link-app/META-INF/MANIFEST.MF b/cics-java-jcics-link-app/META-INF/MANIFEST.MF index 8fd55a0..2e8727f 100644 --- a/cics-java-jcics-link-app/META-INF/MANIFEST.MF +++ b/cics-java-jcics-link-app/META-INF/MANIFEST.MF @@ -6,8 +6,8 @@ Bundle-Version: 1.0.1 Bundle-Vendor: IBM Bundle-RequiredExecutionEnvironment: JavaSE-17 CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, - com.ibm.cicsdev.link.LinkProg2, - com.ibm.cicsdev.link.LinkProg3, + com.ibm.cicsdev.link.LinkProg2, + com.ibm.cicsdev.link.LinkProg3, com.ibm.cicsdev.link.LinkServEduchan, com.ibm.cicsdev.link.LinkServEC01 Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index 511c24e..ba0ef1f 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -11,13 +11,13 @@ cics-java-jcics-link-app jar - CICS Java JCICS link sample - Application - - + CICS Java JCICS link sample - Applicatio + + cics-java-jcics-edupgm Project libraries - file://${project.basedir}/local-repo + file://../local-repo ignore @@ -29,9 +29,8 @@ com.ibm.cics com.ibm.cics.server - - + + com.ibm.cicsdev cics-java-jcics-edupgm @@ -41,13 +40,12 @@ - org.apache.maven.plugins maven-compiler-plugin - 3.15.0 + 3.12.1 - + org.apache.maven.plugins maven-resources-plugin @@ -59,33 +57,31 @@ copy-resources - + ${project.build.outputDirectory}/lib ./lib **/*.jar - + - + org.apache.maven.plugins maven-jar-plugin - 3.5.0 + 3.3.0 META-INF/MANIFEST.MF - - \ No newline at end of file diff --git a/cics-java-jcics-link-bundle/.project b/cics-java-jcics-link-bundle/.project new file mode 100644 index 0000000..178c2c7 --- /dev/null +++ b/cics-java-jcics-link-bundle/.project @@ -0,0 +1,34 @@ + + + cics-java-jcics-link-bundle + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + + + + 1772729611922 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..7643200 --- /dev/null +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=../cics-java-jcics-link-bundle +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..243b3fd --- /dev/null +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-serialize-app/.classpath b/cics-java-jcics-serialize-app/.classpath new file mode 100644 index 0000000..1eaa95b --- /dev/null +++ b/cics-java-jcics-serialize-app/.classpath @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cics-java-jcics-serialize-app/.project b/cics-java-jcics-serialize-app/.project new file mode 100644 index 0000000..b3cec1b --- /dev/null +++ b/cics-java-jcics-serialize-app/.project @@ -0,0 +1,56 @@ + + + cics-java-jcics-serialize-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + org.eclipse.pde.PluginNature + + + + 1772729611947 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..049aa3f --- /dev/null +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=../cics-java-jcics-serialize-app +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..fa6bcfb --- /dev/null +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ecb498c --- /dev/null +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,16 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/etc/Serialize/META-INF/MANIFEST.MF b/cics-java-jcics-serialize-app/META-INF/MANIFEST.MF similarity index 100% rename from etc/Serialize/META-INF/MANIFEST.MF rename to cics-java-jcics-serialize-app/META-INF/MANIFEST.MF diff --git a/cics-java-jcics-serialize-app/build.gradle b/cics-java-jcics-serialize-app/build.gradle index 0805491..d6df1ed 100644 --- a/cics-java-jcics-serialize-app/build.gradle +++ b/cics-java-jcics-serialize-app/build.gradle @@ -1,21 +1,9 @@ plugins { - id 'java' - id 'eclipse' - id 'biz.aQute.bnd.builder' version '6.3.0' - + id 'java' } description = 'CICS Java JCICS serialize sample - Application' -// If in Eclipse, add Javadoc to the local project classpath -eclipse -{ - classpath - { - downloadJavadoc = true - } -} - java { sourceCompatibility = java_version @@ -23,15 +11,19 @@ java } dependencies { - compileOnly enforcedPlatform(bom) - compileOnly 'com.ibm.cics:com.ibm.cics.server' + + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) + + // JCICS library + compileOnly("com.ibm.cics:com.ibm.cics.server") + } + +// Create OSGi bundle JAR, add the OSGI manifest jar { - bundle{ - bnd ( - 'CICS-MainClass': 'com.ibm.cicsdev.serialize.SerializeExample1', - 'Import-Package': 'com.ibm.cics.server;version="[1.700.0,3.0.0)"' - ) - } + manifest { + from 'META-INF/MANIFEST.MF' + } } \ No newline at end of file diff --git a/cics-java-jcics-serialize-app/build.properties b/cics-java-jcics-serialize-app/build.properties new file mode 100644 index 0000000..3a38e3a --- /dev/null +++ b/cics-java-jcics-serialize-app/build.properties @@ -0,0 +1,6 @@ +bin.includes = META-INF/,\ + . +source.. = src/main/java/,\ + .apt_generated/,\ + src/main/resources/ +jre.compilation.profile = JavaSE-17 diff --git a/cics-java-jcics-serialize-app/pom.xml b/cics-java-jcics-serialize-app/pom.xml index 9bc15e1..0f4b3f7 100644 --- a/cics-java-jcics-serialize-app/pom.xml +++ b/cics-java-jcics-serialize-app/pom.xml @@ -10,43 +10,33 @@ cics-java-jcics-serialize-app - bundle - CICS Java JCICS serialize sample - Application - - + jar + CICS Java JCICS serialize sample - Applicatio - com.ibm.cics com.ibm.cics.server - - + - org.apache.felix - maven-bundle-plugin - 6.0.0 - true + org.apache.maven.plugins + maven-compiler-plugin + 3.12.1 + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 - - true - - com.ibm.cics.server;version="[1.700.0,3.0.0)" - - - - ${bundle.symbolicName} - ${project.version} - com.ibm.cicsdev.serialize.SerializeExample1 - - + + META-INF/MANIFEST.MF + - - + \ No newline at end of file diff --git a/cics-java-jcics-serialize-bundle/.project b/cics-java-jcics-serialize-bundle/.project new file mode 100644 index 0000000..f35e43c --- /dev/null +++ b/cics-java-jcics-serialize-bundle/.project @@ -0,0 +1,17 @@ + + + cics-java-jcics-serialize-bundle + Project cics-java-jcics-serialize-bundle created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e479558 --- /dev/null +++ b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/etc/Link/META-INF/MANIFEST.MF b/etc/Link/META-INF/MANIFEST.MF deleted file mode 100644 index 6dcebf6..0000000 --- a/etc/Link/META-INF/MANIFEST.MF +++ /dev/null @@ -1,18 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Sample JCICS code for use of LINK -Bundle-SymbolicName: com.ibm.cicsdev.link -Bundle-Version: 1.0.1 -Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-17 -CICS-MainClass: com.ibm.cicsdev.link.LinkProg1, - com.ibm.cicsdev.link.LinkProg2, - com.ibm.cicsdev.link.LinkProg3, - com.ibm.cicsdev.link.LinkServEduchan, - com.ibm.cicsdev.link.LinkServEC01 -Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", - com.ibm.jzos.fields;resolution:=optional -Automatic-Module-Name: com.ibm.cicsdev.link -Bundle-ClassPath: lib/cics-java-jcics-edupgm-1.0.jar, - . - diff --git a/pom.xml b/pom.xml index 3a81eb8..fdbf2c5 100644 --- a/pom.xml +++ b/pom.xml @@ -24,17 +24,17 @@ - - - - com.ibm.cics - com.ibm.cics.ts.bom - 5.5-20200519131930-PH25409 - pom - import - - - + + + + com.ibm.cics + com.ibm.cics.ts.bom + 5.5-20200519131930-PH25409 + pom + import + + + cics-java-jcics-link-app From fe923536591038280daa81de3e69b2de8db5d0d8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 11 Mar 2026 13:55:29 +0000 Subject: [PATCH 32/73] Don't ignore JARs in local repo --- local-repo/.gitignore | 2 ++ .../1.0/cics-java-jcics-edupgm-1.0.jar | Bin 0 -> 2867 bytes 2 files changed, 2 insertions(+) create mode 100644 local-repo/.gitignore create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar diff --git a/local-repo/.gitignore b/local-repo/.gitignore new file mode 100644 index 0000000..5e1dd75 --- /dev/null +++ b/local-repo/.gitignore @@ -0,0 +1,2 @@ +# Avoid ignoring repo JARs +!*.jar diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar b/local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/1.0/cics-java-jcics-edupgm-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..13fe2e414ab88db91a12df197698fb6a64092c3f GIT binary patch literal 2867 zcmb7`c{CJUAIHa*Eo7$6)i&cXvUJQdCHPRHJB+y z7_!A6hKlUVpn0q>?|I+n>3Pn1|9HRm+;i_e_xt_*?m73L4;0M8Dg@x*-~i~@j$Q)% zB2EA+0AlW73beAeP}}PO09XJ}FgwSggZV!;=>H509XS3BLrkr$EX?g4R3R30NLS}& zFi^FZ2Mkp1?&_(tJ3F9B`;JltK~$_Dy%7Xf&b)bXMgJ&+Ka}-mM1{YJ%H;rr1J+Qh zD5ih6uc@m!ZhTPOZZZoZz_xaQ@be>CULJlb2nB9sUdsnaU+f*y3lx|(@>IeY6(S3dPBwB zDY)tz&X+dcIemtAEP0zM;Z1j3+Rm5c3;m;r%K-CUVln5DM_+hZ7s!a;-N-!TA9Yr0m7t`ptzQ+K6RxZ1^5Y9}uzzB7eiQvF8B<$ad|Sl6h#`~}J5}og zx?dJac)AK88YXB93b+I(dORYC^9^EcATJ-`Barm=yv_!%5M65l_uQi7w z{YI_V(leD~->N@Do;p4tz@#l!j6bEomzx&w#5(i5j^7Ee1Nn<@w!h8 z-g-)^oTgvi%Q78s^yUW@D?H^%H)8Rfk22y(qPU^kLzRWvy3H+}(M;-bWah++neQL5 zks%&ZH+C9>a)XYVr`(tnyKN(DHZpw{c`f)Sevb)I-Y*DCkaEVjt_Ed(dBjH?djgNPTVFTJ-e#2Du9+05BN zJ7%bjNNplvkmo8q>>;p9*H%%E%e7HXc5NU4Q7wHN=%cYFhfdiVek8O8PG0QHjR8p+Yv(BgAPU zO3mtFmsIlkQxY2ir`XxWQ@l) zEohGHZV?TFbSFKngIf|Umz%CEeVU=_Rm{qjX*ZS1mgQ!pudjg~mwqeBCG_$hr<)~B z)QndZYip;ZOO`nqJ~K`OS#E1(ZKf)98Cn3@U_NI^=ZM$WB+e^^dAHO|HY5>+lsh9@ z2(=Yp6%TaAylSY4Qw^Wj~`{q^Hhtk}vTC%IeoS*Z^rWod{CBJDnTik=HT99H@_Ye zXu@#8$D&^(L_YFQgQ?4iCEVkbzLUiir5~Zb$Sn(XwLBu6@$yGHDVul?ehc$caHqZ% zoxza0C|IRQ#}!RdvCdXx(RA9NK+L3;2&DLKn}*BIMJBq9Abs9yOB^H^2~g{ zlT{<3{AhqIeNLXU<>J+6R;qSlr28*AAVMUd5b2pLBX}Ah4`ivNutOD`T?nwDwLEhG z8VW$$0niUw^!$YZ?*{Dv8yX1)rxW1ifB0k?;TZQ2BZaxiL6|Pv z0>lL{BN8N@9OoD2T+JG2bA3XN8QJF8Vx}xZ)0ccMFv48CQZC-yIltN;EHg2~u@^nH z&Ab}-fHnSO*U#`Aq<7#R#6zwaw-r9v0TV$^b++zkaqitc=;z*a=jad!>0RK{+z}-> z3OTTP0jm3yt8D?*_5fr$4Vll<*lV}KtHhXlM0*OgET$p(7d2%WqrPP1bAd;R25Z=A z9qw`4_Mej2_*_P_C1yf_e6F1iBvW2Fpp)zb<|P067gXB|3M)X%y#53&vG!R2kS+y!_&V2lV$*w literal 0 HcmV?d00001 From 29f5518f9ae9498ef985975343e6eaf6d9f35da8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 11 Mar 2026 13:57:30 +0000 Subject: [PATCH 33/73] Don't ignore lib JARs --- cics-java-jcics-link-app/lib/.gitignore | 2 ++ .../lib/cics-java-jcics-edupgm-1.0.jar | Bin 0 -> 2867 bytes 2 files changed, 2 insertions(+) create mode 100644 cics-java-jcics-link-app/lib/.gitignore create mode 100644 cics-java-jcics-link-app/lib/cics-java-jcics-edupgm-1.0.jar diff --git a/cics-java-jcics-link-app/lib/.gitignore b/cics-java-jcics-link-app/lib/.gitignore new file mode 100644 index 0000000..5e1dd75 --- /dev/null +++ b/cics-java-jcics-link-app/lib/.gitignore @@ -0,0 +1,2 @@ +# Avoid ignoring repo JARs +!*.jar diff --git a/cics-java-jcics-link-app/lib/cics-java-jcics-edupgm-1.0.jar b/cics-java-jcics-link-app/lib/cics-java-jcics-edupgm-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..13fe2e414ab88db91a12df197698fb6a64092c3f GIT binary patch literal 2867 zcmb7`c{CJUAIHa*Eo7$6)i&cXvUJQdCHPRHJB+y z7_!A6hKlUVpn0q>?|I+n>3Pn1|9HRm+;i_e_xt_*?m73L4;0M8Dg@x*-~i~@j$Q)% zB2EA+0AlW73beAeP}}PO09XJ}FgwSggZV!;=>H509XS3BLrkr$EX?g4R3R30NLS}& zFi^FZ2Mkp1?&_(tJ3F9B`;JltK~$_Dy%7Xf&b)bXMgJ&+Ka}-mM1{YJ%H;rr1J+Qh zD5ih6uc@m!ZhTPOZZZoZz_xaQ@be>CULJlb2nB9sUdsnaU+f*y3lx|(@>IeY6(S3dPBwB zDY)tz&X+dcIemtAEP0zM;Z1j3+Rm5c3;m;r%K-CUVln5DM_+hZ7s!a;-N-!TA9Yr0m7t`ptzQ+K6RxZ1^5Y9}uzzB7eiQvF8B<$ad|Sl6h#`~}J5}og zx?dJac)AK88YXB93b+I(dORYC^9^EcATJ-`Barm=yv_!%5M65l_uQi7w z{YI_V(leD~->N@Do;p4tz@#l!j6bEomzx&w#5(i5j^7Ee1Nn<@w!h8 z-g-)^oTgvi%Q78s^yUW@D?H^%H)8Rfk22y(qPU^kLzRWvy3H+}(M;-bWah++neQL5 zks%&ZH+C9>a)XYVr`(tnyKN(DHZpw{c`f)Sevb)I-Y*DCkaEVjt_Ed(dBjH?djgNPTVFTJ-e#2Du9+05BN zJ7%bjNNplvkmo8q>>;p9*H%%E%e7HXc5NU4Q7wHN=%cYFhfdiVek8O8PG0QHjR8p+Yv(BgAPU zO3mtFmsIlkQxY2ir`XxWQ@l) zEohGHZV?TFbSFKngIf|Umz%CEeVU=_Rm{qjX*ZS1mgQ!pudjg~mwqeBCG_$hr<)~B z)QndZYip;ZOO`nqJ~K`OS#E1(ZKf)98Cn3@U_NI^=ZM$WB+e^^dAHO|HY5>+lsh9@ z2(=Yp6%TaAylSY4Qw^Wj~`{q^Hhtk}vTC%IeoS*Z^rWod{CBJDnTik=HT99H@_Ye zXu@#8$D&^(L_YFQgQ?4iCEVkbzLUiir5~Zb$Sn(XwLBu6@$yGHDVul?ehc$caHqZ% zoxza0C|IRQ#}!RdvCdXx(RA9NK+L3;2&DLKn}*BIMJBq9Abs9yOB^H^2~g{ zlT{<3{AhqIeNLXU<>J+6R;qSlr28*AAVMUd5b2pLBX}Ah4`ivNutOD`T?nwDwLEhG z8VW$$0niUw^!$YZ?*{Dv8yX1)rxW1ifB0k?;TZQ2BZaxiL6|Pv z0>lL{BN8N@9OoD2T+JG2bA3XN8QJF8Vx}xZ)0ccMFv48CQZC-yIltN;EHg2~u@^nH z&Ab}-fHnSO*U#`Aq<7#R#6zwaw-r9v0TV$^b++zkaqitc=;z*a=jad!>0RK{+z}-> z3OTTP0jm3yt8D?*_5fr$4Vll<*lV}KtHhXlM0*OgET$p(7d2%WqrPP1bAd;R25Z=A z9qw`4_Mej2_*_P_C1yf_e6F1iBvW2Fpp)zb<|P067gXB|3M)X%y#53&vG!R2kS+y!_&V2lV$*w literal 0 HcmV?d00001 From 89053f684a650f676c4e8772a53b70e13796e160 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 11 Mar 2026 15:11:24 +0000 Subject: [PATCH 34/73] Update .gitignore --- .gitignore | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.gitignore b/.gitignore index 2a5c0be..bc6a182 100644 --- a/.gitignore +++ b/.gitignore @@ -49,14 +49,5 @@ gradle-app.setting # VSCode ignores .vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code .history/ - -# Built Visual Studio Code Extensions *.vsix From 73a52260fc4eb794f37046911c91dbbaecada8c3 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 16 Mar 2026 11:16:57 +0000 Subject: [PATCH 35/73] Update build files --- cics-java-jcics-link-app/build.gradle | 11 ++++++++--- cics-java-jcics-link-app/pom.xml | 14 ++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index 4fb3adf..dfe0daa 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -11,6 +11,12 @@ java targetCompatibility = java_version } +// Add the IRG generate JAR as a repository +repositories { + flatDir { + dirs("lib") + } +} dependencies { @@ -20,12 +26,11 @@ dependencies { // JCICS library compileOnly("com.ibm.cics:com.ibm.cics.server") - //Compile using the IRG generated JAR from the local maven repo - implementation ("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") + //Compile using the IRG generated JAR from the local dir + implementation name: 'cics-java-jcics-edupgm', version: '1.0' } - // Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo jar { manifest { diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index ba0ef1f..39cf559 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -11,18 +11,20 @@ cics-java-jcics-link-app jar - CICS Java JCICS link sample - Applicatio - - + CICS Java JCICS link sample - Application + + + cics-java-jcics-edupgm Project libraries - file://../local-repo + file://local-repo - ignore + ignore - + + From c02208f7841fa76be0bdcc9af0b749ff02cccb0c Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 10:34:59 +0000 Subject: [PATCH 36/73] Add additional projects --- .gitignore | 9 +- .settings/org.eclipse.buildship.core.prefs | 4 +- README.md | 8 +- build.gradle | 11 +- cics-java-jcics-link-app/.classpath | 5 - .../org.eclipse.buildship.core.prefs | 4 +- .../.settings/org.eclipse.jdt.apt.core.prefs | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 1 + cics-java-jcics-link-app/README.md | 4 +- cics-java-jcics-link-app/build.gradle | 8 +- cics-java-jcics-link-app/pom.xml | 13 -- cics-java-jcics-link-app/src/main/.gitignore | 1 - .../org.eclipse.buildship.core.prefs | 2 +- .../org.eclipse.buildship.core.prefs | 2 +- cics-java-jcics-serialize-app/pom.xml | 2 +- cics-java-jcics-serialize-bundle/.project | 17 ++ .../org.eclipse.buildship.core.prefs | 2 +- .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-tdq-app/.classpath | 12 ++ cics-java-jcics-tdq-app/.project | 56 ++++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.apt.core.prefs | 5 + .../.settings/org.eclipse.jdt.core.prefs | 17 ++ .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-tdq-app/META-INF/MANIFEST.MF | 16 ++ cics-java-jcics-tdq-app/README.md | 72 ++++++++ cics-java-jcics-tdq-app/build.gradle | 44 +++++ cics-java-jcics-tdq-app/build.properties | 9 + cics-java-jcics-tdq-app/lib/.gitignore | 2 + .../lib/cics-java-jcics-tdq-record-1.0.jar | Bin 0 -> 7794 bytes cics-java-jcics-tdq-app/pom.xml | 76 +++++++++ .../java/com/ibm/cicsdev/tdq/TDQCommon.java | 74 ++++++++ .../java/com/ibm/cicsdev/tdq/TDQExample1.java | 125 ++++++++++++++ .../java/com/ibm/cicsdev/tdq/TDQExample2.java | 153 +++++++++++++++++ .../java/com/ibm/cicsdev/tdq/TDQExample3.java | 152 +++++++++++++++++ cics-java-jcics-tdq-bundle/.project | 34 ++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-tdq-bundle/build.gradle | 17 ++ cics-java-jcics-tdq-bundle/pom.xml | 38 +++++ cics-java-jcics-terminal-app/.classpath | 12 ++ cics-java-jcics-terminal-app/.project | 56 ++++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.apt.core.prefs | 5 + .../.settings/org.eclipse.jdt.core.prefs | 17 ++ .../.settings/org.eclipse.m2e.core.prefs | 4 + .../META-INF/MANIFEST.MF | 12 ++ cics-java-jcics-terminal-app/README.md | 34 ++++ cics-java-jcics-terminal-app/build.gradle | 28 +++ cics-java-jcics-terminal-app/build.properties | 7 + cics-java-jcics-terminal-app/pom.xml | 44 +++++ .../cicsdev/terminal/TerminalExample1.java | 126 ++++++++++++++ cics-java-jcics-terminal-bundle/.project | 34 ++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-terminal-bundle/build.gradle | 17 ++ cics-java-jcics-terminal-bundle/pom.xml | 38 +++++ cics-java-jcics-tsq-app/.classpath | 12 ++ cics-java-jcics-tsq-app/.project | 56 ++++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.apt.core.prefs | 5 + .../.settings/org.eclipse.jdt.core.prefs | 17 ++ .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-tsq-app/META-INF/MANIFEST.MF | 16 ++ cics-java-jcics-tsq-app/README.md | 62 +++++++ cics-java-jcics-tsq-app/build.gradle | 44 +++++ cics-java-jcics-tsq-app/build.properties | 9 + cics-java-jcics-tsq-app/pom.xml | 76 +++++++++ .../java/com/ibm/cicsdev/tsq/TSQCommon.java | 68 ++++++++ .../java/com/ibm/cicsdev/tsq/TSQExample1.java | 133 +++++++++++++++ .../java/com/ibm/cicsdev/tsq/TSQExample2.java | 161 ++++++++++++++++++ .../java/com/ibm/cicsdev/tsq/TSQExample3.java | 160 +++++++++++++++++ .../java/com/ibm/cicsdev/tsq/TSQExample4.java | 129 ++++++++++++++ cics-java-jcics-tsq-bundle/.project | 34 ++++ .../org.eclipse.buildship.core.prefs | 13 ++ .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 + cics-java-jcics-tsq-bundle/build.gradle | 17 ++ cics-java-jcics-tsq-bundle/pom.xml | 38 +++++ etc/TDQ/DFHCSD.txt | 44 +++++ etc/TDQ/README.md | 4 + .../1.0/_remote.repositories | 4 + .../1.0/cics-java-jcics-tdq-record-1.0.jar | Bin 0 -> 7794 bytes .../1.0/cics-java-jcics-tdq-record-1.0.pom | 9 + .../maven-metadata-local.xml | 12 ++ .../1.0/_remote.repositories | 4 + .../1.0/cics-java-jcics-tsq-record-1.0.jar | Bin 0 -> 7793 bytes .../1.0/cics-java-jcics-tsq-record-1.0.pom | 9 + .../maven-metadata-local.xml | 12 ++ pom.xml | 18 ++ settings.gradle | 4 + 100 files changed, 2663 insertions(+), 50 deletions(-) delete mode 100644 cics-java-jcics-link-app/src/main/.gitignore create mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-tdq-app/.classpath create mode 100644 cics-java-jcics-tdq-app/.project create mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-tdq-app/META-INF/MANIFEST.MF create mode 100644 cics-java-jcics-tdq-app/README.md create mode 100644 cics-java-jcics-tdq-app/build.gradle create mode 100644 cics-java-jcics-tdq-app/build.properties create mode 100644 cics-java-jcics-tdq-app/lib/.gitignore create mode 100644 cics-java-jcics-tdq-app/lib/cics-java-jcics-tdq-record-1.0.jar create mode 100644 cics-java-jcics-tdq-app/pom.xml create mode 100644 cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQCommon.java create mode 100644 cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample1.java create mode 100644 cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample2.java create mode 100644 cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample3.java create mode 100644 cics-java-jcics-tdq-bundle/.project create mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-tdq-bundle/build.gradle create mode 100644 cics-java-jcics-tdq-bundle/pom.xml create mode 100644 cics-java-jcics-terminal-app/.classpath create mode 100644 cics-java-jcics-terminal-app/.project create mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-terminal-app/META-INF/MANIFEST.MF create mode 100644 cics-java-jcics-terminal-app/README.md create mode 100644 cics-java-jcics-terminal-app/build.gradle create mode 100644 cics-java-jcics-terminal-app/build.properties create mode 100644 cics-java-jcics-terminal-app/pom.xml create mode 100644 cics-java-jcics-terminal-app/src/main/java/com/ibm/cicsdev/terminal/TerminalExample1.java create mode 100644 cics-java-jcics-terminal-bundle/.project create mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-terminal-bundle/build.gradle create mode 100644 cics-java-jcics-terminal-bundle/pom.xml create mode 100644 cics-java-jcics-tsq-app/.classpath create mode 100644 cics-java-jcics-tsq-app/.project create mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-tsq-app/META-INF/MANIFEST.MF create mode 100644 cics-java-jcics-tsq-app/README.md create mode 100644 cics-java-jcics-tsq-app/build.gradle create mode 100644 cics-java-jcics-tsq-app/build.properties create mode 100644 cics-java-jcics-tsq-app/pom.xml create mode 100644 cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQCommon.java create mode 100644 cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample1.java create mode 100644 cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample2.java create mode 100644 cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample3.java create mode 100644 cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample4.java create mode 100644 cics-java-jcics-tsq-bundle/.project create mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs create mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs create mode 100644 cics-java-jcics-tsq-bundle/build.gradle create mode 100644 cics-java-jcics-tsq-bundle/pom.xml create mode 100644 etc/TDQ/DFHCSD.txt create mode 100644 etc/TDQ/README.md create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/_remote.repositories create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.jar create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.pom create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/maven-metadata-local.xml create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/_remote.repositories create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.jar create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.pom create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/maven-metadata-local.xml diff --git a/.gitignore b/.gitignore index bc6a182..c295a0f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,10 +21,6 @@ bin/ # Ignore Gradle GUI config gradle-app.setting - -# Avoid ignore Gradle wrappper properties -!gradle-wrapper.properties - # Cache of project .gradletasknamecache @@ -35,7 +31,7 @@ gradle-app.setting # Log file *.log -# Package Files # +# Package Files *.jar *.war *.nar @@ -44,8 +40,9 @@ gradle-app.setting *.tar.gz *.rar -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +# Avoid ignoring Gradle wrapper jar and properties !gradle-wrapper.jar +!gradle-wrapper.properties # VSCode ignores .vscode/* diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index d7b0045..d477a44 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,8 +1,8 @@ -arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle +arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=cics-java-jcics-samples +connection.project.dir=cics-java-jcics-tsq-bundle eclipse.preferences.version=1 gradle.user.home= java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk diff --git a/README.md b/README.md index 2c182a1..54afdd1 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM * [`cics-java-jcics-link-bundle`](cics-java-jcics-link-bundle) - CICS bundle plug-in project for cics-java-jcics-link-app * [`cics-java-jcics-serialize-app`](cics-java-jcics-serialize-app) - Java project covering serializing access to a common resource using the CICS ENQ and DEQ commands. * [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in project for cics-java-jcics-serialize-app +* [`cics-java-jcics-tdq-app`](cics-java-jcics-tdq-app) - Java project covering access to transient data queues using the READQ and WRITEQ commands. +* [`cics-java-jcics-tdq-bundle`](cics-java-jcics-tdq-bundle) - CICS bundle plug-in project for cics-java-jcics-tdq-app ## Repository structure @@ -15,8 +17,8 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM * [`gradle/`](gradle) - Gradle wrapper * [`.mvn/`](.mvn/wrapper) - Maven wrapper * [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. -* [`etc/`](etc) - Supporting materials including DFHCSDUP definition files and sample OSGi bundle manifests. -* [`etc/eclipse_projects/`](etc/eclipse_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. +* [`etc/`](etc) - Supporting materials including DFHCSDUP definition files. +* [`etc/cics_bundle_projects/`](etc/cics_bundle_projectsects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. * [`blog/`](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/blog/blog.md) - Archive of developer works JCICS tutorial. @@ -143,7 +145,7 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed 1. Define an OSGi JVM server resource called `DFHJVMS` based on the CICS-supplied sample definition in the CSD group `DFH$OSGI`. -1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt). Alternatively they can be installed using the bundle parts supplied with the Eclipse CICS bundle projects in the [`eclipse_projects`](etc/eclipse_projects) directory. +1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt). Alternatively they can be installed using the bundle parts supplied with the Eclipse CICS bundle projects in the [`cics_bundle_projects`](etc/cics_bundle_projects) directory. See the individual project directories for any additional supporting resources required. 1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resourceS and ensure the JVM server becomes enabled along with all associated bundles. diff --git a/build.gradle b/build.gradle index 1cb0b33..a807e3e 100644 --- a/build.gradle +++ b/build.gradle @@ -16,12 +16,15 @@ allprojects { mavenCentral() - // Local Maven repo for IRG generated file + // Local Maven repo for IRG generated JARs maven { - url = uri("file://${localRepo}") - } - } + url = uri("file:///${localRepo}") + } } +} + + + diff --git a/cics-java-jcics-link-app/.classpath b/cics-java-jcics-link-app/.classpath index 1016f15..ea7f567 100644 --- a/cics-java-jcics-link-app/.classpath +++ b/cics-java-jcics-link-app/.classpath @@ -8,10 +8,5 @@ - - - - - diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs index f9fd529..3da017b 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs @@ -1,8 +1,8 @@ -arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle +arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) -connection.project.dir=../cics-java-jcics-serialize-bundle +connection.project.dir=../cics-java-jcics-tsq-bundle eclipse.preferences.version=1 gradle.user.home= java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs index fa6bcfb..f07424f 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.aptEnabled=false org.eclipse.jdt.apt.genSrcDir=.apt_generated org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs index ecb498c..50c691c 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs @@ -12,5 +12,6 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-link-app/README.md b/cics-java-jcics-link-app/README.md index 8a1c58a..011a35b 100644 --- a/cics-java-jcics-link-app/README.md +++ b/cics-java-jcics-link-app/README.md @@ -17,7 +17,7 @@ The following Java source code files are provided: * [`/etc/Link`](../etc/Link) - DFHCSDUP input files needed to define the required programs and transactions. * [`/src/Cobol`](../etc/src/Cobol) - COBOL programs `EC01` and `EDUCHAN` required by these samples. -* `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/) and the source is available in the [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) repository. +* `cics-java-jcics-edupgm-1.0.jar` - a pre-built JAR containing the generated class `JZOSCommareaWrapperclass` that is used in the `LinkProg2` example to map the fields in the COMMAREA used by the COBOL program `EDUPGM`. This is packaged in a Maven [`local-repo`](../local-repo/com/ibm/cicsdev/cics-java-jcics-edupgm/) to support Maven and Gradle builds, and in the `cics-java-jcics-link-app/lib` directory to support Eclipse builds. The original source is available in the [cics-java-jzosprog](https://github.com/cicsdev/cics-java-jzosprog/tree/main/src/Cobol) repository. @@ -32,7 +32,7 @@ The following Java source code files are provided: ## Running the Example -At a 3270 terminal screen, enter the transaction you wish to run, for example JLN1 will run the LINK example 1. +At a 3270 terminal screen, enter the transaction JLN1, JLN2 or JLN3 that you wish to run, for example to run the LinkProg1 sample: > JLN1 diff --git a/cics-java-jcics-link-app/build.gradle b/cics-java-jcics-link-app/build.gradle index dfe0daa..2eb2c67 100644 --- a/cics-java-jcics-link-app/build.gradle +++ b/cics-java-jcics-link-app/build.gradle @@ -11,12 +11,6 @@ java targetCompatibility = java_version } -// Add the IRG generate JAR as a repository -repositories { - flatDir { - dirs("lib") - } -} dependencies { @@ -27,7 +21,7 @@ dependencies { compileOnly("com.ibm.cics:com.ibm.cics.server") //Compile using the IRG generated JAR from the local dir - implementation name: 'cics-java-jcics-edupgm', version: '1.0' + implementation("com.ibm.cicsdev:cics-java-jcics-edupgm:1.0") } diff --git a/cics-java-jcics-link-app/pom.xml b/cics-java-jcics-link-app/pom.xml index 39cf559..9c56e2e 100644 --- a/cics-java-jcics-link-app/pom.xml +++ b/cics-java-jcics-link-app/pom.xml @@ -13,19 +13,6 @@ jar CICS Java JCICS link sample - Application - - - - cics-java-jcics-edupgm - Project libraries - file://local-repo - - ignore - - - - - com.ibm.cics diff --git a/cics-java-jcics-link-app/src/main/.gitignore b/cics-java-jcics-link-app/src/main/.gitignore deleted file mode 100644 index 8de0bed..0000000 --- a/cics-java-jcics-link-app/src/main/.gitignore +++ /dev/null @@ -1 +0,0 @@ -./njava/ \ No newline at end of file diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs index 7643200..1ec8c8f 100644 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-bundle +connection.project.dir=../cics-java-jcics-tsq-bundle eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs index 049aa3f..1ec8c8f 100644 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-serialize-app +connection.project.dir=../cics-java-jcics-tsq-bundle eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-serialize-app/pom.xml b/cics-java-jcics-serialize-app/pom.xml index 0f4b3f7..6eb4a27 100644 --- a/cics-java-jcics-serialize-app/pom.xml +++ b/cics-java-jcics-serialize-app/pom.xml @@ -11,7 +11,7 @@ cics-java-jcics-serialize-app jar - CICS Java JCICS serialize sample - Applicatio + CICS Java JCICS serialize sample - Application diff --git a/cics-java-jcics-serialize-bundle/.project b/cics-java-jcics-serialize-bundle/.project index f35e43c..7d1826f 100644 --- a/cics-java-jcics-serialize-bundle/.project +++ b/cics-java-jcics-serialize-bundle/.project @@ -10,8 +10,25 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.buildship.core.gradleprojectnature + + + 1773054282866 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs index e479558..1ec8c8f 100644 --- a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= +connection.project.dir=../cics-java-jcics-tsq-bundle eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-tdq-app/.classpath b/cics-java-jcics-tdq-app/.classpath new file mode 100644 index 0000000..ea7f567 --- /dev/null +++ b/cics-java-jcics-tdq-app/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cics-java-jcics-tdq-app/.project b/cics-java-jcics-tdq-app/.project new file mode 100644 index 0000000..0883ee8 --- /dev/null +++ b/cics-java-jcics-tdq-app/.project @@ -0,0 +1,56 @@ + + + cics-java-jcics-tdq-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + org.eclipse.pde.PluginNature + + + + 1772729611886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e7597db --- /dev/null +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.project.dir=../cics-java-jcics-tsq-bundle +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..f07424f --- /dev/null +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..50c691c --- /dev/null +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,17 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-tdq-app/META-INF/MANIFEST.MF b/cics-java-jcics-tdq-app/META-INF/MANIFEST.MF new file mode 100644 index 0000000..84cc52b --- /dev/null +++ b/cics-java-jcics-tdq-app/META-INF/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS code for use of transient data queues +Bundle-SymbolicName: com.ibm.cicsdev.tdq +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-17 +CICS-MainClass: com.ibm.cicsdev.tdq.TDQExample1, + com.ibm.cicsdev.tdq.TDQExample2, + com.ibm.cicsdev.tdq.TDQExample3 +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", + com.ibm.jzos.fields;resolution:=optional +Automatic-Module-Name: com.ibm.cicsdev.tdq +Bundle-ClassPath: lib/cics-java-jcics-tdq-record-1.0.jar, + . + diff --git a/cics-java-jcics-tdq-app/README.md b/cics-java-jcics-tdq-app/README.md new file mode 100644 index 0000000..1d7ca22 --- /dev/null +++ b/cics-java-jcics-tdq-app/README.md @@ -0,0 +1,72 @@ +com.ibm.cicsdev.tdq +=== + +This project contains various sample programs to demonstrate use of the JCICS API for manipulating a transient +data queue (TDQ). A TDQ is a queue of data items that is stored in sequential queues. Transient queues are +resources whose name may contain up to 4 characters and must be defined before use, unlike temporary storage +queues that can be dynamically defined. + +* **Intrapartition** queues are accessible only by CICS transactions within the CICS region +* **Extrapartition** queues are sequential data sets on tape or disk. +* Intrapartition and extrapartition queues can be referenced through **indirect** destinations to provide +flexibility in program maintenance. Queue definitions can be changed without having to recompile existing +programs. + +All of the examples in this repository use an intrapartition queue named `MYQ1`. + +* `TDQExample1` - a simple class that writes Java strings to a TDQ and then reads them back. +* `TDQExample2` - an alternative implementation of `TDQExample1` that writes and reads Java strings, but performing all of the codepage conversion manually. This avoids the pre-requisite of CICS TS V5.1, but is slightly more work to code in Java. +* `TDQExample3` - a more complex example that writes structured records to a TDQ and then reads them back. +* `TDQCommon` - Superclass used to provide common services for the TDQ samples. + +For the sake of brevity, all of the examples lack comprehensive error-handling logic. +To demonstrate exactly where an exception may be thrown when using the JCICS API, one `try { ... } catch { ... }` +block has been included per API call that may thrown an exception. + + +## Supporting files + +* `lib/cics-java-jcics-tdq-record-1.0.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in `TDQExample3` (includes source). +* [`/etc/TDQ/DFHCSD.txt`](../../etc/TDQ/DFHCSD.txt) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. + + +## Structured record + +The class `TdqRecord` is produced by the IBM Java Record Generator utility from a COBOL copybook. This class +is used in example 3 to write a structured record to the TDQ. The `TdqRecord` class is used to +demonstrate how a Java application would interact with non-Java implementations when communicating using a TDQ. + +The COBOL structure that is mapped by the `TdqRecord` class is as follows: +``` + 01 TDQ-RECORD. + 03 RECORD-ID PIC 9(8) COMP. + 03 BINARY-DIGIT PIC 9(4) COMP. + 03 CHARACTER-STRING PIC X(30). + 03 NUMERIC-VALUE PIC 9(18). + 03 PACKED-DEC PIC 9(15) COMP-3. + 03 SIGNED-PACKED PIC S9(12) COMP-3. +``` + + +## Configuration + +Note you must define an intrapartition transient data queue named `MYQ1` before using these samples. The source DFHCSDUP input for this is provided in the [`/etc/TDQ/DFHCSD.txt`](../../etc/TDQ/DFHCSD.txt) or it can be created using the `CECI` transaction: + +> CECI CREATE TDQUEUE(MYQ1) ATTRIBUTES('TYPE(INTRA)') + + +## Running the Example + +At a 3270 terminal screen, enter the transaction you wish to run, for example JTD1 will run TDQ example 1. + +> JTD1 + +and the following output will be returned + +> JTD1 - Starting TDQExample1 + Read data from queue "TDQ write from JCICS item 1" + Read data from queue "TDQ write from JCICS item 2" + Read data from queue "TDQ write from JCICS item 3" + Read data from queue "TDQ write from JCICS item 4" + Read data from queue "TDQ write from JCICS item 5" + Completed TDQExample1 diff --git a/cics-java-jcics-tdq-app/build.gradle b/cics-java-jcics-tdq-app/build.gradle new file mode 100644 index 0000000..c73fd16 --- /dev/null +++ b/cics-java-jcics-tdq-app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'java' +} + + +description = 'CICS Java JCICS TDQ sample - Application' + +java +{ + sourceCompatibility = java_version + targetCompatibility = java_version +} + +// Add the IRG generated JAR as a repository +/*repositories { + flatDir { + dirs("local-repo") + } +} */ + + +dependencies { + + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) + + // JCICS library + compileOnly("com.ibm.cics:com.ibm.cics.server") + + //Compile using the IRG generated JAR from the local dir + implementation("com.ibm.cicsdev:cics-java-jcics-tdq-record:1.0") + +} + +// Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo +jar { + manifest { + from 'META-INF/MANIFEST.MF' + } + from("${localRepo}/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0") { + include '**.jar' + into "lib" + } +} diff --git a/cics-java-jcics-tdq-app/build.properties b/cics-java-jcics-tdq-app/build.properties new file mode 100644 index 0000000..ab0f30a --- /dev/null +++ b/cics-java-jcics-tdq-app/build.properties @@ -0,0 +1,9 @@ +bin.includes = META-INF/,\ + .,\ + lib/,\ + lib/cics-java-jcics-tdq-record-1.0.jar +source.. = src/main/java/,\ + .apt_generated/ +jre.compilation.profile = JavaSE-17 +jars.compile.order = .,\ + lib/cics-java-jcics-tdq-record-1.0.jar diff --git a/cics-java-jcics-tdq-app/lib/.gitignore b/cics-java-jcics-tdq-app/lib/.gitignore new file mode 100644 index 0000000..5e1dd75 --- /dev/null +++ b/cics-java-jcics-tdq-app/lib/.gitignore @@ -0,0 +1,2 @@ +# Avoid ignoring repo JARs +!*.jar diff --git a/cics-java-jcics-tdq-app/lib/cics-java-jcics-tdq-record-1.0.jar b/cics-java-jcics-tdq-app/lib/cics-java-jcics-tdq-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..49975b27ac949cdd2ccffdeda09ed68c002f0c11 GIT binary patch literal 7794 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%0AP;eW4sLtL2RenVk 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 I<-gVc0Ya+{-2eap literal 0 HcmV?d00001 diff --git a/cics-java-jcics-tdq-app/pom.xml b/cics-java-jcics-tdq-app/pom.xml new file mode 100644 index 0000000..b17475d --- /dev/null +++ b/cics-java-jcics-tdq-app/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tdq-app + jar + CICS Java JCICS TDQ sample - Application + + + + com.ibm.cics + com.ibm.cics.server + + + + + com.ibm.cicsdev + cics-java-jcics-tdq-record + 1.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.12.1 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.4.0 + + + copy-external-jars-into-lib + process-resources + + copy-resources + + + ${project.build.outputDirectory}/lib + + + ./lib + + **/*.jar + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + META-INF/MANIFEST.MF + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQCommon.java b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQCommon.java new file mode 100644 index 0000000..3b6930e --- /dev/null +++ b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQCommon.java @@ -0,0 +1,74 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tdq; + +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.InvalidQueueIdException; +import com.ibm.cics.server.TDQ; +import com.ibm.cics.server.Task; + +/** + * Superclass used to provide common services used in all of the TDQ + * examples. + */ +public abstract class TDQCommon +{ + /** + * A field to hold a reference to the CICS transient + * data queue this instance will access. + */ + protected final TDQ tdq; + + /** + * Constructor used to initialise this class with some + * common data used by all TDQ examples. + * + * @param tdq - a reference to the transient data queue we will + * be manipulating in this example. + */ + protected TDQCommon(TDQ tdq) + { + // Save reference to the TDQ + this.tdq = tdq; + + // Delete any old TDQ that's lying around + deleteQueue(); + } + + /** + * Deletes all the data associated with the instance transient data queue. + */ + private void deleteQueue() + { + try { + // Empty the TDQ + this.tdq.delete(); + } + catch (InvalidQueueIdException iqe) { + + // QIDERR occurs when the queue cannot be found. + // Unlike the TSQ case, this is NOT an acceptable condition, + // because TDQs cannot be generated dynamically + String msg = MessageFormat.format("Could not find queue \"{0}\"", this.tdq.getName()); + Task.getTask().out.println(msg); + + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(iqe); + } + catch (CicsConditionException cce) { + // All other errors + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } +} diff --git a/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample1.java b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample1.java new file mode 100644 index 0000000..6329360 --- /dev/null +++ b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample1.java @@ -0,0 +1,125 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tdq; + +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DataHolder; +import com.ibm.cics.server.TDQ; +import com.ibm.cics.server.Task; + +/** + * Example to demonstrate writing reading simple text-based records + * to and from a TDQ using JCICS. + */ +public class TDQExample1 extends TDQCommon +{ + /** + * Name of the TDQ to use. + */ + private static final String TDQ_NAME = "MYQ1"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Main entry point to this CICS Java program. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TDQExample1"); + + // Create a reference to the TDQ + TDQ tdq = new TDQ(); + tdq.setName(TDQ_NAME); + + // Create a new instance of this class + TDQExample1 ex = new TDQExample1(tdq); + + // Write text to the queue + ex.writeToQueue(); + + // Read text from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TDQExample1"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tdq - the transient data queue reference we will + * be manipulating in this example. + */ + public TDQExample1(TDQ tdq) + { + super(tdq); + } + + /** + * Write some sample data to the instance TDQ. + */ + public void writeToQueue() + { + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Construct a message for writing to the queue + String msg = MessageFormat.format("TDQ write from JCICS item {0}", i); + + try { + // Write the data to the TDQ + // No codepage conversion required for this method + // Requires CICS TS V5.1 and later (JCICS 1.401.0) + this.tdq.writeString(msg); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + } + + /** + * Simple read of string data from a TDQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + DataHolder holder = new DataHolder(); + + for ( int i = 1; i <= DEPTH_COUNT; i++ ) { + + try { + // Read the queue sequentially (destructive read) + this.tdq.readData(holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Assume this is a valid character string in the CICS local CCSID + // Requires CICS TS V5.1 and later (JCICS 1.401.0) + String strData = holder.getStringValue(); + + // Write out to the console + String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample2.java b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample2.java new file mode 100644 index 0000000..2311438 --- /dev/null +++ b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample2.java @@ -0,0 +1,153 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tdq; + +import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DataHolder; +import com.ibm.cics.server.TDQ; +import com.ibm.cics.server.Task; + +/** + * Example to demonstrate writing reading simple text-based records + * to and from a TDQ using JCICS, with manual maintenance of codepages. + */ +public class TDQExample2 extends TDQCommon +{ + /** + * Name of the TDQ to use. + */ + private static final String TDQ_NAME = "MYQ1"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Resolved at runtime to be the CCSID of the region. + */ + private static final String CCSID = + System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + /** + * Main entry point to this CICS Java program. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TDQExample2"); + + // Create a reference to the TDQ + TDQ tdq = new TDQ(); + tdq.setName(TDQ_NAME); + + // Create a new instance of this class + TDQExample2 ex = new TDQExample2(tdq); + + // Write text to the queue + ex.writeToQueue(); + + // Read text from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TDQExample2"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tdq - the transient data queue reference we will + * be manipulating in this example. + */ + public TDQExample2(TDQ tdq) + { + super(tdq); + } + + /** + * Write some sample data to the instance TDQ. + */ + public void writeToQueue() + { + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Data to write to the TDQ + byte[] data; + + // Construct a message for writing to the queue + String msg = MessageFormat.format("TDQ write from JCICS item {0}", i); + + try { + // Convert the string to a byte[] + data = msg.getBytes(CCSID); + } + catch (UnsupportedEncodingException uee) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(uee); + } + + try { + // Write the data to the TDQ + this.tdq.writeData(data); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + } + + /** + * Simple read of string data from a TDQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + DataHolder holder = new DataHolder(); + + for ( int i = 1; i <= DEPTH_COUNT; i++ ) { + + try { + // Read the queue sequentially (destructive read) + this.tdq.readData(holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Extract the byte[] data + byte[] data = holder.getValue(); + + // String object to create + String strData; + + try { + // Assume this is a valid character string in the CICS local CCSID + strData = new String(data, CCSID); + } + catch (UnsupportedEncodingException uee) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(uee); + } + + // Write out to the console + String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample3.java b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample3.java new file mode 100644 index 0000000..952a27f --- /dev/null +++ b/cics-java-jcics-tdq-app/src/main/java/com/ibm/cicsdev/tdq/TDQExample3.java @@ -0,0 +1,152 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tdq; + +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DataHolder; +import com.ibm.cics.server.TDQ; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.TdqRecord; + +/** + * Example to demonstrate writing reading simple text-based records + * to and from a TDQ using JCICS. + */ +public class TDQExample3 extends TDQCommon +{ + /** + * Name of the TDQ to use. + */ + private static final String TDQ_NAME = "MYQ1"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Main entry point to this CICS Java program. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TDQExample3"); + + // Create a reference to the TDQ + TDQ tdq = new TDQ(); + tdq.setName(TDQ_NAME); + + // Create a new instance of this class + TDQExample3 ex = new TDQExample3(tdq); + + // Write text to the queue + ex.writeToQueue(); + + // Read text from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TDQExample3"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tdq - the transient data queue reference we will + * be manipulating in this example. + */ + public TDQExample3(TDQ tdq) + { + super(tdq); + } + + /** + * Write of byte[] data to the instance TDQ. + */ + public void writeToQueue() + { + // Create a wrapper object to write to the queue + // This class has been generated using the JZOS record generator utility + TdqRecord data = new TdqRecord(); + + // Populate with some dummy data + data.setBinaryDigit(42); + data.setCharacterString("TDQ test example"); + data.setNumericValue(123456789); + data.setPackedDec(123); + data.setSignedPacked(-99); + + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Update record for this iteration + data.setRecordId(i); + + // Extract the byte data from the wrapper object + // The generated class handles any codepage conversion required + byte[] record = data.getByteBuffer(); + + try { + // Write the data to the TDQ + this.tdq.writeData(record); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + + } + + /** + * Read of byte[] data from a TDQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + DataHolder holder = new DataHolder(); + + // Read data from the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + try { + // Read the data from CICS + this.tdq.readData(holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Obtain the raw bytes from the TDQ item + byte[] itemData = holder.getValue(); + + // Convert to Java object form + // This class has been generated using the JZOS record generator utility + TdqRecord record = new TdqRecord(itemData); + + // Break the record apart + String msg = MessageFormat.format("Record: ({0}) ({1}) ({2}) ({3}) ({4}) ({5})", + record.getRecordId(), + record.getBinaryDigit(), + record.getCharacterString(), + record.getNumericValue(), + record.getPackedDec(), + record.getSignedPacked()); + + // Write out the record to the terminal + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tdq-bundle/.project b/cics-java-jcics-tdq-bundle/.project new file mode 100644 index 0000000..b7c4e01 --- /dev/null +++ b/cics-java-jcics-tdq-bundle/.project @@ -0,0 +1,34 @@ + + + cics-java-jcics-tdq-bundle + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + + + + 1772729611922 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..1ec8c8f --- /dev/null +++ b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=../cics-java-jcics-tsq-bundle +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..243b3fd --- /dev/null +++ b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-tdq-bundle/build.gradle b/cics-java-jcics-tdq-bundle/build.gradle new file mode 100644 index 0000000..eb0b4d3 --- /dev/null +++ b/cics-java-jcics-tdq-bundle/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" +} + +description = 'CICS Java JCICS link sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-tdq-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + diff --git a/cics-java-jcics-tdq-bundle/pom.xml b/cics-java-jcics-tdq-bundle/pom.xml new file mode 100644 index 0000000..ee75f14 --- /dev/null +++ b/cics-java-jcics-tdq-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tdq-bundle + cics-bundle + CICS Java JCICS TDQ sample - CICS bundle + + + + ${project.groupId} + cics-java-jcics-tdq-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.8 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/cics-java-jcics-terminal-app/.classpath b/cics-java-jcics-terminal-app/.classpath new file mode 100644 index 0000000..ea7f567 --- /dev/null +++ b/cics-java-jcics-terminal-app/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cics-java-jcics-terminal-app/.project b/cics-java-jcics-terminal-app/.project new file mode 100644 index 0000000..a28b8a9 --- /dev/null +++ b/cics-java-jcics-terminal-app/.project @@ -0,0 +1,56 @@ + + + cics-java-jcics-terminal-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + org.eclipse.pde.PluginNature + + + + 1772729611886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..6513154 --- /dev/null +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..f07424f --- /dev/null +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..50c691c --- /dev/null +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,17 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF b/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF new file mode 100644 index 0000000..a9df8f7 --- /dev/null +++ b/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS terminal code +Bundle-SymbolicName: com.ibm.cicsdev.terminal +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +CICS-MainClass: com.ibm.cicsdev.terminal.TerminalExample1 +Import-Package: com.ibm.cics.server;version="[1.700,3.0.0)" +Bundle-ClassPath: . +Automatic-Module-Name: com.ibm.cicsdev.terminal + diff --git a/cics-java-jcics-terminal-app/README.md b/cics-java-jcics-terminal-app/README.md new file mode 100644 index 0000000..c64810a --- /dev/null +++ b/cics-java-jcics-terminal-app/README.md @@ -0,0 +1,34 @@ +com.ibm.cicsdev.terminal +=== + +Provides some sample Java code to show how to parse arguments when a Java program is used as an +initial program on a transaction, and the transaction is started from a terminal. + +The code first checks we are associated with a terminal, and then performs `receive()` call +to obtain the data supplied at the terminal. + +This data is then broken down using the `java.util.StringTokenizer` class to split the +supplied arguments on word boundaries. + +* `TerminalExample1` - a simple class to demonstrate receiving arguments from a terminal in a JCICS environment. + +## Supporting files + +* [`/etc/Terminal`](../../etc/Terminal) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. + + +## Running the Example + +At a 3270 terminal screen, enter the transaction you wish to run, followed by some optional arguments. + +> JTM1 Hello from CICS! + +and the following output will be returned (assuming upper-casing is enabled for the terminal): + +> JTM1 Hello from CICS! - Starting TerminalExample1 + Arg 0 : JTM1 + Arg 1 : HELLO + Arg 2 : FROM + Arg 3 : CICS! + Completed TerminalExample1 + diff --git a/cics-java-jcics-terminal-app/build.gradle b/cics-java-jcics-terminal-app/build.gradle new file mode 100644 index 0000000..10e2940 --- /dev/null +++ b/cics-java-jcics-terminal-app/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'java' +} + + +description = 'CICS Java JCICS Terminal sample - Application' + +java +{ + sourceCompatibility = java_version + targetCompatibility = java_version +} + +dependencies { + + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) + + // JCICS library + compileOnly("com.ibm.cics:com.ibm.cics.server") +} + +// Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo +jar { + manifest { + from 'META-INF/MANIFEST.MF' + } +} diff --git a/cics-java-jcics-terminal-app/build.properties b/cics-java-jcics-terminal-app/build.properties new file mode 100644 index 0000000..65bd98b --- /dev/null +++ b/cics-java-jcics-terminal-app/build.properties @@ -0,0 +1,7 @@ +bin.includes = META-INF/,\ + .,\ + lib/ +source.. = src/main/java/,\ + .apt_generated/ +jre.compilation.profile = JavaSE-17 +jars.compile.order = . diff --git a/cics-java-jcics-terminal-app/pom.xml b/cics-java-jcics-terminal-app/pom.xml new file mode 100644 index 0000000..ef88020 --- /dev/null +++ b/cics-java-jcics-terminal-app/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-terminal-app + jar + CICS Java JCICS Terminal sample - Application + + + + com.ibm.cics + com.ibm.cics.server + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.12.1 + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + META-INF/MANIFEST.MF + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-terminal-app/src/main/java/com/ibm/cicsdev/terminal/TerminalExample1.java b/cics-java-jcics-terminal-app/src/main/java/com/ibm/cicsdev/terminal/TerminalExample1.java new file mode 100644 index 0000000..ffe53de --- /dev/null +++ b/cics-java-jcics-terminal-app/src/main/java/com/ibm/cicsdev/terminal/TerminalExample1.java @@ -0,0 +1,126 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.terminal; + +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DataHolder; +import com.ibm.cics.server.EndOfChainIndicatorException; +import com.ibm.cics.server.Task; +import com.ibm.cics.server.TerminalPrincipalFacility; + +/** + * Provides an example of receiving arguments to a transaction at a 3270 terminal. + */ +public class TerminalExample1 +{ + /** + * Main entry point to a CICS OSGi program. + */ + public static void main(String[] args) throws CicsConditionException + { + // Get details about our current CICS task + Task task = Task.getTask(); + + // Retrieve the raw string from the terminal + // This will need to be issued before we write anything out + String strTerm = getTerminalString(); + + // Now we can report status to the terminal + task.out.println(" - Starting TerminalExample1"); + + // Do we have terminal arguments? + if (strTerm != null) { + + // Parse to individual elements + String[] termArgs = parseTerminalString(strTerm); + + // Display arguments + for (int i = 0; i < termArgs.length; i++) { + task.out.println( String.format("Arg %d : %s", i, termArgs[i]) ); + } + } + + // Completion message + task.out.println("Completed TerminalExample1"); + } + + /** + * Verifies the current task is associated with a terminal and then + * receives the input data. The received data is converted to a Java + * string and returned. + * + * @return a String containing the data input at the terminal. If the + * transaction's principal facility is not a terminal, then null + * will be returned. + */ + private static String getTerminalString() throws CicsConditionException + { + // Get the current task's principal facility + Object pf = Task.getTask().getPrincipalFacility(); + + // Are we of a suitable type? + if ( pf instanceof TerminalPrincipalFacility ) { + + // Cast to correct type + TerminalPrincipalFacility tpf = (TerminalPrincipalFacility) pf; + + // Create a holder object to store the data + DataHolder holder = new DataHolder(); + + try { + // Perform the receive from the terminal + tpf.receive(holder); + } + catch (EndOfChainIndicatorException e) { + // Normal operation - ignore this one + } + catch (CicsConditionException cce) { + // Propagate all other problems + throw cce; + } + + // Convert the received data into a valid String + // Assume this is a valid character string in the CICS local CCSID + // Requires CICS TS V5.1 and later (JCICS 1.401.0) + return holder.getStringValue(); + } + else { + // Not a terminal principal facility + return null; + } + } + + /** + * Breaks down the input string into + * @param strTerm + * @return + */ + private static String[] parseTerminalString(String strTerm) + { + // A place to store the output collection + List args = new ArrayList<>(); + + // Tokenize the input string using standard whitespace characters + StringTokenizer tok = new StringTokenizer(strTerm); + + // Add each of the tokens to the output collection + while ( tok.hasMoreTokens() ) { + args.add(tok.nextToken()); + } + + // Convert the collection to an array + return args.toArray( new String[args.size()] ); + } +} diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project new file mode 100644 index 0000000..b7c4e01 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.project @@ -0,0 +1,34 @@ + + + cics-java-jcics-tdq-bundle + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + + + + 1772729611922 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e479558 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..243b3fd --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-terminal-bundle/build.gradle b/cics-java-jcics-terminal-bundle/build.gradle new file mode 100644 index 0000000..eb0b4d3 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" +} + +description = 'CICS Java JCICS link sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-tdq-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + diff --git a/cics-java-jcics-terminal-bundle/pom.xml b/cics-java-jcics-terminal-bundle/pom.xml new file mode 100644 index 0000000..ee75f14 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tdq-bundle + cics-bundle + CICS Java JCICS TDQ sample - CICS bundle + + + + ${project.groupId} + cics-java-jcics-tdq-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.8 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/cics-java-jcics-tsq-app/.classpath b/cics-java-jcics-tsq-app/.classpath new file mode 100644 index 0000000..ea7f567 --- /dev/null +++ b/cics-java-jcics-tsq-app/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cics-java-jcics-tsq-app/.project b/cics-java-jcics-tsq-app/.project new file mode 100644 index 0000000..135b721 --- /dev/null +++ b/cics-java-jcics-tsq-app/.project @@ -0,0 +1,56 @@ + + + cics-java-jcics-tsq-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + org.eclipse.pde.PluginNature + + + + 1772729611886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..6513154 --- /dev/null +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..f07424f --- /dev/null +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..50c691c --- /dev/null +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,17 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-tsq-app/META-INF/MANIFEST.MF b/cics-java-jcics-tsq-app/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8f1487c --- /dev/null +++ b/cics-java-jcics-tsq-app/META-INF/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS code for use of temporary storage queues +Bundle-SymbolicName: com.ibm.cicsdev.tsq +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-17 +CICS-MainClass: com.ibm.cicsdev.tsq.TSQExample1, + com.ibm.cicsdev.tsq.TSQExample2, + com.ibm.cicsdev.tsq.TSQExample3, + com.ibm.cicsdev.tsq.TSQExample4 +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", + com.ibm.jzos.fields;resolution:=optional +Automatic-Module-Name: com.ibm.cicsdev.tsq +Bundle-ClassPath: lib/cics-java-jcics-tsq-record-1.0.jar, + . diff --git a/cics-java-jcics-tsq-app/README.md b/cics-java-jcics-tsq-app/README.md new file mode 100644 index 0000000..5d43355 --- /dev/null +++ b/cics-java-jcics-tsq-app/README.md @@ -0,0 +1,62 @@ +com.ibm.cicsdev.tsq +=== + +This repository contains various Java sample programs to demonstrate use of the JCICS API for manipulating +a temporary storage queue (TSQ). + +A TSQ is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically +created at runtime, unlike transient data queues that must be defined in advance. + +All of the examples in this repository use the sample queue named `MYTSQ`. + +* `TSQExample1` - a simple class that writes Java strings to a TSQ and then reads them back. +* `TSQExample2` - an alternative implementation of `TSQExample1`, that writes and reads Java strings, but performs all +of the byte array to string conversion manually. This avoids the pre-requisite of CICS TS V5.1, but is slightly more work to code in Java. +* `TSQExample3` - a more complex example that uses a JZOS generated record to write a structured record to a TSQ and then read it back. +* `TSQExample4` - an extension of the `TSQExample3` sample program, which populates a TSQ, updates items within the queue, then +reads them back to confirm. +* `TSQCommon` - superclass used to provide common services for the TSQ samples. The constructor of this class will +delete any existing TSQ before executing the test, in order to avoid multiple executions of the program from producing +incorrect results. + +For the sake of brevity, all of the examples lack comprehensive error-handling logic. +To demonstrate exactly where an exception may be thrown when using the JCICS API, +one `try { ... } catch { ... }` block has been included per API call that may throw an exception. + + +## Supporting files + +* `lib/cics-java-jcics-tsq-record-1.0.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in `TSQExample3` (includes source). +* [`/etc/TSQ/DFHCSD.txt`](../../etc/TSQ/DFHCSD.txt) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. + + +## Structured record + +The COBOL structure that is mapped by the TsqRecord class is as follows: +``` + 01 TSQ-RECORD. + 03 RECORD-ID PIC 9(8) COMP. + 03 BINARY-DIGIT PIC 9(4) COMP. + 03 CHARACTER-STRING PIC X(30). + 03 NUMERIC-VALUE PIC 9(18). + 03 PACKED-DEC PIC 9(15) COMP-3. + 03 SIGNED-PACKED PIC S9(12) COMP-3. +``` + + +## Running the Example + +At a 3270 terminal screen, enter the transaction you wish to run, for example JTS1 will run TSQ example 1. + +> JTS1 + +and the following output will be returned + +> JTS1 - Starting TSQExample1 + Read data from queue "TSQ write from JCICS item 1" + Read data from queue "TSQ write from JCICS item 2" + Read data from queue "TSQ write from JCICS item 3" + Read data from queue "TSQ write from JCICS item 4" + Read data from queue "TSQ write from JCICS item 5" + Completed TSQExample1 + diff --git a/cics-java-jcics-tsq-app/build.gradle b/cics-java-jcics-tsq-app/build.gradle new file mode 100644 index 0000000..9567f94 --- /dev/null +++ b/cics-java-jcics-tsq-app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'java' +} + + +description = 'CICS Java JCICS TSQ sample - Application' + +java +{ + sourceCompatibility = java_version + targetCompatibility = java_version +} + +// Add the IRG generated JAR as a repository +/*repositories { + flatDir { + dirs("local-repo") + } +} */ + + +dependencies { + + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) + + // JCICS library + compileOnly("com.ibm.cics:com.ibm.cics.server") + + //Compile using the IRG generated JAR from the local dir + implementation("com.ibm.cicsdev:cics-java-jcics-tsq-record:1.0") + +} + +// Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo +jar { + manifest { + from 'META-INF/MANIFEST.MF' + } + from("${localRepo}/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0") { + include '**.jar' + into "lib" + } +} diff --git a/cics-java-jcics-tsq-app/build.properties b/cics-java-jcics-tsq-app/build.properties new file mode 100644 index 0000000..f444e08 --- /dev/null +++ b/cics-java-jcics-tsq-app/build.properties @@ -0,0 +1,9 @@ +bin.includes = META-INF/,\ + .,\ + lib/,\ + lib/cics-java-jcics-tsq-record-1.0.jar +source.. = src/main/java/,\ + .apt_generated/ +jre.compilation.profile = JavaSE-17 +jars.compile.order = .,\ + lib/cics-java-jcics-tsq-record-1.0.jar diff --git a/cics-java-jcics-tsq-app/pom.xml b/cics-java-jcics-tsq-app/pom.xml new file mode 100644 index 0000000..44fd9d7 --- /dev/null +++ b/cics-java-jcics-tsq-app/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tsq-app + jar + CICS Java JCICS TSQ sample - Application + + + + com.ibm.cics + com.ibm.cics.server + + + + + com.ibm.cicsdev + cics-java-jcics-tsq-record + 1.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.12.1 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.4.0 + + + copy-external-jars-into-lib + process-resources + + copy-resources + + + ${project.build.outputDirectory}/lib + + + ./lib + + **/*.jar + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + META-INF/MANIFEST.MF + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQCommon.java b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQCommon.java new file mode 100644 index 0000000..771bd7b --- /dev/null +++ b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQCommon.java @@ -0,0 +1,68 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tsq; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.InvalidQueueIdException; +import com.ibm.cics.server.TSQ; + +/** + * Superclass used to provide common services used in all of the TSQ + * examples. + * + * For the sake of brevity, this example does not include comprehensive + * error-handling logic. See the CICS Java samples around error-handling + * for more details on catching CICS Exceptions in Java. + */ +public abstract class TSQCommon +{ + /** + * A field to hold a reference to the CICS temporary + * storage queue this instance will access. + */ + protected final TSQ tsq; + + /** + * Constructor used to initialise this class with some + * common data used by all TSQ examples. + * + * @param tsq - a reference to the temporary storage queue we will + * be manipulating in this example. + */ + protected TSQCommon(TSQ tsq) + { + // Save reference to the supplied TSQ + this.tsq = tsq; + + // Delete any old TSQ that's lying around + deleteQueue(); + } + + /** + * Deletes a temporary storage queue. + */ + private void deleteQueue() + { + try { + // Delete the TSQ + this.tsq.delete(); + } + catch (InvalidQueueIdException iqe) { + // QIDERR occurs when the queue cannot be found + // This is an acceptable condition in this program + } + catch (CicsConditionException cce) { + // All other errors + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } +} diff --git a/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample1.java b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample1.java new file mode 100644 index 0000000..0f3a50f --- /dev/null +++ b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample1.java @@ -0,0 +1,133 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tsq; + +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.ItemHolder; +import com.ibm.cics.server.TSQ; +import com.ibm.cics.server.TSQType; +import com.ibm.cics.server.Task; + +/** + * Simple example to demonstrate writing and reading a Java String to + * and from a TSQ using JCICS. + */ +public class TSQExample1 extends TSQCommon +{ + /** + * Name of the TSQ to use. + */ + private static final String TSQ_NAME = "MYTSQ"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TSQExample1"); + + // Create a reference to the TSQ + TSQ tsq = new TSQ(); + + // Specify the queue name and that we are using main storage + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + // Create a new instance of this class + TSQExample1 ex = new TSQExample1(tsq); + + // Write text to the queue + ex.writeToQueue(); + + // Read text from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TSQExample1"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tsq - the temporary storage queue reference we will + * be manipulating in this example. + */ + public TSQExample1(TSQ tsq) + { + super(tsq); + } + + /** + * Write of Java string data to a TSQ. + */ + public void writeToQueue() + { + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Construct a message for writing to the queue + String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); + + try { + // Write the data to the TSQ + // No codepage conversion required for this method + // Requires CICS TS V5.1 and later (JCICS 1.401.0) + this.tsq.writeString(msg); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + } + + /** + * Simple read of string data from a TSQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + ItemHolder holder = new ItemHolder(); + + // Read data from the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + try { + // Read the data from CICS (TSQ indices are 1-based) + this.tsq.readItem(i, holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Assume this is a valid character string in the CICS local CCSID + // Requires CICS TS V5.1 and later (JCICS 1.401.0) + String strData = holder.getStringValue(); + + // Write out to the console + String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample2.java b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample2.java new file mode 100644 index 0000000..8ea9a67 --- /dev/null +++ b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample2.java @@ -0,0 +1,161 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tsq; + +import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.ItemHolder; +import com.ibm.cics.server.TSQ; +import com.ibm.cics.server.TSQType; +import com.ibm.cics.server.Task; + +/** + * Simple example to demonstrate writing and reading a Java String to + * and from a TSQ using JCICS, with manual maintenance of codepages. + */ +public class TSQExample2 extends TSQCommon +{ + /** + * Name of the TSQ to use. + */ + private static final String TSQ_NAME = "MYTSQ"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Resolved at runtime to be the CCSID of the region + */ + private static final String CCSID = + System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TSQExample2"); + + // Create a reference to the TSQ + TSQ tsq = new TSQ(); + + // Specify the queue name and that we are using main storage + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + // Create a new instance of this class + TSQExample2 ex = new TSQExample2(tsq); + + // Write text to the queue + ex.writeToQueue(); + + // Read text from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TSQExample2"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tsq - the temporary storage queue reference we will + * be manipulating in this example. + */ + public TSQExample2(TSQ tsq) + { + super(tsq); + } + + /** + * Write of Java string data to a TSQ. + */ + public void writeToQueue() + { + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Data to write to the TSQ + byte[] data; + + // Construct a message for writing to the queue + String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); + + try { + // Convert the string to a byte[] + data = msg.getBytes(CCSID); + } + catch (UnsupportedEncodingException uee) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(uee); + } + + try { + // Write the data to the TSQ + this.tsq.writeItem(data); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + } + + /** + * Simple read of string data from a TSQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + ItemHolder holder = new ItemHolder(); + + // Read data from the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + try { + // Read the data from CICS (TSQ indices are 1-based) + this.tsq.readItem(i, holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Extract the byte[] data + byte[] data = holder.getValue(); + + // String object to create + String strData; + + try { + // Assume this is a valid character string in the CICS local CCSID + strData = new String(data, CCSID); + } + catch (UnsupportedEncodingException uee) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(uee); + } + + // Write out to the console + String msg = MessageFormat.format("Read data from queue \"{0}\"", strData); + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample3.java b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample3.java new file mode 100644 index 0000000..1d578c1 --- /dev/null +++ b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample3.java @@ -0,0 +1,160 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tsq; + +import java.text.MessageFormat; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.ItemHolder; +import com.ibm.cics.server.TSQ; +import com.ibm.cics.server.TSQType; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.TsqRecord; + +/** + * More complex example to demonstrate writing and reading + * a record to and from a TSQ using JCICS. + * + * This uses the generated class {@link TsqRecord}. + */ +public class TSQExample3 extends TSQCommon +{ + /** + * Name of the TSQ to use. + */ + private static final String TSQ_NAME = "MYTSQ"; + + /** + * Number of items to write to the queue. + */ + private static final int DEPTH_COUNT = 5; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TSQExample3"); + + // Create a reference to the TSQ + TSQ tsq = new TSQ(); + + // Specify the queue name and that we are using main storage + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + // Create a new instance of this class + TSQExample3 ex = new TSQExample3(tsq); + + // Write data to the queue + ex.writeToQueue(); + + // Read data from the queue + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TSQExample3"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tsq - the temporary storage queue reference we will + * be manipulating in this example. + */ + public TSQExample3(TSQ tsq) + { + super(tsq); + } + + /** + * Write of byte[] data to a TSQ. + */ + public void writeToQueue() + { + // Create a wrapper object to write to the queue + // This class has been generated using the JZOS record generator utility + TsqRecord data = new TsqRecord(); + + // Populate with some dummy data + data.setBinaryDigit(42); + data.setCharacterString("TSQ test example"); + data.setNumericValue(123456789); + data.setPackedDec(123); + data.setSignedPacked(-99); + + // Write several items to the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + // Update record for this iteration + data.setRecordId(i); + + // Extract the byte data from the wrapper object + // The generated class handles any codepage conversion required + byte[] record = data.getByteBuffer(); + + try { + // Write the data to the TSQ + this.tsq.writeItem(record); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + } + + /** + * Read of byte[] data from a TSQ. + */ + public void readFromQueue() + { + // A holder object to receive the data from CICS + ItemHolder holder = new ItemHolder(); + + // Read data from the queue + for (int i = 1; i <= DEPTH_COUNT; i++) { + + try { + // Read the data from CICS (TSQ indices are 1-based) + this.tsq.readItem(i, holder); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Obtain the raw bytes from the TSQ item + byte[] itemData = holder.getValue(); + + // Convert to Java object form + // This class has been generated using the JZOS record generator utility + TsqRecord record = new TsqRecord(itemData); + + // Break the record apart + String msg = MessageFormat.format("Record: ({0}) ({1}) ({2}) ({3}) ({4}) ({5})", + record.getRecordId(), + record.getBinaryDigit(), + record.getCharacterString(), + record.getNumericValue(), + record.getPackedDec(), + record.getSignedPacked()); + + // Write out the record to the terminal + Task.getTask().out.println(msg); + } + } +} diff --git a/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample4.java b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample4.java new file mode 100644 index 0000000..537012d --- /dev/null +++ b/cics-java-jcics-tsq-app/src/main/java/com/ibm/cicsdev/tsq/TSQExample4.java @@ -0,0 +1,129 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2016 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.tsq; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.ItemErrorException; +import com.ibm.cics.server.ItemHolder; +import com.ibm.cics.server.TSQ; +import com.ibm.cics.server.TSQType; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.TsqRecord; + +/** + * Extends the {@link TSQExample3} class by including a method which + * updates items in the queue. + */ +public class TSQExample4 extends TSQExample3 +{ + /** + * Name of the TSQ to use. + */ + private static final String TSQ_NAME = "MYTSQ"; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting TSQExample4"); + + // Create a reference to the TSQ + TSQ tsq = new TSQ(); + + // Specify the queue name and that we are using main storage + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + // Create a new instance of this class + TSQExample4 ex = new TSQExample4(tsq); + + // Write some initial data to the TSQ + ex.writeToQueue(); + + // Update the TSQ with a browse and rewrite + ex.updateQueue(); + + // Read from the TSQ to confirm update + ex.readFromQueue(); + + // Completion message + task.out.println("Completed TSQExample4"); + } + + /** + * Constructor used to pass data to superclass constructor. + * + * @param tsq - the temporary storage queue reference we will + * be manipulating in this example. + */ + public TSQExample4(TSQ tsq) + { + super(tsq); + } + + /** + * Browses through a queue created by {@link TSQExample3} and updates each record. + * + * Each item in the queue is assumed to have a layout specified by the generated + * {@link TsqRecord} class. + */ + public void updateQueue() + { + // Current item we are reading (TSQ indices are 1-based) + int currentItem = 1; + + // Holder to receive data from TSQ + ItemHolder holder = new ItemHolder(); + + // Loop until we break out at end of queue + while ( true ) { + + try { + // Browse through the queue sequentially + this.tsq.readNextItem(holder); + } + catch (ItemErrorException iee) { + // ITEMERR represents end of browse - normal condition here + break; + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Extract the record + // This class has been generated using the JZOS record generator utility + TsqRecord record = new TsqRecord(holder.getValue()); + + // Update the record ID and character fields + record.setRecordId(record.getRecordId() + 100); + record.setCharacterString("Updated: " + record.getCharacterString()); + + try { + // Write record back to the queue + this.tsq.rewriteItem(currentItem, record.getByteBuffer()); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + + // Next queue item + currentItem++; + } + } +} diff --git a/cics-java-jcics-tsq-bundle/.project b/cics-java-jcics-tsq-bundle/.project new file mode 100644 index 0000000..7dc2535 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.project @@ -0,0 +1,34 @@ + + + cics-java-jcics-tsq-bundle + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.buildship.core.gradleprojectnature + + + + 1772729611922 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e479558 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..243b3fd --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/cics-java-jcics-tsq-bundle/build.gradle b/cics-java-jcics-tsq-bundle/build.gradle new file mode 100644 index 0000000..c65ac83 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" +} + +description = 'CICS Java JCICS TSQ sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-tsq-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + diff --git a/cics-java-jcics-tsq-bundle/pom.xml b/cics-java-jcics-tsq-bundle/pom.xml new file mode 100644 index 0000000..12fc5eb --- /dev/null +++ b/cics-java-jcics-tsq-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tsq-bundle + cics-bundle + CICS Java JCICS TSQ sample - CICS bundle + + + + ${project.groupId} + cics-java-jcics-tsq-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.8 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/etc/TDQ/DFHCSD.txt b/etc/TDQ/DFHCSD.txt new file mode 100644 index 0000000..14fe8d1 --- /dev/null +++ b/etc/TDQ/DFHCSD.txt @@ -0,0 +1,44 @@ + + DEFINE PROGRAM(JAVATDQ1) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tdq.TDQExample1) + + DEFINE PROGRAM(JAVATDQ2) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tdq.TDQExample2) + + DEFINE PROGRAM(JAVATDQ3) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tdq.TDQExample3) + + DEFINE TRANSACTION(JTD1) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + PROGRAM(JAVATDQ1) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JTD2) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + PROGRAM(JAVATDQ2) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JTD3) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + PROGRAM(JAVATDQ3) + TASKDATALOC(ANY) + + DEFINE BUNDLE(JCICSTDQ) GROUP(JCICSAMP) + DESCRIPTION(Java TDQ sample) + BUNDLEDIR(/u/cics1/com.ibm.cicsdev.tdq.cicsbundle_1.0.0) + + DEFINE TDQUEUE(MYQ1) GROUP(JCICSAMP) + DESCRIPTION(Intrapartition TDQ for JCICS samples) + TYPE(INTRA) diff --git a/etc/TDQ/README.md b/etc/TDQ/README.md new file mode 100644 index 0000000..097cc2a --- /dev/null +++ b/etc/TDQ/README.md @@ -0,0 +1,4 @@ +Supporting materials used in conjunction with the JCICS TDQ samples. + +* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/_remote.repositories b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/_remote.repositories new file mode 100644 index 0000000..3491d81 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Tue Mar 17 16:13:16 GMT 2026 +cics-java-jcics-tdq-record-1.0.jar>= +cics-java-jcics-tdq-record-1.0.pom>= diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.jar b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..49975b27ac949cdd2ccffdeda09ed68c002f0c11 GIT binary patch literal 7794 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%0AP;eW4sLtL2RenVk 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 I<-gVc0Ya+{-2eap literal 0 HcmV?d00001 diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.pom b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.pom new file mode 100644 index 0000000..3554fbc --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/1.0/cics-java-jcics-tdq-record-1.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.ibm.cicsdev + cics-java-jcics-tdq-record + 1.0 + POM was created from install:install-file + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/maven-metadata-local.xml b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/maven-metadata-local.xml new file mode 100644 index 0000000..65b3c81 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tdq-record/maven-metadata-local.xml @@ -0,0 +1,12 @@ + + + com.ibm.cicsdev + cics-java-jcics-tdq-record + + 1.0 + + 1.0 + + 20260317161313 + + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/_remote.repositories b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/_remote.repositories new file mode 100644 index 0000000..4dcd270 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Wed Mar 18 10:18:02 GMT 2026 +cics-java-jcics-tsq-record-1.0.jar>= +cics-java-jcics-tsq-record-1.0.pom>= diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.jar b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..990a58f42a5b89b853e4eef8b6e371b925612c94 GIT binary patch literal 7793 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 IQ2wj_5Ba1WoB#j- literal 0 HcmV?d00001 diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.pom b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.pom new file mode 100644 index 0000000..31af1c3 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/1.0/cics-java-jcics-tsq-record-1.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.ibm.cicsdev + cics-java-jcics-tsq-record + 1.0 + POM was created from install:install-file + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/maven-metadata-local.xml b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/maven-metadata-local.xml new file mode 100644 index 0000000..f4cf191 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-tsq-record/maven-metadata-local.xml @@ -0,0 +1,12 @@ + + + com.ibm.cicsdev + cics-java-jcics-tsq-record + + 1.0 + + 1.0 + + 20260318101801 + + diff --git a/pom.xml b/pom.xml index fdbf2c5..9ea459b 100644 --- a/pom.xml +++ b/pom.xml @@ -36,10 +36,28 @@ + + + + + cics-java-jcics-record-lib + Project libraries + file://local-repo + + ignore + + + + + cics-java-jcics-link-app cics-java-jcics-link-bundle cics-java-jcics-serialize-app cics-java-jcics-serialize-bundle + cics-java-jcics-tdq-app + cics-java-jcics-tdq-bundle + cics-java-jcics-tsq-app + cics-java-jcics-tsq-bundle \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 746f1a3..fab06b8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,6 +3,10 @@ include(':cics-java-jcics-serialize-app') include(':cics-java-jcics-serialize-bundle') include(':cics-java-jcics-link-app') include(':cics-java-jcics-link-bundle') +include(':cics-java-jcics-tdq-app') +include(':cics-java-jcics-tdq-bundle') +include(':cics-java-jcics-tsq-app') +include(':cics-java-jcics-tsq-bundle') From 627ca9c44587c775488fcaf6cdeadc70c90457e7 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 10:50:34 +0000 Subject: [PATCH 37/73] Fix terminal-bundle project name --- cics-java-jcics-terminal-bundle/.project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project index b7c4e01..7648613 100644 --- a/cics-java-jcics-terminal-bundle/.project +++ b/cics-java-jcics-terminal-bundle/.project @@ -1,6 +1,6 @@ - cics-java-jcics-tdq-bundle + cics-java-jcics-terminal-bundle From c842cc5c2efc424792e8a81f2b2d275e1b739e06 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 11:11:50 +0000 Subject: [PATCH 38/73] Add TSQ record to lib dir --- cics-java-jcics-tsq-app/lib/.gitignore | 2 ++ .../lib/cics-java-jcics-tsq-record-1.0.jar | Bin 0 -> 7793 bytes 2 files changed, 2 insertions(+) create mode 100644 cics-java-jcics-tsq-app/lib/.gitignore create mode 100644 cics-java-jcics-tsq-app/lib/cics-java-jcics-tsq-record-1.0.jar diff --git a/cics-java-jcics-tsq-app/lib/.gitignore b/cics-java-jcics-tsq-app/lib/.gitignore new file mode 100644 index 0000000..5e1dd75 --- /dev/null +++ b/cics-java-jcics-tsq-app/lib/.gitignore @@ -0,0 +1,2 @@ +# Avoid ignoring repo JARs +!*.jar diff --git a/cics-java-jcics-tsq-app/lib/cics-java-jcics-tsq-record-1.0.jar b/cics-java-jcics-tsq-app/lib/cics-java-jcics-tsq-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..990a58f42a5b89b853e4eef8b6e371b925612c94 GIT binary patch literal 7793 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 IQ2wj_5Ba1WoB#j- literal 0 HcmV?d00001 From 58e0910569cbe3e12d2d5306fd80e1b44dd68747 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 11:19:30 +0000 Subject: [PATCH 39/73] fix .settings --- .../.settings/org.eclipse.buildship.core.prefs | 2 +- cics-java-jcics-link-app/build.properties | 3 +-- cics-java-jcics-serialize-app/build.properties | 1 - .../.settings/org.eclipse.buildship.core.prefs | 4 ++-- cics-java-jcics-tdq-app/build.properties | 3 +-- cics-java-jcics-terminal-app/build.properties | 6 ++---- cics-java-jcics-tsq-app/build.properties | 3 +-- 7 files changed, 8 insertions(+), 14 deletions(-) diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs index 3da017b..6513154 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir= eclipse.preferences.version=1 gradle.user.home= java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk diff --git a/cics-java-jcics-link-app/build.properties b/cics-java-jcics-link-app/build.properties index 916ff2a..8a44a85 100644 --- a/cics-java-jcics-link-app/build.properties +++ b/cics-java-jcics-link-app/build.properties @@ -2,8 +2,7 @@ bin.includes = META-INF/,\ .,\ lib/,\ lib/cics-java-jcics-edupgm-1.0.jar -source.. = src/main/java/,\ - .apt_generated/ +source.. = src/main/java/ jre.compilation.profile = JavaSE-17 jars.compile.order = .,\ lib/cics-java-jcics-edupgm-1.0.jar diff --git a/cics-java-jcics-serialize-app/build.properties b/cics-java-jcics-serialize-app/build.properties index 3a38e3a..80f4af9 100644 --- a/cics-java-jcics-serialize-app/build.properties +++ b/cics-java-jcics-serialize-app/build.properties @@ -1,6 +1,5 @@ bin.includes = META-INF/,\ . source.. = src/main/java/,\ - .apt_generated/,\ src/main/resources/ jre.compilation.profile = JavaSE-17 diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs index e7597db..6513154 100644 --- a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs @@ -1,8 +1,8 @@ -arguments=--init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\kotlin\\init.gradle --init-script C\:\\Users\\PhilWakelin\\AppData\\Roaming\\Code\\User\\globalStorage\\redhat.java\\1.53.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\groovy\\init.gradle +arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir= eclipse.preferences.version=1 gradle.user.home= java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk diff --git a/cics-java-jcics-tdq-app/build.properties b/cics-java-jcics-tdq-app/build.properties index ab0f30a..13f17b2 100644 --- a/cics-java-jcics-tdq-app/build.properties +++ b/cics-java-jcics-tdq-app/build.properties @@ -2,8 +2,7 @@ bin.includes = META-INF/,\ .,\ lib/,\ lib/cics-java-jcics-tdq-record-1.0.jar -source.. = src/main/java/,\ - .apt_generated/ +source.. = src/main/java/ jre.compilation.profile = JavaSE-17 jars.compile.order = .,\ lib/cics-java-jcics-tdq-record-1.0.jar diff --git a/cics-java-jcics-terminal-app/build.properties b/cics-java-jcics-terminal-app/build.properties index 65bd98b..622bc39 100644 --- a/cics-java-jcics-terminal-app/build.properties +++ b/cics-java-jcics-terminal-app/build.properties @@ -1,7 +1,5 @@ bin.includes = META-INF/,\ - .,\ - lib/ -source.. = src/main/java/,\ - .apt_generated/ + . +source.. = src/main/java/ jre.compilation.profile = JavaSE-17 jars.compile.order = . diff --git a/cics-java-jcics-tsq-app/build.properties b/cics-java-jcics-tsq-app/build.properties index f444e08..8d03ce1 100644 --- a/cics-java-jcics-tsq-app/build.properties +++ b/cics-java-jcics-tsq-app/build.properties @@ -2,8 +2,7 @@ bin.includes = META-INF/,\ .,\ lib/,\ lib/cics-java-jcics-tsq-record-1.0.jar -source.. = src/main/java/,\ - .apt_generated/ +source.. = src/main/java/ jre.compilation.profile = JavaSE-17 jars.compile.order = .,\ lib/cics-java-jcics-tsq-record-1.0.jar From 3b08258576627e36098d481202574bde1bf3826e Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 15:56:19 +0000 Subject: [PATCH 40/73] Update settings.gradle --- settings.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/settings.gradle b/settings.gradle index fab06b8..0252fd5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,8 @@ rootProject.name = 'cics-java-jcics-samples' include(':cics-java-jcics-serialize-app') include(':cics-java-jcics-serialize-bundle') +include(':cics-java-jcics-terminal-app') +include(':cics-java-jcics-terminal-bundle') include(':cics-java-jcics-link-app') include(':cics-java-jcics-link-bundle') include(':cics-java-jcics-tdq-app') From 8aa268e74a7b74500ac2e221641702b457c16938 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 16:20:39 +0000 Subject: [PATCH 41/73] Update buildship and build properties --- .settings/org.eclipse.buildship.core.prefs | 2 +- .../.settings/org.eclipse.buildship.core.prefs | 10 +++++----- .../.settings/org.eclipse.buildship.core.prefs | 2 +- .../.settings/org.eclipse.buildship.core.prefs | 2 +- cics-java-jcics-serialize-app/build.properties | 3 +-- .../.settings/org.eclipse.buildship.core.prefs | 2 +- .../.settings/org.eclipse.buildship.core.prefs | 12 ++++++------ .../.settings/org.eclipse.buildship.core.prefs | 2 +- .../.settings/org.eclipse.buildship.core.prefs | 10 +++++----- .../.settings/org.eclipse.buildship.core.prefs | 12 ++++++------ .../.settings/org.eclipse.buildship.core.prefs | 2 +- 11 files changed, 29 insertions(+), 30 deletions(-) diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index d477a44..1a9e8d6 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=cics-java-jcics-tsq-bundle +connection.project.dir=cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs index 6513154..e479558 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ arguments= auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs index 1ec8c8f..d7af79e 100644 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs index 1ec8c8f..d7af79e 100644 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-serialize-app/build.properties b/cics-java-jcics-serialize-app/build.properties index 80f4af9..36863bb 100644 --- a/cics-java-jcics-serialize-app/build.properties +++ b/cics-java-jcics-serialize-app/build.properties @@ -1,5 +1,4 @@ bin.includes = META-INF/,\ . -source.. = src/main/java/,\ - src/main/resources/ +source.. = src/main/java/ jre.compilation.profile = JavaSE-17 diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs index 1ec8c8f..d7af79e 100644 --- a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs index 6513154..d7af79e 100644 --- a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ arguments= auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) -connection.project.dir= +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= -java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs index 1ec8c8f..d7af79e 100644 --- a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-tsq-bundle +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home= diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs index 6513154..e479558 100644 --- a/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ arguments= auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs index 6513154..d7af79e 100644 --- a/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ arguments= auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9)) -connection.project.dir= +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= -java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs index e479558..d7af79e 100644 --- a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs +++ b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= +connection.project.dir=../cics-java-jcics-link-app eclipse.preferences.version=1 gradle.user.home= java.home= From 2126983cdc869867e3f35003e39318239e6826e8 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 16:20:53 +0000 Subject: [PATCH 42/73] Update Terminal manifest --- cics-java-jcics-terminal-app/META-INF/MANIFEST.MF | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF b/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF index a9df8f7..3e3078d 100644 --- a/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF +++ b/cics-java-jcics-terminal-app/META-INF/MANIFEST.MF @@ -4,9 +4,10 @@ Bundle-Name: Sample JCICS terminal code Bundle-SymbolicName: com.ibm.cicsdev.terminal Bundle-Version: 1.0.1 Bundle-Vendor: IBM -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-17 CICS-MainClass: com.ibm.cicsdev.terminal.TerminalExample1 -Import-Package: com.ibm.cics.server;version="[1.700,3.0.0)" +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)" Bundle-ClassPath: . Automatic-Module-Name: com.ibm.cicsdev.terminal + From c715d1c5db281933bbf28a9febb4759633907b34 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 16:42:16 +0000 Subject: [PATCH 43/73] Update serialize-app classpath --- cics-java-jcics-serialize-app/.classpath | 26 ------------------------ 1 file changed, 26 deletions(-) diff --git a/cics-java-jcics-serialize-app/.classpath b/cics-java-jcics-serialize-app/.classpath index 1eaa95b..1016f15 100644 --- a/cics-java-jcics-serialize-app/.classpath +++ b/cics-java-jcics-serialize-app/.classpath @@ -6,26 +6,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -33,11 +13,5 @@ - - - - - - From d3e6596321964f4b90b4a4e12ffcf0b480c658c6 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 16:57:35 +0000 Subject: [PATCH 44/73] Add blog --- blog/blog.md | 417 ++++++++++++++++++ blog/graphics/JCICS.png | Bin 0 -> 17914 bytes .../JavaExceptions-1-e1484928035395.png | Bin 0 -> 155288 bytes 3 files changed, 417 insertions(+) create mode 100644 blog/blog.md create mode 100644 blog/graphics/JCICS.png create mode 100644 blog/graphics/JavaExceptions-1-e1484928035395.png diff --git a/blog/blog.md b/blog/blog.md new file mode 100644 index 0000000..a702506 --- /dev/null +++ b/blog/blog.md @@ -0,0 +1,417 @@ +# Getting to grips with JCICS + + +JCICS provides a simple object hierarchy for accessing the CICS API from Java, and is similar to the EXEC CICS command API supported for other languages such as COBOL or assembler. Unlike other CICS high level languages, no translation step is necessary during compilation as the underlying EXEC CICS calls are dynamically generated via the Java Native Interface (JNI). JCICS is a fairly simple API and if you understand the EXEC CICS API and have some knowledge of Java then its a small jump to make. This does mean its not as object oriented as it could be, so if you have an OO outlook on life you may need to bite your tongue at times. + +![JCICS](graphics/JCICS.png) + +The following tutorial summarizes how to use the most popular parts of the JCICS API within CICS Java programs for deployment to an OSGi JVM server. You can also use JCICS in a Web application deployed into a Liberty JVM server in integrated mode, and the code samples provided are equally applicable to this environment.. + +# Application development + +The JCICS API is provided in the com.ibm.cics.server.jar library in the $USSHOME/lib directory on zFS, however, it is also integrated into the [CICS Explorer](https://developer.ibm.com/cics/category/cics-explorer/) SDK for Java which can be installed into an Eclipse development environment and provides all the function needed to easily develop JCICS applications on a workstation and deploy onto the zFS filing system on z/OS. The JCICS API can be used in any CICS JVM server environment including both OSGi and Liberty JVM servers. In this article we show how to create components for an OSGi JVM server that can be linked to from other CICS programs, but the samples provided can easily be reused in a Java EE web application for deployment into a Liberty JVM server. + +At the last count there were around 80 different classes that map to the underlying CICS commands or variants thereof, and you can view the full set in the online [Javadoc](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.jcics.javadoc/overview-tree.html). Most JCICS classes have a one to one relationship with the EXEC CICS API commands but this is not always the case. The most commonly used JCICS classes are Task, Program, Channel, Container, TSQ, TDQ and KSDS and we will give an overview of how to use these within a CICS Java program for deployment into an OSGi JVM server. + +| Class | Function | +| --------- | -------- | +| Task | Represents the CICS task | +| Program | Provides the ability to LINK to other CICS programs | +| Channel and Container | Support for CICS channels and containers | +| TSQ | Access to CICS temporary storage queues | +| TDQ | Access to CICS transient data queues | +| KSDS | Access to VSAM KSDS files | + +> There is no support for the CICS Systems Programming interface (SPI) such as `EXEC CICS INQUIRE` or `SET` commands and so Java applications that need to use these commands should link to non\-Java components to perform SPI commands + +## Tasks and programs + +Lets first take a look at the two classes you are most likely to need *Task* and *Program*. The Program class maps to the [EXEC CICS LINK](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_link.html) command and its variants, and the Task class maps to the [](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html)[ASSIGN](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_assign.html) and [ADDRESS](http://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/commands/dfhp4_address.html) commands but also provides a set of helper methods to access the EIB and to control syncpoints and abends, but more about this later. + +The following code snippet shows how to use Task and Program to link to another CICS program, and is described in more detail using the line numbers below. A full working example is available in the [LinkProg1](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg1.java) sample. + + +```java +private static final String PROG_NAME = "EC01"; +private static final int CA_LEN = 18 ; +.... +public static void main(String[] args) +{ +... + Task task = Task.getTask(); + task.out.println("Hello world"); + + Program prog = new Program(); + prog.setName(PROG_NAME); + prog.setSyncOnReturn(false); + byte[] ca = new byte[CA_LEN]; + prog.link(ca); +``` + + +Lines **1\-2.** Initialize constants including name of CICS program and length of COMMAREA input +Line **4.** The `main(String[] args)` constructor signifies this as the entry point for this CICS program, which allows this class to be named in the CICS\-MainClass header in the OSGi bundle manifest +Line **7.** Get the Task object representing the CICS task which the current Java thread is using, this will drive the underlying CICS ASSIGN command on first usage +Line **8.** Send output to the print writer which will be directed to either the user’s terminal or the stdout if there is no terminal +Line **10.** Instantiate an instance of a Program, and then set properties such as the name and whether or not the LINK will use the SYNCONRETURN option +Line **13.** Create a byte array and then pass this as input on the `Program.link()` method. This will drive an `EXEC CICS LINK` command to the CICS program named in line 11 +The COMMAREA will be passed as a byte array, which is an unstructured array of bytes of the specified length. Most CICS programs expect structured data as input and if you need to build a Java bean to map to this you can use the IBM Record Generator for Java or the Rational J2C Tools to build wrapper classes to map the records, see [Building Java records from COBOL with the IBM Record Generator for Java](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/). Note, there is no return type from the `Program.link()` method, this is often the case in JCICS and instead the data is updated in situ within the referenced COMMAREA. + +The program that is invoked by a link command can also be written in Java, and in our case will be passed the COMMAREA as a simple byte array. A sample Java version of the EC01 CICS COBOL program is shown below which shows how to use the *CommAreaHolder* class to receive the byte array mapping to the COMMAREA. A full working example is available in the [LinkServEC01](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEC01.java) sample. + +```java +public class LinkServEC01 +{ + private static final int CA_LEN = 18 ; + private static final String CA_LEN_ABCODE = "LEN"; + private static final SimpleDateFormat dfTime = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); + private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + public static void main(CommAreaHolder cah) + { + + Task task = Task.getTask(); + + if (cah.getValue().length < CA_LEN ) + { + task.abend(CA_LEN_ABCODE); + } + + Date timestamp = new Date(); + byte ba[] = dfTime.format(timestamp).getBytes(CCSID); + System.arraycopy (ba, 0, cah.getValue(), 0, ba.length); + ... + } +``` + + +Lines **3\-5.** Initialize constants +Line **6.** Get the local encoding of the CICS region, this defaults to EBCDIC +Lines **13\-16.** Check input array is long enough, and terminate the task using an abend if input is too short +Lines **18\-19.** Build time string for return to caller +Lines **20\-21.** Create byte array from the time string using the CICS encoding and copy into the CommAreaHolder for return to the calling program as the COMMAREA + +## Exception handling + +In Java errors other than *RuntimeException* that extend the *Exception* class are known as checked exceptions and must either be caught or declared as part of the method signature using the throws keyword. Any Java code which calls a method declared as throwing a checked exception must either provide logic to catch the checked exception, or add the exception to it’s own method signature, in order to propagate the exception further up the stack. The constraints on checked exceptions are enforced at compile time, and failure to adhere to the specification will result in a compilation error. + +By contrast in traditional high level languages such as COBOL, when a CICS command returns an error (such as unknown program on a link), then it will return a response code (PGMIDERR) to the application using the data area supplied in the RESP parameter of the CICS command . This enables the application to handle or ignore errors on a call by call basis. + +```cobol +EXEC CICS LINK PROGRAM('ECIPROG') RESP(RESP) + END-EXEC +IF RESP = DFHRESP(INVREQ) + ....... +END-IF +``` + +In Java things are pretty similar as just about all JCICS commands can throw sub classes of the checked *CICSConditionException*, which represent error response codes from the underlying EXEC CICS commands. For a INVREQ this maps to an InvalidRequestException which looks like this in the class hierarchy. + +```java +java.lang.Exception + com.ibm.cics.server.CicsException + com.ibm.cics.server.CicsConditionException + com.ibm.cics.server.CicsResponseConditionException + com.ibm.cics.server.InvalidRequestException +``` + +Now let’s see how this can be used in our `Program.link()` call. Each sub class of `CicsConditionException` can be individually caught so specific errors can be actioned or ignored. +Order is important, a compilation error is displayed if a catch clause for a more generic exception appears before a catch clause for a more specific one (that is, for one of its subclasses). In our example we just log a message for the `InvalidRequestException` and carry on processing. Note this means the transaction will continue normal processing and thus potentially commit any recoverable data, so make sure you don’t do this for fatal errors. We then catch all other CICS errors (**17**) and throw them up the stack using a new `RuntimeException` to drive subsequent error handling, which by default will abend the CICS task and rollback the transaction, but more about that later. + +```java +task task = Task.getTask(); +task.out.println("Hello world"); + +try +{ + Program prog = new Program(); + prog.setName(PROG_NAME); + prog.setSyncOnReturn(false); + byte[] ca = new byte[CA_LEN]; + prog.link(ca); + +} +catch (InvalidRequestException ire) +{ + task.out.println("Invalid request on link - INVREQ"); +} +catch (CicsConditionException cce) +{ + throw new RuntimeException(cce); +} +``` + +## Channels and containers + +The other method of passing data from one CICS program to another is by using channels and containers. A channel is an interface between programs, it typically holds one or more containers to be passed between the programs. A container is a named data area. Channels and containers offer the advantage that more than 32KB of data can be passed, and both character and binary data can be specified. Character data (or strings in Java terms) is automatically converted at the API level, whereas binary data (or a byte array in Java terms) is flowed unconverted. By contrast, COMMAREAs are confined to a 32KB limit and are unstructured byte arrays. Multiple containers can be passed between programs within a channel, providing a high degree of flexibility about how to structure data. + +The following abbreviated code snippet shows how to use channels and containers to pass a character string input container on a LINK and then to retrieve and read both a character string and a binary container. A full working example is available in the [LinkProg3](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkProg3.java) sample and the corresponding back end program is available at [LinkServEduchan](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.link/src/com/ibm/cicsdev/link/LinkServEduchan.java). + + +```java + + private static final String PROG_NAME = "EDUCHAN"; + private static final String CHANNEL="EDUCHAN"; + private static final String INPUT_CONTAINER="INPUTDATA"; + private static final String DATE_CONTAINER="CICSTIME"; + private static final String CICSRC_CONTAINER="CICSRC"; + private static final String INPUTSTRING="Hello from Java"; +.... + + Task task = Task.getTask(); + Program prog = new Program(); + prog.setName(PROG_NAME); +.... + + Channel testChannel = task.createChannel(CHANNEL); + Container inputContainer = testChannel.createContainer(INPUT_CONTAINER); + inputContainer.putString(INPUTSTRING); + + prog.link(testChannel); + + Container charContainer = testChannel.getContainer(DATE_CONTAINER); + if (charContainer!=null) + { + resultStr = charContainer.getString(); + } + + Container bitContainer = testChannel.getContainer(CICSRC_CONTAINER); + if (bitContainer!=null) + { + byte[] ba = bitContainer.get(); + ByteBuffer bb = ByteBuffer.wrap(ba); + cicsrc = bb.getInt(); + +``` + + +Lines **1\-6.** Initialize constants to define program name, and container data and names. +Line **14.** Create a `Channel` object which will be associated with the task. +Lines **15\-16.** Create the input container named `INPUTDATA`, the `createContainer()` method signature takes the String *Hello from Java* as input which will cause CICS to create a character based container as opposed to a binary container. The encoding of this data will be stored internally in UTF\-16 when created in Java in order to handle the Unicode String data, and will be automatically converted to the local EBCDIC encoding if read from a COBOL program. +Line **18.** Pass the channel as a reference on the `Program.link()` method, our invoked program [EDUCHAN](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/src/Cobol/EDUCHAN.cbl) will receive the `INPUTDATA` container, and will reverse the input data, and return the formatted time in a character container along with an integer return code in a binary container. +Lines **20\-23.** Create a new container object `charContainer` and get the character container defined as CICSTIME from the channel. This will return null (rather than throw a CICSConditionException which is the usual JCICS error model) if it does not exist, so we first test for null before reading the string data from it using the `Container.getString()` method. +Lines **26\-32.** Create a new container object `bitContainer` and get the binary container defined as CICSRC from the channel. Again this could return null if its not present so we first test for null. Next we create a byte array and get the data from the `bitContainer`. The data is actually a 32\-bit integer from a CICS response code, so we need to wrap this into a `ByteBuffer` and then read the integer from this. + +## TS and TD queues + +A temporary storage (TS) queue is a set of data items that can be read and reread in any sequence. TSQ resources can be dynamically created at runtime, unlike transient data (TD) queues that must be defined in advance. + +The following snippets show how to use the *TSQ* class to write string data to a TSQ and then read it back using a JCICS holder. A full working example of this code available in the [TSQExample2](https://github.com/cicsdev/cics-java-jcics-samples/blob/main/projects/com.ibm.cicsdev.tsq/src/com/ibm/cicsdev/tsq/TSQExample2.java) sample. + +```java +public class TSQExample2 extends TSQCommon +{ + private static final String TSQ_NAME = "MYTSQ"; + private static final int DEPTH_COUNT = 5; + private static final String CCSID = System.getProperty("com.ibm.cics.jvmserver.local.ccsid"); + + public static void main(String[] args) + { + TSQ tsq = new TSQ(); + tsq.setName(TSQ_NAME); + tsq.setType(TSQType.MAIN); + + for (int i = 1; i <= DEPTH_COUNT; i++) + { + + String msg = MessageFormat.format("TSQ write from JCICS item {0}", i); + byte[] data; + try + { + data = msg.getBytes(CCSID); + } + catch (UnsupportedEncodingException uee) + { + throw new RuntimeException(uee); + } + try { + this.tsq.writeItem(data); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } + } + } +``` + + +Lines **3\-5.** Initialize constants +Lines **9\-11.** Create `TSQ` object and set TSQ name and storage type as MAIN (in memory) +Line **13.** Loop around writing multiple records to the TSQ +Lines **17\-21.** Create byte array from the input string using the CICS encoding +Line **27.** Write each item to the TSQ using the `TSQ.writeItem()` method + +The following method `readFromQueue()` shows how to use a JCICS `ItemHolder` to read bytes from a TSQ. + +```java +public void readFromQueue() +{ + ItemHolder holder = new ItemHolder(); + + for (int i = 1; i <= DEPTH_COUNT; i++) + { + + try + { + this.tsq.readItem(i, holder); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } + + byte[] data = holder.getValue(); + String strData; + try + { + strData = new String(data, CCSID); + } + catch (UnsupportedEncodingException uee) + { + throw new RuntimeException(uee); + } + .... + } +} +``` + + +Line **3.** Create a JCICS `ItemHolder` to be used to read bytes from the TSQ +Line **10.** Use the `TSQ.readItem()` method to loop around reading items from the TSQ into the ItemHolder, starting from an index of 1 as this is the first record in a TS queue > +Line **17.** Extract the byte array from the item holder +Line **21.** Create a new string using the CICS encoding + +Writing data to a TD queue is similar to TS and a set of examples is provided in the [com.ibm.cicsdev.tdq](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.tdq) project. + +## VSAM files + +VSAM is a high performance file storage access method widely used in CICS applications. There are 3 different types of VSAM files, key\-sequenced, entry\-sequence and relative record. In this article we will just cover the most popular type the key\-sequenced data set (KSDS) which is represented in JCICS via the *KSDS* class. + +The following snippets show how to use the KSDS class to read and write structured records to VSAM file. In this example a `StockPart` record is used to represent the structured record, and was created from a COBOL copybook structure using the [JZOS record generation](https://developer.ibm.com/cics/2016/05/12/java-cics-using-ibmjzos/) tool. A full working example of this code is available in the [KsdsExample1](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/projects/com.ibm.cicsdev.vsam/src/com/ibm/cicsdev/vsam/ksds) sample which extends the class KsdsExampleCommon. + +```java +private static final String FILE_NAME = "XMPLKSDS"; +private final KSDS ksds; +.... + +public void addRecord(StockPart sp) +{ + this.ksds = new KSDS(); + this.ksds.setName(FILE_NAME); + byte[] record = sp.getByteBuffer(); + + byte[] key = StockPartHelper.getKey(sp); + + try + { + this.ksds.write(key, record); + } + catch (DuplicateRecordException dre) + { // Collision on the generated key + String strMsg = "Tried to insert duplicate key 0x%08X"; + Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); + throw new RuntimeException(dre); + } + catch (InvalidRequestException ire) + { + if ( ire.getRESP2() == 20 ) // File not addable + { + String strMsg = "Add operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) + { + throw new RuntimeException(cce); + } +} +``` + + +Line **9.** Get the byte structure from the generated record using the getByteBuffer() method on the StockPark record +Line **11.** Create a byte array containing the key for this record +Line **15.** Write the record into the VSAM file using the specified key +Lines **17&23.** Catch specific responses from the WRITE FILE commmand +Line **33.** Catch all other responses and throw an exception to abend the task + +## Unchecked exceptions, abends and rollbacks + +In Java unexpected error conditions are represented by Java classes which extend the `RuntimeException` class, and are known as *unchecked exceptions*. Unchecked exceptions are not subject to the compile time checking mandated for checked exceptions, although they can be caught if required. There are only a few unchecked exceptions in the JCICS API, and they all extend the `CICSRuntimeException` class. + +![JavaExceptions](graphics/JavaExceptions-1-e1484928035395.png) + +All of these unchecked exceptions that extend `CICSRuntimeException` represent conditions within CICS that should **not** generally be handled by an application. Java code running in CICS should not catch these exceptions without re\-throwing them, either explicitly in a catch block, or implicitly by catching a superclass of these exceptions such as `Exception` or `Throwable` as shown below. + +```java +try +{ + ... +} +catch ( Exception e ) +{ + ... +} +``` + + +Instead, they should be allowed to propagate out of the Java environment and back to CICS, where the task will abend. Note, included in this list is `AbendException` which represents an abend of a CICS task, and should only be caught if you wish to develop your own Java abend handling routine and re\-throw the Exception. If a Java exception such as a null pointer exception is allowed to propagate out of the Java code and back to the JVM server runtime, this is generally surfaced as one of the CICS abends prefixed with AJ. Most commonly, an uncaught exception will result in an AJ04 abend, and the transaction will be rolled\-back. The following snippet shows how to catch and log both trivial exceptions, CICS abends and other unchecked exceptions. + + +```java +try +{ +... +} +catch (TrivialException te) +{ + LOGGER.warn(); +} +catch (AbendException ae) +{ + LOGGER.warn("CICS Abend:" ae.getABCODE() + " Task:" + Task.getTask().getTaskNumber() ); + throw ae; +} +catch (Exception e) +{ + LOGGER.warn(); + throw e; +} +``` + +It is also possible for a Java application to rollback or abend the CICS task directly. This can be achieved using the `Task.rollback(`) or `Task.abend()` methods in the Task class, as shown in the LinkServEC01 sample. Abending the CICS task is similar in concept to the throwing of Java exception, as it allows a CICS abend handler written in COBOL (or another language) to take control of error processing. + + +```java +Task.getTask().abend(ABCODE) + +``` + +The various forms of the `Task.abend()` method allow an application to optionally specify an abend code or whether a dump is required. The forceAbend() methods provide the same options as the equivalent abend methods, but are equivalent to specifying the CANCEL keyword on the EXEC CICS ABEND command. Invoking a force abend method will always terminate the task abnormally, and overrides any existing CICS abend handlers that have been established for the task. + +Rolling back the transaction is equivalent to issuing an `EXEC CICS SYNCPOINT ROLLBACK` command, and will allow the task to continue but rollback all the updates that have taken place so far in the current unit\-of\-work. In JCICS this is achieved using the `Task.rollback()` method as shown below. + + +```java +try +{ + Task.getTask().rollback(); +} +catch (InvalidRequestException ire) +{ + ..... +} +``` + + +> **Note**: When accessing resources controlled by the Liberty transaction manager, such as a remote DB2 database using JDBC type 4 connectivity then it is necessary to use the Java transaction API (JTA) to create a Java transaction to control the global transaction scope, including the subordinate CICS unit\-of\-work. In this case it is not possible to use the `Task.rollback()` method and instead the JTA API should be used. For further details refer to this article [Using Java Transaction in CICS Liberty to coordinate JDBC updates](https://github.com/cicsdev/blog-cics-java-jta-jdbc/blob/main/blog.md). + +--- + +### Reference materials + +All the sample code for this tutorial is available at the following CICSDev GitHub repository [cics\-java\-jcics\-samples](https://github.com/cicsdev/cics-java-jcics-samples). + +For a more detailed discussion of JCICS and how to use it to integrate Java applications with CICS programs refer to the following Video Education course [Extending a CICS web application using JCICS](http://www.redbooks.ibm.com/redbooks.nsf/redbookabstracts/crse0302.html?Open) diff --git a/blog/graphics/JCICS.png b/blog/graphics/JCICS.png new file mode 100644 index 0000000000000000000000000000000000000000..71d5e5a3164615ff2ba3c1e63b0a78ee7d278a84 GIT binary patch literal 17914 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 Ksp4mb{{I^m$nn4c literal 0 HcmV?d00001 diff --git a/blog/graphics/JavaExceptions-1-e1484928035395.png b/blog/graphics/JavaExceptions-1-e1484928035395.png new file mode 100644 index 0000000000000000000000000000000000000000..cc83f76f57a23d4f7949db9983d33077ed5cf010 GIT binary patch literal 155288 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

?hw1zo{OIu__kfbtV*CfMBoVGkN1Cz9LGWh{ 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 Date: Thu, 19 Mar 2026 16:57:42 +0000 Subject: [PATCH 45/73] Update README --- README.md | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 54afdd1..a4ed63a 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,13 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Repository structure -* [`gradle/`](gradle) - Gradle wrapper -* [`.mvn/`](.mvn/wrapper) - Maven wrapper -* [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. + * [`etc/`](etc) - Supporting materials including DFHCSDUP definition files. -* [`etc/cics_bundle_projects/`](etc/cics_bundle_projectsects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. +* [`etc/cics_bundle_projects/`](etc/cics_bundle_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. +* [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. +* [`gradle/`](gradle) - Gradle wrapper +* [`.mvn/`](.mvn/wrapper) - Maven wrapper * [`blog/`](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/blog/blog.md) - Archive of developer works JCICS tutorial. ## Pre-requisites @@ -33,8 +34,8 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Downloading --Download the sample as a [ZIP](https://github.com/cicsdev/cics-java-jcics-samples/archive/refs/heads/cicsts/v5.5.zip) and unzip onto the workstation **or** -- Clone the repository using your IDEs support, such as the Eclipse Git plugin +- Download the sample as a [ZIP](https://github.com/cicsdev/cics-java-jcics-samples/archive/refs/heads/cicsts/v5.5.zip) and unzip onto the workstation **or** clone the repository using a git client. + ## Building @@ -62,12 +63,12 @@ If you have the Gradle buildship plug-in available, use the right-click **Run As **Gradle Wrapper (Windows):** ```shell -gradle.bat clean build +gradlew.bat clean build ``` -**Gradle (command-line & setting jvmserver):** +**Gradle Wrapper setting jvmserver:** ```shell -gradle clean build -Pcics.jvmserver=MYJVM +gradlew clean build -Pcics.jvmserver=MYJVM ``` A JAR file for each CICS bundle project is created inside the application project `build/libs/` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `build/distributions` directory. @@ -90,9 +91,9 @@ The CICS JVM server name should be modified in the `` property i mvnw.cmd clean verify ``` -**Maven (command-line & setting jvmserver):** +**Maven Wrapper setting jvmserver:** ```shell -mvn clean verify -Dcics.jvmserver=MYJVM +mvnw clean verify -Dcics.jvmserver=MYJVM ``` A JAR file for each CICS bundle project is created inside the application project `target` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `target` directory. @@ -100,12 +101,18 @@ A JAR file for each CICS bundle project is created inside the application projec ### Option 3 - Building with Eclipse -The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for a Java 17, or does not have CICS Explorer SDK installed with the correct 'target platform' set, you might experience local project compile errors. +To import the sample into Eclipse either +1. Clone the repository using your IDEs support, such as the Eclipse Git plugin +2.File Import Existing Projects into Workspace, and select the expanded zip archive directory as the root directory +Ensure you check "Search for nested projects", and do not select "Copy projects into workspace" + +The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for Java 17, or does not have CICS Explorer SDK installed with the correct 'Target Platform' set, you might experience local project compile errors. To resolve issues: -* ensure you have the CICS Explorer SDK plug-in installed -* configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings -* set the CICS TS Target Platform to your intended CICS target (Hint: Window | Preferences | Plug-in Development | Target Platform | Add | Template | Other...) +* Ensure you have the latest CICS Explorer SDK plug-in installed +* Set the CICS TS Target Platform to your intended CICS target (Hint: Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...) +* Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings + --- @@ -119,11 +126,11 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed ### Deploying to zFS -#### Option 1 - Deploying using command line tools -1. Upload the built CICS bundle ZIP file from your *target* or */build/distributions* directory to zFS on the host system (e.g. FTP). +#### Option 1 - Deploying CICS Bundle Maven/Gradle plugin builds +1. Upload the built CICS bundle ZIP file from your *target* or */build/distributions* directory to zFS in binary. 2. Connect to USS on the host system (e.g. SSH). 3. Create the bundle directory for the project. -4. Move the CICS bundle ZIP file into the bundle directory. +4. Copy the CICS bundle ZIP file into the bundle directory. 5. Extract the CICS bundle ZIP file. This can be done using the `jar` command. For example: ```shell jar -xvf bundle.zip From aabf816b1a228b398adeddd496541deca0397c7b Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Thu, 19 Mar 2026 17:15:32 +0000 Subject: [PATCH 46/73] Update README --- README.md | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index a4ed63a..ac108aa 100644 --- a/README.md +++ b/README.md @@ -42,13 +42,13 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM The sample includes an Eclipse project configuration, a Gradle build, a Maven POM, and Gradle/Maven Wrappers offering a wide range of build options with the tooling and IDE of your choice. Choose from the following approach: -* Use the command line to drive Gradle or Apache Maven (if installed on your workstation) -* Use the command line or IDE support for Wrappers, to drive the supplied Gradle or Apache Maven Wrappers (with no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed) -* Use the built-in Eclipse and CICS Explorer SDK capability -* Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven. +1. Use the command line to drive the supplied Gradle or Apache Maven Wrappers, this means there is no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed. +2. Use the built-in Eclipse and CICS Explorer SDK capability +3. Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven. -### Option 1 - Building with Gradle + +### Option 1a - Building with Gradle The sample comes pre-configured with a Gradle wrapper and build files to facilitate automated builds. @@ -74,7 +74,7 @@ gradlew clean build -Pcics.jvmserver=MYJVM A JAR file for each CICS bundle project is created inside the application project `build/libs/` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `build/distributions` directory. -### Option 2 - Building with Apache Maven +### Option 1b - Building with Apache Maven The sample comes pre-configured with a Maven wrapper and build files to facilitate automated builds. @@ -99,11 +99,11 @@ mvnw clean verify -Dcics.jvmserver=MYJVM A JAR file for each CICS bundle project is created inside the application project `target` sub-directory and a CICS bundle ZIP file inside the CICS bundle project `target` directory. -### Option 3 - Building with Eclipse +### Option 2 - Building with Eclipse and the CICS Explorer SDK for Java To import the sample into Eclipse either -1. Clone the repository using your IDEs support, such as the Eclipse Git plugin -2.File Import Existing Projects into Workspace, and select the expanded zip archive directory as the root directory +1. Clone the repository using your IDEs support, such as the Eclipse Git plugin,**or** +2. Use the **File > Import > Existing Projects into Workspace** wizard and select the expanded zip archive directory as the root directory Ensure you check "Search for nested projects", and do not select "Copy projects into workspace" The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for Java 17, or does not have CICS Explorer SDK installed with the correct 'Target Platform' set, you might experience local project compile errors. @@ -113,6 +113,10 @@ To resolve issues: * Set the CICS TS Target Platform to your intended CICS target (Hint: Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...) * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings +### Option 3 - Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven + +1. Import the projects into Eclipse as detailed in Option 2. +2. Use the Eclipse support for Maven or Gradle to build the project using the supplied build files. --- @@ -129,22 +133,22 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed #### Option 1 - Deploying CICS Bundle Maven/Gradle plugin builds 1. Upload the built CICS bundle ZIP file from your *target* or */build/distributions* directory to zFS in binary. 2. Connect to USS on the host system (e.g. SSH). -3. Create the bundle directory for the project. +3. Create the bundle directory in zFS for the project 4. Copy the CICS bundle ZIP file into the bundle directory. 5. Extract the CICS bundle ZIP file. This can be done using the `jar` command. For example: ```shell jar -xvf bundle.zip ``` -#### Option 2 - Deploying using CICS Explorer (Remote System Explorer) and CICS Bundle ZIP -1. Connect to USS on the host system -2. Create the bundle directory for the project. -3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory to zFS on the host system into the bundle directory. +#### Option 2 - Deploying using CICS Explorer SDK and the CICS bundle projects +1. Deploy each CICS bundle project from CICS Explorer to zFS using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and optionally the transaction and bundle resources to run the sample. + + +#### Option 3 - Deploying using Eclipse and z/OS Explorer +1. Connect to the host system using the Remote Systems view in z/OS Explorer +2. Create the bundle directory in zFS +3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory in the local workstation to the bundle directory on zFS. 4. Extract the ZIP by right-clicking on the ZIP file > User Action > unjar... -5. Refresh the bundle directory - -#### Option 3 - Deploying using CICS Explorer SDK and the provided CICS bundle project -1. Deploy the CICS bundle project from CICS Explorer using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and optionally the transaction and bundle resources to run the sample. From d6741b001e8d34545dbb04027caefba4563c0594 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 14:31:08 +0000 Subject: [PATCH 47/73] Remove Maven and Gradle project natures --- .project | 16 --- .settings/org.eclipse.buildship.core.prefs | 13 --- README.md | 10 +- cics-java-jcics-link-app/.classpath | 8 +- cics-java-jcics-link-app/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.jdt.core.prefs | 107 ++++++++++++++++++ .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-link-bundle/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-serialize-app/.classpath | 8 +- cics-java-jcics-serialize-app/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.jdt.apt.core.prefs | 3 - .../.settings/org.eclipse.jdt.core.prefs | 1 + .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-serialize-bundle/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-tdq-app/.classpath | 8 +- cics-java-jcics-tdq-app/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-tdq-bundle/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-terminal-app/.classpath | 7 +- cics-java-jcics-terminal-app/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-terminal-bundle/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-tsq-app/.classpath | 8 +- cics-java-jcics-tsq-app/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.jdt.apt.core.prefs | 3 - .../.settings/org.eclipse.m2e.core.prefs | 4 - cics-java-jcics-tsq-bundle/.project | 12 -- .../org.eclipse.buildship.core.prefs | 13 --- .../.settings/org.eclipse.m2e.core.prefs | 4 - 42 files changed, 144 insertions(+), 338 deletions(-) delete mode 100644 .settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs delete mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs delete mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs diff --git a/.project b/.project index 1f07a2c..4182d98 100644 --- a/.project +++ b/.project @@ -4,22 +4,6 @@ - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature - 1772729611934 diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index 1a9e8d6..0000000 --- a/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home=C\:/Program Files/IBM/ibm-semeru-certified-21-jdk -jvm.arguments= -offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true diff --git a/README.md b/README.md index ac108aa..b25aa08 100644 --- a/README.md +++ b/README.md @@ -103,14 +103,14 @@ A JAR file for each CICS bundle project is created inside the application projec To import the sample into Eclipse either 1. Clone the repository using your IDEs support, such as the Eclipse Git plugin,**or** -2. Use the **File > Import > Existing Projects into Workspace** wizard and select the expanded zip archive directory as the root directory -Ensure you check "Search for nested projects", and do not select "Copy projects into workspace" +2. Use the **File > Import > Existing Projects into Workspace** wizard and select the expanded zip archive directory as the root directory. +Ensure you check "Search for nested projects", and do not select **Copy projects into workspace** -The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for Java 17, or does not have CICS Explorer SDK installed with the correct 'Target Platform' set, you might experience local project compile errors. +The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for Java 17, or does not have CICS Explorer SDK installed with the correct *Target Platform* set, you might experience local project compile errors. To resolve issues: * Ensure you have the latest CICS Explorer SDK plug-in installed -* Set the CICS TS Target Platform to your intended CICS target (Hint: Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...) +* Set the CICS TS Target Platform to your intended CICS target (Hint: **Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...**) * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings ### Option 3 - Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven @@ -159,7 +159,7 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed 1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt). Alternatively they can be installed using the bundle parts supplied with the Eclipse CICS bundle projects in the [`cics_bundle_projects`](etc/cics_bundle_projects) directory. See the individual project directories for any additional supporting resources required. -1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resourceS and ensure the JVM server becomes enabled along with all associated bundles. +1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resources and ensure the JVM server becomes enabled along with all associated bundles. ## License diff --git a/cics-java-jcics-link-app/.classpath b/cics-java-jcics-link-app/.classpath index ea7f567..9797db9 100644 --- a/cics-java-jcics-link-app/.classpath +++ b/cics-java-jcics-link-app/.classpath @@ -6,7 +6,13 @@ - + + + + + + + diff --git a/cics-java-jcics-link-app/.project b/cics-java-jcics-link-app/.project index 43610b0..c9831a2 100644 --- a/cics-java-jcics-link-app/.project +++ b/cics-java-jcics-link-app/.project @@ -10,11 +10,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.pde.ManifestBuilder @@ -30,16 +25,9 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e479558..0000000 --- a/cics-java-jcics-link-app/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs index 50c691c..40c6570 100644 --- a/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs +++ b/cics-java-jcics-link-app/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,17 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.notowning=org.eclipse.jdt.annotation.NotOwning +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.annotation.owning=org.eclipse.jdt.annotation.Owning +org.eclipse.jdt.core.compiler.annotation.resourceanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 @@ -7,11 +20,105 @@ org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompatibleOwningContract=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.insufficientResourceAnalysis=warning +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-link-app/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-link-bundle/.project b/cics-java-jcics-link-bundle/.project index 178c2c7..cbe86fe 100644 --- a/cics-java-jcics-link-bundle/.project +++ b/cics-java-jcics-link-bundle/.project @@ -5,20 +5,8 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-serialize-app/.classpath b/cics-java-jcics-serialize-app/.classpath index 1016f15..36114ad 100644 --- a/cics-java-jcics-serialize-app/.classpath +++ b/cics-java-jcics-serialize-app/.classpath @@ -6,12 +6,12 @@ - - - + - + + + diff --git a/cics-java-jcics-serialize-app/.project b/cics-java-jcics-serialize-app/.project index b3cec1b..9442e9f 100644 --- a/cics-java-jcics-serialize-app/.project +++ b/cics-java-jcics-serialize-app/.project @@ -10,11 +10,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.pde.ManifestBuilder @@ -30,16 +25,9 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs index fa6bcfb..9a5530c 100644 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -1,5 +1,2 @@ eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=true -org.eclipse.jdt.apt.genSrcDir=.apt_generated org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests -org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs index ecb498c..50c691c 100644 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs +++ b/cics-java-jcics-serialize-app/.settings/org.eclipse.jdt.core.prefs @@ -12,5 +12,6 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-serialize-app/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-serialize-bundle/.project b/cics-java-jcics-serialize-bundle/.project index 7d1826f..7223160 100644 --- a/cics-java-jcics-serialize-bundle/.project +++ b/cics-java-jcics-serialize-bundle/.project @@ -5,20 +5,8 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-tdq-app/.classpath b/cics-java-jcics-tdq-app/.classpath index ea7f567..edb1ac6 100644 --- a/cics-java-jcics-tdq-app/.classpath +++ b/cics-java-jcics-tdq-app/.classpath @@ -6,7 +6,13 @@ - + + + + + + + diff --git a/cics-java-jcics-tdq-app/.project b/cics-java-jcics-tdq-app/.project index 0883ee8..3c0299a 100644 --- a/cics-java-jcics-tdq-app/.project +++ b/cics-java-jcics-tdq-app/.project @@ -10,11 +10,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.pde.ManifestBuilder @@ -30,16 +25,9 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-tdq-app/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-tdq-app/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-tdq-bundle/.project b/cics-java-jcics-tdq-bundle/.project index b7c4e01..5dc5248 100644 --- a/cics-java-jcics-tdq-bundle/.project +++ b/cics-java-jcics-tdq-bundle/.project @@ -5,20 +5,8 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-terminal-app/.classpath b/cics-java-jcics-terminal-app/.classpath index ea7f567..36114ad 100644 --- a/cics-java-jcics-terminal-app/.classpath +++ b/cics-java-jcics-terminal-app/.classpath @@ -6,7 +6,12 @@ - + + + + + + diff --git a/cics-java-jcics-terminal-app/.project b/cics-java-jcics-terminal-app/.project index a28b8a9..1835948 100644 --- a/cics-java-jcics-terminal-app/.project +++ b/cics-java-jcics-terminal-app/.project @@ -10,11 +10,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.pde.ManifestBuilder @@ -30,16 +25,9 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e479558..0000000 --- a/cics-java-jcics-terminal-app/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-terminal-app/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project index 7648613..a01a210 100644 --- a/cics-java-jcics-terminal-bundle/.project +++ b/cics-java-jcics-terminal-bundle/.project @@ -5,20 +5,8 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e479558..0000000 --- a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-tsq-app/.classpath b/cics-java-jcics-tsq-app/.classpath index ea7f567..de3fbfe 100644 --- a/cics-java-jcics-tsq-app/.classpath +++ b/cics-java-jcics-tsq-app/.classpath @@ -6,7 +6,13 @@ - + + + + + + + diff --git a/cics-java-jcics-tsq-app/.project b/cics-java-jcics-tsq-app/.project index 135b721..e64a5a7 100644 --- a/cics-java-jcics-tsq-app/.project +++ b/cics-java-jcics-tsq-app/.project @@ -10,11 +10,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.pde.ManifestBuilder @@ -30,16 +25,9 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature org.eclipse.pde.PluginNature diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-tsq-app/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs index f07424f..9a5530c 100644 --- a/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs +++ b/cics-java-jcics-tsq-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -1,5 +1,2 @@ eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=false -org.eclipse.jdt.apt.genSrcDir=.apt_generated org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests -org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-tsq-app/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cics-java-jcics-tsq-bundle/.project b/cics-java-jcics-tsq-bundle/.project index 7dc2535..815bb09 100644 --- a/cics-java-jcics-tsq-bundle/.project +++ b/cics-java-jcics-tsq-bundle/.project @@ -5,20 +5,8 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.buildship.core.gradleprojectnature diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index d7af79e..0000000 --- a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir=../cics-java-jcics-link-app -eclipse.preferences.version=1 -gradle.user.home= -java.home= -jvm.arguments= -offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 From d3e67d7efdc120cf4e7ccb13117433adbf8000db Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 14:43:01 +0000 Subject: [PATCH 48/73] Update README to remove m2e and buildship --- README.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/README.md b/README.md index b25aa08..ffc5115 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,10 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Building The sample includes an Eclipse project configuration, a Gradle build, a Maven POM, and Gradle/Maven Wrappers offering a wide range of build options with the tooling and IDE of your choice. -Choose from the following approach: +Choose from the following 2 main approaches: 1. Use the command line to drive the supplied Gradle or Apache Maven Wrappers, this means there is no requirement for Gradle, Maven, Eclipse, or CICS Explorer SDK to be installed. 2. Use the built-in Eclipse and CICS Explorer SDK capability -3. Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven. - ### Option 1a - Building with Gradle @@ -54,8 +52,6 @@ The sample comes pre-configured with a Gradle wrapper and build files to facilit The CICS JVM server name should be modified in the `cics.jvmserver` property in the gradle build file or alternatively can be set on the command line (see below). -If you have the Gradle buildship plug-in available, use the right-click **Run As...** menu on the cics-java-osgi-link project to configure and run the `clean` and `build` tasks. Otherwise choose from the command-line approaches. - **Gradle Wrapper (Linux/Mac):** ```shell ./gradlew clean build @@ -113,10 +109,6 @@ To resolve issues: * Set the CICS TS Target Platform to your intended CICS target (Hint: **Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...**) * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings -### Option 3 - Use Eclipse with Buildship (Gradle), or m2e (Maven) to drive Gradle, or Maven - -1. Import the projects into Eclipse as detailed in Option 2. -2. Use the Eclipse support for Maven or Gradle to build the project using the supplied build files. --- From f42677b7f0638d6ceae927ab955731904d691cbb Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:12:37 +0000 Subject: [PATCH 49/73] Add VSAM support --- cics-java-jcics-vsam-app/.classpath | 17 + cics-java-jcics-vsam-app/.project | 44 ++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.apt.core.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 17 + cics-java-jcics-vsam-app/META-INF/MANIFEST.MF | 27 ++ cics-java-jcics-vsam-app/README.md | 32 ++ cics-java-jcics-vsam-app/build.gradle | 37 ++ cics-java-jcics-vsam-app/build.properties | 8 + cics-java-jcics-vsam-app/lib/.gitignore | 2 + cics-java-jcics-vsam-app/pom.xml | 76 ++++ .../com/ibm/cicsdev/vsam/StockPartHelper.java | 234 +++++++++++ .../ibm/cicsdev/vsam/VsamExampleCommon.java | 62 +++ .../ibm/cicsdev/vsam/esds/EsdsExample1.java | 55 +++ .../ibm/cicsdev/vsam/esds/EsdsExample2.java | 63 +++ .../ibm/cicsdev/vsam/esds/EsdsExample3.java | 86 ++++ .../ibm/cicsdev/vsam/esds/EsdsExample4.java | 37 ++ .../ibm/cicsdev/vsam/esds/EsdsExample5.java | 96 +++++ .../cicsdev/vsam/esds/EsdsExampleCommon.java | 268 ++++++++++++ .../ibm/cicsdev/vsam/ksds/KsdsExample1.java | 55 +++ .../ibm/cicsdev/vsam/ksds/KsdsExample3.java | 89 ++++ .../ibm/cicsdev/vsam/ksds/KsdsExample4.java | 85 ++++ .../ibm/cicsdev/vsam/ksds/KsdsExample5.java | 102 +++++ .../cicsdev/vsam/ksds/KsdsExampleCommon.java | 361 ++++++++++++++++ .../ibm/cicsdev/vsam/rrds/RrdsExample1.java | 61 +++ .../ibm/cicsdev/vsam/rrds/RrdsExample2.java | 68 +++ .../ibm/cicsdev/vsam/rrds/RrdsExample3.java | 89 ++++ .../ibm/cicsdev/vsam/rrds/RrdsExample4.java | 86 ++++ .../ibm/cicsdev/vsam/rrds/RrdsExample5.java | 94 +++++ .../cicsdev/vsam/rrds/RrdsExampleCommon.java | 388 ++++++++++++++++++ cics-java-jcics-vsam-bundle/.project | 22 + .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + cics-java-jcics-vsam-bundle/build.gradle | 17 + cics-java-jcics-vsam-bundle/pom.xml | 38 ++ etc/VSAM/DEFVSAM.jcl | 38 ++ etc/VSAM/DFHCSD.txt | 182 ++++++++ etc/VSAM/README.md | 5 + 38 files changed, 2950 insertions(+) create mode 100644 cics-java-jcics-vsam-app/.classpath create mode 100644 cics-java-jcics-vsam-app/.project create mode 100644 cics-java-jcics-vsam-app/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.core.prefs create mode 100644 cics-java-jcics-vsam-app/META-INF/MANIFEST.MF create mode 100644 cics-java-jcics-vsam-app/README.md create mode 100644 cics-java-jcics-vsam-app/build.gradle create mode 100644 cics-java-jcics-vsam-app/build.properties create mode 100644 cics-java-jcics-vsam-app/lib/.gitignore create mode 100644 cics-java-jcics-vsam-app/pom.xml create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/StockPartHelper.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/VsamExampleCommon.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample1.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample2.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample3.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample4.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample5.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java create mode 100644 cics-java-jcics-vsam-bundle/.project create mode 100644 cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs create mode 100644 cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 cics-java-jcics-vsam-bundle/build.gradle create mode 100644 cics-java-jcics-vsam-bundle/pom.xml create mode 100644 etc/VSAM/DEFVSAM.jcl create mode 100644 etc/VSAM/DFHCSD.txt create mode 100644 etc/VSAM/README.md diff --git a/cics-java-jcics-vsam-app/.classpath b/cics-java-jcics-vsam-app/.classpath new file mode 100644 index 0000000..f9d1247 --- /dev/null +++ b/cics-java-jcics-vsam-app/.classpath @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/cics-java-jcics-vsam-app/.project b/cics-java-jcics-vsam-app/.project new file mode 100644 index 0000000..e64a5a7 --- /dev/null +++ b/cics-java-jcics-vsam-app/.project @@ -0,0 +1,44 @@ + + + cics-java-jcics-tsq-app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.ibm.cics.explorer.sdk.CICSJavaOSGiBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + + 1772729611886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-vsam-app/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-vsam-app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/cics-java-jcics-vsam-app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.apt.core.prefs b/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..9a5530c --- /dev/null +++ b/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.genTestSrcDir=.apt_generated_tests diff --git a/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.core.prefs b/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..50c691c --- /dev/null +++ b/cics-java-jcics-vsam-app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,17 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/cics-java-jcics-vsam-app/META-INF/MANIFEST.MF b/cics-java-jcics-vsam-app/META-INF/MANIFEST.MF new file mode 100644 index 0000000..01d09cc --- /dev/null +++ b/cics-java-jcics-vsam-app/META-INF/MANIFEST.MF @@ -0,0 +1,27 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sample JCICS code for use of temporary storage queues +Bundle-SymbolicName: com.ibm.cicsdev.vsam +Bundle-Version: 1.0.1 +Bundle-Vendor: IBM +Bundle-RequiredExecutionEnvironment: JavaSE-17 +CICS-MainClass: com.ibm.cicsdev.vsam.ksds.KsdsExample1, + com.ibm.cicsdev.vsam.ksds.KsdsExample2, + com.ibm.cicsdev.vsam.ksds.KsdsExample3, + com.ibm.cicsdev.vsam.ksds.KsdsExample4, + com.ibm.cicsdev.vsam.ksds.KsdsExample5, + com.ibm.cicsdev.vsam.esds.EsdsExample1, + com.ibm.cicsdev.vsam.esds.EsdsExample2, + com.ibm.cicsdev.vsam.esds.EsdsExample3, + com.ibm.cicsdev.vsam.esds.EsdsExample4, + com.ibm.cicsdev.vsam.esds.EsdsExample5, + com.ibm.cicsdev.vsam.rrds.RrdsExample1, + com.ibm.cicsdev.vsam.rrds.RrdsExample2, + com.ibm.cicsdev.vsam.rrds.RrdsExample3, + com.ibm.cicsdev.vsam.rrds.RrdsExample4, + com.ibm.cicsdev.vsam.rrds.RrdsExample5 +Import-Package: com.ibm.cics.server;version="[1.700.0,3.0.0)", + com.ibm.jzos.fields;resolution:=optional +Automatic-Module-Name: com.ibm.cicsdev.vsam +Bundle-ClassPath: lib/cics-java-jcics-vsam-record-1.0.jar, + . diff --git a/cics-java-jcics-vsam-app/README.md b/cics-java-jcics-vsam-app/README.md new file mode 100644 index 0000000..3b55a36 --- /dev/null +++ b/cics-java-jcics-vsam-app/README.md @@ -0,0 +1,32 @@ +com.ibm.cicsdev.vsam +=== + +Provides examples for using VSAM files from a JCICS environment. +All examples have a ESDS, KSDS, and RRDS variant. +The numbered example classes are driving classes, with the ExampleCommon classes performing the JCICS calls. + +* `*Example1` - Writes a single record to a file. +* `*Example2` - Reads a single record from a file. +* `*Example3` - Updates a single record in a file. +* `*Example4` - Deletes a single record in a file (not ESDS). +* `*Example5` - Browses a VSAM file. +* `*ExampleCommon` - Various routines that perform the required JCICS calls. + +## Supporting files + +* `lib/vsam.jar` - a pre-built JAR containing the JZOS generated record that maps the copybook structure used in all the VSAM samples (includes source). +* [`/etc/VSAM`](../../etc/VSAM) - contains sample JCL to define the required VSAM files, and the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. + + +## Running the Example + +At a 3270 terminal screen, enter the transaction you wish to run, for example JVK1 will run the VSAM KSDS example 1. + + JVK1 + +and the following output will be returned + + JVK1 - Starting KsdsExample1 + VSAM KSDS record addition example + Wrote record with key 0x0003E712 + Completed KsdsExample1 diff --git a/cics-java-jcics-vsam-app/build.gradle b/cics-java-jcics-vsam-app/build.gradle new file mode 100644 index 0000000..a0aff1b --- /dev/null +++ b/cics-java-jcics-vsam-app/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'java' +} + + +description = 'CICS Java JCICS VSAM sample - Application' + +java +{ + sourceCompatibility = java_version + targetCompatibility = java_version +} + + +dependencies { + + // Use the CICS TS BOM to set the JCICS library version + compileOnly enforcedPlatform(bom) + + // JCICS library + compileOnly("com.ibm.cics:com.ibm.cics.server") + + //Compile using the IRG generated JAR from the local dir + implementation("com.ibm.cicsdev:cics-java-jcics-vsam-record:1.0") + +} + +// Create OSGi bundle JAR, add the OSGI manifest and IRG generated JAR from the local repo +jar { + manifest { + from 'META-INF/MANIFEST.MF' + } + from("${localRepo}/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0") { + include '**.jar' + into "lib" + } +} diff --git a/cics-java-jcics-vsam-app/build.properties b/cics-java-jcics-vsam-app/build.properties new file mode 100644 index 0000000..7ec2d61 --- /dev/null +++ b/cics-java-jcics-vsam-app/build.properties @@ -0,0 +1,8 @@ +bin.includes = META-INF/,\ + .,\ + lib/,\ + lib/cics-java-jcics-vsam-record-1.0.jar +source.. = src/main/java/ +jre.compilation.profile = JavaSE-17 +jars.compile.order = .,\ + lib/cics-java-jcics-vsam-record-1.0.jar diff --git a/cics-java-jcics-vsam-app/lib/.gitignore b/cics-java-jcics-vsam-app/lib/.gitignore new file mode 100644 index 0000000..5e1dd75 --- /dev/null +++ b/cics-java-jcics-vsam-app/lib/.gitignore @@ -0,0 +1,2 @@ +# Avoid ignoring repo JARs +!*.jar diff --git a/cics-java-jcics-vsam-app/pom.xml b/cics-java-jcics-vsam-app/pom.xml new file mode 100644 index 0000000..734b78e --- /dev/null +++ b/cics-java-jcics-vsam-app/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-vsam-app + jar + CICS Java JCICS VSAM sample - Application + + + + com.ibm.cics + com.ibm.cics.server + + + + + com.ibm.cicsdev + cics-java-jcics-vsam-record + 1.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.12.1 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.4.0 + + + copy-external-jars-into-lib + process-resources + + copy-resources + + + ${project.build.outputDirectory}/lib + + + ./lib + + **/*.jar + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + META-INF/MANIFEST.MF + + + + + + \ No newline at end of file diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/StockPartHelper.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/StockPartHelper.java new file mode 100644 index 0000000..6d8aa76 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/StockPartHelper.java @@ -0,0 +1,234 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.concurrent.ThreadLocalRandom; + +import com.ibm.cicsdev.bean.StockPart; + +/** + * Provides various routines that assist in the creation of sample data. + * + * This class serves no purpose in the application interface to CICS. It is merely provided + * to generate random data, without any requirements to pre-load datasets with sample data. + */ +public class StockPartHelper +{ + /** + * Constant used to represent the milliseconds time value as of Jan 1st 2010 00:00:00.000. + */ + private static final long JANUARY_1ST_2010 = 1262304000000l; + + /** + * Constant used to represent the number of milliseconds between Jan 1st 2010 and Jan 1st 2020. + */ + private static final long TEN_YEARS = 315532800000l; + + /** + * Constant used to represent the number of milliseconds in eight weeks. + */ + private static final long EIGHT_WEEKS = 4838400000l; + + /** + * A selection of possible sizes for the description. Maximum length should be 11 characters. + */ + public static final String[] SIZE = + { "Tiny", "Small", "Medium", "Large", "Extra large", "Huge" }; + + /** + * A selection of possible colours for the description. Maximum length should be 6 characters. + */ + public static final String[] COLOUR = + { "blue", "red", "orange", "green", "yellow", "white", "black", "purple" }; + + /** + * A selection of possible shapes for the description. Maximum length should be 6 characters. + */ + public static final String[] SHAPE = + { "round", "square", "oval", "flat" }; + + /** + * A selection of possible materials for the description. Maximum length should be 7 characters. + */ + public static final String[] MATERIAL = + { "plastic", "metal", "card" }; + + /** + * A selection of possible object types for the description. Maximum length should be 6 characters. + */ + public static final String[] NOUN = + { "widget", "thing", "plug", "nut", "bit", "part", "panel" }; + + + /** + * Generates a random key. + * + * @return a byte array representing a random key value + */ + public static byte[] generateKey() { + + // Source of random numbers + ThreadLocalRandom rand = ThreadLocalRandom.current(); + + // Create a new StockPart instance + StockPart sp = new StockPart(); + + // Generate a random part number as an integer (range is 0 <= n < 100,000,000) + sp.setPartId(rand.nextInt(100_000_000)); + + // Convert to a byte array using helper method + return getKey(sp); + } + + /** + * Generates a byte array representing the lowest possible key. + * + * @return a byte array representing the lowest possible key for + * a {@link StockPart} instance. + */ + public static byte[] getKeyZero() { + + // Create a new StockPart instance + StockPart sp = new StockPart(); + + // Key zero is for stock part with ID of zero + sp.setPartId(0); + + // Convert to a byte array using helper method + return getKey(sp); + } + + /** + * Extracts the key from the supplied {@link StockPart} instance as + * a byte array, suitable for use in a keyed VSAM file. + * + * @param sp the StockPart instance to use. + * + * @return a byte array which can be used as a key to identify the + * supplied StockPart record. + */ + public static byte[] getKey(StockPart sp) { + + // Get the flat byte structure from the StockPart instance + byte[] record = sp.getByteBuffer(); + + // Get a byte array containing the record key + byte[] key = new byte[8]; + System.arraycopy(record, 0, key, 0, key.length); + + // Return the key as a byte array + return key; + } + + /** + * Extracts the key from the supplied part ID, which represents a + * {@link StockPart} instance, as a byte array, suitable for use + * in a keyed VSAM file. + * + * @param partId the part ID to reference. + * + * @return a byte array which can be used as a key to identify the + * supplied StockPart record. + */ + public static byte[] getKey(int partId) + { + // Create a new StockPart instance and delegate + StockPart sp = new StockPart(); + sp.setPartId(partId); + return getKey(sp); + } + + /** + * Generate a StockPart object which contains random, but valid data. + * + * @return A newly-created StockPart object. + */ + public static StockPart generate() { + + // Source of random numbers + ThreadLocalRandom rand = ThreadLocalRandom.current(); + + // New record to create + StockPart sp = new StockPart(); + + // Generate a random part number as an integer (range is 1 <= n < 100,000,000) + sp.setPartId(rand.nextInt(1, 100_000_00)); + + // Generate a random supplier number as an integer (range is 1 <= n < 100,000,000) + sp.setSupplier(rand.nextInt(1, 100_000_000)); + + // Last order date is some time in the ten years after January 1st 2010 + long lLastOrderDate = JANUARY_1ST_2010 + rand.nextLong(TEN_YEARS); + Calendar cLastOrderDate = Calendar.getInstance(); + cLastOrderDate.setTimeInMillis(lLastOrderDate); + + // Set each of the fields + sp.setLastOrderDateYy(String.format("%1$ty", cLastOrderDate)); + sp.setLastOrderDateMm(String.format("%1$tm", cLastOrderDate)); + sp.setLastOrderDateDd(String.format("%1$td", cLastOrderDate)); + + // Next order date is eight weeks after last order date + long lNextOrderDate = lLastOrderDate + EIGHT_WEEKS; + Calendar cNextOrderDate = Calendar.getInstance(); + cNextOrderDate.setTimeInMillis(lNextOrderDate); + + // Set each of the fields + sp.setNextOrderDateYy(String.format("%1$ty", cNextOrderDate)); + sp.setNextOrderDateMm(String.format("%1$tm", cNextOrderDate)); + sp.setNextOrderDateDd(String.format("%1$td", cNextOrderDate)); + + // Generate a random description + sp.setDescription(generateDescription()); + + // Generate a random stock quantity (range of 0 <= n < 10,000) + int iStock = rand.nextInt(0, 10_000); + sp.setStockQuantity(iStock); + + // Generate a random price (range is 100 <= n < 10,000) + double dPrice = rand.nextInt(100, 10_000) / 100.0d; + sp.setUnitPrice(new BigDecimal(dPrice)); + + // Return to the caller + return sp; + } + + /** + * Generates a description for a random part using the arrays of constants + * {@link #SIZE}, {@link #COLOUR}, {@link #SHAPE}, {@link #MATERIAL}, and + * {@link #NOUN}. The description will be a string of maximum length 40 characters. + * + * @return a human-readable description of an object + */ + public static String generateDescription() { + + // Source of random numbers + ThreadLocalRandom r = ThreadLocalRandom.current(); + + // Buffer to hold the generated description - max possible length of 40 characters + StringBuilder sb = new StringBuilder(40); + + // Generate a random sequence of adjectives and finish with a noun + sb.append(SIZE[r.nextInt(SIZE.length)]); + sb.append(' '); + sb.append(COLOUR[r.nextInt(COLOUR.length)]); + sb.append(' '); + sb.append(SHAPE[r.nextInt(SHAPE.length)]); + sb.append(' '); + sb.append(MATERIAL[r.nextInt(MATERIAL.length)]); + sb.append(' '); + sb.append(NOUN[r.nextInt(NOUN.length)]); + + // Return the created description + return sb.toString(); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/VsamExampleCommon.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/VsamExampleCommon.java new file mode 100644 index 0000000..ee344bc --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/VsamExampleCommon.java @@ -0,0 +1,62 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam; + +import com.ibm.cics.server.InvalidRequestException; +import com.ibm.cics.server.RolledBackException; +import com.ibm.cics.server.Task; + + +/** + * An abstract class that provides services common across all of the VSAM + * sample classes. + */ +public abstract class VsamExampleCommon +{ + /** + * Example of committing a unit of work within an OSGi JVM server. + * + * When performing a commit in Java, the following two exceptions may be thrown: + * + *

    + *
  • RolledBackException - CICS was unable to commit the current + * UoW because a remote system was unable to commit.
  • + * + *
  • InvalidRequestException - This can happen in Java on a commit + * for one of two reasons: + *
      + *
    1. Task.commit() was called in a program that is linked to from a remote system + * that has not specified the SYNCONRETURN option, or if it has been linked to + * locally and is defined with EXECUTIONSET=DPLSUBSET.
    2. + *
    3. Task.commit() was called in a Java environment where we also have a JTA + * transaction active. (This is not an issue in an OSGi JVM server).
    4. + *
  • + * + *
+ */ + public void commitUnitOfWork() + { + try { + // Issue a CICS syncpoint + Task.getTask().commit(); + } + catch (RolledBackException rbe) { + // See javadoc for description + // For this example, propagate the error out of the Java program + throw new RuntimeException(rbe); + } + catch (InvalidRequestException ire) { + // See javadoc for description + // For this example, propagate the error out of the Java program + throw new RuntimeException(ire); + } + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample1.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample1.java new file mode 100644 index 0000000..f8df822 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample1.java @@ -0,0 +1,55 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate adding a record to a VSAM ESDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link EsdsExampleCommon}. + */ +public class EsdsExample1 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting EsdsExample1"); + task.out.println("VSAM ESDS record addition example"); + + // Create a new instance of the common ESDS class + EsdsExampleCommon ex = new EsdsExampleCommon(); + + // Create a new random record for writing to the file + StockPart sp = StockPartHelper.generate(); + + // Add a new record to the file + long rba = ex.addRecord(sp); + + // Write out the RBA of the new record + task.out.println( String.format("Wrote record with RBA 0x%016X", rba) ); + + // Unit of work containing the write will be committed at normal end of task + + // Completion message + task.out.println("Completed EsdsExample1"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample2.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample2.java new file mode 100644 index 0000000..6f90433 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample2.java @@ -0,0 +1,63 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; +import com.ibm.cicsdev.vsam.ksds.KsdsExampleCommon; + + +/** + * Simple example to demonstrate reading a record from a VSAM ESDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link KsdsExampleCommon}. + */ +public class EsdsExample2 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting EsdsExample2"); + task.out.println("VSAM ESDS record read example"); + + // Create a new instance of the common ESDS class + EsdsExampleCommon ex = new EsdsExampleCommon(); + + // Add a new record to the file so we have something to work with + StockPart spNew = StockPartHelper.generate(); + long rba = ex.addRecord(spNew); + + // Commit the current unit of work to harden new record to the file + ex.commitUnitOfWork(); + + // Write out the RBA of the record we have just written + task.out.println( String.format("Wrote record with RBA 0x%016X", rba) ); + + // Now read the record with the specified RBA + StockPart spRead = ex.readRecord(rba); + + // Display the read description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); + + // Completion message + task.out.println("Completed EsdsExample2"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample3.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample3.java new file mode 100644 index 0000000..74f61b5 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample3.java @@ -0,0 +1,86 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate updating a record in a VSAM ESDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link EsdsExampleCommon}. + */ +public class EsdsExample3 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting EsdsExample3"); + task.out.println("VSAM ESDS record update example"); + + // Create a new instance of the common ESDS class + EsdsExampleCommon ex = new EsdsExampleCommon(); + + + /* + * Create a record in the file so we have something to work with. + */ + + // Keep track of the RBA of the new record + long rba; + + // Scoping of local variables + { + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + rba = ex.addRecord(sp); + + // Commit the unit of work + ex.commitUnitOfWork(); + + // Write out the RBA and description + String strMsg = "Wrote to RBA 0x%016X with description %s"; + task.out.println( String.format(strMsg, rba, sp.getDescription().trim()) ); + } + + + /* + * Now update this known record with a new description. + */ + + // Scoping of local variables + { + // Generate a new part description + String strDesc = StockPartHelper.generateDescription(); + + // Update the known record with a specified description + StockPart sp = ex.updateRecord(rba, strDesc); + + // Display the updated description + String strMsg = "Updated record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Unit of work containing the update will be committed at normal end of task + + // Completion message + task.out.println("Completed EsdsExample3"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample4.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample4.java new file mode 100644 index 0000000..fb7fedf --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample4.java @@ -0,0 +1,37 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import com.ibm.cics.server.Task; + + +/** + * This is a dummy test class to remain consistent with the KSDS and RRDS examples. + * + * Records cannot be deleted from an ESDS dataset, either in JCICS or in the + * EXEC CICS API. + */ +public class EsdsExample4 +{ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting EsdsExample4"); + task.out.println("VSAM ESDS record delete example"); + + // VSAM ESDS does not allow record deletion + task.out.println("Record deletion not permitted for VSAM ESDS files"); + + // Completion message + task.out.println("Completed EsdsExample4"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample5.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample5.java new file mode 100644 index 0000000..bb4a482 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExample5.java @@ -0,0 +1,96 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import java.util.List; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate browsing a VSAM ESDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link EsdsExampleCommon}. + */ +public class EsdsExample5 +{ + /** + * Number of records to add and then browse through. + */ + private static final int RECORDS_TO_BROWSE = 5; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting EsdsExample5"); + task.out.println("VSAM ESDS file browse example"); + + // Create a new instance of the common example class + EsdsExampleCommon ex = new EsdsExampleCommon(); + + + /* + * Create some records in the file so we have something to work with. + */ + + // ESDS records are always stored in the sequence they were added + long rbaFirst = -1; + + // Add 5 records + for ( int i = 0; i < RECORDS_TO_BROWSE; i++ ) { + + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + long rba = ex.addRecord(sp); + + // Write out the RBA of the new record + task.out.println( String.format("Wrote to RBA 0x%016X", rba) ); + + // Keep track of the RBA of the first insert + if ( rbaFirst == -1 ) { + rbaFirst = rba; + } + } + + // Commit the unit of work to harden the inserts to the file + ex.commitUnitOfWork(); + + + /* + * Browse through the file, starting at the lowest RBA. + * + * The above code will have guaranteed sufficient records exist. + */ + + // Browse through the records, starting at the lowest known RBA + List list = ex.browse(rbaFirst, RECORDS_TO_BROWSE); + + // Iterate over this list + for ( StockPart sp : list ) { + + // Display the description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Completion message + task.out.println("Completed EsdsExample5"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java new file mode 100644 index 0000000..dcbc92a --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/esds/EsdsExampleCommon.java @@ -0,0 +1,268 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.esds; + +import java.util.ArrayList; +import java.util.List; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DuplicateRecordException; +import com.ibm.cics.server.ESDS; +import com.ibm.cics.server.ESDS_Browse; +import com.ibm.cics.server.EndOfFileException; +import com.ibm.cics.server.InvalidRequestException; +import com.ibm.cics.server.RecordHolder; +import com.ibm.cics.server.RecordNotFoundException; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.VsamExampleCommon; + +/** + * Example class to demonstrate various operations which may be + * useful when manipulating VSAM ESDS files. + * + * Records in an ESDS file are located using their Relative Byte + * Address (RBA). + */ +public class EsdsExampleCommon extends VsamExampleCommon +{ + /** + * Name of the file resource to use. + */ + private static final String FILE_NAME = "XMPLESDS"; + + /** + * A field to hold a reference to the VSAM ESDS file this + * instance will access. + */ + private final ESDS esds; + + /** + * Constructor to initialise the reference to the sample file. + */ + public EsdsExampleCommon() + { + // Create a new ESDS instance and initialise + this.esds = new ESDS(); + this.esds.setName(FILE_NAME); + } + + /** + * Provides a simple example of adding a record to a VSAM ESDS file. + * + * @param sp the {@link StockPart} instance to write to the file. + * + * @return the RBA for the new record. + */ + public long addRecord(StockPart sp) + { + // Get the flat byte structure from the JZOS object + byte[] record = sp.getByteBuffer(); + + try { + // Write the record into the file + long rba = this.esds.write(record); + + // Return the new RBA for this record + return rba; + } + catch (DuplicateRecordException dre) { + + // Collision on the generated key + String strMsg = "Tried to insert duplicate record 0x%016X"; + Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); + throw new RuntimeException(dre); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for WRITE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not addable + String strMsg = "Add operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of updating a single record in a VSAM ESDS file. + * + * This method uses the supplied RBA to locate and lock a record using + * the readForUpdate() method, uses the supplied description to update the + * record that has been read, and then writes the new record back to the file + * using the rewrite() method. + * + * @param rba the RBA of the record to update. + * @param strDescription the new description to store in the VSAM file. + * + * @return the updated {@link StockPart} instance. + */ + public StockPart updateRecord(long rba, String strDescription) + { + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record at the specified RBA and lock + this.esds.readForUpdate(rba, rh); + + // Create a StockPart instance from the record + byte[] readBytes = rh.getValue(); + StockPart sp = new StockPart(readBytes); + + // Update the description + sp.setDescription(strDescription); + + // Rewrite the record with the updated data + this.esds.rewrite( sp.getByteBuffer() ); + + // Return the updated StockPart instance + return sp; + } + catch (RecordNotFoundException rnfe) { + // Initial read failed - key not found in file + String strMsg = "Record with RBA 0x%016X not found in file"; + Task.getTask().out.println( String.format(strMsg, rba) ); + throw new RuntimeException(rnfe); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read or update operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of reading a single record from a VSAM ESDS file. + * + * @param rba the RBA of the record to locate in the VSAM file. + * + * @return a {@link StockPart} instance representing the record in the VSAM file + * identified by the specified key. + */ + public StockPart readRecord(long rba) + { + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record identified by the supplied RBA + this.esds.read(rba, rh); + + // Create a StockPart instance from the record + return new StockPart( rh.getValue() ); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read operation not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (RecordNotFoundException rnfe) { + // The requested record was not found + String strMsg = "Record with RBA 0x%016X was not found"; + Task.getTask().out.println( String.format(strMsg, rba) ); + throw new RuntimeException(rnfe); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides an example of browsing a VSAM ESDS dataset. + * + * @param rbaStart the RBA from which the browse should begin. + * @param count the maximum number of records to return. + * + * @return a list of StockPart objects. + */ + public List browse(long rbaStart, int count) + { + // The list instance to return + List list = new ArrayList<>(count); + + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + try { + // Start the browse of the file + ESDS_Browse esdsBrowse = this.esds.startBrowse(rbaStart); + + // Loop until we reach maximum count + for ( int i = 0; i < count; i++ ) { + + // Read a record from the file (discard the returned RBA) + esdsBrowse.next(rh); + + // Get the record and convert to a StockPart + StockPart sp = new StockPart( rh.getValue() ); + + // Add this object to our return array + list.add(sp); + } + } + catch (RecordNotFoundException rnfe) { + // Initial browse failed - no records matching the supplied RBA + } + catch (EndOfFileException eof) { + // Normal termination of loop - no further records + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for STARTBR to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Browse operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.esds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + + // Return the list + return list; + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java new file mode 100644 index 0000000..a032f0c --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample1.java @@ -0,0 +1,55 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate adding a record to a VSAM KSDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link KsdsExampleCommon}. + */ +public class KsdsExample1 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting KsdsExample1"); + task.out.println("VSAM KSDS record addition example"); + + // Create a new instance of the common KSDS class + KsdsExampleCommon ex = new KsdsExampleCommon(); + + // Create a new random record for writing to the file + StockPart sp = StockPartHelper.generate(); + + // Add a new record to the file + ex.addRecord(sp); + + // Write out the part ID + task.out.println( String.format("Wrote record with key 0x%08X", sp.getPartId()) ); + + // Unit of work containing the write will be committed at normal end of task + + // Completion message + task.out.println("Completed KsdsExample1"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java new file mode 100644 index 0000000..ace83e2 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample3.java @@ -0,0 +1,89 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate updating a record in a VSAM KSDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link KsdsExampleCommon}. + */ +public class KsdsExample3 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting KsdsExample3"); + task.out.println("VSAM KSDS record update example"); + + // Create a new instance of the common example class + KsdsExampleCommon ex = new KsdsExampleCommon(); + + + /* + * Create a record in the file so we have something to work with. + */ + + // Keep track of the key of the new record + int key; + + // Scoping of local variables + { + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(sp); + + // Commit the unit of work + ex.commitUnitOfWork(); + + // Get hold of the new part ID + key = sp.getPartId(); + + // Write out the key and description + String strMsg = "Wrote to key 0x%08X with description %s"; + task.out.println( String.format(strMsg, key, sp.getDescription().trim()) ); + } + + + /* + * Now update this known record with a new description. + */ + + // Scoping of local variables + { + // Generate a new part description + String strDesc = StockPartHelper.generateDescription(); + + // Now update the known record with a specified description + StockPart sp = ex.updateRecord(key, strDesc); + + // Display the updated description + String strMsg = "Updated record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Unit of work containing the update will be committed at normal end of task + + // Completion message + task.out.println("Completed KsdsExample3"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java new file mode 100644 index 0000000..0e4da23 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample4.java @@ -0,0 +1,85 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate deleting a record from a VSAM KSDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link KsdsExampleCommon}. + */ +public class KsdsExample4 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting KsdsExample4"); + task.out.println("VSAM KSDS record delete example"); + + // Create a new instance of the common example class + KsdsExampleCommon ex = new KsdsExampleCommon(); + + + /* + * Create a record in the file so we have something to work with. + */ + + // Keep track of the generated key + int key; + + // Scoping of local variables + { + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(sp); + + // Commit the unit of work + ex.commitUnitOfWork(); + + // Get hold of the new part ID + key = sp.getPartId(); + + // Write out the key + task.out.println( String.format("Wrote to key 0x%08X", key) ); + } + + + /* + * Delete the record. + */ + + // Scoping of local variables + { + // Now delete this known record + StockPart sp = ex.deleteRecord(key); + + // Display the result + String strMsg = "Deleted record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Unit of work containing the delete will be committed at normal end of task + + // Completion message + task.out.println("Completed KsdsExample4"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java new file mode 100644 index 0000000..bdc62b8 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample5.java @@ -0,0 +1,102 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import java.util.List; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate browsing a VSAM KSDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link KsdsExampleCommon}. + */ +public class KsdsExample5 +{ + /** + * Number of records to add and then browse through. + */ + private static final int RECORDS_TO_BROWSE = 5; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting KsdsExample5"); + task.out.println("VSAM KSDS file browse example"); + + // Create a new instance of the common example class + KsdsExampleCommon ex = new KsdsExampleCommon(); + + + /* + * Create some records in the file so we have something to work with. + */ + + // Keep track of the lowest generated key + int key = Integer.MAX_VALUE; + + // Add records, keeping track of the lowest key + for ( int i = 0; i < RECORDS_TO_BROWSE; i++ ) { + + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(sp); + + // Get the key of the new record + int newKey = sp.getPartId(); + + // Write out the key and description + task.out.println( String.format("Wrote to key 0x%08X", newKey) ); + + // Decide if this is lowest key so far + key = newKey < key ? newKey : key; + } + + // Commit the unit of work to harden the inserts to the file + ex.commitUnitOfWork(); + + + /* + * Browse through the file, starting at the lowest key. + * + * Note the next n records we find may not necessarily be the n records we + * added above. It will depend on what existing records were already in + * the KSDS file. + * + * The above code will have guaranteed that at least RECORDS_TO_BROWSE + * records exist. + */ + + // Browse through the records, starting at the lowest known key + List list = ex.browse(key, RECORDS_TO_BROWSE); + + // Iterate over this list + for ( StockPart sp : list ) { + + // Display the description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Completion message + task.out.println("Completed KsdsExample5"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java new file mode 100644 index 0000000..e387011 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExampleCommon.java @@ -0,0 +1,361 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import java.util.ArrayList; +import java.util.List; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DuplicateRecordException; +import com.ibm.cics.server.EndOfFileException; +import com.ibm.cics.server.InvalidRequestException; +import com.ibm.cics.server.KSDS; +import com.ibm.cics.server.KeyHolder; +import com.ibm.cics.server.KeyedFileBrowse; +import com.ibm.cics.server.RecordHolder; +import com.ibm.cics.server.RecordNotFoundException; +import com.ibm.cics.server.SearchType; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; +import com.ibm.cicsdev.vsam.VsamExampleCommon; + +/** + * Example class to demonstrate various operations which may be + * useful when manipulating VSAM ESDS files. + */ +public class KsdsExampleCommon extends VsamExampleCommon +{ + /** + * Name of the file resource to use. + */ + private static final String FILE_NAME = "XMPLKSDS"; + + /** + * A field to hold a reference to the VSAM KSDS file this + * instance will access. + */ + private final KSDS ksds; + + /** + * Constructor to initialise the reference to the sample file. + */ + public KsdsExampleCommon() + { + // Create a new KSDS instance and initialise + this.ksds = new KSDS(); + this.ksds.setName(FILE_NAME); + } + + /** + * Provides a simple example of adding a record to a VSAM KSDS file. + * + * @param sp the {@link StockPart} instance to write to the file. + */ + public void addRecord(StockPart sp) + { + // Get the flat byte structure from the JZOS object + byte[] record = sp.getByteBuffer(); + + // Get a byte array containing the key for this record + byte[] key = StockPartHelper.getKey(sp); + + try { + // Write the record into the file at the specified key + this.ksds.write(key, record); + } + catch (DuplicateRecordException dre) { + + // Collision on the generated key + String strMsg = "Tried to insert duplicate key 0x%08X"; + Task.getTask().out.println( String.format(strMsg, sp.getPartId()) ); + throw new RuntimeException(dre); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for WRITE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not addable + String strMsg = "Add operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of updating a single record in a VSAM KSDS file. + * + * This method uses the supplied part ID to locate and lock a record using + * the readForUpdate() method, uses the supplied description to update the + * record that has been read, and then writes the new record back to the file + * using the rewrite() method. + * + * @param partId the part ID of the record to update. + * @param strDescription the new description to store in the VSAM file. + * + * @return the updated {@link StockPart} instance. + */ + public StockPart updateRecord(int partId, String strDescription) + { + // Use the StockPartHelper class to get a byte[] from this part ID + byte[] keyBytes = StockPartHelper.getKey(partId); + + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record at the specified key and lock + this.ksds.readForUpdate(keyBytes, SearchType.EQUAL, rh); + + // Create a StockPart instance from the record + byte[] readBytes = rh.getValue(); + StockPart sp = new StockPart(readBytes); + + // Update the description + sp.setDescription(strDescription); + + // Rewrite the record with the updated data + this.ksds.rewrite( sp.getByteBuffer() ); + + // Return the updated StockPart instance + return sp; + } + catch (RecordNotFoundException rnfe) { + // Initial read failed - key not found in file + String strMsg = "Record with key 0x%08X not found in file"; + Task.getTask().out.println( String.format(strMsg, partId) ); + throw new RuntimeException(rnfe); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read or update operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of reading a single record from a VSAM KSDS file. + * + * @param partId the key of the record to locate in the VSAM file. + * + * @return a {@link StockPart} instance representing the record in the VSAM file + * identified by the specified key. + */ + public StockPart readRecord(int partId) + { + // Use the StockPartHelper class to get a byte[] from this part ID + byte[] keyBytes = StockPartHelper.getKey(partId); + + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record identified by the supplied key + this.ksds.read(keyBytes, SearchType.EQUAL, rh); + + // Create a StockPart instance from the record + return new StockPart( rh.getValue() ); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read operation not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (RecordNotFoundException rnfe) { + // The requested record was not found + String strMsg = "Record with key 0x%08X was not found"; + Task.getTask().out.println( String.format(strMsg, partId) ); + throw new RuntimeException(rnfe); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides an example of browsing a VSAM KSDS dataset. + * + * @param partIdStart the part ID from which the browse should begin. + * @param count the maximum number of records to return. + * + * @return a list of StockPart objects. + */ + public List browse(int partIdStart, int count) + { + // Start a browse of the file at the supplied key + byte[] key = StockPartHelper.getKey(partIdStart); + + // The list instance to return + List list = new ArrayList<>(count); + + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + KeyHolder kh = new KeyHolder(); + + try { + // Start the browse of the file + KeyedFileBrowse kfb = this.ksds.startBrowse(key, SearchType.GTEQ); + + // Loop until we reach maximum count + for ( int i = 0; i < count; i++ ) { + + // Read a record from the file + kfb.next(rh, kh); + + // Get the record and convert to a StockPart + StockPart sp = new StockPart( rh.getValue() ); + + // Add this object to our return array + list.add(sp); + } + } + catch (RecordNotFoundException rnfe) { + // Initial browse failed - no records matching the supplied part ID + } + catch (EndOfFileException eof) { + // Normal termination of loop - no further records + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for STARTBR to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Browse operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + + // Return the list + return list; + } + + /** + * Provides a simple example of deleting a single record from a VSAM KSDS file. + * + * @param partId the key of the record to locate in the VSAM file. + * + * @return a {@link StockPart} instance representing the record in the VSAM file + * identified by the specified key before it was deleted. + */ + public StockPart deleteRecord(int partId) + { + // Use the StockPartHelper class to get a byte[] from this key + byte[] keyBytes = StockPartHelper.getKey(partId); + + // The record as it stood before deletion + StockPart sp; + + /* + * Lock the record for an update. + */ + + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record at the specified key and lock + this.ksds.readForUpdate(keyBytes, SearchType.EQUAL, rh); + + // Convert to a StockPart object + sp = new StockPart( rh.getValue() ); + } + catch (RecordNotFoundException rnfe) { + // Initial read failed - key not found in file + String strMsg = "Record with key 0x%08X not found in file"; + Task.getTask().out.println( String.format(strMsg, partId) ); + throw new RuntimeException(rnfe); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read or update operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + + + /* + * Now perform the delete. + */ + + try { + // Delete the selected record + this.ksds.delete(); + + // Return the record as it stood before deletion + return sp; + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for DELETE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Delete operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.ksds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java new file mode 100644 index 0000000..0f15a78 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample1.java @@ -0,0 +1,61 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate adding a record to a VSAM RRDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link RrdsExampleCommon}. + */ +public class RrdsExample1 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting RrdsExample1"); + task.out.println("VSAM RRDS record addition example"); + + // Create a new instance of the common ESDS class + RrdsExampleCommon ex = new RrdsExampleCommon(); + + // Unlike the KSDS and ESDS examples, we need an empty file before we start + ex.emptyFile(); + + // Create a new random record for writing to the file + StockPart sp = StockPartHelper.generate(); + + // Add a new record to the file at RRN 1 + long rrn = 1; + + // Perform the add + ex.addRecord(rrn, sp); + + // Write out the new RRN + task.out.println( String.format("Wrote record with RRN 0x%016X", rrn) ); + + // Unit of work containing the write will be committed at normal end of task + + // Completion message + task.out.println("Completed RrdsExample1"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java new file mode 100644 index 0000000..a33d222 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample2.java @@ -0,0 +1,68 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + + +/** + * Simple example to demonstrate reading a record from a VSAM RRDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link RrdsExampleCommon}. + */ +public class RrdsExample2 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting RrdsExample2"); + task.out.println("VSAM RRDS record read example"); + + // Create a new instance of this class + RrdsExampleCommon ex = new RrdsExampleCommon(); + + // Unlike the KSDS and ESDS examples, we need an empty file before we start + ex.emptyFile(); + + // We will always add and read RRN 1 + long rrn = 1; + + // Add a new record to the file so we have something to work with + StockPart spNew = StockPartHelper.generate(); + ex.addRecord(rrn, spNew); + + // Write out the RRN of the new record + task.out.println( String.format("Wrote record with RRN 0x%016X", rrn) ); + + // Commit the current unit of work to harden new record to the file + ex.commitUnitOfWork(); + + // Now read the record with the specified key + StockPart spRead = ex.readRecord(rrn); + + // Display the read description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); + + // Completion message + task.out.println("Completed RrdsExample2"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java new file mode 100644 index 0000000..403eca2 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample3.java @@ -0,0 +1,89 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate updating a record in a VSAM RRDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link RrdsExampleCommon}. + */ +public class RrdsExample3 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting RrdsExample3"); + task.out.println("VSAM RRDS record update example"); + + // Create a new instance of the common example class + RrdsExampleCommon ex = new RrdsExampleCommon(); + + // Unlike the KSDS and ESDS examples, we need an empty file before we start + ex.emptyFile(); + + // We will always add and read RRN 1 + long rrn = 1; + + + /* + * Create a record in the file so we have something to work with. + */ + + // Scoping of local variables + { + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(rrn, sp); + + // Commit the unit of work + ex.commitUnitOfWork(); + + // Write out the key and description + String strMsg = "Wrote to RRN 0x%016X with description %s"; + task.out.println( String.format(strMsg, rrn, sp.getDescription().trim()) ); + } + + + /* + * Now update this known record with a new description. + */ + + // Scoping of local variables + { + // Generate a new part description + String strDesc = StockPartHelper.generateDescription(); + + // Now update the known record with a specified description + StockPart sp = ex.updateRecord(rrn, strDesc); + + // Display the updated description + String strMsg = "Updated record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Unit of work containing the update will be committed at normal end of task + + // Completion message + task.out.println("Completed RrdsExample3"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java new file mode 100644 index 0000000..ff3ed26 --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample4.java @@ -0,0 +1,86 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + + +/** + * Simple example to demonstrate deleting a record from a VSAM RRDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link RrdsExampleCommon}. + */ +public class RrdsExample4 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting RrdsExample4"); + task.out.println("VSAM RRDS record delete example"); + + // Create a new instance of the common example class + RrdsExampleCommon ex = new RrdsExampleCommon(); + + // Unlike the KSDS and ESDS examples, we need an empty file before we start + ex.emptyFile(); + + // We will always add and delete RRN 1 + long rrn = 1; + + + /* + * Create a record in the file so we have something to work with. + */ + + // Scoping of local variables + { + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(rrn, sp); + + // Commit the unit of work + ex.commitUnitOfWork(); + + // Write out the key and description + task.out.println( String.format("Wrote to RRN 0x%016X", rrn) ); + } + + + /* + * Delete the record. + */ + + // Scoping of local variables + { + // Now delete this known record + StockPart sp = ex.deleteRecord(rrn); + + // Display the result + String strMsg = "Deleted record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Unit of work containing the delete will be committed at normal end of task + + // Completion message + task.out.println("Completed RrdsExample4"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java new file mode 100644 index 0000000..d62bbca --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExample5.java @@ -0,0 +1,94 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import java.util.List; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + +/** + * Simple example to demonstrate browsing a VSAM RRDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * common class {@link RrdsExampleCommon}. + */ +public class RrdsExample5 +{ + /** + * Number of records to add and then browse through. + */ + private static final int RECORDS_TO_BROWSE = 5; + + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting RrdsExample5"); + task.out.println("VSAM RRDS file browse example"); + + // Create a new instance of the common example class + RrdsExampleCommon ex = new RrdsExampleCommon(); + + // Unlike the KSDS and ESDS examples, we need an empty file before we start + ex.emptyFile(); + + // We will always start from RRN 1 + long rrnStart = 1; + + + /* + * Create some records in the file so we have something to work with. + */ + + // Add records + for ( long rrn = rrnStart; rrn <= RECORDS_TO_BROWSE; rrn++ ) { + + // Add a new record to the file + StockPart sp = StockPartHelper.generate(); + ex.addRecord(rrn, sp); + + // Write out the key and description + task.out.println( String.format("Wrote to RRN 0x%016X", rrn) ); + } + + // Commit the unit of work to harden the inserts to the file + ex.commitUnitOfWork(); + + + /* + * Browse through the file, starting at the lowest key. + * + * The above code will have guaranteed that sufficient records exist. + */ + + // Browse through the records, starting at the initial RRN + List list = ex.browse(rrnStart, RECORDS_TO_BROWSE); + + // Iterate over this list + for ( StockPart sp : list ) { + + // Display the description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, sp.getDescription().trim()) ); + } + + // Completion message + task.out.println("Completed RrdsExample5"); + } +} diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java new file mode 100644 index 0000000..bfd187e --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/rrds/RrdsExampleCommon.java @@ -0,0 +1,388 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.rrds; + +import java.util.ArrayList; +import java.util.List; + +import com.ibm.cics.server.CicsConditionException; +import com.ibm.cics.server.DuplicateRecordException; +import com.ibm.cics.server.EndOfFileException; +import com.ibm.cics.server.InvalidRequestException; +import com.ibm.cics.server.RRDS; +import com.ibm.cics.server.RRDS_Browse; +import com.ibm.cics.server.RecordHolder; +import com.ibm.cics.server.RecordNotFoundException; +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.VsamExampleCommon; + +/** + * Example class to demonstrate various operations which may be + * useful when manipulating VSAM RRDS files. + * + * In a VSAM RRDS, records are addressed using their Relative Record + * Number (RRN). + */ +public class RrdsExampleCommon extends VsamExampleCommon +{ + /** + * Name of the file resource to use. + */ + private static final String FILE_NAME = "XMPLRRDS"; + + /** + * A field to hold a reference to the VSAM RRDS file this + * instance will access. + */ + private final RRDS rrds; + + /** + * Constructor to initialise the reference to the sample file. + */ + public RrdsExampleCommon() + { + // Create a new RRDS instance and initialise + this.rrds = new RRDS(); + this.rrds.setName(FILE_NAME); + } + + /** + * Provides a simple example of adding a record to a VSAM RRDS file. + * + * @param rrn the RRN of the record to write to the file. + * @param sp the {@link StockPart} instance to write to the file. + */ + public void addRecord(long rrn, StockPart sp) + { + // Get the flat byte structure from the JZOS object + byte[] record = sp.getByteBuffer(); + + try { + // Write the record into the file at the specified RRN + this.rrds.write(rrn, record); + } + catch (DuplicateRecordException dre) { + + // Collision on the record number + String strMsg = "Tried to insert duplicate record at RRN 0x%016X"; + Task.getTask().out.println( String.format(strMsg, rrn) ); + throw new RuntimeException(dre); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for WRITE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not addable + String strMsg = "Add operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of updating a single record in a VSAM RRDS file. + * + * This method uses the supplied RRN to locate and lock a record using + * the readForUpdate() method, uses the supplied description to update the + * record that has been read, and then writes the new record back to the file + * using the rewrite() method. + * + * @param rrn the RRN of the record to update. + * @param strDescription the new description to store in the VSAM file. + * + * @return the updated {@link StockPart} instance. + */ + public StockPart updateRecord(long rrn, String strDescription) + { + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record at the specified RRN and lock + this.rrds.readForUpdate(rrn, rh); + + // Create a StockPart instance from the record + byte[] readBytes = rh.getValue(); + StockPart sp = new StockPart(readBytes); + + // Update the description + sp.setDescription(strDescription); + + // Rewrite the record with the updated data + this.rrds.rewrite( sp.getByteBuffer() ); + + // Return the updated StockPart instance + return sp; + } + catch (RecordNotFoundException rnfe) { + // Initial read failed - key not found in file + String strMsg = "Record with RRN 0x%016X not found in file"; + Task.getTask().out.println( String.format(strMsg, rrn) ); + throw new RuntimeException(rnfe); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read or update operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides a simple example of reading a single record from a VSAM RRDS file. + * + * @param rrn the RRN of the record to locate in the VSAM file. + * + * @return a {@link StockPart} instance representing the record in the VSAM file + * identified by the specified key. + */ + public StockPart readRecord(long rrn) + { + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record identified by the supplied RRN + this.rrds.read(rrn, rh); + + // Create a StockPart instance from the record + return new StockPart( rh.getValue() ); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read operation not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (RecordNotFoundException rnfe) { + // The requested record was not found + String strMsg = "Record with RRN 0x%016X was not found"; + Task.getTask().out.println( String.format(strMsg, rrn) ); + throw new RuntimeException(rnfe); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Provides an example of browsing a VSAM RRDS dataset. + * + * @param rrnStart the RRN from which the browse should begin. + * @param count the maximum number of records to return. + * + * @return a list of StockPart objects. + */ + public List browse(long rrnStart, int count) + { + // The list instance to return + List list = new ArrayList<>(count); + + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + try { + // Start the browse of the file + RRDS_Browse rrdsBrowse = this.rrds.startBrowse(rrnStart); + + // Loop until we reach maximum count + for ( int i = 0; i < count; i++ ) { + + // Read a record from the file (discard the returned RRN) + rrdsBrowse.next(rh); + + // Get the record and convert to a StockPart + StockPart sp = new StockPart( rh.getValue() ); + + // Add this object to our return array + list.add(sp); + } + } + catch (RecordNotFoundException rnfe) { + // No records matching the supplied RRN + } + catch (EndOfFileException eof) { + // Normal termination of loop - no further records + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for STARTBR to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Browse operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + + // Return the list + return list; + } + + /** + * Provides a simple example of deleting a single record from a VSAM RRDS file. + * + * @param rrn the RRN of the record to locate in the VSAM file. + * + * @return a {@link StockPart} instance representing the record in the VSAM file + * identified by the specified key before it was deleted. + */ + public StockPart deleteRecord(long rrn) + { + // The record as it stood before deletion + StockPart sp; + + /* + * Lock the record for an update. + */ + + try { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + // Read the record at the specified RRN and lock + this.rrds.readForUpdate(rrn, rh); + + // Convert to a StockPart object + sp = new StockPart( rh.getValue() ); + } + catch (RecordNotFoundException rnfe) { + // Initial read failed - RRN not found in file + String strMsg = "Record with RRN 0x%016X not found in file"; + Task.getTask().out.println( String.format(strMsg, rrn) ); + throw new RuntimeException(rnfe); + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read or update operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + + + /* + * Now perform the delete. + */ + + try { + // Delete the selected record + this.rrds.delete(); + + // Return the record as it stood before deletion + return sp; + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for DELETE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Delete operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Some other CICS failure + throw new RuntimeException(cce); + } + } + + /** + * Loops through all the records in the file, deleting them as we go. + * Not expected to be very useful in a real-world scenario, but makes + * coding an RRDS example much easier, as the file will be in a known + * state before we begin the real update logic. + */ + public void emptyFile() + { + // Holder object to receive the data + RecordHolder rh = new RecordHolder(); + + try { + // Read each record, deleting as we go + for ( long rrn = 1; rrn < Integer.MAX_VALUE; rrn++ ) { + + // Lock this record and delete + this.rrds.readForUpdate(rrn, rh); + this.rrds.delete(); + } + } + catch (RecordNotFoundException rnfe) { + // Normal exit from loop - record ID not found + } + catch (InvalidRequestException ire) { + + // Invalid request may occur for several reasons - find out the root cause + // See the CICS API documentation for READ UPDATE to see the full list + if ( ire.getRESP2() == 20 ) { + // File not readable or updateable + String strMsg = "Read, update, or delete operations not permitted for file %s"; + Task.getTask().out.println( String.format(strMsg, this.rrds.getName()) ); + } + + // Throw an exception to rollback the current UoW + throw new RuntimeException(ire); + } + catch (CicsConditionException cce) { + // Crude error handling - propagate an exception back to caller + throw new RuntimeException(cce); + } + } +} diff --git a/cics-java-jcics-vsam-bundle/.project b/cics-java-jcics-vsam-bundle/.project new file mode 100644 index 0000000..ff359a1 --- /dev/null +++ b/cics-java-jcics-vsam-bundle/.project @@ -0,0 +1,22 @@ + + + cics-java-jcics-vsam-bundle + + + + + + + + + + 1772729611922 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..243b3fd --- /dev/null +++ b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-vsam-bundle/build.gradle b/cics-java-jcics-vsam-bundle/build.gradle new file mode 100644 index 0000000..c65ac83 --- /dev/null +++ b/cics-java-jcics-vsam-bundle/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" +} + +description = 'CICS Java JCICS TSQ sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-tsq-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + diff --git a/cics-java-jcics-vsam-bundle/pom.xml b/cics-java-jcics-vsam-bundle/pom.xml new file mode 100644 index 0000000..12fc5eb --- /dev/null +++ b/cics-java-jcics-vsam-bundle/pom.xml @@ -0,0 +1,38 @@ + + 4.0.0 + + + com.ibm.cicsdev + cics-java-jcics-samples + 1.0.1 + + + cics-java-jcics-tsq-bundle + cics-bundle + CICS Java JCICS TSQ sample - CICS bundle + + + + ${project.groupId} + cics-java-jcics-tsq-app + ${project.version} + + + + + + + + com.ibm.cics + cics-bundle-maven-plugin + 1.0.8 + true + + ${cics.jvmserver} + + + + + \ No newline at end of file diff --git a/etc/VSAM/DEFVSAM.jcl b/etc/VSAM/DEFVSAM.jcl new file mode 100644 index 0000000..dd65e22 --- /dev/null +++ b/etc/VSAM/DEFVSAM.jcl @@ -0,0 +1,38 @@ +//DEFVSAM JOB MSGLEVEL=(1,1),MSGCLASS=A,REGION=4M,MEMLIMIT=0M, +// NOTIFY=&SYSUID. +//* +//DEFINE EXEC PGM=IDCAMS +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + + DELETE JAVAED.TEST.KSDS.STOCK CLUSTER PURGE + DELETE JAVAED.TEST.ESDS.STOCK CLUSTER PURGE + DELETE JAVAED.TEST.RRDS.STOCK CLUSTER PURGE + + SET MAXCC = 0 + + DEFINE CLUSTER ( - + NAME ( JAVAED.TEST.KSDS.STOCK ) - + RECORDS ( 100 10 ) - + INDEXED - + KEYS ( 8 0 ) - + RECORDSIZE ( 80 80 ) - + ) + + DEFINE CLUSTER ( - + NAME ( JAVAED.TEST.ESDS.STOCK ) - + RECORDS ( 100 10 ) - + NONINDEXED - + KEYS ( 8 0 ) - + RECORDSIZE ( 80 80 ) - + ) + + DEFINE CLUSTER ( - + NAME ( JAVAED.TEST.RRDS.STOCK ) - + RECORDS ( 100 10 ) - + NUMBERED - + RECORDSIZE ( 80 80 ) - + ) + +/* +// diff --git a/etc/VSAM/DFHCSD.txt b/etc/VSAM/DFHCSD.txt new file mode 100644 index 0000000..10442e4 --- /dev/null +++ b/etc/VSAM/DFHCSD.txt @@ -0,0 +1,182 @@ + + DEFINE PROGRAM(JAVAVES1) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample1) + + DEFINE PROGRAM(JAVAVES2) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample2) + + DEFINE PROGRAM(JAVAVES3) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample3) + + DEFINE PROGRAM(JAVAVES4) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.esds.EsdsExample4) + + DEFINE PROGRAM(JAVAVES5) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.esds.KsdsExample5) + + DEFINE PROGRAM(JAVAVKS1) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample1) + + DEFINE PROGRAM(JAVAVKS2) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample2) + + DEFINE PROGRAM(JAVAVKS3) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample3) + + DEFINE PROGRAM(JAVAVKS4) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample4) + + DEFINE PROGRAM(JAVAVKS5) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.ksds.KsdsExample5) + + DEFINE PROGRAM(JAVAVRR1) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample1) + + DEFINE PROGRAM(JAVAVRR2) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample2) + + DEFINE PROGRAM(JAVAVRR3) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample3) + + DEFINE PROGRAM(JAVAVRR4) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample4) + + DEFINE PROGRAM(JAVAVRR5) GROUP(JCICSAMP) + DESCRIPTION(Java VSAM sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.vsam.rrds.RrdsExample5) + + DEFINE TRANSACTION(JVE1) GROUP(JCICSAMP) PROGRAM(JAVAVES1) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVE2) GROUP(JCICSAMP) PROGRAM(JAVAVES2) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVE3) GROUP(JCICSAMP) PROGRAM(JAVAVES3) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVE4) GROUP(JCICSAMP) PROGRAM(JAVAVES4) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVE5) GROUP(JCICSAMP) PROGRAM(JAVAVES5) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVK1) GROUP(JCICSAMP) PROGRAM(JAVAVKS1) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVK2) GROUP(JCICSAMP) PROGRAM(JAVAVKS2) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVK3) GROUP(JCICSAMP) PROGRAM(JAVAVKS3) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVK4) GROUP(JCICSAMP) PROGRAM(JAVAVKS4) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVK5) GROUP(JCICSAMP) PROGRAM(JAVAVKS5) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVR1) GROUP(JCICSAMP) PROGRAM(JAVAVRR1) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVR2) GROUP(JCICSAMP) PROGRAM(JAVAVRR2) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVR3) GROUP(JCICSAMP) PROGRAM(JAVAVRR3) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVR4) GROUP(JCICSAMP) PROGRAM(JAVAVRR4) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JVR5) GROUP(JCICSAMP) PROGRAM(JAVAVRR5) + DESCRIPTION(Java VSAM sample) + TASKDATALOC(ANY) + + DEFINE FILE(XMPLKSDS) GROUP(JCICSAMP) + READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(YES) + DSNAME(JAVAED.TEST.KSDS.STOCK) + + DEFINE FILE(XMPLESDS) GROUP(JCICSAMP) + READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(NO) + DSNAME(JAVAED.TEST.ESDS.STOCK) + + DEFINE FILE(XMPLRRDS) GROUP(JCICSAMP) + READ(YES) UPDATE(YES) ADD(YES) BROWSE(YES) DELETE(YES) + DSNAME(JAVAED.TEST.RRDS.STOCK) + + DEFINE BUNDLE(JCICVSAM) GROUP(JCICSAMP) + DESCRIPTION(JCICS VSAM sample) + BUNDLEDIR(/u/cics1/com.ibm.cicsdev.vsam.cicsbundle_1.0.0) + diff --git a/etc/VSAM/README.md b/etc/VSAM/README.md new file mode 100644 index 0000000..8c41510 --- /dev/null +++ b/etc/VSAM/README.md @@ -0,0 +1,5 @@ +Supporting materials used in conjunction with the JCICS VSAM samples. + +* DEFVSAM.jcl - Sample job to define the KSDS, ESDS, and RRDS VSAM files required. +* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. + From 0e11ecadde44412aa76164bb951ee2e9cb283366 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:14:52 +0000 Subject: [PATCH 50/73] Add supporting bundle projects --- etc/cics_bundle_projects/README.md | 33 +++++++++++++++++ .../com.ibm.cicsdev.link.cicsbundle/.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.link.osgibundle | 2 + .../.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVALIN1.program | 1 + .../JAVALIN2.program | 1 + .../JAVALIN3.program | 1 + .../JLN1.transaction | 1 + .../JLN2.transaction | 1 + .../JLN3.transaction | 1 + .../META-INF/cics.xml | 13 +++++++ .../.project | 33 +++++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.serialize.osgibundle | 2 + .../.project | 33 +++++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVASYN1.program | 1 + .../JSY1.transaction | 1 + .../META-INF/cics.xml | 9 +++++ .../com.ibm.cicsdev.tdq.cicsbundle/.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.tdq.osgibundle | 2 + .../.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVATDQ1.program | 1 + .../JAVATDQ2.program | 1 + .../JAVATDQ3.program | 1 + .../JTD1.transaction | 1 + .../JTD2.transaction | 1 + .../JTD3.transaction | 1 + .../META-INF/cics.xml | 13 +++++++ .../.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.terminal.osgibundle | 2 + .../.project | 33 +++++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVATRM1.program | 1 + .../JTM1.transaction | 1 + .../META-INF/cics.xml | 9 +++++ .../com.ibm.cicsdev.tsq.cicsbundle/.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.tsq.osgibundle | 2 + .../.project | 33 +++++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVATSQ1.program | 1 + .../JAVATSQ2.program | 1 + .../JAVATSQ3.program | 1 + .../JAVATSQ4.program | 1 + .../JTS1.transaction | 1 + .../JTS2.transaction | 1 + .../JTS3.transaction | 1 + .../JTS4.transaction | 1 + .../META-INF/cics.xml | 15 ++++++++ .../com.ibm.cicsdev.vsam.cicsbundle/.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 3 ++ .../META-INF/cics.xml | 8 ++++ .../com.ibm.cicsdev.vsam.osgibundle | 2 + .../.project | 29 +++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../JAVAVES1.program | 1 + .../JAVAVES2.program | 1 + .../JAVAVES3.program | 1 + .../JAVAVES4.program | 1 + .../JAVAVES5.program | 1 + .../JAVAVKS1.program | 1 + .../JAVAVKS2.program | 1 + .../JAVAVKS3.program | 1 + .../JAVAVKS4.program | 1 + .../JAVAVKS5.program | 1 + .../JAVAVRR1.program | 1 + .../JAVAVRR2.program | 1 + .../JAVAVRR3.program | 1 + .../JAVAVRR4.program | 1 + .../JAVAVRR5.program | 1 + .../JVE1.transaction | 1 + .../JVE2.transaction | 1 + .../JVE3.transaction | 1 + .../JVE4.transaction | 1 + .../JVE5.transaction | 1 + .../JVK1.transaction | 1 + .../JVK2.transaction | 1 + .../JVK3.transaction | 1 + .../JVK4.transaction | 1 + .../JVK5.transaction | 1 + .../JVR1.transaction | 1 + .../JVR2.transaction | 1 + .../JVR3.transaction | 1 + .../JVR4.transaction | 1 + .../JVR5.transaction | 1 + .../META-INF/cics.xml | 37 +++++++++++++++++++ 97 files changed, 637 insertions(+) create mode 100644 etc/cics_bundle_projects/README.md create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction create mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml diff --git a/etc/cics_bundle_projects/README.md b/etc/cics_bundle_projects/README.md new file mode 100644 index 0000000..59d7b7d --- /dev/null +++ b/etc/cics_bundle_projects/README.md @@ -0,0 +1,33 @@ +projects +=== + +Supporting Eclipse projects + + +## Overall project structure + + +* `com.ibm.cicsdev.*.cicsbundle` - Eclipse project for a CICS bundle that can be deployed into a CICS region. +* `com.ibm.cicsdev.*.resources.cicsbundle` - Eclipse project for a CICS bundle that defines the required +program and transaction resources for the sample. + + +## Samples overview + +* [`com.ibm.cicsdev.link`](com.ibm.cicsdev.link) - Performing CICS LINK operations using both commareas, +and channels and containers. +* [`com.ibm.cicsdev.serialize`](com.ibm.cicsdev.serialize) - Serializing access to a common resource using +the CICS ENQ and DEQ mechanism. +* [`com.ibm.cicsdev.tdq`](com.ibm.cicsdev.tdq) - Accessing transient data queues. +* [`com.ibm.cicsdev.terminal`](com.ibm.cicsdev.terminal) - Reading in data from a terminal for an OSGi application. +* [`com.ibm.cicsdev.tsq`](com.ibm.cicsdev.tsq) - Accessing temporary storage queues. +* [`com.ibm.cicsdev.vsam`](com.ibm.cicsdev.vsam) - Accessing KSDS, ESDS, and RRDS VSAM files. + + +## Adding the resources to Eclipse + +1. Using an Eclipse development environment import the project from the project folder using the menu +**File** -> **Import** -> **Existing Projects into Workspace**. + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project new file mode 100644 index 0000000..cbdae67 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.link.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..6a6ff5e --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.link.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..4fd7191 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-11-04T15:14:04.215Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle new file mode 100644 index 0000000..5f6b476 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project new file mode 100644 index 0000000..04b7f91 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.link.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program new file mode 100644 index 0000000..e346795 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program new file mode 100644 index 0000000..504f77f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program new file mode 100644 index 0000000..4e5d133 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction new file mode 100644 index 0000000..c8703cc --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction new file mode 100644 index 0000000..461d4d3 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction new file mode 100644 index 0000000..c25d8e7 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..222a486 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,13 @@ + + + + 2016-11-11T10:54:14.028Z + + + + + + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project new file mode 100644 index 0000000..b61da14 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.serialize.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.serialize.cicsbundle + + + majorVersion + 1 + + + microVersion + 0 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..d6abd2d --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.serialize.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..eca6125 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-12-13T15:47:28.565Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle new file mode 100644 index 0000000..697c985 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project new file mode 100644 index 0000000..6c207f0 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.serialize.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.serialize.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 0 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program new file mode 100644 index 0000000..cd5b93c --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction new file mode 100644 index 0000000..4f53b8f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..382b4ca --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,9 @@ + + + + 2016-12-13T15:49:54.727Z + + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project new file mode 100644 index 0000000..1cf858f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.tdq.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..2541fc0 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.tdq.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..135eafc --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-11-04T15:15:01.777Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle new file mode 100644 index 0000000..6f723cd --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project new file mode 100644 index 0000000..7ff732f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.tdq.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program new file mode 100644 index 0000000..b7ce498 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program new file mode 100644 index 0000000..ea67922 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program new file mode 100644 index 0000000..c514dd6 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction new file mode 100644 index 0000000..434e8a6 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction new file mode 100644 index 0000000..28fe38a --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction new file mode 100644 index 0000000..d4d1a46 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..53703ba --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,13 @@ + + + + 2016-11-11T11:00:30.401Z + + + + + + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project new file mode 100644 index 0000000..79a7046 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.terminal.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..6b035fe --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.terminal.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..d4e0d4c --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-11-04T15:15:33.327Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle new file mode 100644 index 0000000..1693bf9 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project new file mode 100644 index 0000000..8111cca --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.terminal.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.terminal.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 0 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program new file mode 100644 index 0000000..a25aa0c --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction new file mode 100644 index 0000000..618ab18 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..c706aae --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,9 @@ + + + + 2016-11-11T11:05:46.741Z + + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project new file mode 100644 index 0000000..44b6bb5 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.tsq.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..6cf0a61 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.tsq.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..fbb0279 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-11-04T15:15:33.327Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle new file mode 100644 index 0000000..7a93389 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project new file mode 100644 index 0000000..baf323f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project @@ -0,0 +1,33 @@ + + + com.ibm.cicsdev.tsq.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.tsq.resources.cicsbundle + + + majorVersion + + + + microVersion + + + + minorVersion + + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program new file mode 100644 index 0000000..f18651f --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program new file mode 100644 index 0000000..984aa55 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program new file mode 100644 index 0000000..2e34327 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program new file mode 100644 index 0000000..22a7abb --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction new file mode 100644 index 0000000..cb562c4 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction new file mode 100644 index 0000000..104e315 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction new file mode 100644 index 0000000..918159b --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction new file mode 100644 index 0000000..f0e1ac3 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..20ea96d --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,15 @@ + + + + 2016-11-11T11:05:46.741Z + + + + + + + + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project new file mode 100644 index 0000000..77b4485 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.vsam.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e7b581e --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 +encoding/com.ibm.cicsdev.vsam.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..9d6f64c --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml @@ -0,0 +1,8 @@ + + + + 2016-12-13T15:47:28.565Z + + + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle new file mode 100644 index 0000000..080e914 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project new file mode 100644 index 0000000..9883310 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project @@ -0,0 +1,29 @@ + + + com.ibm.cicsdev.vsam.resources.cicsbundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + + + majorVersion + + + microVersion + + + minorVersion + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8ddaf77 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//META-INF/cics.xml=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program new file mode 100644 index 0000000..1fc6d81 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program new file mode 100644 index 0000000..df220b3 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program new file mode 100644 index 0000000..73c671e --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program new file mode 100644 index 0000000..0c46a5a --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program new file mode 100644 index 0000000..130025b --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program new file mode 100644 index 0000000..4055171 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program new file mode 100644 index 0000000..a268cb8 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program new file mode 100644 index 0000000..40b4683 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program new file mode 100644 index 0000000..1725aad --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program new file mode 100644 index 0000000..fcdd685 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program new file mode 100644 index 0000000..572590b --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program new file mode 100644 index 0000000..eda5324 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program new file mode 100644 index 0000000..1f1f882 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program new file mode 100644 index 0000000..75ab66e --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program new file mode 100644 index 0000000..4306587 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction new file mode 100644 index 0000000..1c1c79c --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction new file mode 100644 index 0000000..5fdf6fd --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction new file mode 100644 index 0000000..996fbc2 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction new file mode 100644 index 0000000..fd35736 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction new file mode 100644 index 0000000..e62e3f5 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction new file mode 100644 index 0000000..e9369dc --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction new file mode 100644 index 0000000..3847aec --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction new file mode 100644 index 0000000..ba86766 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction new file mode 100644 index 0000000..90525aa --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction new file mode 100644 index 0000000..f0458a3 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction new file mode 100644 index 0000000..1fce412 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction new file mode 100644 index 0000000..672790e --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction new file mode 100644 index 0000000..b2c4a20 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction new file mode 100644 index 0000000..6d2bd29 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction new file mode 100644 index 0000000..913e900 --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction @@ -0,0 +1 @@ + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml new file mode 100644 index 0000000..c43345d --- /dev/null +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml @@ -0,0 +1,37 @@ + + + + 2016-12-13T15:49:54.727Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b643839cdb07ac4db4715db863eb612e53581077 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:15:28 +0000 Subject: [PATCH 51/73] Fixup gradle builds --- cics-java-jcics-tdq-app/build.gradle | 7 ------- settings.gradle | 10 ++++++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/cics-java-jcics-tdq-app/build.gradle b/cics-java-jcics-tdq-app/build.gradle index c73fd16..bee7e3f 100644 --- a/cics-java-jcics-tdq-app/build.gradle +++ b/cics-java-jcics-tdq-app/build.gradle @@ -11,13 +11,6 @@ java targetCompatibility = java_version } -// Add the IRG generated JAR as a repository -/*repositories { - flatDir { - dirs("local-repo") - } -} */ - dependencies { diff --git a/settings.gradle b/settings.gradle index 0252fd5..b041dda 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,14 +1,16 @@ rootProject.name = 'cics-java-jcics-samples' -include(':cics-java-jcics-serialize-app') -include(':cics-java-jcics-serialize-bundle') -include(':cics-java-jcics-terminal-app') -include(':cics-java-jcics-terminal-bundle') include(':cics-java-jcics-link-app') include(':cics-java-jcics-link-bundle') +include(':cics-java-jcics-serialize-app') +include(':cics-java-jcics-serialize-bundle') include(':cics-java-jcics-tdq-app') include(':cics-java-jcics-tdq-bundle') +include(':cics-java-jcics-terminal-app') +include(':cics-java-jcics-terminal-bundle') include(':cics-java-jcics-tsq-app') include(':cics-java-jcics-tsq-bundle') +include(':cics-java-jcics-vsam-app') +include(':cics-java-jcics-vsam-bundle') From 07275625eeeff0909631bf92044f7f9aa8a51d2a Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:16:01 +0000 Subject: [PATCH 52/73] Add missing readmes --- README.md | 13 ++++++++---- cics-java-jcics-serialize-app/README.md | 27 +++++++++++++++++++++++++ etc/TSQ/README.md | 4 ++++ etc/Terminal/README.md | 4 ++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 cics-java-jcics-serialize-app/README.md create mode 100644 etc/TSQ/README.md create mode 100644 etc/Terminal/README.md diff --git a/README.md b/README.md index ffc5115..cafa1ea 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,17 @@ Ensure you check "Search for nested projects", and do not select **Copy projects The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target Platform. When you initially import the project to your IDE, if your IDE is not configured for Java 17, or does not have CICS Explorer SDK installed with the correct *Target Platform* set, you might experience local project compile errors. -To resolve issues: +To resolve build issues: * Ensure you have the latest CICS Explorer SDK plug-in installed * Set the CICS TS Target Platform to your intended CICS target (Hint: **Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...**) * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings - - +* The TS, TD, VSAM and LINK sample projects manipulate byte-oriented record structures using Java classes +generated using the IBM Record Generator for Java. The generated classes can be found packaged in a JAR +file, found in the `lib/` subdirectory of the relevant project. Only the compiled helper classes are +required to compile and run the application, however the generated source files are included for reference. +If you are manually adding source files to your Eclipse development environment, you will need to add the +generated JAR file to the build path in order to compile the samples, using the project context menu +**Build Path** -> **Configure Build Path** -> **Libraries**. --- @@ -139,7 +144,7 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed #### Option 3 - Deploying using Eclipse and z/OS Explorer 1. Connect to the host system using the Remote Systems view in z/OS Explorer 2. Create the bundle directory in zFS -3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory in the local workstation to the bundle directory on zFS. +3. Copy & paste the built CICS bundle ZIP file from your *target* or *build/distributions* directory on the local workstation to the bundle directory on zFS. 4. Extract the ZIP by right-clicking on the ZIP file > User Action > unjar... diff --git a/cics-java-jcics-serialize-app/README.md b/cics-java-jcics-serialize-app/README.md new file mode 100644 index 0000000..3af1bfb --- /dev/null +++ b/cics-java-jcics-serialize-app/README.md @@ -0,0 +1,27 @@ +com.ibm.cicsdev.serialize +=== + +Provides an example for serializing access to a common resource using the CICS ENQ and DEQ mechanism. + +* `SerializeExample1` - a simple class to demonstrate using the CICS ENQ and DEQ mechanism from a JCICS environment. + + +## Supporting files + +* [`/etc/Serialize`](../../etc/Serialize) - contains the output of a DFHCSDUP EXTRACT operation needed to define the required programs and transactions. + + +## Running the Example + +At a 3270 terminal screen, enter the transaction you wish to run, for example JSY1 will run example 1. + + JSY1 + +and the following output will be returned + + JSY1 - Starting SerializeExample1 + Attempting to acquire resource lock MYAPP.SYNC.RES1 + Resource lock has been acquired + Resource lock has been released + Completed SerializeExample1 + diff --git a/etc/TSQ/README.md b/etc/TSQ/README.md new file mode 100644 index 0000000..7db2181 --- /dev/null +++ b/etc/TSQ/README.md @@ -0,0 +1,4 @@ +Supporting materials used in conjunction with the JCICS TSQ samples. + +* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. + diff --git a/etc/Terminal/README.md b/etc/Terminal/README.md new file mode 100644 index 0000000..83c7a2c --- /dev/null +++ b/etc/Terminal/README.md @@ -0,0 +1,4 @@ +Supporting materials used in conjunction with the JCICS terminal samples. + +* DFHCSD.txt - Output from a DFHCSDUP EXTRACT operation to define the programs and transactions required. + From c00755a34ced69e4b37c978794bb2a2b59d5ae33 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:16:13 +0000 Subject: [PATCH 53/73] Update build.gradle --- cics-java-jcics-tsq-app/build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cics-java-jcics-tsq-app/build.gradle b/cics-java-jcics-tsq-app/build.gradle index 9567f94..a7d3e38 100644 --- a/cics-java-jcics-tsq-app/build.gradle +++ b/cics-java-jcics-tsq-app/build.gradle @@ -11,13 +11,6 @@ java targetCompatibility = java_version } -// Add the IRG generated JAR as a repository -/*repositories { - flatDir { - dirs("local-repo") - } -} */ - dependencies { From d2c5acb79468d1cbe38911591ec04b495fffc6d2 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:16:24 +0000 Subject: [PATCH 54/73] VSAM code --- .../ibm/cicsdev/vsam/ksds/KsdsExample2.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java diff --git a/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java new file mode 100644 index 0000000..13d910d --- /dev/null +++ b/cics-java-jcics-vsam-app/src/main/java/com/ibm/cicsdev/vsam/ksds/KsdsExample2.java @@ -0,0 +1,65 @@ +/* Licensed Materials - Property of IBM */ +/* */ +/* SAMPLE */ +/* */ +/* (c) Copyright IBM Corp. 2017 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.vsam.ksds; + +import com.ibm.cics.server.Task; +import com.ibm.cicsdev.bean.StockPart; +import com.ibm.cicsdev.vsam.StockPartHelper; + + +/** + * Simple example to demonstrate reading a record from a VSAM KSDS file using JCICS. + * + * This class is just the driver of the test. The main JCICS work is done in the + * superclass {@link KsdsExampleCommon}. + */ +public class KsdsExample2 +{ + /** + * Main entry point to a CICS OSGi program. + * + * The FQ name of this class should be added to the CICS-MainClass entry in + * the parent OSGi bundle's manifest. + */ + public static void main(String[] args) + { + // Get details about our current CICS task + Task task = Task.getTask(); + task.out.println(" - Starting KsdsExample2"); + task.out.println("VSAM KSDS record read example"); + + // Create a new instance of the common example class + KsdsExampleCommon ex = new KsdsExampleCommon(); + + // Add a new record to the file so we have something to work with + StockPart spNew = StockPartHelper.generate(); + ex.addRecord(spNew); + + // Keep track of the key + int key = spNew.getPartId(); + + // Write out the original description + task.out.println( String.format("Wrote record with key 0x%08X", key) ); + + // Commit the current unit of work harden new record to the file + ex.commitUnitOfWork(); + + // Now read the record with the specified key + StockPart spRead = ex.readRecord(key); + + // Display the read description + String strMsg = "Read record with description %s"; + task.out.println( String.format(strMsg, spRead.getDescription().trim()) ); + + // Completion message + task.out.println("Completed KsdsExample2"); + } +} From 4f4205441ad08680dcef5139b6ca15d9464109e5 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:16:45 +0000 Subject: [PATCH 55/73] Add missing DFHCSD files --- etc/TSQ/DFHCSD.txt | 53 +++++++++++++++++++++++++++++++++++++++++ etc/Terminal/DFHCSD.txt | 15 ++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 etc/TSQ/DFHCSD.txt create mode 100644 etc/Terminal/DFHCSD.txt diff --git a/etc/TSQ/DFHCSD.txt b/etc/TSQ/DFHCSD.txt new file mode 100644 index 0000000..d928ea4 --- /dev/null +++ b/etc/TSQ/DFHCSD.txt @@ -0,0 +1,53 @@ + + DEFINE PROGRAM(JAVATSQ1) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tsq.TSQExample1) + + + DEFINE PROGRAM(JAVATSQ2) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tsq.TSQExample2) + + DEFINE PROGRAM(JAVATSQ3) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tsq.TSQExample3) + + DEFINE PROGRAM(JAVATSQ4) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + CONCURRENCY(REQUIRED) API(CICSAPI) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + EXECKEY(CICS) + JVMCLASS(com.ibm.cicsdev.tsq.TSQExample4) + + DEFINE TRANSACTION(JTS1) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + PROGRAM(JAVATSQ1) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JTS2) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + PROGRAM(JAVATSQ2) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JTS3) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + PROGRAM(JAVATSQ3) + TASKDATALOC(ANY) + + DEFINE TRANSACTION(JTS4) GROUP(JCICSAMP) + DESCRIPTION(Java TSQ sample) + PROGRAM(JAVATSQ4) + TASKDATALOC(ANY) + + DEFINE BUNDLE(JCICSTSQ) GROUP(JCICSAMP) + DESCRIPTION(JCICS TSQ SAMPLE) + BUNDLEDIR(/u/cics1/com.ibm.cicsdev.tsq.cicsbundle_1.0.0) diff --git a/etc/Terminal/DFHCSD.txt b/etc/Terminal/DFHCSD.txt new file mode 100644 index 0000000..5a975b6 --- /dev/null +++ b/etc/Terminal/DFHCSD.txt @@ -0,0 +1,15 @@ + + DEFINE PROGRAM(JAVATRM1) GROUP(JCICSAMP) + DESCRIPTION(Java terminal sample) + CONCURRENCY(REQUIRED) API(CICSAPI) DYNAMIC(NO) + JVM(YES) JVMSERVER(DFHJVMS) DATALOCATION(ANY) + JVMCLASS(com.ibm.cicsdev.terminal.TerminalExample1) + + DEFINE TRANSACTION(JTM1) GROUP(JCICSAMP) PROGRAM(JAVATRM1) + DESCRIPTION(Java terminal sample) + TASKDATALOC(ANY) + + DEFINE BUNDLE(JCICTERM) GROUP(JCICSAMP) + DESCRIPTION(JCICS terminal sample) + BUNDLEDIR(/u/cics1/com.ibm.cicsdev.terminal.cicsbundle_1.0.0) + From d39e3298aca11beaada3af2eaaa9e0a808686317 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:24:57 +0000 Subject: [PATCH 56/73] Fix README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index cafa1ea..0d7cb97 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM * [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in project for cics-java-jcics-serialize-app * [`cics-java-jcics-tdq-app`](cics-java-jcics-tdq-app) - Java project covering access to transient data queues using the READQ and WRITEQ commands. * [`cics-java-jcics-tdq-bundle`](cics-java-jcics-tdq-bundle) - CICS bundle plug-in project for cics-java-jcics-tdq-app +* [`ics-java-jcics-tsq-app`](cics-java-jcics-tsq-app) - Java project covering access to temporary storage queues using the READQ and WRITEQ commands. +* [`cics-java-jcics-tsq-bundle`](cics-java-jcics-tsq-bundle) - CICS bundle plug-in project for cics-java-jcics-tsq-app +* [`cics-java-jcics-vsam-app`](cics-java-jcics-vsam-app) - Java project covering access to Accessing KSDS, ESDS, and RRDS VSAM files. +* [`cics-java-jcics-vsam-bundle`](cics-java-jcics-vsam-bundle) - CICS bundle plug-in project for cics-java-jcics-vsam-app + + ## Repository structure From 21de6c67ec1c9ecce3c8a2c1ccdf40630c2f70a2 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:53:50 +0000 Subject: [PATCH 57/73] Add VSAM record --- .../lib/cics-java-jcics-vsam-record-1.0.jar | Bin 0 -> 7443 bytes .../1.0/_remote.repositories | 4 ++++ .../1.0/cics-java-jcics-vsam-record-1.0.jar | Bin 0 -> 7443 bytes .../1.0/cics-java-jcics-vsam-record-1.0.pom | 9 +++++++++ .../maven-metadata-local.xml | 12 ++++++++++++ 5 files changed, 25 insertions(+) create mode 100644 cics-java-jcics-vsam-app/lib/cics-java-jcics-vsam-record-1.0.jar create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/_remote.repositories create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.jar create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.pom create mode 100644 local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/maven-metadata-local.xml diff --git a/cics-java-jcics-vsam-app/lib/cics-java-jcics-vsam-record-1.0.jar b/cics-java-jcics-vsam-app/lib/cics-java-jcics-vsam-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..623af6f917ede44af54e23f04ae6db413f387adc GIT binary patch literal 7443 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 literal 0 HcmV?d00001 diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/_remote.repositories b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/_remote.repositories new file mode 100644 index 0000000..954363b --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Mon Mar 23 15:33:41 GMT 2026 +cics-java-jcics-vsam-record-1.0.jar>= +cics-java-jcics-vsam-record-1.0.pom>= diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.jar b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..623af6f917ede44af54e23f04ae6db413f387adc GIT binary patch literal 7443 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 literal 0 HcmV?d00001 diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.pom b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.pom new file mode 100644 index 0000000..1372009 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/1.0/cics-java-jcics-vsam-record-1.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.ibm.cicsdev + cics-java-jcics-vsam-record + 1.0 + POM was created from install:install-file + diff --git a/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/maven-metadata-local.xml b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/maven-metadata-local.xml new file mode 100644 index 0000000..167b644 --- /dev/null +++ b/local-repo/com/ibm/cicsdev/cics-java-jcics-vsam-record/maven-metadata-local.xml @@ -0,0 +1,12 @@ + + + com.ibm.cicsdev + cics-java-jcics-vsam-record + + 1.0 + + 1.0 + + 20260323153338 + + From 6773036bdaf6555fef6a8d0ffcd1133069e8cefc Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 15:53:58 +0000 Subject: [PATCH 58/73] Fix pom files --- cics-java-jcics-terminal-bundle/pom.xml | 6 +++--- cics-java-jcics-vsam-bundle/pom.xml | 6 +++--- pom.xml | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/cics-java-jcics-terminal-bundle/pom.xml b/cics-java-jcics-terminal-bundle/pom.xml index ee75f14..c4ce516 100644 --- a/cics-java-jcics-terminal-bundle/pom.xml +++ b/cics-java-jcics-terminal-bundle/pom.xml @@ -9,14 +9,14 @@ 1.0.1 - cics-java-jcics-tdq-bundle + cics-java-jcics-terminal-bundle cics-bundle - CICS Java JCICS TDQ sample - CICS bundle + CICS Java JCICS Terminal sample - CICS bundle ${project.groupId} - cics-java-jcics-tdq-app + cics-java-jcics-terminal-app ${project.version} diff --git a/cics-java-jcics-vsam-bundle/pom.xml b/cics-java-jcics-vsam-bundle/pom.xml index 12fc5eb..7e14df9 100644 --- a/cics-java-jcics-vsam-bundle/pom.xml +++ b/cics-java-jcics-vsam-bundle/pom.xml @@ -9,14 +9,14 @@ 1.0.1 - cics-java-jcics-tsq-bundle + cics-java-jcics-vsan-bundle cics-bundle - CICS Java JCICS TSQ sample - CICS bundle + CICS Java JCICS VSAM sample - CICS bundle ${project.groupId} - cics-java-jcics-tsq-app + cics-java-jcics-vsam-app ${project.version} diff --git a/pom.xml b/pom.xml index 9ea459b..13799db 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,11 @@ cics-java-jcics-serialize-bundle cics-java-jcics-tdq-app cics-java-jcics-tdq-bundle + cics-java-jcics-terminal-app + cics-java-jcics-terminal-bundle cics-java-jcics-tsq-app cics-java-jcics-tsq-bundle + cics-java-jcics-vsam-app + cics-java-jcics-vsam-bundle \ No newline at end of file From 90f327994b0d4d039531f3f39318b8aa480e1ee2 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 16:18:29 +0000 Subject: [PATCH 59/73] Fix semantic version in OSGI bundles --- .../com.ibm.cicsdev.link.osgibundle | 2 +- .../com.ibm.cicsdev.serialize.osgibundle | 2 +- .../com.ibm.cicsdev.tdq.osgibundle | 2 +- .../com.ibm.cicsdev.terminal.osgibundle | 2 +- .../com.ibm.cicsdev.tsq.osgibundle | 2 +- .../com.ibm.cicsdev.vsam.osgibundle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle index 5f6b476..5e63f04 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle index 697c985..69b7e6e 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle index 6f723cd..4c2c479 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle index 1693bf9..71d589b 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle index 7a93389..fdd408b 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle index 080e914..4a8a7bd 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file From 1cd81b8197c3831f629f74906286cae9679bd1e2 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 16:18:50 +0000 Subject: [PATCH 60/73] Add Usage terms --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0d7cb97..34feda9 100644 --- a/README.md +++ b/README.md @@ -164,10 +164,6 @@ See the individual project directories for any additional supporting resources r 1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resources and ensure the JVM server becomes enabled along with all associated bundles. - -## License - -This project is licensed under [Apache License Version 2.0](LICENSE). ## Reference @@ -175,3 +171,12 @@ This project is licensed under [Apache License Version 2.0](LICENSE). * For further details on using the IBM Record Generator for Java see this [tutorial](https://developer.ibm.com/tutorials/build-java-records-from-cobol-with-ibm-record-generator/) * For details on how to define a CICS OSGi JVM server refer to the Knowledge Center topic [Configuring an OSGi JVM server](https://www.ibm.com/docs/en/cics-ts/5.5.0?topic=server-configuring-osgi-jvm) * Developer works tutorial archive [Getting to Grips with JCICS](blog/blog.md) + +## License + +This project is licensed under [Apache License Version 2.0](LICENSE). + +## Usage terms +By downloading, installing, and/or using this sample, you acknowledge that separate license terms may apply to any dependencies that might be required as part of the installation and/or execution and/or automated build of the sample, including the following IBM license terms for relevant IBM components: + +• IBM CICS development components terms: https://www.ibm.com/support/customer/csol/terms/?id=L-ACRR-BBZLGX From 9c5ad67c68ea3a61a7394e9ec2f0264be03f4b76 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 16:37:40 +0000 Subject: [PATCH 61/73] Set Eclipse bundle project encodings --- .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.core.resources.prefs | 1 + 12 files changed, 12 insertions(+) diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs index 6a6ff5e..a6c2bba 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.link.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs index d6abd2d..d14f581 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.serialize.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs index 2541fc0..a6e8576 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.tdq.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs index 6b035fe..eda79a8 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.terminal.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs index 6cf0a61..4f58087 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.tsq.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs index e7b581e..ca610c0 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 encoding/com.ibm.cicsdev.vsam.osgibundle=UTF-8 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs index 8ddaf77..64c4ee3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs +++ b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 encoding//META-INF/cics.xml=UTF-8 +encoding/=UTF-8 From fb8b6cb4bd4fca9316ee559cb0fd8b90eb7a87ae Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Mon, 23 Mar 2026 16:37:52 +0000 Subject: [PATCH 62/73] Fix naming --- cics-java-jcics-vsam-app/.project | 2 +- cics-java-jcics-vsam-bundle/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cics-java-jcics-vsam-app/.project b/cics-java-jcics-vsam-app/.project index e64a5a7..30a027a 100644 --- a/cics-java-jcics-vsam-app/.project +++ b/cics-java-jcics-vsam-app/.project @@ -1,6 +1,6 @@ - cics-java-jcics-tsq-app + cics-java-jcics-vsam-app diff --git a/cics-java-jcics-vsam-bundle/build.gradle b/cics-java-jcics-vsam-bundle/build.gradle index c65ac83..ce42548 100644 --- a/cics-java-jcics-vsam-bundle/build.gradle +++ b/cics-java-jcics-vsam-bundle/build.gradle @@ -2,10 +2,10 @@ plugins { id 'com.ibm.cics.bundle' version "1.0.8" } -description = 'CICS Java JCICS TSQ sample - CICS bundle' +description = 'CICS Java JCICS VSAM sample - CICS bundle' dependencies { - cicsBundlePart project(path: ':cics-java-jcics-tsq-app', configuration: 'archives') + cicsBundlePart project(path: ':cics-java-jcics-vsam-app', configuration: 'archives') } cicsBundle { From 7b6f004a9e5eb8a79e7e26b3af203745f9faaf67 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 10:21:36 +0000 Subject: [PATCH 63/73] Update README --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 34feda9..3cb230e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM server environment. -## Sample projects overview +## Projects overview * [`cics-java-jcics-link-app`](cics-java-jcics-link-app) - Java project covering LINK commands using both COMMAREAs and channels and containers * [`cics-java-jcics-link-bundle`](cics-java-jcics-link-bundle) - CICS bundle plug-in project for cics-java-jcics-link-app @@ -20,11 +20,10 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Repository structure - * [`etc/`](etc) - Supporting materials including DFHCSDUP definition files. * [`etc/cics_bundle_projects/`](etc/cics_bundle_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. -* [`local-repo/`](/local-repo) - Maven repository for COMMAREA wrapper JAR generated from EDUPGM COBOL copybook. +* [`local-repo/`](/local-repo) - Maven repository for JARs generated using IBM Record Generator for Java. * [`gradle/`](gradle) - Gradle wrapper * [`.mvn/`](.mvn/wrapper) - Maven wrapper * [`blog/`](https://github.com/cicsdev/cics-java-jcics-samples/tree/main/blog/blog.md) - Archive of developer works JCICS tutorial. @@ -116,10 +115,11 @@ To resolve build issues: * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings * The TS, TD, VSAM and LINK sample projects manipulate byte-oriented record structures using Java classes generated using the IBM Record Generator for Java. The generated classes can be found packaged in a JAR -file, found in the `lib/` subdirectory of the relevant project. Only the compiled helper classes are -required to compile and run the application, however the generated source files are included for reference. -If you are manually adding source files to your Eclipse development environment, you will need to add the -generated JAR file to the build path in order to compile the samples, using the project context menu +file, found in the `lib/` subdirectory of the relevant project and are also packaged in a local Maven repository +to support the Maven and Gradle builds. Only the compiled helper classes are +required to compile and run the application, however, the generated source files are included for reference. +If you are manually adding source files to your Eclipse development environment, you will need to add the relevant +generated JAR file to the build path using the project context menu **Build Path** -> **Configure Build Path** -> **Libraries**. --- From 1ef89b8471ff838b0da22d0e97db96396251fe4c Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 10:25:49 +0000 Subject: [PATCH 64/73] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c295a0f..5422413 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,6 @@ gradle-app.setting !gradle-wrapper.properties # VSCode ignores -.vscode/* +.vscode/ .history/ *.vsix From 021baa564244c1735737afc59139abee055147c1 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 10:28:05 +0000 Subject: [PATCH 65/73] Delete .vscode --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 0e14d8e..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "disabled" -} \ No newline at end of file From d5ad35bdad539e9ecde4b43853c349497653398c Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 11:50:18 +0000 Subject: [PATCH 66/73] Add bundle project readmes --- README.md | 2 +- cics-java-jcics-link-bundle/README.md | 5 +++++ cics-java-jcics-serialize-bundle/README.md | 6 ++++++ cics-java-jcics-tdq-bundle/README.md | 6 ++++++ cics-java-jcics-terminal-bundle/README.md | 6 ++++++ cics-java-jcics-tsq-bundle/README.md | 6 ++++++ cics-java-jcics-vsam-bundle/README.md | 6 ++++++ 7 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 cics-java-jcics-link-bundle/README.md create mode 100644 cics-java-jcics-serialize-bundle/README.md create mode 100644 cics-java-jcics-tdq-bundle/README.md create mode 100644 cics-java-jcics-terminal-bundle/README.md create mode 100644 cics-java-jcics-tsq-bundle/README.md create mode 100644 cics-java-jcics-vsam-bundle/README.md diff --git a/README.md b/README.md index 3cb230e..137dd0b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM * [`cics-java-jcics-serialize-bundle`](cics-java-jcics-serialize-bundle) - CICS bundle plug-in project for cics-java-jcics-serialize-app * [`cics-java-jcics-tdq-app`](cics-java-jcics-tdq-app) - Java project covering access to transient data queues using the READQ and WRITEQ commands. * [`cics-java-jcics-tdq-bundle`](cics-java-jcics-tdq-bundle) - CICS bundle plug-in project for cics-java-jcics-tdq-app -* [`ics-java-jcics-tsq-app`](cics-java-jcics-tsq-app) - Java project covering access to temporary storage queues using the READQ and WRITEQ commands. +* [`cics-java-jcics-tsq-app`](cics-java-jcics-tsq-app) - Java project covering access to temporary storage queues using the READQ and WRITEQ commands. * [`cics-java-jcics-tsq-bundle`](cics-java-jcics-tsq-bundle) - CICS bundle plug-in project for cics-java-jcics-tsq-app * [`cics-java-jcics-vsam-app`](cics-java-jcics-vsam-app) - Java project covering access to Accessing KSDS, ESDS, and RRDS VSAM files. * [`cics-java-jcics-vsam-bundle`](cics-java-jcics-vsam-bundle) - CICS bundle plug-in project for cics-java-jcics-vsam-app diff --git a/cics-java-jcics-link-bundle/README.md b/cics-java-jcics-link-bundle/README.md new file mode 100644 index 0000000..043a93a --- /dev/null +++ b/cics-java-jcics-link-bundle/README.md @@ -0,0 +1,5 @@ +cics-java-jcics-link-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-link-app** project. + diff --git a/cics-java-jcics-serialize-bundle/README.md b/cics-java-jcics-serialize-bundle/README.md new file mode 100644 index 0000000..a6ec994 --- /dev/null +++ b/cics-java-jcics-serialize-bundle/README.md @@ -0,0 +1,6 @@ +cics-java-jcics-serialize-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-serialize-app** project. + +s \ No newline at end of file diff --git a/cics-java-jcics-tdq-bundle/README.md b/cics-java-jcics-tdq-bundle/README.md new file mode 100644 index 0000000..959d1bc --- /dev/null +++ b/cics-java-jcics-tdq-bundle/README.md @@ -0,0 +1,6 @@ +cics-java-jcics-tdq-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tdq-app** project. + +s \ No newline at end of file diff --git a/cics-java-jcics-terminal-bundle/README.md b/cics-java-jcics-terminal-bundle/README.md new file mode 100644 index 0000000..6de7108 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/README.md @@ -0,0 +1,6 @@ +cics-java-jcics-terminal-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-terminal-app** project. + +s \ No newline at end of file diff --git a/cics-java-jcics-tsq-bundle/README.md b/cics-java-jcics-tsq-bundle/README.md new file mode 100644 index 0000000..297fc46 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/README.md @@ -0,0 +1,6 @@ +cics-java-jcics-tsq-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tsq-app** project. + +s \ No newline at end of file diff --git a/cics-java-jcics-vsam-bundle/README.md b/cics-java-jcics-vsam-bundle/README.md new file mode 100644 index 0000000..9ed53f3 --- /dev/null +++ b/cics-java-jcics-vsam-bundle/README.md @@ -0,0 +1,6 @@ +cics-java-jcics-vsam-bundle +=== + +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-vsam-app** project. + +s \ No newline at end of file From 503d2d4d396ca9a6be7c2a75539ac665409aa968 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 11:51:02 +0000 Subject: [PATCH 67/73] Remove bundle plugin project Eclipse settings --- cics-java-jcics-link-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.ltk.core.refactoring.prefs | 2 -- cics-java-jcics-serialize-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- cics-java-jcics-tdq-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.ltk.core.refactoring.prefs | 2 -- cics-java-jcics-terminal-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.ltk.core.refactoring.prefs | 2 -- cics-java-jcics-tsq-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.ltk.core.refactoring.prefs | 2 -- cics-java-jcics-vsam-bundle/.project | 22 ------------------- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.ltk.core.refactoring.prefs | 2 -- 17 files changed, 154 deletions(-) delete mode 100644 cics-java-jcics-link-bundle/.project delete mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs delete mode 100644 cics-java-jcics-serialize-bundle/.project delete mode 100644 cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-tdq-bundle/.project delete mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs delete mode 100644 cics-java-jcics-terminal-bundle/.project delete mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs delete mode 100644 cics-java-jcics-tsq-bundle/.project delete mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs delete mode 100644 cics-java-jcics-vsam-bundle/.project delete mode 100644 cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs delete mode 100644 cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs diff --git a/cics-java-jcics-link-bundle/.project b/cics-java-jcics-link-bundle/.project deleted file mode 100644 index cbe86fe..0000000 --- a/cics-java-jcics-link-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-link-bundle - - - - - - - - - - 1772729611922 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index 243b3fd..0000000 --- a/cics-java-jcics-link-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-serialize-bundle/.project b/cics-java-jcics-serialize-bundle/.project deleted file mode 100644 index 7223160..0000000 --- a/cics-java-jcics-serialize-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-serialize-bundle - Project cics-java-jcics-serialize-bundle created by Buildship. - - - - - - - - - 1773054282866 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-tdq-bundle/.project b/cics-java-jcics-tdq-bundle/.project deleted file mode 100644 index 5dc5248..0000000 --- a/cics-java-jcics-tdq-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-tdq-bundle - - - - - - - - - - 1772729611922 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index 243b3fd..0000000 --- a/cics-java-jcics-tdq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project deleted file mode 100644 index a01a210..0000000 --- a/cics-java-jcics-terminal-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-terminal-bundle - - - - - - - - - - 1772729611922 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index 243b3fd..0000000 --- a/cics-java-jcics-terminal-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-tsq-bundle/.project b/cics-java-jcics-tsq-bundle/.project deleted file mode 100644 index 815bb09..0000000 --- a/cics-java-jcics-tsq-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-tsq-bundle - - - - - - - - - - 1772729611922 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index 243b3fd..0000000 --- a/cics-java-jcics-tsq-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file diff --git a/cics-java-jcics-vsam-bundle/.project b/cics-java-jcics-vsam-bundle/.project deleted file mode 100644 index ff359a1..0000000 --- a/cics-java-jcics-vsam-bundle/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - cics-java-jcics-vsam-bundle - - - - - - - - - - 1772729611922 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index 243b3fd..0000000 --- a/cics-java-jcics-vsam-bundle/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false \ No newline at end of file From 396bc36e04c4cb6dcb5d5b7ef322e35b77b40c1a Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 11:51:17 +0000 Subject: [PATCH 68/73] Add missing build file --- cics-java-jcics-serialize-bundle/build.gradle | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 cics-java-jcics-serialize-bundle/build.gradle diff --git a/cics-java-jcics-serialize-bundle/build.gradle b/cics-java-jcics-serialize-bundle/build.gradle new file mode 100644 index 0000000..bc41e1d --- /dev/null +++ b/cics-java-jcics-serialize-bundle/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'com.ibm.cics.bundle' version "1.0.8" +} + +description = 'CICS Java JCICS serialize sample - CICS bundle' + +dependencies { + cicsBundlePart project(path: ':cics-java-jcics-serialize-app', configuration: 'archives') +} + +cicsBundle { + build { + defaultJVMServer = project.findProperty("cics.jvmserver") ?: "DFHJVMS" + } +} + + From 77a591ecb99fb669e93b9dc3873a0f04cf473a72 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Tue, 24 Mar 2026 11:58:56 +0000 Subject: [PATCH 69/73] Fix readmes --- cics-java-jcics-serialize-bundle/README.md | 4 +--- cics-java-jcics-tdq-bundle/README.md | 4 +--- cics-java-jcics-terminal-bundle/README.md | 4 +--- cics-java-jcics-tsq-bundle/README.md | 2 -- cics-java-jcics-vsam-bundle/README.md | 2 -- 5 files changed, 3 insertions(+), 13 deletions(-) diff --git a/cics-java-jcics-serialize-bundle/README.md b/cics-java-jcics-serialize-bundle/README.md index a6ec994..702f8f9 100644 --- a/cics-java-jcics-serialize-bundle/README.md +++ b/cics-java-jcics-serialize-bundle/README.md @@ -1,6 +1,4 @@ cics-java-jcics-serialize-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-serialize-app** project. - -s \ No newline at end of file +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-serialize-app** project. \ No newline at end of file diff --git a/cics-java-jcics-tdq-bundle/README.md b/cics-java-jcics-tdq-bundle/README.md index 959d1bc..ce852ff 100644 --- a/cics-java-jcics-tdq-bundle/README.md +++ b/cics-java-jcics-tdq-bundle/README.md @@ -1,6 +1,4 @@ cics-java-jcics-tdq-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tdq-app** project. - -s \ No newline at end of file +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tdq-app** project. \ No newline at end of file diff --git a/cics-java-jcics-terminal-bundle/README.md b/cics-java-jcics-terminal-bundle/README.md index 6de7108..5fafa09 100644 --- a/cics-java-jcics-terminal-bundle/README.md +++ b/cics-java-jcics-terminal-bundle/README.md @@ -1,6 +1,4 @@ cics-java-jcics-terminal-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-terminal-app** project. - -s \ No newline at end of file +Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-terminal-app** project. \ No newline at end of file diff --git a/cics-java-jcics-tsq-bundle/README.md b/cics-java-jcics-tsq-bundle/README.md index 297fc46..5a74225 100644 --- a/cics-java-jcics-tsq-bundle/README.md +++ b/cics-java-jcics-tsq-bundle/README.md @@ -2,5 +2,3 @@ cics-java-jcics-tsq-bundle === Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tsq-app** project. - -s \ No newline at end of file diff --git a/cics-java-jcics-vsam-bundle/README.md b/cics-java-jcics-vsam-bundle/README.md index 9ed53f3..89244e3 100644 --- a/cics-java-jcics-vsam-bundle/README.md +++ b/cics-java-jcics-vsam-bundle/README.md @@ -2,5 +2,3 @@ cics-java-jcics-vsam-bundle === Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-vsam-app** project. - -s \ No newline at end of file From 44b47059d68413219479c1a7c1edc536e0b3e0a6 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Mar 2026 11:47:26 +0000 Subject: [PATCH 70/73] Refactor location of CICS bundle projects --- README.md | 5 +-- cics-java-jcics-link-bundle/.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.link.osgibundle | 0 .../.project | 4 +-- .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.serialize.osgibundle | 0 .../.project | 6 +++- .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.tdq.osgibundle | 0 cics-java-jcics-terminal-bundle/.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.terminal.osgibundle | 0 cics-java-jcics-tsq-bundle/.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.tsq.osgibundle | 0 cics-java-jcics-vsam-bundle/.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.vsam.osgibundle | 0 etc/cics_bundle_projects/README.md | 15 +-------- .../.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../JAVALIN1.program | 0 .../JAVALIN2.program | 0 .../JAVALIN3.program | 0 .../JLN1.transaction | 0 .../JLN2.transaction | 0 .../JLN3.transaction | 0 .../META-INF/cics.xml | 2 +- .../.project | 4 +-- .../org.eclipse.core.resources.prefs | 0 .../JAVASYN1.program | 0 .../JSY1.transaction | 0 .../META-INF/cics.xml | 2 +- .../.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../JAVATDQ1.program | 0 .../JAVATDQ2.program | 0 .../JAVATDQ3.program | 0 .../JTD1.transaction | 0 .../JTD2.transaction | 0 .../JTD3.transaction | 0 .../META-INF/cics.xml | 2 +- .../.project | 4 +-- .../org.eclipse.core.resources.prefs | 0 .../JAVATRM1.program | 0 .../JTM1.transaction | 0 .../META-INF/cics.xml | 2 +- .../.project | 8 ++--- .../org.eclipse.core.resources.prefs | 0 .../JAVATSQ1.program | 0 .../JAVATSQ2.program | 0 .../JAVATSQ3.program | 0 .../JAVATSQ4.program | 0 .../JTS1.transaction | 0 .../JTS2.transaction | 0 .../JTS3.transaction | 0 .../JTS4.transaction | 0 .../META-INF/cics.xml | 2 +- .../.project | 33 +++++++++++++++++++ .../org.eclipse.core.resources.prefs | 0 .../JAVAVES1.program | 0 .../JAVAVES2.program | 0 .../JAVAVES3.program | 0 .../JAVAVES4.program | 0 .../JAVAVES5.program | 0 .../JAVAVKS1.program | 0 .../JAVAVKS2.program | 0 .../JAVAVKS3.program | 0 .../JAVAVKS4.program | 0 .../JAVAVKS5.program | 0 .../JAVAVRR1.program | 0 .../JAVAVRR2.program | 0 .../JAVAVRR3.program | 0 .../JAVAVRR4.program | 0 .../JAVAVRR5.program | 0 .../JVE1.transaction | 0 .../JVE2.transaction | 0 .../JVE3.transaction | 0 .../JVE4.transaction | 0 .../JVE5.transaction | 0 .../JVK1.transaction | 0 .../JVK2.transaction | 0 .../JVK3.transaction | 0 .../JVK4.transaction | 0 .../JVK5.transaction | 0 .../JVR1.transaction | 0 .../JVR2.transaction | 0 .../JVR3.transaction | 0 .../JVR4.transaction | 0 .../JVR5.transaction | 0 .../META-INF/cics.xml | 2 +- .../com.ibm.cicsdev.link.cicsbundle/.project | 29 ---------------- .../com.ibm.cicsdev.tdq.cicsbundle/.project | 29 ---------------- .../.project | 29 ---------------- .../.project | 29 ---------------- .../com.ibm.cicsdev.tsq.cicsbundle/.project | 29 ---------------- .../com.ibm.cicsdev.vsam.cicsbundle/.project | 29 ---------------- .../.project | 29 ---------------- 105 files changed, 262 insertions(+), 242 deletions(-) create mode 100644 cics-java-jcics-link-bundle/.project rename {etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle => cics-java-jcics-link-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle => cics-java-jcics-link-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle => cics-java-jcics-link-bundle}/com.ibm.cicsdev.link.osgibundle (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle => cics-java-jcics-serialize-bundle}/.project (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle => cics-java-jcics-serialize-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle => cics-java-jcics-serialize-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle => cics-java-jcics-serialize-bundle}/com.ibm.cicsdev.serialize.osgibundle (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-tdq-bundle}/.project (79%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle => cics-java-jcics-tdq-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle => cics-java-jcics-tdq-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle => cics-java-jcics-tdq-bundle}/com.ibm.cicsdev.tdq.osgibundle (100%) create mode 100644 cics-java-jcics-terminal-bundle/.project rename {etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle => cics-java-jcics-terminal-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle => cics-java-jcics-terminal-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle => cics-java-jcics-terminal-bundle}/com.ibm.cicsdev.terminal.osgibundle (100%) create mode 100644 cics-java-jcics-tsq-bundle/.project rename {etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle => cics-java-jcics-tsq-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle => cics-java-jcics-tsq-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle => cics-java-jcics-tsq-bundle}/com.ibm.cicsdev.tsq.osgibundle (100%) create mode 100644 cics-java-jcics-vsam-bundle/.project rename {etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle => cics-java-jcics-vsam-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle => cics-java-jcics-vsam-bundle}/META-INF/cics.xml (90%) rename {etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle => cics-java-jcics-vsam-bundle}/com.ibm.cicsdev.vsam.osgibundle (100%) create mode 100644 etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JAVALIN1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JAVALIN2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JAVALIN3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JLN1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JLN2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/JLN3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.link.resources.cicsbundle => cics-java-jcics-link-resources-bundle}/META-INF/cics.xml (94%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.serialize.resources.cicsbundle => cics-java-jcics-serialize-resources-bundle}/.project (89%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.serialize.resources.cicsbundle => cics-java-jcics-serialize-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.serialize.resources.cicsbundle => cics-java-jcics-serialize-resources-bundle}/JAVASYN1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.serialize.resources.cicsbundle => cics-java-jcics-serialize-resources-bundle}/JSY1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.serialize.resources.cicsbundle => cics-java-jcics-serialize-resources-bundle}/META-INF/cics.xml (91%) create mode 100644 etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JAVATDQ1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JAVATDQ2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JAVATDQ3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JTD1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JTD2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/JTD3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tdq.resources.cicsbundle => cics-java-jcics-tdq-resources-bundle}/META-INF/cics.xml (94%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.terminal.resources.cicsbundle => cics-java-jcics-terminal-resources-bundle}/.project (89%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.terminal.resources.cicsbundle => cics-java-jcics-terminal-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.terminal.resources.cicsbundle => cics-java-jcics-terminal-resources-bundle}/JAVATRM1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.terminal.resources.cicsbundle => cics-java-jcics-terminal-resources-bundle}/JTM1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.terminal.resources.cicsbundle => cics-java-jcics-terminal-resources-bundle}/META-INF/cics.xml (91%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/.project (84%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JAVATSQ1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JAVATSQ2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JAVATSQ3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JAVATSQ4.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JTS1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JTS2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JTS3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/JTS4.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.tsq.resources.cicsbundle => cics-java-jcics-tsq-resources-bundle}/META-INF/cics.xml (95%) create mode 100644 etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/.settings/org.eclipse.core.resources.prefs (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVES1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVES2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVES3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVES4.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVES5.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVKS1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVKS2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVKS3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVKS4.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVKS5.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVRR1.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVRR2.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVRR3.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVRR4.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JAVAVRR5.program (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVE1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVE2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVE3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVE4.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVE5.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVK1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVK2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVK3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVK4.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVK5.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVR1.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVR2.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVR3.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVR4.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/JVR5.transaction (100%) rename etc/cics_bundle_projects/{com.ibm.cicsdev.vsam.resources.cicsbundle => cics-java-jcics-vsam-resources-bundle}/META-INF/cics.xml (98%) delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project delete mode 100644 etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project diff --git a/README.md b/README.md index 137dd0b..df30f57 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,9 @@ Sample CICS Java programs demonstrating how to use the JCICS API in an OSGi JVM ## Repository structure -* [`etc/`](etc) - Supporting materials including DFHCSDUP definition files. -* [`etc/cics_bundle_projects/`](etc/cics_bundle_projects) - Eclipse CICS Bundle projects for importing into an Eclipse environment. +* [`etc/`](etc) - Supporting materials including DFHCSDUP resource definition files. +* [`etc/cics_bundle_projects/`](etc/cics_bundle_projects) - Additional Eclipse CICS Bundle projects providing +CICS resource defintions. * [`etc/src/`](etc/src) - Supporting source code for COBOL programs. * [`local-repo/`](/local-repo) - Maven repository for JARs generated using IBM Record Generator for Java. * [`gradle/`](gradle) - Gradle wrapper diff --git a/cics-java-jcics-link-bundle/.project b/cics-java-jcics-link-bundle/.project new file mode 100644 index 0000000..e030587 --- /dev/null +++ b/cics-java-jcics-link-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-link-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.link.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-link-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml b/cics-java-jcics-link-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-link-bundle/META-INF/cics.xml index 4fd7191..baaea16 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-link-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:14:04.215Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle b/cics-java-jcics-link-bundle/com.ibm.cicsdev.link.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/com.ibm.cicsdev.link.osgibundle rename to cics-java-jcics-link-bundle/com.ibm.cicsdev.link.osgibundle diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project b/cics-java-jcics-serialize-bundle/.project similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project rename to cics-java-jcics-serialize-bundle/.project index b61da14..07f51f7 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.project +++ b/cics-java-jcics-serialize-bundle/.project @@ -1,6 +1,6 @@ - com.ibm.cicsdev.serialize.cicsbundle + cics-java-jcics-serialize-bundle @@ -18,7 +18,7 @@ microVersion - 0 + 1 minorVersion diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-serialize-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml b/cics-java-jcics-serialize-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-serialize-bundle/META-INF/cics.xml index eca6125..3a095a6 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-serialize-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:47:28.565Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle b/cics-java-jcics-serialize-bundle/com.ibm.cicsdev.serialize.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.cicsbundle/com.ibm.cicsdev.serialize.osgibundle rename to cics-java-jcics-serialize-bundle/com.ibm.cicsdev.serialize.osgibundle diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project b/cics-java-jcics-tdq-bundle/.project similarity index 79% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project rename to cics-java-jcics-tdq-bundle/.project index 04b7f91..2c6a2aa 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.project +++ b/cics-java-jcics-tdq-bundle/.project @@ -1,6 +1,6 @@ - com.ibm.cicsdev.link.resources.cicsbundle + cics-java-jcics-tdq-bundle @@ -10,15 +10,19 @@ bundleID + com.ibm.cicsdev.tdq.cicsbundle majorVersion + 1 microVersion + 1 minorVersion + 0 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-tdq-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml b/cics-java-jcics-tdq-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-tdq-bundle/META-INF/cics.xml index 135eafc..f6cb1bb 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-tdq-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:01.777Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle b/cics-java-jcics-tdq-bundle/com.ibm.cicsdev.tdq.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/com.ibm.cicsdev.tdq.osgibundle rename to cics-java-jcics-tdq-bundle/com.ibm.cicsdev.tdq.osgibundle diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project new file mode 100644 index 0000000..ab0c475 --- /dev/null +++ b/cics-java-jcics-terminal-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-terminal-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.terminal.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-terminal-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml b/cics-java-jcics-terminal-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-terminal-bundle/META-INF/cics.xml index d4e0d4c..d98c389 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-terminal-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:33.327Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle b/cics-java-jcics-terminal-bundle/com.ibm.cicsdev.terminal.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/com.ibm.cicsdev.terminal.osgibundle rename to cics-java-jcics-terminal-bundle/com.ibm.cicsdev.terminal.osgibundle diff --git a/cics-java-jcics-tsq-bundle/.project b/cics-java-jcics-tsq-bundle/.project new file mode 100644 index 0000000..6fb2b96 --- /dev/null +++ b/cics-java-jcics-tsq-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-tsq-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.tsq.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-tsq-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml b/cics-java-jcics-tsq-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-tsq-bundle/META-INF/cics.xml index fbb0279..7c357b7 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-tsq-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:33.327Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle b/cics-java-jcics-tsq-bundle/com.ibm.cicsdev.tsq.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/com.ibm.cicsdev.tsq.osgibundle rename to cics-java-jcics-tsq-bundle/com.ibm.cicsdev.tsq.osgibundle diff --git a/cics-java-jcics-vsam-bundle/.project b/cics-java-jcics-vsam-bundle/.project new file mode 100644 index 0000000..10dd35c --- /dev/null +++ b/cics-java-jcics-vsam-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-vsam-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.vsam.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs b/cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to cics-java-jcics-vsam-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml b/cics-java-jcics-vsam-bundle/META-INF/cics.xml similarity index 90% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml rename to cics-java-jcics-vsam-bundle/META-INF/cics.xml index 9d6f64c..d323141 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/META-INF/cics.xml +++ b/cics-java-jcics-vsam-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:47:28.565Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle b/cics-java-jcics-vsam-bundle/com.ibm.cicsdev.vsam.osgibundle similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/com.ibm.cicsdev.vsam.osgibundle rename to cics-java-jcics-vsam-bundle/com.ibm.cicsdev.vsam.osgibundle diff --git a/etc/cics_bundle_projects/README.md b/etc/cics_bundle_projects/README.md index 59d7b7d..a01b642 100644 --- a/etc/cics_bundle_projects/README.md +++ b/etc/cics_bundle_projects/README.md @@ -6,23 +6,10 @@ Supporting Eclipse projects ## Overall project structure - -* `com.ibm.cicsdev.*.cicsbundle` - Eclipse project for a CICS bundle that can be deployed into a CICS region. -* `com.ibm.cicsdev.*.resources.cicsbundle` - Eclipse project for a CICS bundle that defines the required +* `cics-java-jcics-*-resources-bundle` - Optional Eclipse projects for a CICS bundle containing the required program and transaction resources for the sample. -## Samples overview - -* [`com.ibm.cicsdev.link`](com.ibm.cicsdev.link) - Performing CICS LINK operations using both commareas, -and channels and containers. -* [`com.ibm.cicsdev.serialize`](com.ibm.cicsdev.serialize) - Serializing access to a common resource using -the CICS ENQ and DEQ mechanism. -* [`com.ibm.cicsdev.tdq`](com.ibm.cicsdev.tdq) - Accessing transient data queues. -* [`com.ibm.cicsdev.terminal`](com.ibm.cicsdev.terminal) - Reading in data from a terminal for an OSGi application. -* [`com.ibm.cicsdev.tsq`](com.ibm.cicsdev.tsq) - Accessing temporary storage queues. -* [`com.ibm.cicsdev.vsam`](com.ibm.cicsdev.vsam) - Accessing KSDS, ESDS, and RRDS VSAM files. - ## Adding the resources to Eclipse diff --git a/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project new file mode 100644 index 0000000..74b6dc6 --- /dev/null +++ b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-link-resources-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.link.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN1.program rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN2.program rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JAVALIN3.program rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JAVALIN3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/JLN3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/JLN3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml similarity index 94% rename from etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml index 222a486..5d01872 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T10:54:14.028Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project similarity index 89% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project rename to etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project index 6c207f0..abeb43a 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project @@ -1,6 +1,6 @@ - com.ibm.cicsdev.serialize.resources.cicsbundle + cics-java-jcics-serialize-resources-bundle @@ -18,7 +18,7 @@ microVersion - 0 + 1 minorVersion diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/JAVASYN1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JAVASYN1.program rename to etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/JAVASYN1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/JSY1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/JSY1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/JSY1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml similarity index 91% rename from etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml index 382b4ca..665f764 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.serialize.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:49:54.727Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project new file mode 100644 index 0000000..c08f21b --- /dev/null +++ b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-tdq-resources-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.tdq.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ1.program rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ2.program rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JAVATDQ3.program rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JAVATDQ3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/JTD3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/JTD3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml similarity index 94% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml index 53703ba..3da1657 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:00:30.401Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project similarity index 89% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project rename to etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project index 8111cca..527169b 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project @@ -1,6 +1,6 @@ - com.ibm.cicsdev.terminal.resources.cicsbundle + cics-java-jcics-terminal-resources-bundle @@ -18,7 +18,7 @@ microVersion - 0 + 1 minorVersion diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/JAVATRM1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JAVATRM1.program rename to etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/JAVATRM1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/JTM1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/JTM1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/JTM1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml similarity index 91% rename from etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml index c706aae..c398415 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:05:46.741Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project similarity index 84% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project index baf323f..da159f6 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project @@ -1,6 +1,6 @@ - com.ibm.cicsdev.tsq.resources.cicsbundle + cics-java-jcics-tsq-resources-bundle @@ -14,15 +14,15 @@ majorVersion - + 1 microVersion - + 1 minorVersion - + 0 diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ1.program rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ2.program rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ3.program rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ4.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JAVATSQ4.program rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JAVATSQ4.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS4.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/JTS4.transaction rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/JTS4.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml similarity index 95% rename from etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml index 20ea96d..0803fe6 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:05:46.741Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project new file mode 100644 index 0000000..c5927d8 --- /dev/null +++ b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project @@ -0,0 +1,33 @@ + + + cics-java-jcics-vsam-resources-bundle + + + + + + com.ibm.cics.bundle.ui.bundlebuilder + + + bundleID + com.ibm.cicsdev.vsam.resources.cicsbundle + + + majorVersion + 1 + + + microVersion + 1 + + + minorVersion + 0 + + + + + + com.ibm.cics.bundle.ui.bundlenature + + diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.settings/org.eclipse.core.resources.prefs rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.settings/org.eclipse.core.resources.prefs diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES1.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES2.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES3.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES4.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES4.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES4.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES5.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVES5.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVES5.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS1.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS2.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS3.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS4.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS4.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS4.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS5.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVKS5.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVKS5.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR1.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR1.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR1.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR2.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR2.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR2.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR3.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR3.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR3.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR4.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR4.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR4.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR5.program similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JAVAVRR5.program rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JAVAVRR5.program diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE4.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE4.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE4.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE5.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVE5.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVE5.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK4.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK4.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK4.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK5.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVK5.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVK5.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR1.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR1.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR1.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR2.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR2.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR2.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR3.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR3.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR3.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR4.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR4.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR4.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR5.transaction similarity index 100% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/JVR5.transaction rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/JVR5.transaction diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml similarity index 98% rename from etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml rename to etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml index c43345d..8f166c3 100644 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:49:54.727Z diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project deleted file mode 100644 index cbdae67..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.link.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.link.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project deleted file mode 100644 index 1cf858f..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tdq.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project deleted file mode 100644 index 7ff732f..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tdq.resources.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tdq.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project deleted file mode 100644 index 79a7046..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.terminal.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.terminal.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project deleted file mode 100644 index 44b6bb5..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.tsq.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.tsq.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project deleted file mode 100644 index 77b4485..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.vsam.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - diff --git a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project b/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project deleted file mode 100644 index 9883310..0000000 --- a/etc/cics_bundle_projects/com.ibm.cicsdev.vsam.resources.cicsbundle/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - com.ibm.cicsdev.vsam.resources.cicsbundle - - - - - - com.ibm.cics.bundle.ui.bundlebuilder - - - bundleID - - - majorVersion - - - microVersion - - - minorVersion - - - - - - com.ibm.cics.bundle.ui.bundlenature - - From afe602fd1c3db7cd8dc42770cdf51444cc9bf376 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Mar 2026 15:32:00 +0000 Subject: [PATCH 71/73] Refactor cicsbundle project names --- cics-java-jcics-link-bundle/.project | 2 +- cics-java-jcics-link-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-link-bundle/README.md | 2 +- cics-java-jcics-serialize-bundle/.project | 2 +- cics-java-jcics-serialize-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-serialize-bundle/README.md | 2 +- cics-java-jcics-tdq-bundle/.project | 2 +- cics-java-jcics-tdq-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-tdq-bundle/README.md | 2 +- cics-java-jcics-terminal-bundle/.project | 2 +- cics-java-jcics-terminal-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-terminal-bundle/README.md | 2 +- cics-java-jcics-tsq-bundle/.project | 2 +- cics-java-jcics-tsq-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-tsq-bundle/README.md | 2 +- cics-java-jcics-vsam-bundle/.project | 2 +- cics-java-jcics-vsam-bundle/META-INF/cics.xml | 2 +- cics-java-jcics-vsam-bundle/README.md | 2 +- .../cics-java-jcics-link-resources-bundle/.project | 2 +- .../cics-java-jcics-link-resources-bundle/META-INF/cics.xml | 2 +- .../cics-java-jcics-serialize-resources-bundle/.project | 2 +- .../META-INF/cics.xml | 2 +- .../cics-java-jcics-tdq-resources-bundle/.project | 2 +- .../cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml | 2 +- .../cics-java-jcics-terminal-resources-bundle/.project | 2 +- .../cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml | 2 +- .../cics-java-jcics-tsq-resources-bundle/.project | 2 +- .../cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml | 2 +- .../cics-java-jcics-vsam-resources-bundle/.project | 2 +- .../cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/cics-java-jcics-link-bundle/.project b/cics-java-jcics-link-bundle/.project index e030587..78a1aa2 100644 --- a/cics-java-jcics-link-bundle/.project +++ b/cics-java-jcics-link-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.link.cicsbundle + com.ibm.cicsdev.link.bundle majorVersion diff --git a/cics-java-jcics-link-bundle/META-INF/cics.xml b/cics-java-jcics-link-bundle/META-INF/cics.xml index baaea16..b2d79c8 100644 --- a/cics-java-jcics-link-bundle/META-INF/cics.xml +++ b/cics-java-jcics-link-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:14:04.215Z diff --git a/cics-java-jcics-link-bundle/README.md b/cics-java-jcics-link-bundle/README.md index 043a93a..43e49db 100644 --- a/cics-java-jcics-link-bundle/README.md +++ b/cics-java-jcics-link-bundle/README.md @@ -1,5 +1,5 @@ cics-java-jcics-link-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-link-app** project. +Provides an Eclipse CICS Bundle project and example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-link-app** project. diff --git a/cics-java-jcics-serialize-bundle/.project b/cics-java-jcics-serialize-bundle/.project index 07f51f7..e16730a 100644 --- a/cics-java-jcics-serialize-bundle/.project +++ b/cics-java-jcics-serialize-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.serialize.cicsbundle + com.ibm.cicsdev.serialize.bundle majorVersion diff --git a/cics-java-jcics-serialize-bundle/META-INF/cics.xml b/cics-java-jcics-serialize-bundle/META-INF/cics.xml index 3a095a6..ef0216c 100644 --- a/cics-java-jcics-serialize-bundle/META-INF/cics.xml +++ b/cics-java-jcics-serialize-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:47:28.565Z diff --git a/cics-java-jcics-serialize-bundle/README.md b/cics-java-jcics-serialize-bundle/README.md index 702f8f9..7eaaeec 100644 --- a/cics-java-jcics-serialize-bundle/README.md +++ b/cics-java-jcics-serialize-bundle/README.md @@ -1,4 +1,4 @@ cics-java-jcics-serialize-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-serialize-app** project. \ No newline at end of file +PProvides an Eclipse CICS Bundle project and example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-serialize-app** project. \ No newline at end of file diff --git a/cics-java-jcics-tdq-bundle/.project b/cics-java-jcics-tdq-bundle/.project index 2c6a2aa..f68d0d8 100644 --- a/cics-java-jcics-tdq-bundle/.project +++ b/cics-java-jcics-tdq-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.tdq.cicsbundle + com.ibm.cicsdev.tdq.bundle majorVersion diff --git a/cics-java-jcics-tdq-bundle/META-INF/cics.xml b/cics-java-jcics-tdq-bundle/META-INF/cics.xml index f6cb1bb..0ba8ac1 100644 --- a/cics-java-jcics-tdq-bundle/META-INF/cics.xml +++ b/cics-java-jcics-tdq-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:01.777Z diff --git a/cics-java-jcics-tdq-bundle/README.md b/cics-java-jcics-tdq-bundle/README.md index ce852ff..a452380 100644 --- a/cics-java-jcics-tdq-bundle/README.md +++ b/cics-java-jcics-tdq-bundle/README.md @@ -1,4 +1,4 @@ cics-java-jcics-tdq-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tdq-app** project. \ No newline at end of file +Provides an Eclipse CICS Bundle project and example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tdq-app** project. \ No newline at end of file diff --git a/cics-java-jcics-terminal-bundle/.project b/cics-java-jcics-terminal-bundle/.project index ab0c475..854b41a 100644 --- a/cics-java-jcics-terminal-bundle/.project +++ b/cics-java-jcics-terminal-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.terminal.cicsbundle + com.ibm.cicsdev.terminal.bundle majorVersion diff --git a/cics-java-jcics-terminal-bundle/META-INF/cics.xml b/cics-java-jcics-terminal-bundle/META-INF/cics.xml index d98c389..aef67dc 100644 --- a/cics-java-jcics-terminal-bundle/META-INF/cics.xml +++ b/cics-java-jcics-terminal-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:33.327Z diff --git a/cics-java-jcics-terminal-bundle/README.md b/cics-java-jcics-terminal-bundle/README.md index 5fafa09..9c2b505 100644 --- a/cics-java-jcics-terminal-bundle/README.md +++ b/cics-java-jcics-terminal-bundle/README.md @@ -1,4 +1,4 @@ cics-java-jcics-terminal-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-terminal-app** project. \ No newline at end of file +Provides an Eclipse CICS Bundle project and example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-terminal-app** project. \ No newline at end of file diff --git a/cics-java-jcics-tsq-bundle/.project b/cics-java-jcics-tsq-bundle/.project index 6fb2b96..abfd260 100644 --- a/cics-java-jcics-tsq-bundle/.project +++ b/cics-java-jcics-tsq-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.tsq.cicsbundle + com.ibm.cicsdev.tsq.bundle majorVersion diff --git a/cics-java-jcics-tsq-bundle/META-INF/cics.xml b/cics-java-jcics-tsq-bundle/META-INF/cics.xml index 7c357b7..f26adb1 100644 --- a/cics-java-jcics-tsq-bundle/META-INF/cics.xml +++ b/cics-java-jcics-tsq-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-04T15:15:33.327Z diff --git a/cics-java-jcics-tsq-bundle/README.md b/cics-java-jcics-tsq-bundle/README.md index 5a74225..900a603 100644 --- a/cics-java-jcics-tsq-bundle/README.md +++ b/cics-java-jcics-tsq-bundle/README.md @@ -1,4 +1,4 @@ cics-java-jcics-tsq-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tsq-app** project. +Provides an Eclipse CICS Bundle project and Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-tsq-app** project. diff --git a/cics-java-jcics-vsam-bundle/.project b/cics-java-jcics-vsam-bundle/.project index 10dd35c..480820f 100644 --- a/cics-java-jcics-vsam-bundle/.project +++ b/cics-java-jcics-vsam-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.vsam.cicsbundle + com.ibm.cicsdev.vsam.bundle majorVersion diff --git a/cics-java-jcics-vsam-bundle/META-INF/cics.xml b/cics-java-jcics-vsam-bundle/META-INF/cics.xml index d323141..30810fa 100644 --- a/cics-java-jcics-vsam-bundle/META-INF/cics.xml +++ b/cics-java-jcics-vsam-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:47:28.565Z diff --git a/cics-java-jcics-vsam-bundle/README.md b/cics-java-jcics-vsam-bundle/README.md index 89244e3..8f9340a 100644 --- a/cics-java-jcics-vsam-bundle/README.md +++ b/cics-java-jcics-vsam-bundle/README.md @@ -1,4 +1,4 @@ cics-java-jcics-vsam-bundle === -Provides example Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-vsam-app** project. +Provides an Eclipse CICS Bundle project and Maven and Gradle build files which utilize the CICS Bundle Plugins to create a deployable ZIP archive for deployment of the **cics-java-jcics-vsam-app** project. diff --git a/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project index 74b6dc6..d202dc3 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.link.resources.cicsbundle + com.ibm.cicsdev.link.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml index 5d01872..f64d264 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-link-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T10:54:14.028Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project index abeb43a..86e58e5 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.serialize.resources.cicsbundle + com.ibm.cicsdev.serialize.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml index 665f764..c0acb5d 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-serialize-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:49:54.727Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project index c08f21b..10a4228 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.tdq.resources.cicsbundle + com.ibm.cicsdev.tdq.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml index 3da1657..b5cb0c7 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-tdq-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:00:30.401Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project index 527169b..06cf07e 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.terminal.resources.cicsbundle + com.ibm.cicsdev.terminal.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml index c398415..92164da 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-terminal-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:05:46.741Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project index da159f6..068a039 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.tsq.resources.cicsbundle + com.ibm.cicsdev.tsq.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml index 0803fe6..4cbc6fd 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-tsq-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-11-11T11:05:46.741Z diff --git a/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project index c5927d8..265446d 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project +++ b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/.project @@ -10,7 +10,7 @@ bundleID - com.ibm.cicsdev.vsam.resources.cicsbundle + com.ibm.cicsdev.vsam.resources.bundle majorVersion diff --git a/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml index 8f166c3..493a154 100644 --- a/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml +++ b/etc/cics_bundle_projects/cics-java-jcics-vsam-resources-bundle/META-INF/cics.xml @@ -1,5 +1,5 @@ - + 2016-12-13T15:49:54.727Z From 75e2ed2a954fef6f87787554e4f2104edf2ec285 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Mar 2026 15:42:38 +0000 Subject: [PATCH 72/73] Update README --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index df30f57..0da6ba7 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ The sample comes pre-configured for use with Java 17 and the CICS TS V5.5 Target To resolve build issues: * Ensure you have the latest CICS Explorer SDK plug-in installed -* Set the CICS TS Target Platform to your intended CICS target (Hint: **Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...**) +* Set the CICS TS Target Platform to your intended CICS target version (Hint: **Window > Preferences > Plug-in Development > Target Platform > Add > Template > Other...**) * Configure the Project's build-path, and Application Project settings to use your preferred JDK and Java compiler settings * The TS, TD, VSAM and LINK sample projects manipulate byte-oriented record structures using Java classes generated using the IBM Record Generator for Java. The generated classes can be found packaged in a JAR @@ -145,7 +145,7 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed ``` #### Option 2 - Deploying using CICS Explorer SDK and the CICS bundle projects -1. Deploy each CICS bundle project from CICS Explorer to zFS using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and optionally the transaction and bundle resources to run the sample. +1. Deploy each CICS bundle project from CICS Explorer to zFS using the **Export Bundle Project to z/OS UNIX File System** wizard. This CICS bundle includes the osgi bundlepart, and an import for the required JVMSERVER named DFHJVMS. #### Option 3 - Deploying using Eclipse and z/OS Explorer @@ -158,20 +158,20 @@ The sample Java classes are designed to be added to an OSGi bundle and deployed ### Deploying to CICS -1. Define an OSGi JVM server resource called `DFHJVMS` based on the CICS-supplied sample definition in the CSD group `DFH$OSGI`. +1. Define an OSGi JVM server resource called `DFHJVMS` based on the CICS-supplied sample definition in the CSD group `DFH$OSGI` and install. Ensure this resource become enabled. -1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt). Alternatively they can be installed using the bundle parts supplied with the Eclipse CICS bundle projects in the [`cics_bundle_projects`](etc/cics_bundle_projects) directory. -See the individual project directories for any additional supporting resources required. +1. CICS resource definitions for the bundle, programs, transactions are supplied as a DFHCSDUP sample input for each sub-project in the `etc` directory, for instance [`etc/Link/DFHCSD.txt`](etc/Link/DFHCSD.txt) for the `cics-java-jcics-link-app` project. Use the DFHCSDUP input files to create group JCICSAMP in the CSD. Then group JCICSAMP containing the BUNDLE, TRANSACTION and PROGRAM resources and ensure the bundle resources become enabled. -1. Install the groups containing the JVMSERVER, TRANSACTION and PROGRAM resources and ensure the JVM server becomes enabled along with all associated bundles. +1. Instead of using the DFHCSDUP process CICS resources can be created using the bundle parts supplied with the Eclipse CICS bundle projects in the [`cics_bundle_projects`](etc/cics_bundle_projects) directory. See the individual project directories for any additional supporting resources required. ## Reference -* For further details on using the IBM Record Generator for Java see this [tutorial](https://developer.ibm.com/tutorials/build-java-records-from-cobol-with-ibm-record-generator/) * For details on how to define a CICS OSGi JVM server refer to the Knowledge Center topic [Configuring an OSGi JVM server](https://www.ibm.com/docs/en/cics-ts/5.5.0?topic=server-configuring-osgi-jvm) * Developer works tutorial archive [Getting to Grips with JCICS](blog/blog.md) +* For further details on using the IBM Record Generator for Java see this [tutorial](https://developer.ibm.com/tutorials/build-java-records-from-cobol-with-ibm-record-generator/) + ## License From 01ec2d3bf99d999b40636f6f31fc98b50ae11249 Mon Sep 17 00:00:00 2001 From: Phil Wakelin Date: Wed, 25 Mar 2026 15:47:07 +0000 Subject: [PATCH 73/73] Update README --- etc/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/etc/README.md b/etc/README.md index c5bd6a1..ecfee11 100644 --- a/etc/README.md +++ b/etc/README.md @@ -2,10 +2,10 @@ etc === Supporting materials used in conjunction with the JCICS samples. Each folder provides supporting materials for the following projects: -* [Link](Link) - com.ibm.cicsdev.link -* [Serialize](Serialize) - com.ibm.cicsdev.serialize -* [TDQ](TDQ) - com.ibm.cicsdev.tdq -* [TSQ](TSQ) - com.ibm.cicsdev.tsq -* [Terminal](Terminal) - com.ibm.cicsdev.terminal -* [VSAM](VSAM) - com.ibm.cicsdev.vsam +* [Link](Link) - cics-java-jcics-link-app +* [Serialize](Serialize) - cics-java-jcics-link-serialize-app +* [TDQ](TDQ) - cics-java-jcics-link-tdq-app +* [Terminal](Terminal) - cics-java-jcics-link-terminal-app +* [TSQ](TSQ) - cics-java-jcics-link-tsq-app +* [VSAM](VSAM) - cics-java-jcics-vsam-app