{"id":15531987,"url":"https://github.com/jt-nti/hello-cics","last_synced_at":"2026-01-07T21:12:05.921Z","repository":{"id":82651929,"uuid":"605021105","full_name":"jt-nti/hello-cics","owner":"jt-nti","description":"Experimental project to try out modern development techniques with CICS","archived":false,"fork":false,"pushed_at":"2025-01-21T16:29:47.000Z","size":108,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T08:51:08.231Z","etag":null,"topics":["cics","zowe"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jt-nti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-22T09:22:00.000Z","updated_at":"2023-04-17T11:28:00.000Z","dependencies_parsed_at":"2024-12-08T14:51:47.101Z","dependency_job_id":null,"html_url":"https://github.com/jt-nti/hello-cics","commit_stats":{"total_commits":16,"total_committers":2,"mean_commits":8.0,"dds":0.0625,"last_synced_commit":"8fc3547585af771a3e7dc380e63bb8f37cdfe690"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jt-nti%2Fhello-cics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jt-nti%2Fhello-cics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jt-nti%2Fhello-cics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jt-nti%2Fhello-cics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jt-nti","download_url":"https://codeload.github.com/jt-nti/hello-cics/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246108107,"owners_count":20724666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cics","zowe"],"created_at":"2024-10-02T11:28:48.317Z","updated_at":"2026-01-07T21:12:05.873Z","avatar_url":"https://github.com/jt-nti.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hello-cics\n\nExperimental project to try out modern development techniques with CICS\n\nThe journey so far...\n\n## Dev Container\n\nAttempting to create a dev container suitable for the [IBM Z Open Editor](https://ibm.github.io/zopeneditor-about/Docs/getting_started.html#installing-the-ibm-z-open-editor-vs-code-extension)\n\nCreate a global [Zowe CLI team configuration](https://docs.zowe.org/stable/user-guide/cli-using-initializing-team-configuration), either using the Zowe Explorer or with the following `zowe` command.\n\n```shell\nzowe config init --global-config\n```\n\nEdit the config file as required, either using the Zowe Explorer, or with the `zowe` CLI. For example, to accept self-signed certificates.\n\n```shell\nzowe config set \"profiles.base.properties.rejectUnauthorized\" \"false\" --global-config\n```\n\n# CICS Program\n\nAttempting to create a very basic CICS program using the `@CICSProgram` annotation!\n\nCreated a new gradle project using `gradle init --type basic` (no way to bootstrap a CICS project?)\n\nSee:\n- https://github.com/IBM/cics-bundle-gradle/tree/main/samples/gradle-war-sample\n- https://github.com/cicsdev/cics-java-liberty-link\n\n## Configuring CICS to provide a dev environment (TBC)\n\nSome CICS stuff... here be dragons...\n\nTODO: script somehow- using DFHCSDUP? E.g. [CSDUPDAT.jclsamp](https://github.com/WASdev/sample.wola/blob/7048683bf358797fcbd08cf15ac118987eb12324/CSDUPDAT.jclsamp)\n\nNeed a JVM server\n\n```\nCEDA COPY GROUP(DFH£WLP) JVMSERVER(DFHWLP) TO(WLPGROUP) AS(WLPFTW)\nCEDA INSTALL GROUP(WLPGROUP)\nCEMT INQUIRE JVMSERVER(WLPFTW)\n```\n\nTODO need JVM profile, and `\u003cwork_dir\u003e/WLPFTW/wlp/usr/servers/defaultServer/server.xml` needs to include the `cicsts:link-1.0` feature, e.g.\n\n```\n\t\u003cfeatureManager\u003e\n        \u003cfeature\u003ecicsts:core-1.0\u003c/feature\u003e\n        \u003cfeature\u003ecicsts:defaultApp-1.0\u003c/feature\u003e\n        \u003cfeature\u003etransportSecurity-1.0\u003c/feature\u003e\n        \u003cfeature\u003ecicsts:link-1.0\u003c/feature\u003e\n    \u003c/featureManager\u003e\n```\n\nCreate a bundle\n\n```\nCEDA DEFINE BUNDLE\n```\n\n```\nBundle       ==\u003e HELLOB\nGroup        ==\u003e BGROUP\n...\nBUndledir    ==\u003e \u003cbundle_deploy_root\u003e/\u003cbundle_id\u003e_\u003cbundle_version\u003e\n```\n\nwhere,\n  - `\u003cbundle_deploy_root\u003e` was specified by `-Dcom.ibm.cics.jvmserver.cmci.bundles.dir` in `EYUSMSSJ.jvmprofile`, and\n  - `\u003cbundle_id\u003e` is the gradle `rootProject.name`\n\ne.g. `/u/cicsdev/cmciBundles/hello-cics_1.0.0`\n\n```\nCEDA INSTALL GROUP(BGROUP)\nCEMT INQUIRE BUNDLE(HELLOB)\n```\n\nInstalling the bundle should cause a program matching the `@CICSProgram` annotation to get created automatically due to the `cicsts:link-1.0` feature, which you can check with\n\n```\nCEMT INQUIRE PROGRAM(HELLODFH)\n```\n\nTODO: would it be better just to include a program in the bundle to avoid having to add the `cicsts:link-1.0` feature?\n\nThe bundle also includes an `LO1` transaction which uses the program, which you can check with\n\n```\nCEMT INQUIRE TRANSACTION(LO1)\n```\n\nTODO use the same group for the bundle and transaction definitions, e.g. HELLOGRP?\n\nRun the transaction!!!\n\n```\nLO1\n```\n\n## Deploying the CICS bundle (TBC)\n\nNote: a CICS bundle is **not** the same thing as an OSGi bundle!\n\nGradle build, ftp CICS bundle to USS, and unzip to a suitable bundle directory using `jar -xvf \u003cbundle\u003e.zip`\n\nFor example, using `zowe`\n\n```shell\n./gradlew build\nzowe ssh issue cmd \"rm -Rf ~/cicsBundle \u0026\u0026 mkdir -p ~/cicsBundle\"\nzowe zftp upload ftu ./build/distributions/hello-cics-1.0.0.zip \"\u003cbundle_dir\u003e/hello-cics-1.0.0.zip\" --binary\nzowe ssh issue cmd \"cd ~/cicsBundle \u0026\u0026 jar -xvf hello-cics-1.0.0.zip \u0026\u0026 rm hello-cics-1.0.0.zip\"\n```\n\nAlternatively, use `./gradlew deployCICSBundle`\n\nThis requires CMCI to be working and the 'managedcicsbundles' endpoint to be enabled with the `-Dcom.ibm.cics.jvmserver.cmci.bundles.dir` parameter. See [Configuring the CMCI JVM server for the CICS bundle deployment API](https://www.ibm.com/docs/en/cics-ts/6.1?topic=suc-configuring-cmci-jvm-server-cics-bundle-deployment-api)\n\nScripting with Zowe seems quite nice since credentials are stored securely, and the bundle deployement API still requires the bundle to have been defined up front anyway. The bundle deployment API does \"just work\" when it works though.\n\n## Using resource builder and DFHCSDUP to configure CICS\n\nGenerate the resource definitions schema\n\n```shell\nzrb generate -m src/main/resources/sample.cicsresourcemodel.yaml -o src/main/resources/sample.cicsresourcedefinitions.schema.json\n```\n\nBuild the DFHCSDUP commands file\n\n```shell\nzrb build --model src/main/resources/sample.cicsresourcemodel.yaml --resources src/main/resources/sample.cicsresourcedefinitions.yaml --output src/main/resources/DFHCSD.txt\n```\n\nTODO:\n- there's probably a better place to generate the schema and DFHCSD.txt files\n- use yq to fix the bundledir\n\nThe resulting commands file can be used when invoking DFHCSDUP as a batch program. See:\nhttps://www.ibm.com/docs/en/cics-ts/6.1?topic=dfhcsdup-sample-job-invoking-as-batch-program\n\nFirst upload the DFHCSDUP commands file to a suitable data set.\nFor example, to create a new partitioned data set and upload the `DFHCSD.txt` file using Zowe...\n\n```shell\nzowe zos-files create data-set-partitioned NEW.DFHCSD.DATASET\nzowe zos-files upload file-to-data-set \"DFHCSD.txt\" \"NEW.DFHCSD.DATASET(SAMPLE)\"\n```\n\nThen refer to your data set in the DFHCSDUP JCL, e.g.\n\n```\n//CSDUP   JOB  ...\n//CSDUP   EXEC PGM=DFHCSDUP,REGION=0M,\n//             PARM='CSD(READWRITE),PAGESIZE(60),NOCOMPAT'\n//STEPLIB  DD DISP=SHR,DSN=xxx.SDFHLOAD\n//DFHCSD   DD DISP=SHR,DSN=xxx.DFHCSD\n//SYSPRINT DD SYSOUT=*\n//SYSIN    DD DISP=SHR,DSN=NEW.DFHCSD.DATASET(SAMPLE)\n```\n\n## Using CMCI and a REST client to configure CICS!\n\nThe [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) for VS Code works quite well (see the [cmci.http file](./cmci.http) for example), or just use cURL...\n\n```shell\ncurl --request POST \\\n  --url http://cmci.example.org:1490/CICSSystemManagement/CICSDefinitionBundle/\u003ccics_region\u003e \\\n  --header 'authorization: Basic \u003cencoded_username_password\u003e' \\\n  --header 'content-type: application/xml' \\\n  --data '\u003crequest\u003e\u003ccreate\u003e\u003cparameter name=\"CSD\"/\u003e\u003cattributes name=\"HELLO\" bundledir=\"/u/ibmuser/cmciBundles/hello-cics_1.0.0\" csdgroup=\"SAMPLE\"/\u003e\u003c/create\u003e\u003c/request\u003e'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjt-nti%2Fhello-cics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjt-nti%2Fhello-cics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjt-nti%2Fhello-cics/lists"}