diff --git a/.github/workflows/java.yaml b/.github/workflows/java.yaml
new file mode 100644
index 0000000..29cd7d4
--- /dev/null
+++ b/.github/workflows/java.yaml
@@ -0,0 +1,85 @@
+name: Build
+
+on:
+ push:
+ branches: ["main"]
+ pull_request:
+ branches: ["main"]
+ schedule:
+ - cron: '0 0 * * *'
+
+jobs:
+ build-maven:
+ name: Build Maven
+
+ runs-on: ubuntu-latest
+ continue-on-error: ${{ matrix.experimental }}
+ strategy:
+ matrix:
+ jdk: [8, 11]
+ experimental: [false]
+ include:
+ - jdk: 17
+ experimental: true
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK ${{ matrix.jdk }}
+ uses: actions/setup-java@v3
+ with:
+ java-version: ${{ matrix.jdk }}
+ distribution: "semeru"
+ cache: maven
+ - name: Build with Maven
+ run: mvn --batch-mode --update-snapshots --file pom.xml -Djava.version=${{ matrix.jdk }} package
+ - run: mkdir staging && cp target/*.war staging
+ - uses: actions/upload-artifact@v4
+ with:
+ name: cics-java-liberty-springbook-jpa (Maven, Java ${{ matrix.jdk }})
+ path: staging
+
+ build-mvnw:
+ name: Build Maven Wrapper
+
+ runs-on: ubuntu-latest
+ continue-on-error: ${{ matrix.experimental }}
+ strategy:
+ matrix:
+ jdk: [8, 11]
+ experimental: [false]
+ include:
+ - jdk: 17
+ experimental: true
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK ${{ matrix.jdk }}
+ uses: actions/setup-java@v3
+ with:
+ java-version: ${{ matrix.jdk }}
+ distribution: "semeru"
+ cache: maven
+ - name: Build with Maven
+ run: ./mvnw --batch-mode --update-snapshots --file pom.xml -Djava.version=${{ matrix.jdk }} package
+
+ build-gradle:
+ name: Build Gradle
+
+ runs-on: ubuntu-latest
+ continue-on-error: ${{ matrix.experimental }}
+ strategy:
+ matrix:
+ jdk: [8, 11]
+ experimental: [false]
+ include:
+ - jdk: 17
+ experimental: true
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK ${{ matrix.jdk }}
+ uses: actions/setup-java@v4
+ with:
+ java-version: ${{ matrix.jdk }}
+ distribution: 'semeru'
+ - name: Build with Gradle
+ uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
+ with:
+ arguments: bootWar -Pjava_version=${{ matrix.jdk }}
diff --git a/.tekton/README.md b/.tekton/README.md
deleted file mode 100644
index 37b8394..0000000
--- a/.tekton/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Tekton Build
-
-The contents of this folder control how the repository is built.
-
-For those with permissions to access IBM internal systems only.
-
-## The main branch build
-[![build-badge](https://javadev-cicsk8s.hursley.ibm.com/samples-cics-java-liberty-springboot-jpa/main/build-info/build-status-badge.svg)](
-https://javadev-cicsk8s.hursley.ibm.com/samples-cics-java-liberty-springboot-jpa/main/)
-
-- [Build logs](https://javadev-cicsk8s.hursley.ibm.com/samples-cics-java-liberty-springboot-jpa/main/build-info/logs/)
-- [Built artifacts](https://javadev-cicsk8s.hursley.ibm.com/samples-cics-java-liberty-springboot-jpa/main/artifacts/)
\ No newline at end of file
diff --git a/.tekton/helm/Chart.yaml b/.tekton/helm/Chart.yaml
deleted file mode 100644
index b9a97dc..0000000
--- a/.tekton/helm/Chart.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-apiVersion: v2
-name: cics-samples-built-artifact-server
-description: CICS Samples built artifact archives
-type: application
-version: 0.1.0
-appVersion: "0.1.0"
-
diff --git a/.tekton/helm/templates/built-artifact-server-deployment.yaml b/.tekton/helm/templates/built-artifact-server-deployment.yaml
deleted file mode 100644
index 6eb7965..0000000
--- a/.tekton/helm/templates/built-artifact-server-deployment.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ .Values.argoAppName }}
- labels:
- app: {{ .Values.argoAppName }}
-spec:
- replicas: 1
- revisionHistoryLimit: 0
- selector:
- matchLabels:
- app: {{ .Values.argoAppName }}
- template:
- metadata:
- labels:
- app: {{ .Values.argoAppName }}
- spec:
- nodeSelector:
- kubernetes.io/arch: amd64
- containers:
- - name: {{ .Values.argoAppName }}
- image: {{ .Values.containerRegistry }}/{{ .Values.dockerImageName }}:{{ .Values.containerImageTag }}
- imagePullPolicy: Always
- env:
- - name: CONTEXTROOT
- value: {{ .Values.baseUrlPath }}/{{ .Values.containerImageTag }}
- ports:
- - name: http
- containerPort: 80
- protocol: TCP
- resources:
- requests:
- memory: 50Mi
diff --git a/.tekton/helm/templates/built-artifact-server-ingress.yaml b/.tekton/helm/templates/built-artifact-server-ingress.yaml
deleted file mode 100644
index 908ff0a..0000000
--- a/.tekton/helm/templates/built-artifact-server-ingress.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-kind: Ingress
-apiVersion: networking.k8s.io/v1
-metadata:
- name: {{ .Values.argoAppName }}
- annotations:
- nginx.ingress.kubernetes.io/ssl-redirect: "false"
-spec:
- ingressClassName: nginx
- tls:
- - hosts:
- - javadev-cicsk8s.hursley.ibm.com
- secretName: javadev-cert
- rules:
- - host: javadev-cicsk8s.hursley.ibm.com
- http:
- paths:
- - backend:
- service:
- name: {{ .Values.argoAppName }}
- port:
- number: 80
- path: /{{ .Values.baseUrlPath }}/{{ .Values.containerImageTag }}
- pathType: Prefix
diff --git a/.tekton/helm/templates/built-artifact-server-service.yaml b/.tekton/helm/templates/built-artifact-server-service.yaml
deleted file mode 100644
index 032c2a6..0000000
--- a/.tekton/helm/templates/built-artifact-server-service.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: {{ .Values.argoAppName }}
- labels:
- app: {{ .Values.argoAppName }}
-spec:
- type: ClusterIP
- selector:
- app: {{ .Values.argoAppName }}
- ports:
- - port: 80
- targetPort: 80
- protocol: TCP
diff --git a/.tekton/helm/templates/pipeline-build.yaml b/.tekton/helm/templates/pipeline-build.yaml
deleted file mode 100644
index 7cd7994..0000000
--- a/.tekton/helm/templates/pipeline-build.yaml
+++ /dev/null
@@ -1,432 +0,0 @@
-apiVersion: tekton.dev/v1beta1
-kind: Pipeline
-# description: |
-# This pipeline is executed whenever a something in a branch needs to be (re-) built.
-
-metadata:
- name: {{ .Values.argoAppName }}-build
-#
-#
-#
-spec:
- #
- #
- #
- workspaces:
- - name: git-workspace
- #
- #
- #
- params:
- - name: containerImageTag
- type: string
- - name: gitBranch
- type: string
- - name: gitRevision
- type: string
- - name: gitRepoName
- type: string
- - name: gitRepoFullName
- type: string
- - name: gitHubOrg
- type: string
- default: {{ .Values.gitHubOrg }}
- description: |
- The name of the github organisation this repo is owned by.
- - name: gitHubHost
- type: string
- default: {{ .Values.gitHubHost }}
- description: |
- The github host name. eg: github.com or github.ibm.com
- The value of this depends on where the repo exists.
- - name: noPush
- type: string
- default: ""
- description: |
- Decides whether the built docker image is pushed to the docker repo or not.
- Default is to push, unless “--no-push” is used.
- - name: containerRegistry
- type: string
- - name: buildType
- type: string
- - name: pullReqNumber
- type: string
-
- #
- #
- #
- tasks:
- # # Invoke the central sub-pipeline
- # - name: build-maven-gradle
- # taskRef:
- # apiVersion: tekton.dev/v1beta1
- # kind: Pipeline
- # name: samples-maven-gradle-build
- # params:
- # - name: containerImageTag
- # value: $(params.containerImageTag)
- # - name: gitBranch
- # value: $(params.gitBranch)
- # - name: gitRevision
- # value: $(params.gitRevision)
- # - name: gitRepoName
- # value: $(params.gitRepoName)
- # - name: gitRepoFullName
- # value: $(params.gitRepoFullName)
- # - name: gitHubOrg
- # value: $(params.gitHubOrg)
- # - name: gitHubHost
- # value: $(params.gitHubHost)
- # - name: containerRegistry
- # value: $(params.containerRegistry)
- # - name: buildType
- # value: $(params.buildType)
- # - name: pullReqNumber
- # value: $(params.pullReqNumber)
- # - name: argoAppName
- # value: {{ .Values.argoAppName }}
- # - name: buildOutputBaseUrlPath
- # value: {{ .Values.baseUrlPath }}
-
-
- # - name: notify-of-build-starting
- # taskRef:
- # apiVersion: tekton.dev/v1beta1
- # kind: Pipeline
- # name: notify-status
- # params:
- # - name: containerImageTag
- # value: $(params.containerImageTag)
- # - name: gitBranch
- # value: $(params.gitBranch)
- # - name: gitRevision
- # value: $(params.gitRevision)
- # - name: gitRepoName
- # value: $(params.gitRepoName)
- # - name: gitRepoFullName
- # value: $(params.gitRepoFullName)
- # - name: containerRegistry
- # value: $(params.containerRegistry)
- # - name: buildType
- # value: $(params.buildType)
- # - name: pullReqNumber
- # value: $(params.pullReqNumber)
-
- - name: send-building-status-to-github
- taskRef:
- kind: Task
- name: task-send-status-to-github-enterprise
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitHubHost
- value: $(params.gitHubHost)
- - name: buildType
- value: $(params.buildType)
- - name: gitRevision
- value: $(params.gitRevision)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: gitRepoFullName
- value: $(params.gitRepoFullName)
- - name: pullReqNumber
- value: $(params.pullReqNumber)
- - name: buildStatus
- value: "pending"
- - name: statusComment
- value: "building..."
-
- - name: send-building-status-to-slack
- taskRef:
- kind: Task
- name: task-notify-slack
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: messageText
- value: |
- Repository $(params.gitRepoName) revision $(params.gitRevision) is building...
-
-
- # #
- # # Clone the build infrastructure repo into our workspace.
- # #
- # - name: clone-build-infrastructure-repo
- # taskRef:
- # kind: Task
- # name: git-clone
- # runAfter:
- # - send-building-status-to-github
- # params:
- # - name: url
- # value: git@$(params.gitHubHost):$(params.gitHubOrg)/samples-build-infrastructure.git
- # - name: revision
- # value: main # Always the main branch
- # - name: depth
- # value: "1"
- # - name: subdirectory
- # value: samples-build-infrastructure
- # workspaces:
- # - name: output
- # workspace: git-workspace
-
- #
- # Clone the sample repo source code into our workspace.
- #
- - name: clone-sample-repo
- taskRef:
- kind: Task
- name: git-clone
- runAfter:
- - send-building-status-to-github
- - send-building-status-to-slack
- # - notify-status
- params:
- - name: url
- value: {{ .Values.gitHubCloneUrl }}
- - name: revision
- value: $(params.gitRevision)
- - name: depth
- value: "50"
- - name: subdirectory
- value: $(params.gitRepoName)
- workspaces:
- - name: output
- workspace: git-workspace
-
-
-
- #
- # Build using open jdk 1.8 using maven
- #
- - name: build-maven-openjdk-8
- taskRef:
- kind: Task
- name: task-samples-jcics-maven
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: mavenImageTag
- value: 3.8.5-openjdk-8
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Build using ibm semeru jdk 11 using maven
- #
- - name: build-maven-ibm-semeru-11
- taskRef:
- kind: Task
- name: task-samples-jcics-maven
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: mavenImageTag
- value: 3.8.6-ibm-semeru-11-focal
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Build using ibm semeru jdk 17 using maven
- #
- - name: build-maven-ibm-semeru-17
- taskRef:
- kind: Task
- name: task-samples-jcics-maven
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: mavenImageTag
- value: 3.8.6-ibm-semeru-17-focal
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Build using open jdk 1.8 using gradle
- #
- - name: build-gradle-openjdk-1-8
- taskRef:
- kind: Task
- name: task-samples-jcics-gradle
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: gradleImageTag
- value: 7.4.2-jdk8
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Build using jdk 11 using gradle
- #
- - name: build-gradle-jdk-11
- taskRef:
- kind: Task
- name: task-samples-jcics-gradle
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: gradleImageTag
- value: 7.4.2-jdk11
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Build using jdk 17 using gradle
- #
- - name: build-gradle-jdk-17
- taskRef:
- kind: Task
- name: task-samples-jcics-gradle
- runAfter:
- - clone-sample-repo
- params:
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: gradleImageTag
- value: 7.4.2-jdk17
- - name: containerRegistry
- value: $(params.containerRegistry)
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- #
- # Stamp the git hash into the image so we can tell what level of source built the artifacts.
- #
- - name: gather-build-report
- taskRef:
- kind: Task
- name: task-create-build-report
- runAfter:
- - clone-sample-repo
- workspaces:
- - name: git-workspace
- workspace: git-workspace
-
- params:
- - name: url
- value: {{ .Values.gitHubCloneUrl }}
- - name: revision
- value: $(params.gitRevision)
- - name: repoName
- value: $(params.gitRepoName)
- - name: gitSubDir
- value: $(params.gitRepoName)
- - name: containerRegistry
- value: $(params.containerRegistry)
-
- #
- # Whatever happens to the build above, we want to expose what was/wasn't built to the caller.
- #
- # Finally tasks run in series, only after the status of all normal tasks have been settled.
- #
- finally:
- # Finally tasks all happen in parallel, and you can't control the order.
-
- #
- # Build a docker image which contains the artifacts published by the
- # build tasks above.
- #
- # The build logs and built artifacts are gathered
- # The build status 'badge' svg is added
- # The docker image is created
- # The docker image is pushed to the container repository
- # The deployment is refreshed to pick up the new docker image.
- #
- - name: build-artifact-server-image
- taskRef:
- kind: Task
- name: task-artifact-server-builder
- workspaces:
- - name: git-workspace
- workspace: git-workspace
- params:
- - name: imageName
- value: $(params.gitRepoName)
- - name: gitBranch
- value: $(params.gitBranch)
- - name: imageTag
- value: $(params.containerImageTag)
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: aggregateTasksStatus
- value: $(tasks.status)
- - name: deploymentName
- value: {{ .Values.argoAppName }}
- - name: workingDir
- value: /workspace/git/$(params.gitRepoName)
- - name: dockerFile
- value: $(params.gitRepoName)/.tekton/resources/artifact-server/Dockerfile
- - name: gitRepoName
- value: $(params.gitRepoName)
-
- #
- # Send slack the final status message.
- #
- - name: send-built-status-to-slack
- taskRef:
- kind: Task
- name: task-notify-slack
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: messageText
- value: |
- Repository $(params.gitRepoName) revision $(params.gitRevision) build complete. $(tasks.status)
- Build output is (or will be) available at https://javadev-cicsk8s.hursley.ibm.com/{{ .Values.baseUrlPath }}/{{ .Values.containerImageTag }}
-
- - name: send-end-state-to-github
- taskRef:
- kind: Task
- name: task-send-status-to-github-enterprise
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitHubHost
- value: $(params.gitHubHost)
- - name: buildType
- value: $(params.buildType)
- - name: gitRevision
- value: $(params.gitRevision)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: gitRepoFullName
- value: $(params.gitRepoFullName)
- - name: pullReqNumber
- value: $(params.pullReqNumber)
- - name: buildStatus
- value: $(tasks.status)
- - name: statusComment
- value: "completed"
-
-
diff --git a/.tekton/helm/templates/pipeline-publish.yaml b/.tekton/helm/templates/pipeline-publish.yaml
deleted file mode 100644
index 9af9789..0000000
--- a/.tekton/helm/templates/pipeline-publish.yaml
+++ /dev/null
@@ -1,93 +0,0 @@
-apiVersion: tekton.dev/v1beta1
-kind: Pipeline
-# description: |
-# This pipeline is executed whenever a new release is created and published.
-metadata:
- name: {{ .Values.argoAppName }}-publish
-#
-#
-#
-spec:
- #
- #
- #
- workspaces:
- - name: git-workspace
- #
- #
- #
- params:
- - name: gitRevision
- type: string
- - name: gitRepoName
- type: string
- - name: gitRepoFullName
- type: string
- - name: containerRegistry
- type: string
- - name: gitTagName
- type: string
-
-
- #
- #
- #
- tasks:
-
- - name: send-publish-starting-to-slack
- taskRef:
- kind: Task
- name: task-notify-slack
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: messageText
- value: |
- Repository $(params.gitRepoName) tag $(params.gitTagName) is being publiished to public github...
-
- #
- # Clone the sample repo source code into our workspace.
- #
- - name: clone-sample-repo
- taskRef:
- kind: Task
- name: git-clone
- params:
- - name: url
- value: git@{{ .Values.gitHubHost }}:{{ .Values.gitHubOrg }}/$(params.gitRepoName).git
- - name: revision
- value: $(params.gitTagName)
- - name: depth
- value: "99999999"
- - name: subdirectory
- value: $(params.gitRepoName)
- - name: refspec
- value: +refs/tags/$(params.gitTagName):refs/tags/$(params.gitTagName)
- workspaces:
- - name: output
- workspace: git-workspace
-
- # Currently we do nothing more.
-
- finally:
- - name: send-publish-result-to-slack
- taskRef:
- kind: Task
- name: task-notify-slack
- params:
- - name: containerRegistry
- value: $(params.containerRegistry)
- - name: gitRepoName
- value: $(params.gitRepoName)
- - name: messageText
- value: |
- Repository $(params.gitRepoName) tag $(params.gitTagName) publishing to public github is complete. $(tasks.status)
-
-
-
-
-
-
-
diff --git a/.tekton/helm/values.yaml b/.tekton/helm/values.yaml
deleted file mode 100644
index 00b948b..0000000
--- a/.tekton/helm/values.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-##################################################################################
-###
-### Properties which need changing depending on the repository you are setting up
-###
-##################################################################################
-
-# No properties need customisation
-
-##################################################################################
-###
-### Properties which don't need changing manually.
-###
-##################################################################################
-# When the build process is enabled for the repo, these get set to standard
-# values which can then be used within the customized build process for this
-# repo
-
-# The git branch we are serving up built artifacts for.
-gitBranch: ignore-value-set-when-build-process-enabled
-
-# The base name for kube resources to make them small enough.
-argoAppName: ignore-value-set-when-build-process-enabled
-
-# The organisation which owns this repository.
-# For example: cicsdev for published examples on github.ibm.com
-gitHubOrg: ignore-value-set-when-build-process-enabled
-
-# The host name of the github site where this source code is stored.
-# For example: github.com for public github.
-gitHubHost: ignore-value-set-when-build-process-enabled
-
-# The name of the git repository
-gitRepoName: ignore-value-set-when-build-process-enabled
-
-# Projects on GHE use this syntax to clone a repo:
-# gitHubCloneUrl: git@$(params.gitHubHost):$(params.gitHubOrg)/$(params.gitRepoName).git
-# Projects on public github use this syntax to clone a repo:
-# gitHubCloneUrl: https://$(params.gitHubHost)/$(params.gitHubOrg)/$(params.gitRepoName).git
-gitHubCloneUrl: ignore-value-set-when-build-process-enabled
-
-# The docker registry we draw images from.
-# Don't change this value unless you want the build process to draw docker images
-# from a different container image registry
-containerRegistry: harbor-cicsk8s.hursley.ibm.com
-
-# The tag used at the end of the container image full name.
-containerImageTag: ignore-value-set-when-build-process-enabled
-
-# The path of the docker image into our docker registry.
-dockerImageName: ignore-value-set-when-build-process-enabled
-
-# The URL for the application is of the form: baseUrlPath/gitBranchName
-# This controls where you need to look for build output.
-baseUrlPath: ignore-value-set-when-build-process-enabled
\ No newline at end of file
diff --git a/.tekton/resources/artifact-server/Dockerfile b/.tekton/resources/artifact-server/Dockerfile
deleted file mode 100644
index be4a668..0000000
--- a/.tekton/resources/artifact-server/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-FROM harbor-cicsk8s.hursley.ibm.com/dockerhub/library/httpd:2.4
-# Based on the apache web server image.
-
-# Get the git repo name from the environment.
-ARG GIT_REPO
-
-# Get rid of index.html default file. We want to allow file browsing.
-RUN rm -v /usr/local/apache2/htdocs/*
-
-# Over-ride the configuration to enable file browsing
-COPY ${GIT_REPO}/.tekton/resources/artifact-server/httpd.conf /usr/local/apache2/conf/httpd.conf
-
-# Copy-in the binary contents we want to expose.
-COPY built-artifacts/ /usr/local/apache2/htdocs/
-
-# Just to make it obvious in the logs what we have just packaged.
-RUN ls -R /usr/local/apache2/htdocs/
-
-
-
diff --git a/.tekton/resources/artifact-server/httpd.conf b/.tekton/resources/artifact-server/httpd.conf
deleted file mode 100644
index be0ea02..0000000
--- a/.tekton/resources/artifact-server/httpd.conf
+++ /dev/null
@@ -1,571 +0,0 @@
-#
-# This is the main Apache HTTP server configuration file. It contains the
-# configuration directives that give the server its instructions.
-# See for detailed information.
-# In particular, see
-#
-# for a discussion of each configuration directive.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/access_log"
-# with ServerRoot set to "/usr/local/apache2" will be interpreted by the
-# server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log"
-# will be interpreted as '/logs/access_log'.
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# Do not add a slash at the end of the directory path. If you point
-# ServerRoot at a non-local disk, be sure to specify a local disk on the
-# Mutex directive, if file-based mutexes are used. If you wish to share the
-# same ServerRoot for multiple httpd daemons, you will need to change at
-# least PidFile.
-#
-ServerRoot "/usr/local/apache2"
-
-#
-# Mutex: Allows you to set the mutex mechanism and mutex file directory
-# for individual mutexes, or change the global defaults
-#
-# Uncomment and change the directory if mutexes are file-based and the default
-# mutex file directory is not on a local disk or is not appropriate for some
-# other reason.
-#
-# Mutex default:logs
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to
-# prevent Apache from glomming onto all bound IP addresses.
-#
-#Listen 12.34.56.78:80
-Listen 80
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-LoadModule mpm_event_module modules/mod_mpm_event.so
-#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
-#LoadModule mpm_worker_module modules/mod_mpm_worker.so
-LoadModule authn_file_module modules/mod_authn_file.so
-#LoadModule authn_dbm_module modules/mod_authn_dbm.so
-#LoadModule authn_anon_module modules/mod_authn_anon.so
-#LoadModule authn_dbd_module modules/mod_authn_dbd.so
-#LoadModule authn_socache_module modules/mod_authn_socache.so
-LoadModule authn_core_module modules/mod_authn_core.so
-LoadModule authz_host_module modules/mod_authz_host.so
-LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
-LoadModule authz_user_module modules/mod_authz_user.so
-#LoadModule authz_dbm_module modules/mod_authz_dbm.so
-#LoadModule authz_owner_module modules/mod_authz_owner.so
-#LoadModule authz_dbd_module modules/mod_authz_dbd.so
-LoadModule authz_core_module modules/mod_authz_core.so
-#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
-#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
-LoadModule access_compat_module modules/mod_access_compat.so
-LoadModule auth_basic_module modules/mod_auth_basic.so
-#LoadModule auth_form_module modules/mod_auth_form.so
-#LoadModule auth_digest_module modules/mod_auth_digest.so
-#LoadModule allowmethods_module modules/mod_allowmethods.so
-#LoadModule isapi_module modules/mod_isapi.so
-#LoadModule file_cache_module modules/mod_file_cache.so
-#LoadModule cache_module modules/mod_cache.so
-#LoadModule cache_disk_module modules/mod_cache_disk.so
-#LoadModule cache_socache_module modules/mod_cache_socache.so
-#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
-#LoadModule socache_dbm_module modules/mod_socache_dbm.so
-#LoadModule socache_memcache_module modules/mod_socache_memcache.so
-#LoadModule socache_redis_module modules/mod_socache_redis.so
-#LoadModule watchdog_module modules/mod_watchdog.so
-#LoadModule macro_module modules/mod_macro.so
-#LoadModule dbd_module modules/mod_dbd.so
-#LoadModule bucketeer_module modules/mod_bucketeer.so
-#LoadModule dumpio_module modules/mod_dumpio.so
-#LoadModule echo_module modules/mod_echo.so
-#LoadModule example_hooks_module modules/mod_example_hooks.so
-#LoadModule case_filter_module modules/mod_case_filter.so
-#LoadModule case_filter_in_module modules/mod_case_filter_in.so
-#LoadModule example_ipc_module modules/mod_example_ipc.so
-#LoadModule buffer_module modules/mod_buffer.so
-#LoadModule data_module modules/mod_data.so
-#LoadModule ratelimit_module modules/mod_ratelimit.so
-LoadModule reqtimeout_module modules/mod_reqtimeout.so
-#LoadModule ext_filter_module modules/mod_ext_filter.so
-#LoadModule request_module modules/mod_request.so
-#LoadModule include_module modules/mod_include.so
-LoadModule filter_module modules/mod_filter.so
-#LoadModule reflector_module modules/mod_reflector.so
-#LoadModule substitute_module modules/mod_substitute.so
-#LoadModule sed_module modules/mod_sed.so
-#LoadModule charset_lite_module modules/mod_charset_lite.so
-#LoadModule deflate_module modules/mod_deflate.so
-#LoadModule xml2enc_module modules/mod_xml2enc.so
-#LoadModule proxy_html_module modules/mod_proxy_html.so
-#LoadModule brotli_module modules/mod_brotli.so
-LoadModule mime_module modules/mod_mime.so
-#LoadModule ldap_module modules/mod_ldap.so
-LoadModule log_config_module modules/mod_log_config.so
-#LoadModule log_debug_module modules/mod_log_debug.so
-#LoadModule log_forensic_module modules/mod_log_forensic.so
-#LoadModule logio_module modules/mod_logio.so
-#LoadModule lua_module modules/mod_lua.so
-LoadModule env_module modules/mod_env.so
-#LoadModule mime_magic_module modules/mod_mime_magic.so
-#LoadModule cern_meta_module modules/mod_cern_meta.so
-#LoadModule expires_module modules/mod_expires.so
-LoadModule headers_module modules/mod_headers.so
-#LoadModule ident_module modules/mod_ident.so
-#LoadModule usertrack_module modules/mod_usertrack.so
-#LoadModule unique_id_module modules/mod_unique_id.so
-LoadModule setenvif_module modules/mod_setenvif.so
-LoadModule version_module modules/mod_version.so
-#LoadModule remoteip_module modules/mod_remoteip.so
-#LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_connect_module modules/mod_proxy_connect.so
-#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
-#LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
-#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
-#LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
-#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
-#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
-#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
-#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
-#LoadModule proxy_express_module modules/mod_proxy_express.so
-#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
-#LoadModule session_module modules/mod_session.so
-#LoadModule session_cookie_module modules/mod_session_cookie.so
-#LoadModule session_crypto_module modules/mod_session_crypto.so
-#LoadModule session_dbd_module modules/mod_session_dbd.so
-#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
-#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
-#LoadModule ssl_module modules/mod_ssl.so
-#LoadModule optional_hook_export_module modules/mod_optional_hook_export.so
-#LoadModule optional_hook_import_module modules/mod_optional_hook_import.so
-#LoadModule optional_fn_import_module modules/mod_optional_fn_import.so
-#LoadModule optional_fn_export_module modules/mod_optional_fn_export.so
-#LoadModule dialup_module modules/mod_dialup.so
-#LoadModule http2_module modules/mod_http2.so
-#LoadModule proxy_http2_module modules/mod_proxy_http2.so
-#LoadModule md_module modules/mod_md.so
-#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
-#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
-#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
-#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
-LoadModule unixd_module modules/mod_unixd.so
-#LoadModule heartbeat_module modules/mod_heartbeat.so
-#LoadModule heartmonitor_module modules/mod_heartmonitor.so
-#LoadModule dav_module modules/mod_dav.so
-LoadModule status_module modules/mod_status.so
-LoadModule autoindex_module modules/mod_autoindex.so
-#LoadModule asis_module modules/mod_asis.so
-#LoadModule info_module modules/mod_info.so
-#LoadModule suexec_module modules/mod_suexec.so
-
- #LoadModule cgid_module modules/mod_cgid.so
-
-
- #LoadModule cgi_module modules/mod_cgi.so
-
-#LoadModule dav_fs_module modules/mod_dav_fs.so
-#LoadModule dav_lock_module modules/mod_dav_lock.so
-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
-#LoadModule negotiation_module modules/mod_negotiation.so
-LoadModule dir_module modules/mod_dir.so
-#LoadModule imagemap_module modules/mod_imagemap.so
-#LoadModule actions_module modules/mod_actions.so
-#LoadModule speling_module modules/mod_speling.so
-#LoadModule userdir_module modules/mod_userdir.so
-LoadModule alias_module modules/mod_alias.so
-#LoadModule rewrite_module modules/mod_rewrite.so
-
-
-#
-# If you wish httpd to run as a different user or group, you must run
-# httpd as root initially and it will switch.
-#
-# User/Group: The name (or #number) of the user/group to run httpd as.
-# It is usually good practice to create a dedicated user and group for
-# running httpd, as with most system services.
-#
-User www-data
-Group www-data
-
-
-
-# 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# definition. These values also provide defaults for
-# any containers you may define later in the file.
-#
-# All of these directives may appear inside containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed. This address appears on some server-generated pages, such
-# as error documents. e.g. admin@your-domain.com
-#
-ServerAdmin you@example.com
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-#
-#ServerName www.example.com:80
-
-#
-# Deny access to the entirety of your server's filesystem. You must
-# explicitly permit access to web content directories in other
-# blocks below.
-#
-
- AllowOverride none
- Require all denied
-
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-Alias "/${CONTEXTROOT}" "/usr/local/apache2/htdocs"
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "/usr/local/apache2/htdocs"
-
- #
- # Possible values for the Options directive are "None", "All",
- # or any combination of:
- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
- #
- # Note that "MultiViews" must be named *explicitly* --- "Options All"
- # doesn't give it to you.
- #
- # The Options directive is both complicated and important. Please see
- # http://httpd.apache.org/docs/2.4/mod/core.html#options
- # for more information.
- #
- Options Indexes FollowSymLinks
- IndexOptions FancyIndexing NameWidth=* SuppressDescription VersionSort
-
- #
- # AllowOverride controls what directives may be placed in .htaccess files.
- # It can be "All", "None", or any combination of the keywords:
- # AllowOverride FileInfo AuthConfig Limit
- #
- AllowOverride None
-
- #
- # Controls who can get stuff from this server.
- #
- Require all granted
-
- #
- # Prevent browsers caching
- # See https://stackoverflow.com/questions/11532636/how-to-prevent-http-file-caching-in-apache-httpd-mamp
- #
-
- Header unset ETag
- Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
- Header set Pragma "no-cache"
- Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
-
-
-
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-
- DirectoryIndex index.html
-
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being
-# viewed by Web clients.
-#
-
- Require all denied
-
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a
-# container, error messages relating to that virtual host will be
-# logged here. If you *do* define an error logfile for a
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog /proc/self/fd/2
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-
- #
- # The following directives define some format nicknames for use with
- # a CustomLog directive (see below).
- #
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- LogFormat "%h %l %u %t \"%r\" %>s %b" common
-
-
- # You need to enable mod_logio.c to use %I and %O
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
-
-
- #
- # The location and format of the access logfile (Common Logfile Format).
- # If you do not define any access logfiles within a
- # container, they will be logged here. Contrariwise, if you *do*
- # define per- access logfiles, transactions will be
- # logged therein and *not* in this file.
- #
- CustomLog /proc/self/fd/1 common
-
- #
- # If you prefer a logfile with access, agent, and referer information
- # (Combined Logfile Format) you can use the following directive.
- #
- #CustomLog "logs/access_log" combined
-
-
-
- #
- # Redirect: Allows you to tell clients about documents that used to
- # exist in your server's namespace, but do not anymore. The client
- # will make a new request for the document at its new location.
- # Example:
- # Redirect permanent /foo http://www.example.com/bar
-
- #
- # Alias: Maps web paths into filesystem paths and is used to
- # access content that does not live under the DocumentRoot.
- # Example:
- # Alias /webpath /full/filesystem/path
- #
- # If you include a trailing / on /webpath then the server will
- # require it to be present in the URL. You will also likely
- # need to provide a section to allow access to
- # the filesystem path.
-
- #
- # ScriptAlias: This controls which directories contain server scripts.
- # ScriptAliases are essentially the same as Aliases, except that
- # documents in the target directory are treated as applications and
- # run by the server when requested rather than as documents sent to the
- # client. The same rules about trailing "/" apply to ScriptAlias
- # directives as to Alias.
- #
- ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
-
-
-
-
- #
- # ScriptSock: On threaded servers, designate the path to the UNIX
- # socket used to communicate with the CGI daemon of mod_cgid.
- #
- #Scriptsock cgisock
-
-
-#
-# "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-
- AllowOverride None
- Options None
- Require all granted
-
-
-
- #
- # Avoid passing HTTP_PROXY environment to CGI's on this or any proxied
- # backend servers which have lingering "httpoxy" defects.
- # 'Proxy' request header is undefined by the IETF, not listed by IANA
- #
- RequestHeader unset Proxy early
-
-
-
- #
- # TypesConfig points to the file containing the list of mappings from
- # filename extension to MIME-type.
- #
- TypesConfig conf/mime.types
-
- #
- # AddType allows you to add to or override the MIME configuration
- # file specified in TypesConfig for specific file types.
- #
- #AddType application/x-gzip .tgz
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- #
- #AddEncoding x-compress .Z
- #AddEncoding x-gzip .gz .tgz
- #
- # If the AddEncoding directives above are commented-out, then you
- # probably should define those extensions to indicate media types:
- #
- AddType application/x-compress .Z
- AddType application/x-gzip .gz .tgz
-
- #
- # AddHandler allows you to map certain file extensions to "handlers":
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action directive (see below)
- #
- # To use CGI scripts outside of ScriptAliased directories:
- # (You will also need to add "ExecCGI" to the "Options" directive.)
- #
- #AddHandler cgi-script .cgi
-
- # For type maps (negotiated resources):
- #AddHandler type-map var
-
- #
- # Filters allow you to process content before it is sent to the client.
- #
- # To parse .shtml files for server-side includes (SSI):
- # (You will also need to add "Includes" to the "Options" directive.)
- #
- #AddType text/html .shtml
- #AddOutputFilter INCLUDES .shtml
-
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type. The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-#MIMEMagicFile conf/magic
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# MaxRanges: Maximum number of Ranges in a request before
-# returning the entire resource, or one of the special
-# values 'default', 'none' or 'unlimited'.
-# Default setting is to accept 200 Ranges.
-#MaxRanges unlimited
-
-#
-# EnableMMAP and EnableSendfile: On systems that support it,
-# memory-mapping or the sendfile syscall may be used to deliver
-# files. This usually improves server performance, but must
-# be turned off when serving from networked-mounted
-# filesystems or if support for these functions is otherwise
-# broken on your system.
-# Defaults: EnableMMAP On, EnableSendfile Off
-#
-#EnableMMAP off
-#EnableSendfile on
-
-# Supplemental configuration
-#
-# The configuration files in the conf/extra/ directory can be
-# included to add extra features or to modify the default configuration of
-# the server, or you may simply copy their contents here and change as
-# necessary.
-
-# Server-pool management (MPM specific)
-#Include conf/extra/httpd-mpm.conf
-
-# Multi-language error messages
-#Include conf/extra/httpd-multilang-errordoc.conf
-
-# Fancy directory listings
-#Include conf/extra/httpd-autoindex.conf
-
-# Language settings
-#Include conf/extra/httpd-languages.conf
-
-# User home directories
-#Include conf/extra/httpd-userdir.conf
-
-# Real-time info on requests and configuration
-#Include conf/extra/httpd-info.conf
-
-# Virtual hosts
-#Include conf/extra/httpd-vhosts.conf
-
-# Local access to the Apache HTTP Server Manual
-#Include conf/extra/httpd-manual.conf
-
-# Distributed authoring and versioning (WebDAV)
-#Include conf/extra/httpd-dav.conf
-
-# Various default settings
-#Include conf/extra/httpd-default.conf
-
-# Configure mod_proxy_html to understand HTML4/XHTML1
-
-Include conf/extra/proxy-html.conf
-
-
-# Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
-#
-# Note: The following must must be present to support
-# starting without SSL on platforms with no /dev/random equivalent
-# but a statically compiled-in mod_ssl.
-#
-
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-
-
diff --git a/README.md b/README.md
index 6b857fd..9fd6513 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
# cics-java-liberty-springboot-jpa
+[![Build](https://github.com/cicsdev/cics-java-liberty-springboot-jpa/actions/workflows/java.yaml/badge.svg)](https://github.com/cicsdev/cics-java-liberty-springboot-jpa/actions/workflows/java.yaml)
This project demonstrates a Spring Boot application, which uses Spring Data JPA, integrated with IBM CICS that can be deployed to a CICS Liberty JVM server. The application makes use of the employee sample table supplied with Db2 for z/OS. The application allows you to add, update, delete or display employee information from the table EMP.
@@ -73,35 +74,33 @@ This creates a WAR file in the `target` directory.
## Deploying to a CICS Liberty JVM Server
-### update features in server.xml
-- Ensure you have the following features defined in your Liberty `server.xml`:
- - `` or `` depending on the version of Java EE in use.
- - `` if CICS security is enabled.
- - ``
- - `` or `jdbc-4.1>`
-
->**Note:** `servlet-4.0` will only work for CICS TS V5.5 or later
-
-- add a dataSource definition to 'server.xml'. This sample uses a type 2 connection. The application connects to this dataSource by using a @Bean DataSource which connects using the jndiName value `jdbc/jpaDataSource`
-
-E.g. as follows:
-
-``` XML
-
-
-
-
-
-
-
-
-
-
-```
+### Configure Liberty
+1. Ensure you have the following features defined in your Liberty `server.xml`:
+ - `servlet-3.1` or `servlet-4.0` depending on the version of Java EE in use.
+ - `cicsts:security-1.0` if CICS security is enabled.
+ - `jsp-2.3`
+ - `jdbc-4.0` or `jdbc-4.1`
+
+ >**Note:** `servlet-4.0` will only work for CICS TS V5.5 or later
+
+2. Add a dataSource definition to `server.xml`. This sample uses a type 2 connection. The application connects to this dataSource by using a @Bean DataSource which connects using the jndiName value `jdbc/jpaDataSource`
+
+ ``` XML
+
+
+
+
+
+
+
+
+
+
+ ```
Your CICS region will also require an active connection to Db2 using a CICS DB2CONN resource.
-### update application.properties
+### Update application.properties
this file contains the following entries
@@ -111,20 +110,23 @@ spring.jpa.show-sql=true
spring.data.jpa.repositories.bootstrap-mode=default
```
-*spring-jpa.show-sql* is not required, but is useful to display the sql which the JPA function is using to satisfy the requests being made.
-
-*spring.jpa.properties.hibernate.dialect* is required to ensure that the application generates SQL which can be run by Db2
-
-*spring.data.jpa.repositories.bootstrap-mode=default* is required. The `deferred` or `lazy` modes should NOT be used as they attempt to asynchronously access the database on a non-CICS/Db2 enabled thread.
+- *spring-jpa.show-sql* is not required, but is useful to display the sql which the JPA function is using to satisfy the requests being made.
+- *spring.jpa.properties.hibernate.dialect* is required to ensure that the application generates SQL which can be run by Db2
+- *spring.data.jpa.repositories.bootstrap-mode=default* is required. The `deferred` or `lazy` modes should NOT be used as they attempt to asynchronously access the database on a non-CICS/Db2 enabled thread.
-- Deployment option 1:
- - Copy and paste the built WAR from your *target* or *build/libs* directory into a Eclipse CICS bundle project and create a new WAR bundlepart that references the WAR file. Then deploy the CICS bundle project from CICS Explorer using the **Export Bundle Project to z/OS UNIX File System** wizard.
+### Deploy with CICS Bundles
+1. Copy and paste the built WAR from your *target* or *build/libs* directory into a Eclipse CICS bundle project.
+2. Create a new WAR bundlepart that references the WAR file.
+3. Deploy the CICS bundle project from CICS Explorer using the **Export Bundle Project to z/OS UNIX File System** wizard.
-- Deployment option 2:
- - Manually upload the WAR file to zFS and add an `` element to the Liberty server.xml to define the web application with access to all authenticated users. For example the following application element can be used to install a WAR, and grant access to all authenticated users if security is enabled.
+### Deploy with Liberty configuration
+1. Manually upload the WAR file to zFS
+2. Add an `` element to the Liberty server.xml to define the web application with access to all authenticated users.
-``` XML
+ For example the following application element can be used to install a WAR, and grant access to all authenticated users if security is enabled.
+
+ ``` XML
@@ -134,7 +136,7 @@ spring.data.jpa.repositories.bootstrap-mode=default
-```
+ ```
## Trying out the sample
1. Ensure the web application started successfully in Liberty by checking for msg `CWWKT0016I` in the Liberty messages.log:
diff --git a/build.gradle b/build.gradle
index e99e7b1..95f4f3f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,6 @@ plugins
group = 'com.ibm.cicsdev.springboot'
archivesBaseName='cics-java-liberty-springboot-jpa'
version = '0.1.0'
-sourceCompatibility = '1.8'
// If in Eclipse, add Javadoc to the local project classpath
eclipse
@@ -29,6 +28,15 @@ repositories
mavenCentral()
}
+java
+{
+ toolchain
+ {
+ languageVersion = JavaLanguageVersion.of(java_version)
+ vendor = JvmVendorSpec.IBM
+ implementation = JvmImplementation.J9
+ }
+}
dependencies
{
diff --git a/gradle.properties b/gradle.properties
index 71ffae9..3538325 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,4 +13,5 @@
# These values only have any effect if the publish goal is used.
# For example: gradle build publish.
publish_repo_releases_url = 'default-value-for-publish_repo_releases_url'
-publish_repo_releases_name = 'default-value-for-publish_repo_releases_name'
\ No newline at end of file
+publish_repo_releases_name = 'default-value-for-publish_repo_releases_name'
+java_version = 8
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c8ba2e5..6f32074 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,5 +1,5 @@
-
4.0.0
@@ -9,41 +9,46 @@
org.springframework.boot
spring-boot-starter-parent
2.7.0
-
+
com.ibm.cicsdev.springboot
cics-java-liberty-springboot-jpa
- 0.1.0
+ 0.1.0
cics-java-liberty-springboot.jpa
Demo JPA project for Spring Boot
1.8
+
+ UTF-8
+ ${java.version}
+ ${java.version}
-
+
-
+
org.springframework.boot
spring-boot-starter-web
-
+
org.springframework.boot
spring-boot-starter-data-jpa
-
-
+
+
org.springframework.boot
spring-boot-starter-tomcat
provided
-
+
-
+
war
@@ -52,9 +57,9 @@
org.springframework.boot
spring-boot-maven-plugin
-
+
-
+