Deploying webmethods Integration Server as Bosh Release What is webmethods Integration Server? Integration Server is the core application server in the webmethods product suite from SoftwareAG. It is a Java-based server that supports development enterprise application integration and business to business applications in a multitude of languages. I will use the trial version of webmethods Integration Server obtained from http://www.softwareag.com for this post. What is Bosh? Bosh is an open source tool for deploying and managing complex distributed systems. Software components can be packaged as Bosh releases, and Bosh director deploys and manages the release and its lifecycle. More information about Bosh can be found here: http://bosh.io. For this explanation, I will be using Bosh-lite local development environment for Bosh using Warden containers in a Vagrant box. Bosh-lite is available at: https://github.com/cloudfoundry/bosh-lite Creating a Bosh Release for webmethods Integration Server Creating a Bosh release for the webmethods Integration Server involves following steps: 1. Prepare the install script for the webmethods Integration Server 2. Initialize the Bosh release 3. Create the Java package 4. Create the webmethods Integration Server package 5. Create the job to manage the integration server 6. Create and upload the bosh release The downloaded trial software comes with following files: SoftwareAG installer SoftwareAGInstaller20151015.jar Core webmethods Components binary webmfreedownload99_linux64bit.zip Trial license file Free+Trial_v9.9-Linux-Windowsx64+Keys.zip o We will use the license key for the integration server, 0000253246_Integration_Server99.xml, within the zip file. Prepare the install script for webmethods Integration Server To install the Integration Server, create the install script. I used an Ubuntu virtual machine to create the base install script which I modified later to create the Bosh release. The following creates the installscript.txt file in current directory:
$ java -jar SoftwareAGInstaller20151015.jar -editscript./installscript.txt -readimage "webmfreedownload99_linux64bit.zip" -console Note: When creating the install script, select only the following. When you move to next screen, choose yes for selecting all the dependent components. Integration Server _Server 9.9 (Installed) The above will create the installscript.txt with following contents. $ cat installscript.txt #Sat Mar 12 10:32:40 MST 2016 IntegrationServerDBURL.Name= VERSION1, SPMUsingCC= VERSION1,1,0,Plan+to+use+Command+Central IntegrationServerDBUser.Name= VERSION1, LicenseAgree=Accept IntegrationServer.RDBMS.Type= VERSION1,3,0_,1,2,Oracle,SQL+Server,DB2+for+Linux%2C+UNIX%2C+Windows IntegrationServerDBPass.Name= VERSION1, ISExtOrInt= VERSION1,2,0,1_,External+RDBMS,Embedded+database IntegrationServerPort= VERSION1,5555 IntegrationServerPool.Name= VERSION1, integrationserver.licensefile.text= VERSION1,0000253246_Integration_Server99.xml IntegrationServerdiagnosticPort= VERSION1,9999 InstallDir=/home/ramesh/SAG/softwareag imagefile=webmfreedownload99_linux64bit.zip HostName=localhost InstallProducts=e2ei/11/TES_4.3.1.0.190/TES/TESOSGi,e2ei/11/OSGI_9.9.0.0.294/Platform/OSGI,e2ei/11/WSS_9.9.0.0.221/ SCG/WSSCore,e2ei/11/CDBS_9.9.0.0.64/CDC/DatabaseScripts,e2ei/11/EDA_9.9.0.0.259/EDA/NERV,e2ei/11/MWS_9.9.0.0.2 21/portal/CAFRLib,e2ei/11/INMJ_9.9.0.0.471/INMJ/INMSharedLibs,e2ei/11/MWS_9.9.0.0.221/portal/MWSSharedLib,e2ei/ 11/EDA_9.9.0.0.259/EDA/EventTypeCommon,e2ei/11/ACDL_9.9.0.0.173/ACDL/ACDLDeployerSharedBundle,e2ei/11/EDA_9. 9.0.0.259/EDA/EDAspm,e2ei/11/SJP_1.8.0.0.60/Infrastructure/sjp,e2ei/11/JDBCAdapter_9.0.0.0.341/Adapters/jdbcAdapter, e2ei/11/tps_9.9.0.0.14/platform/tps,e2ei/11/wss_9.9.0.0.221/platform/wssosgi,e2ei/11/br_9.6.0.0.226/broker/brokerj MSShared,e2ei/11/WSI_9.9.0.0.185/SCG/jsw,e2ei/11/LIC_5.5.1.0.6/SaglicUtil/SaglicUtil,e2ei/11/NUM_9.9.0.0.77666/Univer salmessaging/numsharedlibs,e2ei/11/evs_9.9.0.0.87/evs/evs,e2ei/11/wsi_9.9.0.0.185/scg/scgcommon,e2ei/11/wdy_ 9.9.0.0.8/WDYSharedBundles/WDYSharedBundles,e2ei/11/TPL_9.9.0.0.26/License/license,e2ei/11/TES_4.3.1.0.190/TES/TES Common,e2ei/11/WIS_9.9.0.0.205/Infrastructure/WISSharedBundles,e2ei/11/DDJ_9.9.0.0.6/DDJ/TPSddj,e2ei/11/IS_9.9.0.0. 102/integrationServer/integrationServerMigrationFrameworkLib,e2ei/11/WSI_9.9.0.0.185/SCG/SCGCommonExt,e2ei/11/SS X_9.9.0.0.2384/API/SSX,e2ei/11/WIS_9.9.0.0.205/Infrastructure/WISSharedLibs,e2ei/11/SPM_9.9.0.0.208/Platform/SPM,e2 ei/11/is_9.9.0.0.102/integrationserver/issharedbundles,e2ei/11/wsi_9.9.0.0.185/scg/log4j,e2ei/11/br_9.6.0.0.226/broke r/pifsharedbundles,e2ei/11/cmp_9.9.0.0.52/cmp/cmp,e2ei/11/num_9.9.0.0.77666/universalmessaging/numrepository, e2ei/11/is_9.9.0.0.102/integrationserver/integrationserver,e2ei/11/wsi_9.9.0.0.185/scg/saglic,e2ei/11/ddj_9.9.0.0.6/ddj /WSIddj,e2ei/11/BPM_9.9.0.0.106/DES/DesignerSharedLib,e2ei/11/IS_9.9.0.0.102/integrationServer/ISspm,e2ei/11/EDA_9. 9.0.0.259/EDA/ERSharedBundles SPMAppOrService= VERSION1,1,0,Register+Windows+service%2FUNIX+daemon+for+automatic+startup ISCreateInstanceCheckbox= VERSION1,1,0_,Install+packages+on+this+instance+as+well SPMHttpsPort= VERSION1,8093 IntegrationServerInstanceName= VERSION1,default SPMHttpPort= VERSION1,8092 2 P age
Then modify few lines below in the installscript.txt to use this install script to create the Bosh release for webmethods Integration Server. Now with all of the required files, create the Bosh release with the following steps: Initialize the Bosh Release $ bosh init release sag-is-release $ cd sag-is-release These commands initialize a Bosh release and create the required folder structure. Create the Java Package Since Integration Server is a Java-based product, now package Java for our Bosh release. $ bosh generate package java8 1. Download java8 from java.sun.com and copy it to src/java8 directory $ tree src/java8 src/java8 jdk-8u77-linux-x64.tar.gz 0 directories, 1 file 2. Modify the packages/java8/spec file as follows $ cat packages/java8/spec --- name: java8 dependencies: files: - java8/jdk-8u77-linux-x64.tar.gz 3. Modify the packages/java8/packaging file as follows. $ cat packages/java8/packaging # abort script on any command that exits with a non zero value set -e -x 3 P age
tar xvzf java8/jdk-8u77-linux-x64.tar.gz -C $BOSH_INSTALL_TARGET Create the Integration Server Package $ bosh generate package sag-is-package 1. Copy the Integration Server install files to src/sag-is-package $ tree src/sag-is-package/ src/sag-is-package/ 0000253246_Integration_Server99.xml SoftwareAGInstaller20151015.jar installscript.txt webmfreedownload99_linux64bit.zip 0 directories, 4 files 2. Modify the packages/sag-is-package/spec file as follows. $ cat packages/sag-is-package/spec --- name: sag-is-package dependencies: - java8 files: - sag-is-package/webmfreedownload99_linux64bit.zip - sag-is-package/softwareaginstaller20151015.jar - sag-is-package/0000253246_integration_server99.xml - sag-is-package/installscript.txt 3. Modify the packages/sag-is-package/packaging file as follows. The following installs the Integration Server and makes necessary modifications to startup scripts. $ cat packages/sag-is-package/packaging export JAVA_HOME=/var/vcap/packages/java8/jdk1.8.0_77 export PATH=$PATH:$JAVA_HOME/bin mkdir /var/vcap/packages/sag-is-package/tmp export _JAVA_OPTIONS=-Djava.io.tmpdir=/var/vcap/packages/sag-is-package/tmp java -Djava.io.tmpdir=./sag-is-package/tmp -jar./sag-is-package/softwareaginstaller20151015.jar -readscript./sag-is-package/installscript.txt -readimage./sag-is-package/webmfreedownload99_linux64bit.zip -console 4 P age
sed -i '$ a JAVA_EXEC=/var/vcap/packages/sag-is-package/softwareag/jvm/jvm/bin/java' /var/vcap/packages/sagis-package/softwareag/install/profile/bin/setenv.sh /var/vcap/packages/sag-is-package/softwareag/integrationserver/instances/is_instance.sh create - Dinstance.name=default sed -i 's/wrapper.java.command/#wrapper.java.command/' /var/vcap/packages/sag-ispackage/softwareag/profiles/is_default/configuration/wrapper.conf sed -i '/#wrapper.java.command/a wrapper.java.command=/var/vcap/packages/sag-ispackage/softwareag/jvm/jvm/bin/java' /var/vcap/packages/sag-ispackage/softwareag/profiles/is_default/configuration/wrapper.conf Create the Job to Manage the Integration Server $ bosh generate job is-job 1. Edit jobs/is-job/monit as follows $ cat jobs/is-job/monit check process is with pidfile /var/vcap/packages/sag-is-package/softwareag/profiles/is_default/bin/sagis99.pid start program "/var/vcap/jobs/is-job/bin/ctl start" stop program "/var/vcap/jobs/is-job/bin/ctl stop" group vcap 2. Edit jobs/is-job/spec as follows: $ cat jobs/is-job/spec --- name: is-job templates: ctl.erb: bin/ctl packages: - java8 - sag-is-package 3. Edit jobs/is-job/templates/ctl.erb as follows: $ cat jobs/is-job/templates/ctl.erb #!/bin/bash 5 P age
RUN_DIR=/var/vcap/packages/sag-is-package/softwareag/profiles/IS_default/bin LOG_DIR=/var/vcap/packages/sag-is-package/softwareag/profiles/IS_default/logs IS_LOG_DIR=/var/vcap/packages/sag-is-package/softwareag/IntegrationServer/instances/default/logs PIDFILE=${RUN_DIR}/sagis99.pid case $1 in start) mkdir -p $RUN_DIR $LOG_DIR $IS_LOG_DIR chown -R vcap:vcap $RUN_DIR $LOG_DIR $IS_LOG_DIR echo $$ > $PIDFILE exec /var/vcap/packages/sag-is-package/softwareag/profiles/is_default/bin/startup.sh ;; stop) exec /var/vcap/packages/sag-is-package/softwareag/profiles/is_default/bin/shutdown.sh ;; *) echo "Usage: ctl {start stop}" ;; esac Create the Bosh Release $ bosh create release [WARNING] Missing blobstore configuration, please update config/final.yml before making a final release Syncing blobs... Please enter development release name: sag-is-release Building DEV release --------------------------------- Release artifact cache: /Users/rsamban/.bosh/cache Building license ---------------- Building license... Warning: Missing LICENSE or NOTICE in /Users/rsamban/cloudFoundry/boshCustomRelease/sag-is-release Building packages 6 P age
----------------- Building java8... No artifact found for java8 Generating... Pre-packaging... Generated version 'a63f826e96971bb6800a6b37068588685d2d9aa0' Building sag-is-package... No artifact found for sag-is-package Generating... Pre-packaging... Generated version '5cc47b93c4c981159d0573988e5a67b5497c26e0' Resolving dependencies ---------------------- Dependencies resolved, correct build order is: - java8 - sag-is-package Building jobs ------------- Building is-job... No artifact found for is-job Generating... Generated version '48a8ce666f866ef446de083de7bddaa11e2381a3' Building release ---------------- Generating manifest... ---------------------- Writing manifest... Release summary --------------- Packages +----------------+------------------------------------------+-------------+ Name Version Notes +----------------+------------------------------------------+-------------+ java8 a63f826e96971bb6800a6b37068588685d2d9aa0 new version sag-is-package 5cc47b93c4c981159d0573988e5a67b5497c26e0 new version +----------------+------------------------------------------+-------------+ Jobs +--------+------------------------------------------+-------------+ Name Version Notes +--------+------------------------------------------+-------------+ is-job 48a8ce666f866ef446de083de7bddaa11e2381a3 new version 7 P age
+--------+------------------------------------------+-------------+ Jobs affected by changes in this release +--------+------------------------------------------+ Name Version +--------+------------------------------------------+ is-job 48a8ce666f866ef446de083de7bddaa11e2381a3 outlook:\\swilliamsshaw@ecsteam.com\inbox\blog +--------+------------------------------------------+ Release name: sag-is-release Release version: 0+dev.1 Release manifest: < >boshcustomrelease/sag-is-release/dev_releases/sag-is-release/sag-is-release-0+dev.1.yml Upload the Bosh Release $ bosh upload release Acting as user 'admin' on 'Bosh Lite Director' [WARNING] Missing blobstore configuration, please update config/final.yml before making a final release Copying packages ---------------- java8 sag-is-package Copying jobs ------------ is-job Generated /var/folders/50/c3p_xl6n7x565f1fqp5wpjq00000gp/t/d20160404-22252-1tchx2v/d20160404-22252- uurkk6/release.tgz Release size: 2.2G Verifying manifest... Extract manifest Manifest exists Release name/version OK OK OK Uploading release release.tgz: 100% ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooo 2.2GB 27.9MB/s Time: 00:01:19 Director task 81 Started extracting release > Extracting release. Done (00:00:14) 8 P age
Started verifying manifest > Verifying manifest. Done (00:00:00) Started resolving package dependencies > Resolving package dependencies. Done (00:00:00) Started creating new packages Started creating new packages > java8/a63f826e96971bb6800a6b37068588685d2d9aa0. Done (00:00:02) Started creating new packages > sag-is-package/5cc47b93c4c981159d0573988e5a67b5497c26e0. Done (00:00:15) Done creating new packages (00:00:17) Started creating new jobs > is-job/48a8ce666f866ef446de083de7bddaa11e2381a3. Done (00:00:01) Started release has been created > sag-is-release/0+dev.1. Done (00:00:00) Task 81 done Started 2016-04-05 03:08:32 UTC Finished 2016-04-05 03:09:04 UTC Duration 00:00:32 Release uploaded $ bosh releases Acting as user 'admin' on 'Bosh Lite Director' +----------------+----------+-------------+ Name Versions Commit Hash +----------------+----------+-------------+ sag-is-release 0+dev.1 00000000 +----------------+----------+-------------+ Releases total: 1 Create the Deployment Manifest for the Integration Server Bosh Release Create manifest file that will deploy the bosh release that was uploaded in previous step. Below, I took the manifest file from my previous Cloud Foundry release deployment and modified it to suit to the integration server bosh release. $ cat is.yml director_uuid: 3606f4d1-c2f8-48bc-913d-b5a4012e81ec name: sag-is releases: - name: sag-is-release version: latest jobs: - instances: 1 9 P age
name: IntegrationServer networks: - name: is1 static_ips: - 10.244.0.2 persistent_disk: 20480 resource_pool: large_z1 templates: - name: is-job release: sag-is-release compilation: cloud_properties: name: random network: is1 reuse_compilation_vms: true workers: 6 networks: - name: is1 subnets: - cloud_properties: name: random range: 10.244.0.0/28 reserved: - 10.244.0.1 static: - 10.244.0.2 resource_pools: - cloud_properties: name: random env: bosh: password: $6$4gDD3aV0rdqlrKC$2axHCxGKIObs6tAmMTqYCspcdvQXh3JJcvWOY2WGb4SrdXtnCyNaWlrf3WEqvYR2MYizEGp3kMmbpwBC6jsHt0 name: large_z1 network: is1 stemcell: name: bosh-warden-boshlite-ubuntu-trusty-go_agent version: latest update: canaries: 0 canary_watch_time: 1000-180000 max_in_flight: 50 serial: true update_watch_time: 1000-180000 Then, upload stemcell to Bosh: 10 P age
$ wget https://s3.amazonaws.com/bosh-warden-stemcells/bosh-stemcell-3147-warden-boshlite-ubuntu-trusty-go_agent.tgz $ bosh upload stemcell https://s3.amazonaws.com/bosh-warden-stemcells/bosh-stemcell-3147-warden-boshlite-ubuntutrusty-go_agent.tgz Deploy the Integration Server Bosh Release in Bosh Lite $ bosh -n deploy Acting as user 'admin' on deployment 'sag-is' on 'Bosh Lite Director' Getting deployment properties from director... Deploying --------- Director task 83 Started unknown Started unknown > Binding deployment. Done (00:00:00) Started preparing deployment Started preparing deployment > Binding releases. Done (00:00:00) Started preparing deployment > Binding existing deployment. Done (00:00:00) Started preparing deployment > Binding resource pools. Done (00:00:00) Started preparing deployment > Binding stemcells. Done (00:00:00) Started preparing deployment > Binding templates. Done (00:00:00) Started preparing deployment > Binding properties. Done (00:00:00) Started preparing deployment > Binding unallocated VMs. Done (00:00:00) Started preparing deployment > Binding instance networks. Done (00:00:00) Started preparing package compilation > Finding packages to compile. Done (00:00:01) Started compiling packages Started compiling packages > java8/a63f826e96971bb6800a6b37068588685d2d9aa0. Done (00:00:39) Started compiling packages > sag-is-package/5cc47b93c4c981159d0573988e5a67b5497c26e0. Done (00:05:58) Done compiling packages (00:06:37) Started preparing dns > Binding DNS. Done (00:00:00) Started creating bound missing vms > large_z1/0. Done (00:00:07) Started binding instance vms > IntegrationServer/0. Done (00:00:00) Started preparing configuration > Binding configuration. Done (00:00:01) Started updating job IntegrationServer > IntegrationServer/0. Done (00:01:13) Task 83 done Started 2016-04-05 03:26:38 UTC 11 P age
Finished 2016-04-05 03:34:39 UTC Duration 00:08:01 Deployed `sag-is' to `Bosh Lite Director' $ bosh deployments Acting as user 'admin' on 'Bosh Lite Director' +--------+------------------------+--------------------------------------------------+--------------+ Name Release(s) Stemcell(s) Cloud Config +--------+------------------------+--------------------------------------------------+--------------+ sag-is sag-is-release/0+dev.1 bosh-warden-boshlite-ubuntu-trusty-go_agent/3147 none +--------+------------------------+--------------------------------------------------+--------------+ Deployments total: 1 Connecting to Integration Server At this point Integration Server is running in 10.244.0.2 at port 5555. To make it visible from the host machine, add route to the 10.244.0.0 network as follows: $ sudo route -n add -net 10.244.0.0/24 192.168.50.4 Now we can add the login to the Integration Server from the browser. Conclusion Although bosh-lite was used to deploy the release, the same steps can be used to deploy the release to any underlying IaaS. The only thing that would need to change are a few sections (networks, resource_pools) in the deployment manifest, and then it would be ready to deploy in Amazon Web Services, vsphere, OpenStack, etc. 12 P age
This post explains how to install Integration Server with basic settings. However, a typical installation is much more complex and involves several more components. For example, typical installation consists of multiple Integration Servers configured as cooperating clusters requiring external database, terracotta server, messaging broker and My Webmethods Server, which would require a complex bosh release. 13 P age