Deploying Containerized JD Edwards EnterpriseOne On Oracle Cloud Infrastructure
Deploying Containerized JD Edwards EnterpriseOne On Oracle Cloud Infrastructure
Disclaimer 1
Introduction 1
Docker Overview 2
Use Cases 9
Elastic Scaling................................................................................................................................... 13
Prerequisites ..................................................................................................................................... 62
Deploy the JD Edwards EnterpriseOne Software Components Using the JD Edwards One-Click
Conclusion 72
This white paper provides a technical overview of deploying containerized JD Edwards EnterpriseOne
servers in Oracle Cloud Infrastructure to achieve high availability and scalability.
1 Information about Docker containers is based on content from the Docker site.
For more information about containers see the documentation at: https://www.docker.com/what-docker.
For more information about the internal structure of Docker images and layers, see the documentation at:
https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers.
Only the layers that change are downloaded (see figure below), making transfers extremely efficient:
Each region has three fault-independent Availability Domains. Each of these Availability Domains contain an
independent data center with power, thermal, and network isolation. Low latency and high-bandwidth interconnect
enables zero-data-loss architectures for applications like Oracle Database.
For more information about Oracle Cloud Infrastructure, see the documentation at:
https://cloud.oracle.com/en_US/infrastructure/architecture.
The JD Edwards EnterpriseOne server containers are deployed on the nodes. The HTML, AIS, and Enterprise
servers are logically grouped (shown as three color-coded groups). The HTML and AIS servers may be load
balanced using load balancers such as Oracle Traffic Director (OTD), HAProxy, or NGINX. The DB server is hosted
on an Oracle Cloud Infrastructure DB System for high performance while the Deployment Server is running on a VM
instance.
Alternately the OS firewall may be disabled by executing the command below as root user.
For information about creating Oracle Cloud Infrastructure resources, see the documentation at:
https://docs.us-phoenix-1.oraclecloud.com/Content/home.htm
Figure 8. Instances
3. Attach a 256 GB block storage volume to each instance and partition the volume as ext4 with fdisk.
$ chmod +x /usr/local/bin/docker-compose
"graph": "/mnt/store/docker",
"storage-driver": "overlay2",
"insecure-registries": ["jderepo:5000","127.0.0.0/8"],
"tls": false,
"hosts": ["unix:///var/run/docker.sock","tcp://0.0.0.0:4243"]
EOF
$ systemctl daemon-reload
8. Execute the following commands to get the token for other nodes to join the swarm:
$ docker swarm join-token manager
$ docker swarm join-token worker
Use Cases
Below are some of the use cases that containerized JD Edwards EnterpriseOne enables:
» Rapid provisioning of instances, which can be used for:
» Development and test purposes
Cloud, local desktop/laptop, private data center
» Training purposes
» General disposable environments
» High availability/on-demand disaster recovery – Spin up new JD Edwards instances that are fully configured
and ready to use (with all the required wiring with other running instances) when existing instances go down.
» Hot upgrades – Upgrade JD Edwards instances with near zero downtime.
» Elastic scale up/down – Increase or decrease the number of replicas based on some threshold value such as
the total number of connections.
High Availability
When a running service instance fails, the Docker engine automatically launches a new instance to maintain the
desired state (number of replicas). A monitoring script runs in the background and dynamically reconfigures the JD
Edwards logical server groups when a new service instance is launched.
There are two replicas of JD Edwards EnterpriseOne server groups (each containing an Enterprise Server, HTML
Web Server, and AIS Server logically linked together). For example, the first logical group consists of containers
entserv.1, webserv.1, and aisserv.1. The servers are load balanced using HAProxy.
With the monitoring script running in the background, simulate a failure by logging in to node dockervm2 and
terminating instance entserv.1.
The Docker engine detects that an instance has failed and automatically launches a new instance with ID
b1xo7i6v3pds9vixqlyy6gpid.
Figure 13. New Enterprise Server container automatically launched by the Docker engine to replace the failed container
The monitoring script detects that a failure occurred and automatically reconfigures/rewires the JD Edwards logical
server groups in a few seconds.
Figure 14. Logical server groups being rewired automatically after a failure
Hot Upgrades
JD Edwards EnterpriseOne server instances can be updated with near zero downtime by using containerized
services.
A sample HAProxy configuration file snippet is shown below. The Web and AIS containers are named s1 and a1 in
the configuration.
frontend http-in-websrv
bind *:7003
option httplog
option logasap
default_backend webservers
backend webservers
mode http
balance roundrobin
frontend http-in-aissrv
bind *:7004
option httplog
option logasap
default_backend aisservers
backend aisservers
mode http
balance roundrobin
stick on src
With the above configuration running, deploy a new stack named jdeappv2 containing version updates or bug fixes.
The new v9.2.1.2 services are named jdewebv2, jdeentv2, and jdeaisv2.
The HAProxy configuration is updated as shown below with the new Web and AIS servers being named t1 and b1:
frontend http-in-websrv
bind *:7003
option httplog
option logasap
default_backend webservers
backend webservers
mode http
balance roundrobin
frontend http-in-aissrv
bind *:7004
option httplog
option logasap
default_backend aisservers
mode http
balance roundrobin
stick on src
The servers s1 and a1 are then set to a “drain” state (identified by the number 8 in the 7th column).
With this configuration, a new client is connected to the updated Web server t1 while a persistent connection
continues to be serviced by s1 until the session terminates.
Elastic Scaling
The JD Edwards EnterpriseOne server instances can be scaled up or down depending on the number of
connections as determined from the load balancer. A monitoring script runs in the background and scales instances
up or down based on the number of active connections to the HAProxy load balancer.
In this example, the script is configured to increase the number of instances when the number of current
connections is greater than a value of 5.
The script also updates the load balancer configuration to include the third replica.
Below is a sample configuration file for the load balancer HAProxy. The Web servers are s1 and s2, the AIS servers
are a1 and a2, and the Enterprise Servers are e1 and e2.
global
daemon
maxconn 30000
stats timeout 2m
defaults
mode http
log global
option redispatch
timeout connect 5s
frontend http-in-websrv
option httplog
default_backend webservers
backend webservers
mode http
option httplog
balance roundrobin
frontend http-in-aissrv
bind *:7004
option httplog
default_backend aisservers
backend aisservers
mode http
option httplog
balance roundrobin
frontend tcp-in-entsrv
bind *:6017-6027
mode tcp
option tcplog
timeout client 2m
default_backend entservers
mode tcp
option tcplog
balance roundrobin
timeout server 2m
server e1 172.28.5.12
server e2 172.28.5.11
» OracleJava
» OracleWebLogic
» OracleDatabase
Sample Scripts
File: OracleJDE/dockerfiles/build-base-images.sh
#!/bin/bash
#
# Author: [email protected]
# Description: Script to build Docker Image containing pre‐requisites for deploying JDE Enterprise
Server software components.
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2017‐2018 Oracle and/or its affiliates. All rights reserved.
#
DIR=`pwd`
cd ../..
ROOT_DIR=`pwd`
echo "Root directory: $ROOT_DIR"
cd $ROOT_DIR/OracleDatabase/SingleInstance/dockerfiles
File: OracleJDE/dockerfiles/build-final-images.sh
#!/bin/bash
#
# Author: [email protected]
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2017‐2018 Oracle and/or its affiliates. All rights reserved.
#
DIR=`pwd`
REPO="oracle/jde"
DB_DATA_ARCHIVE="/mnt/store/data/prov_prime_9224/jdedb‐9224‐ora12102‐pp‐data‐volume‐orch.tar.gz"
JDEPROV_ARCHIVE="/mnt/store/data/prov_prime_9224/jdeprov‐9224‐pp‐u01‐volume‐smc.tar.gz"
File: OracleJDE/dockerfiles/docker-compose-deploy-oc.yml
version: '2.1'
services:
jdedb:
hostname: jdedb
container_name: jdedb
image: oracle/jde/oradb:12.1.0.2‐se2‐9.2.2.4‐base
ports:
‐ 1521:1521
‐ 5500:5500
volumes:
‐ jdedb‐9224‐ora12102‐pp‐data‐volume:/opt/oracle/oradata/
networks:
jdenet:
aliases:
‐ jdedb
extra_hosts:
‐ "jdedep:10.0.0.3"
environment:
ORACLE_SID: orcl
ORACLE_PDB: jdeorcl
restart: on‐failure
# docker volume create jdedb‐9224‐ora12102‐pp‐data‐volume
# docker volume create jdeprov‐9224‐pp‐u01‐volume
volumes:
jdedb‐9224‐ora12102‐pp‐data‐volume:
external: true
jdeprov‐9224‐pp‐u01‐volume:
external: true
networks:
jdenet:
driver: bridge
ipam:
driver: default
config:
‐ subnet: 172.28.0.0/16
File: OracleJDE/dockerfiles/jde-helper-shell-functions.sh
#!/bin/bash
#
# Author: [email protected]
# Description: Helper shell functions.
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2017‐2018 Oracle and/or its affiliates. All rights reserved.
#
# echo "Starting management agents"
# dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/startAgent"
# dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/startAgent"
# dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/startAgent"
# dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/startAgent"
}
dkrstartjde()
{
dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/stopAgent"
dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/startAgent"
dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/stopAgent"
dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/startAgent"
dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/stopAgent"
dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/startAgent"
dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/stopAgent"
dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/startAgent"
dkrfixagent()
{
CONTAINER=$1
USER=$2
AGENT_HOME=$3
echo "Setting agent to Non‐SSL port for $CONTAINER"
dkrcmd $CONTAINER $USER "sed ‐i ‐e
's|management.server.httpport=.*|management.server.httpport=8999|g'
$AGENT_HOME/config/agent.properties"
dkrcmd $CONTAINER $USER "sed ‐i ‐e
's|management.server.usingssl=.*|management.server.usingssl=false|g'
$AGENT_HOME/config/agent.properties"
dkrcmd $CONTAINER $USER "$AGENT_HOME/bin/stopAgent"
dkrcmd $CONTAINER $USER "$AGENT_HOME/bin/startAgent"
}
dkrfixagents()
{
dkrfixagent jdedb oracle "/u01/jde_home/SCFHA"
dkrfixagent jdeent jde920 "/u01/jde920/jde_home/SCFHA"
dkrfixagent jdeweb oracle "/u01/jde_home/SCFHA"
File: OracleJDE/dockerfiles/orchestration.json
{
"depServer": [
{
"instanceName": "DEP",
"serviceType": "VM",
"hostDetails": {
"serviceName": "jdedep",
"userName": "opc",
"password":
"ACHCJKGEHCJKCEAGGFKGODNIBNDPLJPAJAICDLMKGIGHPFCCHFNGPCAJANGLIEOIPPGONCDDPNDD",
"osPlatform": "WINDOWS"
},
"serverDetails": {
"dependentServer": "DB",
"pathcodes": [
"DEVELOPMENT",
"PRISTINE",
"PROTOTYPE",
"PRODUCTION"
],
"jdeLocation": "DENVER",
"setupDrive": "C:"
}
}
],
"databaseServer": [
{
"instanceName": "DB",
"serviceType": "VM",
"hostDetails": {
"serviceName": "jdedb",
"osPlatform": "LINUX"
},
"serverDetails": {
"type": "ORACLE",
"adminPassword": "ACHCJKBHHCJKACMAEGJNFJPPFIDEPDPKLHJDBEKPCIKM",
"schemaPassword": "",
{
"depServer": [],
"databaseServer": [
{
"instanceName": "DB",
"serviceType": "VM",
"hostDetails": {
"serviceName": "jdedb",
"osPlatform": "LINUX"
},
"serverDetails": {
"type": "ORACLE",
"adminPassword": "ACHCJKBHHCJKACMAEGJNFJPPFIDEPDPKLHJDBEKPCIKM",
"schemaPassword": "",
"installSchemas": [
"SHARED",
"DEVELOPMENT"
],
"installDemoData": [
"DEVELOPMENT"
],
"dbInstallPath": "/opt/oracle/product/12.1.0.2/dbhome_1",
"tnsName": "JDEORCL",
"sid": "JDEORCL",
"oraDBInstallDir": "/opt/oracle/oradata/jdedb",
"dbIsUseASM": false,
"oraDBTableDir": "/opt/oracle/oradata/jdetable",
"oraDBIndexDir": "/opt/oracle/oradata/jdeindex"
}
}
],
"entServer": [
{
"instanceName": "ENT",
"serviceType": "VM",
"hostDetails": {
"serviceName": "jdeent",
"osPlatform": "LINUX"
},
"serverDetails": {
"dependentServer": "DB",
File: OracleJDE/dockerfiles/build/oc_jdeais/create-opc-user.sh
File: OracleJDE/dockerfiles/build/oc_jdedb/create-opc-user.sh
File: OracleJDE/dockerfiles/build/oc_jdeent/create-opc-user.sh
File: OracleJDE/dockerfiles/build/oc_jdeprov/create-opc-user.sh
File: OracleJDE/dockerfiles/build/oc_jdeweb/create-opc-user.sh
#!/bin/bash
__create_user() {
useradd opc
SSH_USERPASS=opc
echo ‐e "$SSH_USERPASS\n$SSH_USERPASS" | (passwd ‐‐stdin opc)
echo ssh user password: $SSH_USERPASS
}
__create_user
File: OracleJDE/dockerfiles/build/oc_jdedb/bash_profile
# .bash_profile
# Get the aliases and functions
if [ ‐f ~/.bashrc ]; then
File: OracleJDE/dockerfiles/build/oc_jdedb/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# This Dockerfile builds a Docker Image containing pre‐requisites for deploying JDE DB Server
software components.
#
# Pull base image
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oracle/database:12.1.0.2‐se2
LABEL maintainer="Noel DCosta <[email protected]>"
USER root
RUN yum ‐y install zip.x86_64 unzip.x86_64 nmap bind‐utils ksh.x86_64 \
compat‐libcap1.x86_64 compat‐libstdc++‐33.x86_64 gcc‐c++.x86_64 \
gcc.x86_64 glibc.x86_64 glibc‐devel.x86_64 glibc.i686 \
libaio.x86_64 libaio‐devel.x86_64 libgcc.x86_64 libstdc++.x86_64 \
libstdc++‐devel.x86_64 libX11.x86_64 libXau.x86_64 libxcb.x86_64 \
libXext.x86_64 libXi.x86_64 libXtst.x86_64 make.x86_64 sysstat.x86_64 \
openssh‐server sudo passwd vi telnet file which net‐tools; yum ‐y clean all
RUN mkdir /u01 && chmod 770 /u01 && \
File: OracleJDE/dockerfiles/build/oc_jdeais/Dockerfile
# LICENSE UPL 1.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# This Dockerfile extends the Oracle WebLogic image by creating a sample domain.
#
# Util scripts are copied into the image enabling users to plug NodeManager
# automatically into the AdminServer running on another container.
#
# HOW TO BUILD THIS IMAGE
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
File: OracleJDE/dockerfiles/build/oc_jdeent/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# This Dockerfile builds a Docker Image containing pre‐requisites for deploying JDE Enterprise
Server software components.
#
# Pull base image
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oraclelinux:7
LABEL maintainer="Noel DCosta <[email protected]>"
ADD ./create‐opc‐user.sh /create‐opc‐user.sh
File: OracleJDE/dockerfiles/build/oc_jdeprov/Dockerfile
File: OracleJDE/dockerfiles/build/oc_jdeweb/Dockerfile
#Copyright (c) 2014‐2018 Oracle and/or its affiliates. All rights reserved.
#
#Licensed under the Universal Permissive License v 1.0 as shown at
http://oss.oracle.com/licenses/upl.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# This Dockerfile extends the Oracle WebLogic image by creating a sample domain.
#
File: OracleJDE/dockerfiles/build/final_jdeais/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oracle/jde/ais:12.2.1.0‐g‐9.2.2.4‐pp‐dv
ENV MGMT_AGENT_HOME="/u01/jde_home/SCFHA" \
REST_INI1="/u01/oracle/user_projects/domains/base_domain/servers/AIS_server/stage/AIS/app/JDERestP
roxy.war/WEB‐INF/classes/rest.ini" \
REST_INI2="/u01/jde_home/SCFHA/targets/AIS/config/rest.ini" \
File: OracleJDE/dockerfiles/build/final_jdedb/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
File: OracleJDE/dockerfiles/build/final_jdeent/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oracle/jde/ent:9.2.2.4‐pp‐dv
ENV MGMT_AGENT_HOME="/u01/jde920/jde_home/SCFHA"
ADD jdeStartEntServ.sh /scripts/jdeStartEntServ.sh
USER root
File: OracleJDE/dockerfiles/build/final_jdeprov/Dockerfile
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oracle/jde/prov:9.2.2.4‐base
ENV MGMT_AGENT_HOME="/u01/SMConsole/SCFMC"
ARG JDEPROV_ARCHIVE="jdeprov‐9224‐pp‐u01‐volume‐smc.tar.gz"
ADD jdeStartSMC.sh /scripts/jdeStartSMC.sh
USER root
RUN chown ‐R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh
ADD ${JDEPROV_ARCHIVE} /u01/
USER oracle
CMD /scripts/jdeStartSMC.sh
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
FROM oracle/jde/web:12.2.1.0‐g‐9.2.2.4‐pp‐dv
ENV MGMT_AGENT_HOME="/u01/jde_home/SCFHA" \
JAS_INI1="/u01/oracle/user_projects/domains/base_domain/servers/JAS_server/stage/JAS/app/webclient
.war/WEB‐INF/classes/jas.ini" \
JAS_INI2="/u01/jde_home/SCFHA/targets/JAS/config/jas.ini" \
JAS_INI3="/u01/jde_home/SCFHA/targets/JAS/owl_deployment/webclient.ear/app/webclient.war/WEB‐
INF/classes/jas.ini"
ADD jdeStartWebServ.sh /scripts/jdeStartWebServ.sh
USER root
RUN chown ‐R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh && \
sed ‐i ‐e 's|AdminURL=.*|AdminURL=http\\://127.0.0.1\\:7002|g'
/u01/oracle/user_projects/domains/base_domain/servers/JAS_server/data/nodemanager/startup.properti
es && \
cat
/u01/oracle/user_projects/domains/base_domain/servers/JAS_server/data/nodemanager/startup.properti
es && \
sed ‐i ‐e 's|management.server.httpport=.*|management.server.httpport=8999|g'
${MGMT_AGENT_HOME}/config/agent.properties && \
sed ‐i ‐e 's|management.server.usingssl=.*|management.server.usingssl=false|g'
${MGMT_AGENT_HOME}/config/agent.properties && \
sed ‐i ‐e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI1} && \
sed ‐i ‐e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI2} && \
sed ‐i ‐e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI3} && \
sed ‐i ‐e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI1} && \
sed ‐i ‐e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI2} && \
sed ‐i ‐e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI3} && \
rm ‐f ${MGMT_AGENT_HOME}/agent.pid && \
rm ‐f ${MGMT_AGENT_HOME}/logs/*.log*
File: OracleJDE/dockerfiles/run/docker-compose-run-oc-s-9224.yml
version: '3.1'
services:
jdedb:
hostname: jdedb
container_name: jdedb
image: oracle/jde/oradb:12.1.0.2‐se2‐9.2.2.4‐pp‐dv‐s
user: oracle
ports:
‐ 1521:1521
‐ 5500:5500
secrets:
‐ source: jdedb_system_password
target: /etc/secret‐volume/jdedb_system_password
volumes:
‐ jdedb‐9224‐ora12102‐pp‐data‐volume:/opt/oracle/oradata/
networks:
jdenet:
aliases:
‐ jdedb
extra_hosts:
‐ "jdedep:10.0.0.5"
environment:
ORACLE_SID: orcl
ORACLE_PDB: jdeorcl
restart: on‐failure
jdeprov:
hostname: jdeprov
container_name: jdeprov
image: oracle/jde/prov:9.2.2.4‐pp‐dv‐s
user: oracle
ports:
‐ "3000:3000"
File: OracleJDE/dockerfiles/run/exec-docker-compose-run-oc-s-9224.sh
#!/bin/bash
# This script sets the environment variables and executes docker‐compose‐run‐oc.yml
# RUN AS:
# ./exec‐docker‐compose‐run‐oc‐s.sh up
# ./exec‐docker‐compose‐run‐oc‐s.sh down
OPT=${1:‐"up ‐d"}
# dkrcmd sshtest root "yum ‐y install openssh‐clients"
dkrcmd()
{
DKR_SHELL="bash"
if [ "$1" = "jdeent" ]
File: OracleJDE/dockerfiles/run/scripts/jdeStartAisServ.sh
#!/bin/bash
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
export ADMIN_HOST=localhost
export ADMIN_PORT=7004
export WLS_BASE_DOMAIN=/u01/oracle/user_projects/domains/base_domain
# WLS_ADMIN_PASSWORD=$(cat /run/secrets/wlsadmin_password)
WLS_ADMIN_PASSWORD=$(cat /etc/secret‐volume/wlsadmin_password)
echo "Starting Management agent..."
/u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
/u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
cd $WLS_BASE_DOMAIN
# Start AdminServer
echo "Starting AdminServer in background..."
nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee ‐a /tmp/jde_admin_server.log &
echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become
available..."
while :
do
(echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1
available=$?
if [[ $available ‐eq 0 ]]; then
echo "WebLogic Admin Server is now available. Proceeding..."
break
fi
sleep 1
done
# Start Node Manager
File: OracleJDE/dockerfiles/run/scripts/jdeStartDB.sh
#!/bin/bash
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
echo "Starting Management agent in background..."
/u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
/u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
/opt/oracle/runOracle.sh 2>&1 | tee ‐a /tmp/jde_db.log &
tail ‐f /tmp/jde_mgmt_agent.log /tmp/jde_db.log
File: OracleJDE/dockerfiles/run/scripts/jdeStartEntServ.sh
#!/bin/bash
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
#!/bin/bash
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
export WLS_BASE_DOMAIN=/u01/OracleSMC/user_projects/domains/jde_domain
export ADMIN_HOST=localhost
export ADMIN_PORT=7001
cd $WLS_BASE_DOMAIN
# Start AdminServer
echo "Starting AdminServer in background..."
nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee ‐a /tmp/jde_admin_server.log &
echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become
available..."
while :
do
(echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1
available=$?
if [[ $available ‐eq 0 ]]; then
echo "WebLogic Admin Server is now available. Proceeding..."
break
fi
sleep 1
done
# Start Node Manager
echo "Starting NodeManager in background..."
nohup $WLS_BASE_DOMAIN/bin/startNodeManager.sh 2>&1 | tee ‐a /tmp/jde_node_manager.log
&
# Start SMC
echo "Starting SMC in background..."
nohup $WLS_BASE_DOMAIN/bin/startManagedWebLogic.sh
SMC_Server_EOne_ManagementConsole1_Console http://$ADMIN_HOST:$ADMIN_PORT 2>&1 | tee ‐a
/tmp/jde_smc.log &
File: OracleJDE/dockerfiles/run/scripts/jdeStartWebServ.sh
#!/bin/bash
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
export ADMIN_HOST=localhost
export ADMIN_PORT=7002
export WLS_BASE_DOMAIN=/u01/oracle/user_projects/domains/base_domain
# WLS_ADMIN_PASSWORD=$(cat /run/secrets/wlsadmin_password)
WLS_ADMIN_PASSWORD=$(cat /etc/secret‐volume/wlsadmin_password)
echo "Starting Management agent..."
/u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
/u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee ‐a /tmp/jde_mgmt_agent.log &
cd $WLS_BASE_DOMAIN
# Start AdminServer
echo "Starting AdminServer in background..."
nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee ‐a /tmp/jde_admin_server.log &
echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become
available..."
while :
do
(echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1
available=$?
if [[ $available ‐eq 0 ]]; then
echo "WebLogic Admin Server is now available. Proceeding..."
break
fi
sleep 1
done
# Start Node Manager
echo "Starting NodeManager in background..."
File: OracleJDE/dockerfiles/run/scripts/create-jdedb-data-volume.sh
#!/bin/bash
#
# Author: [email protected]
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
#
DB_DATA_ARCHIVE="jdedb‐9224‐ora12102‐pp‐data‐volume.tar.gz"
# docker volume rm jdedb‐9224‐ora12102‐pp‐data‐volume
printf "\n Creating volume \n\n"
docker volume create jdedb‐9224‐ora12102‐pp‐data‐volume
printf "\n Creating container jdedb \n\n"
docker run ‐d ‐‐name jdedb \
‐h jdedb \
‐v jdedb‐9224‐ora12102‐pp‐data‐volume:/opt/oracle/oradata/ \
oracle/jde/oradb:12.1.0.2‐se2‐9.2.2.4‐pp‐dv‐s \
bash ‐c "echo 'jde' > /tmp/jde.log; tail ‐f /tmp/jde.log"
Additional Steps
1. Copy the directory OracleWebLogic/samples/1221-domain/container-scripts to the following locations:
» OracleJDE/dockerfiles/build/oc_jdeais/container-scripts
» OracleJDE/dockerfiles/build/oc_jdeweb/container-scripts
Prerequisites
1. Provision a VM with the latest Oracle Linux version and install the latest version of Docker and docker-
compose on the VM.
2. Provision a Windows 2012 Server R2 - Standard VM which will be used to deploy the JD Edwards
EnterpriseOne Deployment Server.
3. Clone the oracle/docker-images repository at (https://github.com/oracle/docker-images) onto the
provisioned Linux machine.
4. Copy the OracleJDE directory to the root folder where you have cloned the repository in step 3.
5. Download the JDE One-Click Provisioning archive to the Linux machine.
6. Copy the provided shell script to the home directory and add the following entry to ~/.bashrc
. ~/jde-helper-shell-functions.sh
7. Ensure the required ports are open (refer to docker-compose-deploy-oc.yml for the full list of ports).
8. Install the pre-requisites for Deployment server following the official documentation.
9. Set the Deployment server internal IP address in the following files by editing the line "jdedep:10.0.2.9".
a. docker-compose-deploy-oc.yml
b. docker-compose-run-oc-s-9224.yml
Download the files for JD Edwards EnterpriseOne One-Click Provisioning (REL: JD Edwards One-Click Provisioning
3.1 for Apps 9.2 Tools 9.2.2.4) from the Oracle Software Delivery Cloud.
From your download location, upload the files to any directory on the Linux VM.
$ unzip '*.zip'
Assemble the unzipped images into a single archive using this command:
$ MD5CheckSUMFile=$(ls *MD5SUMS)
$ md5sum -c $MD5CheckSUMFile
$ rm JDE_OCProv_9224_LINUX_18122_20GB.tgz.DiskPart0*
Disable SELINUX
Edit the /etc/selinux/config file to change the SELINUX=setting to the following value and reboot the machine.
SELINUX=disabled
After reboot verify that SELINUX is disabled by executing the following command.
$ sudo getenforce
$ sudo -i
10.0.2.9 jdedep
10.0.2.6 jdedb
10.0.2.6 jdeprov
10.0.2.6 jdeent
10.0.2.6 jdeweb
10.0.2.6 jdeais
» linuxamd64_12102_database_se2_1of2.zip
» linuxamd64_12102_database_se2_2of2.zip
Run the below commands to build the image:
$ cd OracleDatabase/SingleInstance/dockerfiles/
$ ./buildDockerImage.sh ‐v 12.1.0.2 –s
» server-jre-8u172-linux-x64.tar.gz
Run the below commands to build the image:
$ cd OracleJava/java‐8
$ ./build.sh
$ cd OracleWebLogic/dockerfiles
$ ./buildDockerImage.sh ‐v 12.2.1 –g
The private key will be specified in the JD Edwards One-Click Provisioning Console at a later step.
$ ./build‐base‐images.sh
Deploy the JD Edwards EnterpriseOne Software Components Using the JD Edwards One-Click
Provisioning Console
1. Create the Docker volumes.
$ docker volume create jdedb‐9224‐ora12102‐pp‐data‐volume
$ docker volume create jdeprov‐9224‐pp‐u01‐volume
$ cd OracleJDE/dockerfiles/
$ source ~/jde‐helper‐shell‐functions.sh
$ dkrcmpup
2. Start the DB server. Wait a few mins for the new database to be created.
$ dkrcmd jdedb oracle "/opt/oracle/runOracle.sh" 2>&1 | tee ‐a /tmp/jdedb.log &
$ dkrexec jdedb oracle
[oracle@jdedb admin]$ pwd
/opt/oracle/product/12.1.0.2/dbhome_1/network/admin
[oracle@jdedb admin]$ cat tnsnames.ora
JDEORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = jdedb)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jdeorcl)
)
)
Note: Ensure that tnsnames.ora does not have the entry “orcl=localhost:1521/orcl”
3. Change the password and perform the pre-requisite steps.
$ dkrexec jdedb oracle
$ ./setPassword.sh <new‐password>
$ sqlplus '/as sysdba';
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET';
‐‐> AL16UTF16
alter system set processes=1500 scope=spfile;
alter system set filesystemio_options=setall scope=spfile;
shutdown immediate;
startup;
$ dkrcmd jdeais oracle "./startWebLogic.sh" 2>&1 | tee ‐a /tmp/jdeais.log &
$ dkrcmd jdeweb oracle "/u01/oracle/createMachine.sh" 2>&1 | tee ‐a /tmp/jdeweb2.log &
$ dkrcmd jdeais oracle "/u01/oracle/createMachine.sh" 2>&1 | tee ‐a /tmp/jdeais2.log &
$ docker exec ‐u root jdeprov bash ‐c "chown opc:opc /u01/ JDE_OCProv_9224_LINUX_18122_20GB.tgz"
6. Login to the jdeprov container as root user and run the setup script.
$ docker exec ‐ti ‐u root jdeprov bash
$ cd /u01 && tar ‐P ‐C /u01 ‐x ‐f JDE_OCProv_9224_LINUX_18122_20GB.tgz
$ ./setupPr.sh
https://<public‐IP‐address>:3000/
You can now set the passwords and import the provided orchestration.json to deploy all the JD Edwards
EnterpriseOne servers.
7. Once the deployment is complete, login to SMC, Web and AIS Admin servers, uncheck “SSL Listen Port
Enabled” and restart the servers.
8. Run the below command to correct the management agents to use non-SSL.
$ dkrfixagents
9. Commit the containers as new Docker images.
$ dkrcommit
$ docker images | grep "9.2.2.4‐pp‐dv" | grep "oracle/jde"
11. Save the Docker volumes which will be required to deploy the containers to other machines.
sudo ‐i
BACKUPDIR="$MOUNT/data/prov_prime_9224"
DOCKERDIR="$MOUNT/docker"
DB_DATA_VOL="jdedb‐9224‐ora12102‐pp‐data‐volume"
PP_U01_VOL="jdeprov‐9224‐pp‐u01‐volume"
DB_DATA_VOL_DIR=$DOCKERDIR/volumes/$DB_DATA_VOL
PP_U01_VOL_DIR=$DOCKERDIR/volumes/$PP_U01_VOL
cd $DB_DATA_VOL_DIR
tar ‐P ‐cvzf $DB_DATA_VOL.tar.gz *
cd $PP_U01_VOL_DIR/_data
tar ‐P ‐cvzf $PP_U01_VOL‐smc.tar.gz app SMConsole E1CloudConsole OracleSMC CertGen jdk1.8.0 jde920
mkdir ‐p $BACKUPDIR
mv $DB_DATA_VOL_DIR/$DB_DATA_VOL.tar.gz $BACKUPDIR
mv $PP_U01_VOL_DIR/_data/$PP_U01_VOL‐smc.tar.gz $BACKUPDIR
chown ‐R opc:opc $BACKUPDIR
Edit file "OracleJDE\dockerfiles\build-final-images.sh" and set the paths for DB_DATA_ARCHIVE and
JDEPROV_ARCHIVE.
Example:
DB_DATA_ARCHIVE="/mnt/store/data/prov_prime_9224/jdedb‐9224‐ora12102‐pp‐data‐volume‐orch.tar.gz"
JDEPROV_ARCHIVE="/mnt/store/data/prov_prime_9224/jdeprov‐9224‐pp‐u01‐volume‐smc.tar.gz"
$ cd OracleJDE/dockerfiles
$ ./build‐final‐images.sh
Script create-jdedb-data-volume.sh is provided to re-create the DB data volume on the target machine. Set the
archive name in DB_DATA_ARCHIVE before executing the script on the target machine.
$ ./exec‐docker‐compose‐run‐oc‐s‐9224.sh
3. Wait a few minutes for the servers to start. The JDE servers will now be accessible at the following URLs:
» SMC: http://<public-IP-address>:8999/manage
» Web server: http://<public-IP-address>:8002/jde/E1Menu.maf
» AIS server: http://<public-IP-address>:8004/jderest/defaultconfig
$ ./exec‐docker‐compose‐run‐oc‐s‐9224.sh down
docker-compose.yml
version: "3.2"
services:
jdedb:
hostname: jdedb
image: oracle/jde/oradb:12.1.0.2‐se2‐9.2.2.4‐pp‐dv‐s
networks:
jdenet:
aliases:
‐ jdedb
volumes:
‐ jdedb‐9224‐ora12102‐pp‐data‐volume:/opt/oracle/oradata/
deploy:
restart_policy:
condition: on‐failure
endpoint_mode: dnsrr
placement:
constraints:
‐ node.labels.type == dbserver
environment:
Conclusion
Containerizing JD Edwards EnterpriseOne servers provides greater flexibility and better utilization of available
resources, thus reducing infrastructure costs. It makes it easier to deploy highly available elastic environments that
can be updated with minimal downtime and without affecting connected users.
CONNECT WITH US
blogs.oracle.com/oracle
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. This document is provided for information purposes only, and the
contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other
facebook.com/oracle warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or
fitness for a particular purpose. We specifically disclaim any liability with respect to this document, and no contractual obligations are
formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any
twitter.com/oracle means, electronic or mechanical, for any purpose, without our prior written permission.
oracle.com Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and
are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are
trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group. 0718