Saturday, 29 September 2018

IBM Operational Decision Manager and WebSphere Liberty Profile and OpenLDAP

This is a very brief run-through without much context, apart from these two posts: -



as I wanted to get something written up to provide some insight to a colleague working in this arena.

Start with clean Ubuntu 18.04.1 LTS

Login

ssh hayd@ubuntu

Install and configure openLDAP

sudo apt-get update && sudo apt-get -y install slapd ldap-utils
sudo dpkg-reconfigure slapd


Create an LDIF to create organisation, group, user etc.

vi ~/davehay.ldif

version: 1

dn: ou=people,dc=uk,dc=ibm,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=uk,dc=ibm,dc=com
objectclass: organizationalunit
ou: groups

dn: cn=resadmins,ou=groups,dc=uk,dc=ibm,dc=com
objectclass: groupOfNames
cn: resadmins
member: cn=davehay,ou=people,dc=uk,dc=ibm,dc=com

dn: cn=davehay,ou=people,dc=uk,dc=ibm,dc=com
objectClass: inetOrgPerson
cn: davehay
sn: Hay
givenname: Dave
uid: hayd
userPassword: passw0rd
mail: david_hay@uk.ibm.com
description: Dave Hay

Feed LDAP

ldapadd -x -h ubuntu -p389 -D cn=admin,dc=uk,dc=ibm,dc=com -w Qp455w0rd -f ~/davehay.ldif

...
adding new entry "ou=people,dc=uk,dc=ibm,dc=com"

adding new entry "ou=groups,dc=uk,dc=ibm,dc=com"

adding new entry "cn=resadmins,ou=groups,dc=uk,dc=ibm,dc=com"

adding new entry "cn=davehay,ou=people,dc=uk,dc=ibm,dc=com"

...

Validate the additions

ldapsearch -x -h ubuntu -p389 -b dc=uk,dc=ibm,dc=com -D cn=admin,dc=uk,dc=ibm,dc=com -w Qp455w0rd cn=resadmins

...
# extended LDIF
#
# LDAPv3
# base <dc=uk,dc=ibm,dc=com> with scope subtree
# filter: cn=resadmins
# requesting: ALL
#

# resadmins, groups, uk.ibm.com
dn: cn=resadmins,ou=groups,dc=uk,dc=ibm,dc=com
objectClass: groupOfNames
cn: resadmins
member: cn=davehay,ou=people,dc=uk,dc=ibm,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

...

ldapsearch -x -h ubuntu -p389 -b dc=uk,dc=ibm,dc=com -D cn=admin,dc=uk,dc=ibm,dc=com -w Qp455w0rd cn=davehay

...
ldapsearch -x -h ubuntu -p389 -b dc=uk,dc=ibm,dc=com -D cn=admin,dc=uk,dc=ibm,dc=com -w Qp455w0rd cn=davehay
# extended LDIF
#
# LDAPv3
# base <dc=uk,dc=ibm,dc=com> with scope subtree
# filter: cn=davehay
# requesting: ALL
#

# davehay, people, uk.ibm.com
dn: cn=davehay,ou=people,dc=uk,dc=ibm,dc=com
objectClass: inetOrgPerson
cn: davehay
sn: Hay
givenName: Dave
uid: hayd
userPassword:: cGFzc3cwcmQ=
mail: david_hay@uk.ibm.com
description: Dave Hay

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

...

Install Java 8

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update && sudo apt-get -y install oracle-java8-installer


Update server.xml

vi ~/wlp/usr/servers/odm/server.xml

Insert: -

<featureManager>
  <feature>ldapRegistry-3.0</feature>
</featureManager>

<ldapRegistry baseDN="dc=uk,dc=ibm,dc=com"
              bindDN="cn=admin,dc=uk,dc=ibm,dc=com"
              bindPassword="Qp455w0rd"
              host="ubuntu"
              id="OpenLDAPRealm"
              ignoreCase="true"
              ldapType="Custom"
              port="389"
              realm="OpenLDAPRealm"
              recursiveSearch="true">
              <customFilters
                  userFilter="&amp;(uid=%v)(objectClass=inetOrgPerson)"
                  groupFilter="&amp;(cn=%v)(objectClass=groupOfNames)"
                  groupIdMap="*:cn"
                  userIdMap="*:uid"
                  groupMemberIdMap="groupOfNames:member"/>
</ldapRegistry>

Start Liberty

/home/hayd/wlp/bin/server start odm

Check logs

cat /home/hayd/wlp/usr/servers/odm/logs/console.log

...
Launching odm (WebSphere Application Server 17.0.0.4/wlp-1.0.19.201712061531) on Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_181-b13 (en_US)
[AUDIT   ] CWWKE0001I: The server odm has been launched.
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://ubuntu:10080/DecisionService/
[AUDIT   ] CWWKZ0001I: Application DecisionService started in 4.080 seconds.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://ubuntu:10080/res/
[AUDIT   ] CWWKZ0001I: Application res started in 8.739 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [jsp-2.3, concurrent-1.0, servlet-3.1, ssl-1.0, jndi-1.0, ldapRegistry-3.0, federatedRegistry-1.0, distributedMap-1.0, appSecurity-2.0, jdbc-4.1, el-3.0].
[AUDIT   ] CWWKF0011I: The server odm is ready to run a smarter planet.
[WARNING ] XOM repository set in database persistence mode: Apache Derby 10.10.2.0 - (1582446)

...

Access RES

https://ubuntu:10443/res/login.jsf

Send: -

...
<par:Request xmlns:par="http://www.ibm.com/rules/decisionservice/HelloWorldRuleApp/HelloWorld/param">
  <!--Optional:-->
  <par:DecisionID>string</par:DecisionID>
  <!--Optional:-->
  <par:request>Dave Hay Rules</par:request>
</par:Request>

...

Returns: -

...
<?xml version="1.0" encoding="UTF-8"?><par:Response xmlns:par="http://www.ibm.com/rules/decisionservice/HelloWorldRuleApp/HelloWorld/param">
  <par:DecisionID>string</par:DecisionID>
  <par:response>Hello Dave Hay Rules</par:response>
</par:Response>

...

Check WLP Logs

cat /home/hayd/wlp/usr/servers/odm/logs/console.log

...
[WARNING ] XOM repository set in database persistence mode: Apache Derby 10.10.2.0 - (1582446)
[WARNING ] XOM repository set in database persistence mode: Apache Derby 10.10.2.0 - (1582446)
Hello Dave Hay Rules!

...

cat /home/hayd/wlp/usr/servers/odm/logs/messages.log

...
[9/29/18 16:25:21:257 UTC] 00000046 com.ibm.rules.res.execution                                  I The wait timeout of the pool is set to 0.
[9/29/18 16:25:21:264 UTC] 00000046 com.ibm.rules.res.execution                                  I Initializes the pool CRETransformerPool.
[9/29/18 16:25:21:264 UTC] 00000046 com.ibm.rules.res.execution                                  I Pool CRETransformerPool, properties: {pool.maxSize=10, pool.waitTimeout=0}.
[9/29/18 16:25:21:264 UTC] 00000046 com.ibm.rules.res.execution                                  I The wait timeout of the pool is set to 0.
[9/29/18 16:25:53:552 UTC] 0000004a SystemOut                                                    O Hello Dave Hay Rules!
...

WebSphere Liberty and OpenLDAP - CWIML4520E: The LDAP operation could not be completed.

I've spent most of a happy and sunny Saturday here in Helsinki trying to work out why WebSphere Liberty profiles was misbehaving with regard to LDAP.

For the record, I'm running WLP 17.0.0.4 on Ubuntu 18.04.1 LTS, using OpenLDAP.

Having setup LDAP, I'd amended my server.xml to include: -

        <feature>ldapRegistry-3.0</feature>

<ldapRegistry baseDN="dc=uk,dc=ibm,dc=com"
              bindDN="cn=admin,dc=uk,dc=ibm,dc=com"
              bindPassword="Qp455w0rd"
              host="ubuntu"
              id="OpenLDAPRealm"
              ignoreCase="true"
              ldapType="Custom"
              port="389"
              realm="OpenLDAPRealm"
              recursiveSearch="true">

              <customFilters
                  id="customFilters"
                  userFilter="&amp;(uid=%v)(objectClass=inetOrgPerson)"
                  groupFilter="(&amp;(cn=%v)(objectClass=groupOfNames))"
                  userIdMap="*:uid"
                  groupMemberIdMap="groupOfNames:member"/>
    </ldapRegistry>


and bounced the WLP server, although that isn't strictly necessary.

However, when I attempted to login to my application ( IBM Operational Decision Manager 8.9.2.1 ), which I'd previously setup as per this: -

via the Rule Execution Server (RES) login page: -


I saw this: -


[ERROR   ] com.ibm.wsspi.security.wim.exception.WIMSystemException: CWIML4520E: The LDAP operation could not be completed. The LDAP naming exception javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'dc=uk,dc=ibm,dc=com'; resolved object com.sun.jndi.ldap.LdapCtx@22fb5aa1 occurred during processing. 
                                                                                                               com.ibm.wsspi.security.wim.exception.WIMException: com.ibm.wsspi.security.wim.exception.WIMSystemException: CWIML4520E: The LDAP operation could not be completed. The LDAP naming exception javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'dc=uk,dc=ibm,dc=com'; resolved object com.sun.jndi.ldap.LdapCtx@22fb5aa1 occurred during processing.
at com.ibm.ws.security.wim.ProfileManager.loginImpl(ProfileManager.java:1773)
at [internal classes]
at ilog.rules.res.console.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:76)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
at [internal classes]
at ilog.rules.res.console.jsf.LoginFilter.doFilter(LoginFilter.java:49)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
at [internal classes]
Caused by: com.ibm.wsspi.security.wim.exception.WIMSystemException: CWIML4520E: The LDAP operation could not be completed. The LDAP naming exception javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'dc=uk,dc=ibm,dc=com'; resolved object com.sun.jndi.ldap.LdapCtx@22fb5aa1 occurred during processing.
at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.search(LdapConnection.java:1645)
... 7 more
Caused by: javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'dc=uk,dc=ibm,dc=com'
at com.sun.jndi.ldap.Filter.encodeSimpleFilter(Filter.java:446)
at com.sun.jndi.ldap.Filter.encodeFilter(Filter.java:171)
at com.sun.jndi.ldap.Filter.encodeFilterString(Filter.java:74)
at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:546)
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1985)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1844)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1769)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:392)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:358)
at org.apache.aries.jndi.DelegateContext.search(DelegateContext.java:360)
... 7 more

[AUDIT   ] CWWKS1100A: Authentication did not succeed for user ID hayd. An invalid user ID or password was specified.

in the console.log : -

tail -f /home/hayd/wlp/usr/servers/odm/logs/console.log

It's taken me a fair few hours of trial n' error, plus copious amounts of (a) coffee and (b) Google to realise where I'd gone wrong.

Yes, I'm at home to Captain Typo again ……

Specifically, in the <ldapRegistry></ldapRegistry> block, I have a <customFilter> section, which includes this snippet: -

                  userFilter="&amp;(uid=%v)(objectClass=inetOrgPerson)"

Can you see where I went wrong ??

Yes, although it's valid XML, it's actually rubbish :-)

In essence, the &amp; symbol ( which is a nice way of writing the ampersand (&) character ), is supposed to be a logical AND between the (uid=%v) and (objectClass=inetOrgPerson) statements.

However, I'd made the test pointless by NOT wrapping  the entire AND operation in brackets ….

Once I changed it to: -

                  userFilter="(&amp;(uid=%v)(objectClass=inetOrgPerson))"


it magically started working :-)

Funny that …..

Now isn't this better ?


Wednesday, 26 September 2018

IBM Notes 9.0.1 and macOS 10.14 Mojave

If you're running IBM Notes 9.0.1 and have updated to macOS 10.14 Mojave, be aware that you'll also need to install the most recent hot fix for Notes: -

SPR #IFBTB4QLEJ is in MAC 64-bit 901IF16 and higher.  This fixes a Notes Client crash on the new Mojave OS.


aka: -

Notes 64-bit 9.0.1 IF16 Mac 64-bit Notes_901IF16_MAC64_Standard IBM_Notes_Hotfix_901SHF993.dmg  

This iFix is available from IBM Fix Central here: -


Having applied this today, this is what I now have: -


and, more importantly, Notes and Mojave are playing nicely ……

VMware Fusion and macOS Mojave - Gechore Accessibility Right

I wondered why I couldn't get focus and log into a VM: -



It turns out that I'd ignored the prompt from macOS to allow VMware to control the computer


Once I checked the box: -


all was well …..


Tuesday, 25 September 2018

IBM Master Data Management - Adding the Data Stewardship and Governance component (DSG)

I have a response file for that ….

Create Response File

vi installMDMDSG.resp

<agent-input>
  <server>
    <repository location='/mnt/MDM116/Product/DSC/repository.config' temporary='true'/>
  </server>
  <profile id='Data Stewardship and Governance 0.5' installLocation='/opt/ibm/MDMDSG'>
    <data key='cic.selector.arch' value='x86_64'/>
  </profile>
  <install>
    <offering profile='Data Stewardship and Governance 0.5' id='com.ibm.mdm.mdph.0.5' version='11.6.0.FP05IF000_20180326-1642' features='com.ibm.mdm.ds.ui.feature'/>
  </install>
  <preference name='com.ibm.cic.common.core.preferences.eclipseCache' value='/opt/ibm/IMShared'/>
</agent-input>


Install DSG 11.6.0.5

/opt/ibm/InstallationManager/eclipse/tools/imcl -input /mnt/ResponseFiles/installMDMDSG.resp -acceptLicense

...
Installed com.ibm.mdm.mdph.0.5_11.6.0.FP05IF000_20180326-1642 to the /opt/ibm/MDMDSG directory.
...

Nice !

Monday, 24 September 2018

Deploying IBM Operational Decision Manager 8.9.2.1 to WebSphere Liberty Profile 17.0.0.4 - Walkthrough

Following on from my earlier post: -

IBM Operational Decision Manager - ODM on Liberty

this is an updated version, using the later 8.9.2.1 fix pack of ODM Rules.

Prepare File Systems ( as root )

mkdir /opt/ibm/ODM89
mkdir /opt/ibm/Java
chown -R wasadmin:wasadmins /opt/ibm/ODM89
chown -R wasadmin:wasadmins /opt/ibm/Java


Install Java 8

/mnt/Java8/ibm-java-jre-8.0-3.12-x86_64-archive.bin -i silent -f /mnt/ResponseFiles/installer.properties 1>console.txt 2>&1

Setup Path

vi ~/.bashrc

Append: -

JAVA_HOME=/opt/ibm/Java/jre
PATH=$PATH:$JAVA_HOME/bin


source ~/.bashrc

Validate Java

java -version

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 8.0.5.6 - pxa6480sr5fp6-20171124_02(SR5 FP6))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64 Compressed References 20171122_371101 (JIT enabled, AOT enabled)
OpenJ9   - 8e3c85d
OMR      - 713f08e
IBM      - c041ee8)
JCL - 20171113_01 based on Oracle jdk8u151-b12


Install WLP

jar xvf /mnt/WLP/JARs/wlp-nd-all-17.0.0.4.jar

Fixup Executable Bits

chmod +x /home/wasadmin/wlp/bin/server
chmod +x /home/wasadmin/wlp/bin/securityUtility


Setup Path

vi ~/.bashrc

Amend: -

PATH=$PATH:$JAVA_HOME/bin:/home/wasadmin/wlp/bin

source ~/.bashrc

Validate WLP

server version

WebSphere Application Server 17.0.0.4 (1.0.19.201712061531) on IBM J9 VM, version pxa6480sr3fp12-20160919_01 (SR3 FP12) (en_GB)

See what's available to install

/opt/ibm/InstallationManager/eclipse/tools/imcl listAvailablePackages -repositories /mnt/ODM891/disk1/DecisionServerRules/repository.config,/mnt/ODM892/DS/updates/repository.config

com.ibm.websphere.odm.ds.rules.v89_8.9.1000.20171018_1824
com.ibm.websphere.odm.ds.rules.v89_8.9.0.20170123_1210
com.ibm.websphere.odm.ds.rules.v89_8.9.2001.20180723_1224


Install ODM

/opt/ibm/InstallationManager/eclipse/tools/imcl -input /mnt/ResponseFiles/installODM8921_RES.rsp -acceptLicense

Installed com.ibm.websphere.odm.ds.rules.v89_8.9.2001.20180723_1224 to the /opt/ibm/ODM89 directory.

Validate WARs

ls -al /opt/ibm/ODM89/executionserver/applicationservers/WLP855/

...
-rw-r--r-- 1 wasadmin wasadmins 52157759 Sep 24 17:45 DecisionRunner.war
-rw-r--r-- 1 wasadmin wasadmins 40631899 Sep 24 17:45 DecisionService.war
-rw-r--r-- 1 wasadmin wasadmins 31488087 Jul 20 18:23 res.war
-rw-r--r-- 1 wasadmin wasadmins 52751122 Sep 24 17:45 testing.war

...

Validate Derby

ls -al /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar

...
-rw-r--r-- 1 wasadmin wasadmins 2838580 Jul 23 11:56 /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar
...

Create WLP server

server create odm

Deploy Apps

cp /opt/ibm/ODM89/executionserver/applicationservers/WLP855/res.war /home/wasadmin/wlp/usr/servers/odm/apps/
cp /opt/ibm/ODM89/executionserver/applicationservers/WLP855/DecisionService.war /home/wasadmin/wlp/usr/servers/odm/apps/

Deploy Derby

mkdir /home/wasadmin/wlp/usr/shared/resources/derby
cp /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar /home/wasadmin/wlp/usr/shared/resources/derby


Configure server.xml

vi /home/wasadmin/wlp/usr/servers/odm/server.xml

Amend to: -

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <featureManager>
        <feature>servlet-3.1</feature>
        <feature>jsp-2.3</feature>
        <feature>jdbc-4.1</feature>
        <feature>appSecurity-2.0</feature>
        <feature>concurrent-1.0</feature>
    </featureManager>

    <httpEndpoint id="defaultHttpEndpoint"
                  host="*"
                  httpPort="10080"
                  httpsPort="10443" />

    <jdbcDriver id="DerbyJdbcDriver" libraryRef="DerbyLib"/>
    <library id="DerbyLib" filesetRef="DerbyFileset"/>
    <fileset id="DerbyFileset" dir="${shared.resource.dir}/derby" includes="derby.jar"/>
    <dataSource id="derbyEmbedded" isolationLevel="TRANSACTION_READ_COMMITTED" jndiName="jdbc/resdatasource" jdbcDriverRef="DerbyJdbcDriver">
        <properties.derby.embedded
            databaseName="${shared.config.dir}/derby/resdb"
            createDatabase="create"
            user="resdbUser"
            password="resdbUser"
        />
    </dataSource>

    <basicRegistry id="basic" realm="customRealm">
        <user name="resAdmin" password="resAdmin"/>
        <user name="resDeploy" password="resDeploy"/>
        <user name="resMonitor" password="resMonitor"/>
        <group name="resAdministrators">
                    <member name="resAdmin"/>
        </group>
        <group name="resDeployers">
                    <member name="resDeploy"/>
        </group>
        <group name="resMonitors">
                    <member name="resMonitor"/>
        </group>
    </basicRegistry>

    <application type="war" id="res" name="res" location="${server.config.dir}/apps/res.war">
           <application-bnd>
               <security-role name="resAdministrators">
                       <group name="resAdministrators"/>
               </security-role>
               <security-role name="resDeployers">
                       <group name="resDeployers"/>
               </security-role>
               <security-role name="resMonitors">
                       <group name="resMonitors"/>
               </security-role>
           </application-bnd>
    </application>

    <application type="war" id="DecisionService"
      name="DecisionService"
      location="${server.config.dir}/apps/DecisionService.war">
    </application>

    <applicationManager autoExpand="true"/>

    <featureManager>
           <feature>ssl-1.0</feature>
    </featureManager>
    <keyStore id="defaultKeyStore" password="{xor}Lz4sLChvLTs=" />

</server>


Create SSL Certificate

/home/wasadmin/wlp/bin/securityUtility createSSLCertificate --server=odm --password=passw0rd --validity=365

...
Creating keystore /home/wasadmin/wlp/usr/servers/odm/resources/security/key.jks

Created SSL certificate for server odm. The certificate is created with CN=workflow.uk.ibm.com,OU=odm,O=ibm,C=us as the SubjectDN.

Add the following lines to the server.xml to enable SSL:

    <featureManager>
        <feature>ssl-1.0</feature>
    </featureManager>
    <keyStore id="defaultKeyStore" password="{xor}Lz4sLChvLTs=" />

...

Start WLP

server start odm

...
Starting server odm.
Server odm started with process ID 117294.

...

Monitor Logs

cat /home/wasadmin/wlp/usr/servers/odm/logs/console.log

...
Launching odm (WebSphere Application Server 17.0.0.4/wlp-1.0.19.201712061531) on IBM J9 VM, version pxa6480sr3fp12-20160919_01 (SR3 FP12) (en_GB)
[AUDIT   ] CWWKE0001I: The server odm has been launched.
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKS4104A: LTPA keys created in 0.464 seconds. LTPA key file: /home/wasadmin/wlp/usr/servers/odm/resources/security/ltpa.keys
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/DecisionService/
[AUDIT   ] CWWKZ0001I: Application DecisionService started in 0.943 seconds.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/res/
[AUDIT   ] CWWKZ0001I: Application res started in 2.474 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [jsp-2.3, concurrent-1.0, servlet-3.1, ssl-1.0, jndi-1.0, distributedMap-1.0, appSecurity-2.0, jdbc-4.1, el-3.0].
[AUDIT   ] CWWKF0011I: The server odm is ready to run a smarter planet.
[WARNING ] XOM repository set in database persistence mode: Apache Derby 10.10.2.0 - (1582446)
[ERROR   ] Initialization failed
The persistence check failed. Diagnostic report:
DAO Class Name = ilog.rules.res.persistence.impl.jdbc.IlrGenericRepositoryDAO
Database Product Name = Apache Derby
Database Product Version = 10.10.2.0 - (1582446)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Product Version = 10.10.2.0 - (1582446)
Ruleset enabled view test passed = False
RuleApp properties table test passed = False
RuleApps table test passed = False
Ruleset properties table test passed = False
Ruleset resources table test passed = False
Rulesets table test passed = False
Is Transaction Supported = True
JDBC URL = jdbc:derby:/home/wasadmin/wlp/usr/shared/config//derby/resdb
Username = resdbUser.
...

cat /home/wasadmin/wlp/usr/servers/odm/logs/messages.log

...
********************************************************************************
product = WebSphere Application Server 17.0.0.4 (wlp-1.0.19.201712061531)
wlp.install.dir = /home/wasadmin/wlp/
java.home = /opt/ibm/Java/jre
java.version = 1.8.0
java.runtime = Java(TM) SE Runtime Environment (pxa6480sr3fp12-20160919_01 (SR3 FP12))
os = Linux (3.10.0-862.11.6.el7.x86_64; amd64) (en_GB)
process = 117294@workflow.uk.ibm.com
********************************************************************************
[24/09/18 17:51:42:380 BST] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager           A CWWKE0001I: The server odm has been launched.
[24/09/18 17:51:43:306 BST] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager           I CWWKE0002I: The kernel started after 1.087 seconds
[24/09/18 17:51:43:445 BST] 00000022 com.ibm.ws.kernel.feature.internal.FeatureManager            I CWWKF0007I: Feature update started.
[24/09/18 17:51:44:215 BST] 0000001b com.ibm.ws.security.ready.internal.SecurityReadyServiceImpl  I CWWKS0007I: The security service is starting...
[24/09/18 17:51:44:450 BST] 00000027 com.ibm.ws.tcpchannel.internal.TCPChannel                    I CWWKO0219I: TCP Channel defaultHttpEndpoint has been started and is now listening for requests on host *  (IPv6) port 10080.
[24/09/18 17:51:44:456 BST] 0000001b com.ibm.ws.app.manager.internal.monitor.DropinMonitor        A CWWKZ0058I: Monitoring dropins for applications.

...
[24/09/18 17:51:49:283 BST] 0000002e com.ibm.ws.webcontainer.servlet                              I SRVE0242I: [res] [/res] [FacesServlet]: Initialization successful.
...

Access RES

https://workflow.uk.ibm.com:10443/res/login.jsf

(1) Need to authenticate as resAdmin
(2) Need to run through "Installation Settings Wizard" to set up database
(3) Deploy Rule App e.g. HelloWorldRuleApp_19012016.jar
(4) Use HTDS to test Rule App via REST

<?xml version="1.0" encoding="UTF-8"?><par:Response xmlns:par="http://www.ibm.com/rules/decisionservice/HelloWorldRuleApp/HelloWorld/param">
  <par:DecisionID>string</par:DecisionID>
  <par:response>Hello David Hay</par:response>
</par:Response>


(5) Monitor logs for output

cat /home/wasadmin/wlp/usr/servers/odm/logs/console.log

...
Hello David Hay!
...

cat /home/wasadmin/wlp/usr/servers/odm/logs/messages.log

...
[24/09/18 17:56:01:858 BST] 00000065 SystemOut                                                    O Hello David Hay!
...

URL for HTDS: -

https://workflow.uk.ibm.com:10443/DecisionService/run.jsp?path=/HelloWorldRuleApp/1.0/HelloWorld&trace=false&type=WADL&kind=native

Operational Decision Manager V8.9.2 Download Document

https://www-01.ibm.com/support/docview.wss?uid=swg24044455

How to install ODM 8.9.0 in silent mode in command line ?


ODM Rules 8.9.2.1 Fixpack - via IBM Fix Central


8.9.2-WS-ODM_PTR-Multi-FP001
Operational Decision Manager - Profile Template for Decision Server for Rules V8.9.2.1

8.9.2-WS-ODM_PTDC-Multi-FP001
Operational Decision Manager - Profile Template for Decision Center V8.9.2.1

8.9.2-WS-ODM_DSR-LIN_X86-FP001
Operational Decision Manager - Decision Server for Rules V8.9.2.1 for Linux x86

8.9.2-WS-ODM_DC-LIN_X86-FP001
Operational Decision Manager - Decision Center V8.9.2.1 for Linux x86

-rw-r--r--@ 1 davidhay  staff  3778625885 24 Sep 18:27 8.9.2-WS-ODM_DC-LIN_X86-FP001.zip
-rw-r--r--@ 1 davidhay  staff  3492719362 24 Sep 18:25 8.9.2-WS-ODM_DSR-LIN_X86-FP001.zip

IBM Operational Decision Manager - ODM on Liberty

A colleague asked me for some guidance on deploying the latest version of ODM Rules, 8.9.2, to a WebSphere Liberty Profile (WLP) environment.

Whilst I didn't have the 8.9.2 version to-hand ( downloading it as I type ), I did have 8.9.1….

So here we go ….

Prepare File Systems ( as root )

mkdir /opt/ibm/ODM89
mkdir /opt/ibm/Java
chown -R wasadmin:wasadmins /opt/ibm/ODM89
chown -R wasadmin:wasadmins /opt/ibm/Java

Install Java 8

/mnt/Java8/ibm-java-jre-8.0-3.12-x86_64-archive.bin -i silent -f /mnt/ResponseFiles/installer.properties 1>console.txt 2>&1

Setup Path

vi ~/.bashrc

Append: -

JAVA_HOME=/opt/ibm/Java/jre
PATH=$PATH:$JAVA_HOME/bin


source ~/.bashrc

Validate Java

java -version

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 8.0.5.6 - pxa6480sr5fp6-20171124_02(SR5 FP6))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64 Compressed References 20171122_371101 (JIT enabled, AOT enabled)
OpenJ9   - 8e3c85d
OMR      - 713f08e
IBM      - c041ee8)
JCL - 20171113_01 based on Oracle jdk8u151-b12


Install WLP

jar xvf /mnt/WLP/JARs/wlp-nd-all-17.0.0.4.jar

Fixup Executable Bits

chmod +x /home/wasadmin/wlp/bin/server
chmod +x /home/wasadmin/wlp/bin/securityUtility


Setup Path

vi ~/.bashrc

Amend: -

PATH=$PATH:$JAVA_HOME/bin:/home/wasadmin/wlp/bin

source ~/.bashrc

Validate WLP

server version

WebSphere Application Server 17.0.0.4 (1.0.19.201712061531) on IBM J9 VM, version pxa6480sr3fp12-20160919_01 (SR3 FP12) (en_GB)

See what's available to install

/opt/ibm/InstallationManager/eclipse/tools/imcl listAvailablePackages -repositories /mnt/ODM891/disk1/DecisionServerRules/repository.config

com.ibm.websphere.odm.ds.rules.v89_8.9.1000.20171018_1824

Install ODM

/opt/ibm/InstallationManager/eclipse/tools/imcl -input /mnt/ResponseFiles/installODM891_RES.rsp -acceptLicense

Installed com.ibm.websphere.odm.ds.rules.v89_8.9.1000.20171018_1824 to the /opt/ibm/ODM89 directory.

Validate WARs

ls -al /opt/ibm/ODM89/executionserver/applicationservers/WLP855/

...
-rw-r--r-- 1 wasadmin wasadmins 51778251 Oct 11  2017 DecisionRunner.war
-rw-r--r-- 1 wasadmin wasadmins 40265601 Oct 11  2017 DecisionService.war
-rw-r--r-- 1 wasadmin wasadmins 31412040 Oct 11  2017 res.war
-rw-r--r-- 1 wasadmin wasadmins 52279630 Oct 11  2017 testing.war

...

Validate Derby

ls -al /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar

...
-rw-r--r-- 1 wasadmin wasadmins 2838580 Oct 12  2017 /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar
...

Create WLP server

server create odm

Deploy Apps

cp /opt/ibm/ODM89/executionserver/applicationservers/WLP855/res.war /home/wasadmin/wlp/usr/servers/odm/apps/
cp /opt/ibm/ODM89/executionserver/applicationservers/WLP855/DecisionService.war /home/wasadmin/wlp/usr/servers/odm/apps/

Deploy Derby

mkdir /home/wasadmin/wlp/usr/shared/resources/derby
cp /opt/ibm/ODM89/shared/tools/derby/lib/derby.jar /home/wasadmin/wlp/usr/shared/resources/derby


Configure server.xml

vi /home/wasadmin/wlp/usr/servers/odm/server.xml

Amend to: -

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <featureManager>
        <feature>servlet-3.1</feature>
        <feature>jsp-2.3</feature>
        <feature>jdbc-4.1</feature>
        <feature>appSecurity-2.0</feature>
        <feature>concurrent-1.0</feature>
    </featureManager>

    <httpEndpoint id="defaultHttpEndpoint"
                  host="*"
                  httpPort="10080"
                  httpsPort="10443" />

    <jdbcDriver id="DerbyJdbcDriver" libraryRef="DerbyLib"/>
    <library id="DerbyLib" filesetRef="DerbyFileset"/>
    <fileset id="DerbyFileset" dir="${shared.resource.dir}/derby" includes="derby.jar"/>
    <dataSource id="derbyEmbedded" isolationLevel="TRANSACTION_READ_COMMITTED" jndiName="jdbc/resdatasource" jdbcDriverRef="DerbyJdbcDriver">
        <properties.derby.embedded
            databaseName="${shared.config.dir}/derby/resdb"
            createDatabase="create"
            user="resdbUser"
            password="resdbUser"
        />
    </dataSource>

    <basicRegistry id="basic" realm="customRealm">
        <user name="resAdmin" password="resAdmin"/>
        <user name="resDeploy" password="resDeploy"/>
        <user name="resMonitor" password="resMonitor"/>
        <group name="resAdministrators">
                    <member name="resAdmin"/>
        </group>
        <group name="resDeployers">
                    <member name="resDeploy"/>
        </group>
        <group name="resMonitors">
                    <member name="resMonitor"/>
        </group>
    </basicRegistry>

    <application type="war" id="res" name="res" location="${server.config.dir}/apps/res.war">
           <application-bnd>
               <security-role name="resAdministrators">
                       <group name="resAdministrators"/>
               </security-role>
               <security-role name="resDeployers">
                       <group name="resDeployers"/>
               </security-role>
               <security-role name="resMonitors">
                       <group name="resMonitors"/>
               </security-role>
           </application-bnd>
    </application>

    <application type="war" id="DecisionService"
      name="DecisionService"
      location="${server.config.dir}/apps/DecisionService.war">
    </application>

    <applicationManager autoExpand="true"/>

    <featureManager>
           <feature>ssl-1.0</feature>
    </featureManager>
    <keyStore id="defaultKeyStore" password="{xor}Lz4sLChvLTs=" />

</server>

Create SSL Certificate

/home/wasadmin/wlp/bin/securityUtility createSSLCertificate --server=odm --password=passw0rd --validity=365

...
Creating keystore /home/wasadmin/wlp/usr/servers/odm/resources/security/key.jks

Created SSL certificate for server odm. The certificate is created with CN=workflow.uk.ibm.com,OU=odm,O=ibm,C=us as the SubjectDN.

Add the following lines to the server.xml to enable SSL:

    <featureManager>
        <feature>ssl-1.0</feature>
    </featureManager>
    <keyStore id="defaultKeyStore" password="{xor}Lz4sLChvLTs=" />

...

Start WLP

server start odm

...
Starting server odm.
Server odm started with process ID 78434.

...

Monitor Logs

cat /home/wasadmin/wlp/usr/servers/odm/logs/console.log

...
Launching odm (WebSphere Application Server 17.0.0.4/wlp-1.0.19.201712061531) on IBM J9 VM, version pxa6480sr3fp12-20160919_01 (SR3 FP12) (en_GB)
[AUDIT   ] CWWKE0001I: The server odm has been launched.
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/DecisionService/
[AUDIT   ] CWWKZ0001I: Application DecisionService started in 1.179 seconds.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/res/
[AUDIT   ] CWWKZ0001I: Application res started in 3.248 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [jsp-2.3, concurrent-1.0, servlet-3.1, ssl-1.0, jndi-1.0, distributedMap-1.0, appSecurity-2.0, jdbc-4.1, el-3.0].
[AUDIT   ] CWWKF0011I: The server odm is ready to run a smarter planet.
[ERROR   ] Initialization failed
The persistence check failed. Diagnostic report:
DAO Class Name = ilog.rules.res.persistence.impl.jdbc.IlrGenericRepositoryDAO
Database Product Name = Apache Derby
Database Product Version = 10.10.2.0 - (1582446)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Product Version = 10.10.2.0 - (1582446)
Ruleset enabled view test passed = False
RuleApp properties table test passed = False
RuleApps table test passed = False
Ruleset properties table test passed = False
Ruleset resources table test passed = False
Rulesets table test passed = False
Is Transaction Supported = True
JDBC URL = jdbc:derby:/home/wasadmin/wlp/usr/shared/config//derby/resdb
Username = resdbUser.

...

cat /home/wasadmin/wlp/usr/servers/odm/logs/console.log

...
Launching odm (WebSphere Application Server 17.0.0.4/wlp-1.0.19.201712061531) on IBM J9 VM, version pxa6480sr3fp12-20160919_01 (SR3 FP12) (en_GB)
[AUDIT   ] CWWKE0001I: The server odm has been launched.
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/DecisionService/
[AUDIT   ] CWWKZ0001I: Application DecisionService started in 1.179 seconds.
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/res/
[AUDIT   ] CWWKZ0001I: Application res started in 3.248 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [jsp-2.3, concurrent-1.0, servlet-3.1, ssl-1.0, jndi-1.0, distributedMap-1.0, appSecurity-2.0, jdbc-4.1, el-3.0].
[AUDIT   ] CWWKF0011I: The server odm is ready to run a smarter planet.
[ERROR   ] Initialization failed
The persistence check failed. Diagnostic report:
DAO Class Name = ilog.rules.res.persistence.impl.jdbc.IlrGenericRepositoryDAO
Database Product Name = Apache Derby
Database Product Version = 10.10.2.0 - (1582446)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Product Version = 10.10.2.0 - (1582446)
Ruleset enabled view test passed = False
RuleApp properties table test passed = False
RuleApps table test passed = False
Ruleset properties table test passed = False
Ruleset resources table test passed = False
Rulesets table test passed = False
Is Transaction Supported = True
JDBC URL = jdbc:derby:/home/wasadmin/wlp/usr/shared/config//derby/resdb
Username = resdbUser.
[wasadmin@workflow ~]$ cat /home/wasadmin/wlp/usr/servers/odm/logs/messages.log
********************************************************************************
product = WebSphere Application Server 17.0.0.4 (wlp-1.0.19.201712061531)
wlp.install.dir = /home/wasadmin/wlp/
java.home = /opt/ibm/Java/jre
java.version = 1.8.0
java.runtime = Java(TM) SE Runtime Environment (pxa6480sr3fp12-20160919_01 (SR3 FP12))
os = Linux (3.10.0-862.11.6.el7.x86_64; amd64) (en_GB)
process = 78712@workflow.uk.ibm.com
********************************************************************************
[23/09/18 09:35:58:406 BST] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager           A CWWKE0001I: The server odm has been launched.
[23/09/18 09:35:59:255 BST] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager           I CWWKE0002I: The kernel started after 1.007 seconds
[23/09/18 09:35:59:295 BST] 00000023 com.ibm.ws.kernel.feature.internal.FeatureManager            I CWWKF0007I: Feature update started.
[23/09/18 09:35:59:710 BST] 0000001a com.ibm.ws.security.ready.internal.SecurityReadyServiceImpl  I CWWKS0007I: The security service is starting...
[23/09/18 09:35:59:973 BST] 00000027 com.ibm.ws.tcpchannel.internal.TCPChannel                    I CWWKO0219I: TCP Channel defaultHttpEndpoint has been started and is now listening for requests on host *  (IPv6) port 10080.
[23/09/18 09:35:59:979 BST] 0000001a com.ibm.ws.app.manager.internal.monitor.DropinMonitor        A CWWKZ0058I: Monitoring dropins for applications.
[23/09/18 09:36:00:196 BST] 0000002f com.ibm.ws.tcpchannel.internal.TCPChannel                    I CWWKO0219I: TCP Channel defaultHttpEndpoint-ssl has been started and is now listening for requests on host *  (IPv6) port 10443.
[23/09/18 09:36:00:214 BST] 0000001a ibm.ws.security.authentication.internal.jaas.JAASServiceImpl I CWWKS1123I: The collective authentication plugin with class name NullCollectiveAuthenticationPlugin has been activated.
[23/09/18 09:36:00:451 BST] 0000002d com.ibm.ws.security.ready.internal.SecurityReadyServiceImpl  I CWWKS0008I: The security service is ready.
[23/09/18 09:36:00:454 BST] 0000002d com.ibm.ws.security.token.ltpa.internal.LTPAKeyCreateTask    I CWWKS4105I: LTPA configuration is ready after 0.278 seconds.
[23/09/18 09:36:00:535 BST] 0000001a com.ibm.ws.cache.ServerCache                                 I DYNA1001I: WebSphere Dynamic Cache instance named baseCache initialized successfully.
[23/09/18 09:36:00:536 BST] 0000001a com.ibm.ws.cache.ServerCache                                 I DYNA1071I: The cache provider default is being used.
[23/09/18 09:36:00:536 BST] 0000001a com.ibm.ws.cache.CacheServiceImpl                            I DYNA1056I: Dynamic Cache (object cache) initialized successfully.
[23/09/18 09:36:00:615 BST] 0000002b com.ibm.ws.app.manager.AppMessageHelper                      I CWWKZ0018I: Starting application DecisionService.
[23/09/18 09:36:00:615 BST] 0000002c com.ibm.ws.app.manager.AppMessageHelper                      I CWWKZ0018I: Starting application res.
[23/09/18 09:36:01:770 BST] 0000002b com.ibm.ws.session.WASSessionCore                            I SESN8501I: The session manager did not find a persistent storage location; HttpSession objects will be stored in the local application server's memory.
[23/09/18 09:36:01:784 BST] 0000002b com.ibm.ws.webcontainer.osgi.webapp.WebGroup                 I SRVE0169I: Loading Web Module: DecisionService.
[23/09/18 09:36:01:787 BST] 0000002b com.ibm.ws.webcontainer                                      I SRVE0250I: Web Module DecisionService has been bound to default_host.
[23/09/18 09:36:01:788 BST] 0000002b com.ibm.ws.http.internal.VirtualHostImpl                     A CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/DecisionService/
[23/09/18 09:36:01:794 BST] 0000002b com.ibm.ws.app.manager.AppMessageHelper                      A CWWKZ0001I: Application DecisionService started in 1.179 seconds.
[23/09/18 09:36:02:003 BST] 00000025 com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator          I SRVE9103I: A configuration file for a web server plugin was automatically generated for this server at /home/wasadmin/wlp/usr/servers/odm/logs/state/plugin-cfg.xml.
[23/09/18 09:36:02:006 BST] 0000002f com.ibm.ws.session.WASSessionCore                            I SESN0176I: A new session context will be created for application key default_host/DecisionService
[23/09/18 09:36:02:035 BST] 0000002f com.ibm.ws.util                                              I SESN0172I: The session manager is using the Java default SecureRandom implementation for session ID generation.
[23/09/18 09:36:02:287 BST] 0000002f com.ibm.ws.cache.CacheServiceImpl                            I DYNA1056I: Dynamic Cache (object cache) initialized successfully.
[23/09/18 09:36:02:356 BST] 0000002f com.ibm.rules.res.htds                                       I The operating system is Linux amd64 3.10.0-862.11.6.el7.x86_64.
[23/09/18 09:36:02:357 BST] 0000002f com.ibm.rules.res.htds                                       I The JVM is IBM Corporation IBM J9 VM 2.8.
[23/09/18 09:36:02:357 BST] 0000002f com.ibm.rules.res.htds                                       I The class path is /home/wasadmin/wlp/bin/tools/ws-server.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar.
[23/09/18 09:36:02:357 BST] 0000002f com.ibm.rules.res.htds                                       I Logging started. Decision service version: Decision Server 8.9.1.0 2017-10-11 14:45:02
[23/09/18 09:36:02:633 BST] 0000002f com.ibm.rules.res.execution                                  I Logging started Decision Server XU - 8.9.1.0 - 2017-10-11 14:32:25.
[23/09/18 09:36:02:634 BST] 0000002f com.ibm.rules.res.execution                                  I The JDK logging level is set to: INFO.
[23/09/18 09:36:02:634 BST] 0000002f com.ibm.rules.res.execution                                  I The operating system is Linux amd64 3.10.0-862.11.6.el7.x86_64.
[23/09/18 09:36:02:634 BST] 0000002f com.ibm.rules.res.execution                                  I The JVM is IBM Corporation IBM J9 VM 2.8.
[23/09/18 09:36:02:635 BST] 0000002f com.ibm.rules.res.execution                                  I The class path is /home/wasadmin/wlp/bin/tools/ws-server.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar.
[23/09/18 09:36:02:733 BST] 0000002f com.ibm.rules.res.execution                                  I Found user settings in file : ra.xml.
[23/09/18 09:36:02:733 BST] 0000002f com.ibm.rules.res.execution                                  I Loading execution unit (XU) settings from the file descriptor.
[23/09/18 09:36:02:778 BST] 0000002f com.ibm.rules.res.execution                                  I The XU logger uses JDK logging: true.
[23/09/18 09:36:02:779 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property rulesetCacheProperties to ruleset.cache.maintenance.period=300.
[23/09/18 09:36:02:779 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property persistenceType to datasource.
[23/09/18 09:36:02:780 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property caCacheProps to {}.
[23/09/18 09:36:02:780 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property defaultConnectionManagerProperties to {}.
[23/09/18 09:36:02:781 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property asynchronousRulesetParsing to true.
[23/09/18 09:36:02:781 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property rulesetUsageMonitorEnabled to true.
[23/09/18 09:36:02:785 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property profilingEnabled to true.
[23/09/18 09:36:02:788 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property persistenceProperties to {XOM_PERSISTENCE_JNDI_NAME=jdbc/resdatasource, XOM_PERSISTENCE_TYPE=datasource, JNDI_NAME=jdbc/resdatasource}.
[23/09/18 09:36:02:789 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property traceLevel to FINE.
[23/09/18 09:36:02:790 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property systemOutLoggingEnabled to false.
[23/09/18 09:36:02:790 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property memoryProfilerIncludedPackageNames to com.ibm.rules.,java.,ilog.,com.ibm.rules.org.objectweb.asm.,org.apache.bcel.,javax.xml.parsers.,javax.xml.namespace.,javax.xml.transform..
[23/09/18 09:36:02:791 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property traceAutoFlush to false.
[23/09/18 09:36:02:792 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property rulesetFactoryProperties to .
[23/09/18 09:36:02:794 BST] 0000002f com.ibm.rules.res.execution                                  I Sets the XU configuration property plugins to {protocol=jmx,xuName=xuHTDS,pluginClass=Management},{pluginClass=HTDS}.
[23/09/18 09:36:02:795 BST] 0000002f com.ibm.rules.res.execution                                  I Creates the XU plug-in with properties {protocol=jmx, xuName=xuHTDS, pluginClass=Management}.
[23/09/18 09:36:02:815 BST] 0000002f com.ibm.rules.res.execution                                  I Creates the XU plug-in with properties {pluginClass=HTDS}.
[23/09/18 09:36:02:826 BST] 0000002f com.ibm.rules.res.execution                                  I Starts the XU plug-in com.ibm.rules.res.xu.management.XUManagementPlugin@271bf2ea.
[23/09/18 09:36:02:829 BST] 0000002f com.ibm.rules.res.execution.xu.plugin.management             I GBRXU4002I: Starts the MBean plug-in.
[23/09/18 09:36:02:879 BST] 0000002f com.ibm.rules.res.execution                                  I Starts the XU plug-in com.ibm.rules.htds.plugin.cci.internal.DLGeneratorPlugin@abf668bc.
[23/09/18 09:36:02:942 BST] 0000002f com.ibm.ws.jca.cm.ConnectorService                           I J2CA8050I: An authentication alias should be used instead of defining a user name and password on dataSource[derbyEmbedded].
[23/09/18 09:36:03:136 BST] 0000002f com.ibm.ws.recoverylog.spi.RecoveryDirectorImpl              I CWRLS0010I: Performing recovery processing for local WebSphere server (odm).
[23/09/18 09:36:03:182 BST] 00000034 com.ibm.ws.recoverylog.spi.LogHandle                         I CWRLS0007I: No existing recovery log files found in /home/wasadmin/wlp/usr/servers/odm/tranlog//tranlog. Cold starting the recovery log.
[23/09/18 09:36:03:183 BST] 00000034 com.ibm.ws.recoverylog.spi.LogFileHandle                     I CWRLS0006I: Creating new recovery log file /home/wasadmin/wlp/usr/servers/odm/tranlog//tranlog/log1.
[23/09/18 09:36:03:188 BST] 00000034 com.ibm.ws.recoverylog.spi.LogFileHandle                     I CWRLS0006I: Creating new recovery log file /home/wasadmin/wlp/usr/servers/odm/tranlog//tranlog/log2.
[23/09/18 09:36:03:333 BST] 00000034 com.ibm.ws.recoverylog.spi.LogHandle                         I CWRLS0007I: No existing recovery log files found in /home/wasadmin/wlp/usr/servers/odm/tranlog//partnerlog. Cold starting the recovery log.
[23/09/18 09:36:03:333 BST] 00000034 com.ibm.ws.recoverylog.spi.LogFileHandle                     I CWRLS0006I: Creating new recovery log file /home/wasadmin/wlp/usr/servers/odm/tranlog//partnerlog/log1.
[23/09/18 09:36:03:336 BST] 00000034 com.ibm.ws.recoverylog.spi.LogFileHandle                     I CWRLS0006I: Creating new recovery log file /home/wasadmin/wlp/usr/servers/odm/tranlog//partnerlog/log2.
[23/09/18 09:36:03:424 BST] 00000034 com.ibm.tx.jta.impl.RecoveryManager                          I WTRN0135I: Transaction service recovering no transactions.
[23/09/18 09:36:03:426 BST] 0000002f com.ibm.ws.recoverylog.spi.RecoveryDirectorImpl              I CWRLS0012I: All persistent services have been directed to perform recovery processing for this WebSphere server (odm).
[23/09/18 09:36:03:863 BST] 0000002c com.ibm.ws.webcontainer.osgi.webapp.WebGroup                 I SRVE0169I: Loading Web Module: Rule Execution Server Console.
[23/09/18 09:36:03:863 BST] 0000002c com.ibm.ws.webcontainer                                      I SRVE0250I: Web Module Rule Execution Server Console has been bound to default_host.
[23/09/18 09:36:03:863 BST] 0000002c com.ibm.ws.http.internal.VirtualHostImpl                     A CWWKT0016I: Web application available (default_host): http://workflow.uk.ibm.com:10080/res/
[23/09/18 09:36:03:863 BST] 0000002c com.ibm.ws.app.manager.AppMessageHelper                      A CWWKZ0001I: Application res started in 3.248 seconds.
[23/09/18 09:36:03:867 BST] 00000023 com.ibm.ws.kernel.feature.internal.FeatureManager            A CWWKF0012I: The server installed the following features: [jsp-2.3, concurrent-1.0, servlet-3.1, ssl-1.0, jndi-1.0, distributedMap-1.0, appSecurity-2.0, jdbc-4.1, el-3.0].
[23/09/18 09:36:03:868 BST] 00000023 com.ibm.ws.kernel.feature.internal.FeatureManager            I CWWKF0008I: Feature update completed in 4.612 seconds.
[23/09/18 09:36:03:868 BST] 00000023 com.ibm.ws.kernel.feature.internal.FeatureManager            A CWWKF0011I: The server odm is ready to run a smarter planet.
[23/09/18 09:36:03:880 BST] 00000027 com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator          I SRVE9103I: A configuration file for a web server plugin was automatically generated for this server at /home/wasadmin/wlp/usr/servers/odm/logs/state/plugin-cfg.xml.
[23/09/18 09:36:04:509 BST] 0000002e com.ibm.ws.session.WASSessionCore                            I SESN0176I: A new session context will be created for application key default_host/res
[23/09/18 09:36:04:510 BST] 0000002e com.ibm.ws.util                                              I SESN0172I: The session manager is using the Java default SecureRandom implementation for session ID generation.
[23/09/18 09:36:04:566 BST] 0000002f com.ibm.ws.rsadapter.impl.DatabaseHelper                     I DSRA8203I: Database product name : Apache Derby
[23/09/18 09:36:04:567 BST] 0000002f com.ibm.ws.rsadapter.impl.DatabaseHelper                     I DSRA8204I: Database product version : 10.10.2.0 - (1582446)
[23/09/18 09:36:04:567 BST] 0000002f com.ibm.ws.rsadapter.impl.DatabaseHelper                     I DSRA8205I: JDBC driver name  : Apache Derby Embedded JDBC Driver
[23/09/18 09:36:04:567 BST] 0000002f com.ibm.ws.rsadapter.impl.DatabaseHelper                     I DSRA8206I: JDBC driver version  : 10.10.2.0 - (1582446)
[23/09/18 09:36:05:289 BST] 0000002e com.ibm.rules.res.console                                    I The operating system is Linux amd64 3.10.0-862.11.6.el7.x86_64.
[23/09/18 09:36:05:290 BST] 0000002e com.ibm.rules.res.console                                    I The JVM is IBM Corporation IBM J9 VM 2.8.
[23/09/18 09:36:05:290 BST] 0000002e com.ibm.rules.res.console                                    I The class path is /home/wasadmin/wlp/bin/tools/ws-server.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar:/home/wasadmin/wlp/bin/tools/ws-javaagent.jar.
[23/09/18 09:36:05:290 BST] 0000002e com.ibm.rules.res.console                                    I Logging started. Rule Execution Server console version: Decision Server
[23/09/18 09:36:05:290 BST] 0000002e com.ibm.rules.res.console                                    I Properties used for initialization:
allowIframe = true
autoCreateSchema = false
calendarType = gregorian
defaultDWConfiguration = factoryClassname=ilog.rules.res.persistence.impl.jdbc.IlrDatasourceTraceDAOFactory;JNDI_NAME=jdbc/resdatasource
distributed.mode = true
filePersistenceDirectory = res_data
fileXomPersistenceDirectory = res_xom
ilog.rules.res.HELP_CONTEXT = http://www.ibm.com/support/knowledgecenter/SSQP76_8.9.1
ilog.rules.res.HELP_INDEX = http://www.ibm.com/support/knowledgecenter/SSQP76_8.9.1/com.ibm.odm.dserver.rules.res.console/cshelp_resconsole.xml
ilog.rules.res.HELP_TOPIC = com.ibm.odm.dserver.rules.res.console
ilog.rules.res.HTDS_CONTEXT = /DecisionService
ilog.rules.res.XOM_IN_RULEAPP_ARCHIVE = false
ilog.rules.res.trace.DECISIONWAREHOUSE_CONFIGURATIONS = defaultDWConfiguration
javax.faces.STATE_SAVING_METHOD = server
management.protocol = jmx
management.tcpip.port = 1883
management.tcpip.timeout = 20
onDocker = false
org.apache.myfaces.ADD_RESOURCE_CLASS = org.apache.myfaces.renderkit.html.util.DefaultAddResource
org.apache.myfaces.ALLOW_JAVASCRIPT = true
org.apache.myfaces.AUTO_SCROLL = true
org.apache.myfaces.CHECK_EXTENSIONS_FILTER = false
org.apache.myfaces.COMPRESS_STATE_IN_SESSION = false
org.apache.myfaces.DETECT_JAVASCRIPT = false
org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION = 10
org.apache.myfaces.PRETTY_HTML = true
org.apache.myfaces.READONLY_AS_DISABLED_FOR_SELECTS = true
org.apache.myfaces.RESOURCE_VIRTUAL_PATH = /faces/myFacesExtensionResource
org.apache.myfaces.SERIALIZE_STATE_IN_SESSION = false
org.apache.myfaces.VALIDATE = false
org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL = true
persistenceType = datasource
resconsole-logging-config-filename = resconsole-logging.properties
server-info-max-length = 100
xomPersistenceType = datasource
[23/09/18 09:36:05:365 BST] 0000002e com.ibm.rules.res.persistence                                I XOM repository set in database persistence mode: Apache Derby 10.10.2.0 - (1582446)
[23/09/18 09:36:05:390 BST] 0000002e com.ibm.rules.res.console                                    I Reading Decision Warehouse configurations from web.xml
[23/09/18 09:36:05:399 BST] 0000002e com.ibm.rules.res.console                                    I The Decision Warehouse configuration defaultDWConfiguration was loaded.
[23/09/18 09:36:05:403 BST] 0000002e com.ibm.rules.res.console                                    I The trace DAO factory was initialized: ilog.rules.res.persistence.impl.jdbc.IlrDatasourceTraceDAOFactory
[23/09/18 09:36:05:765 BST] 0000002e com.ibm.rules.res.console                                    E Initialization failed
ilog.rules.res.console.IlrConsoleException: The persistence check failed. Diagnostic report:
DAO Class Name = ilog.rules.res.persistence.impl.jdbc.IlrGenericRepositoryDAO
Database Product Name = Apache Derby
Database Product Version = 10.10.2.0 - (1582446)
Driver Name = Apache Derby Embedded JDBC Driver
Driver Product Version = 10.10.2.0 - (1582446)
Ruleset enabled view test passed = False
RuleApp properties table test passed = False
RuleApps table test passed = False
Ruleset properties table test passed = False
Ruleset resources table test passed = False
Rulesets table test passed = False
Is Transaction Supported = True
JDBC URL = jdbc:derby:/home/wasadmin/wlp/usr/shared/config//derby/resdb
Username = resdbUser.
at ilog.rules.res.console.util.IlrModelManager.init(IlrModelManager.java:187)
at ilog.rules.res.console.util.IlrConsoleInitializer.consoleInitialized(IlrConsoleInitializer.java:126)
at ilog.rules.res.console.util.IlrConsoleInitializer.consoleInitialized(IlrConsoleInitializer.java:109)
at ilog.rules.res.console.IlrServletContextListener.contextInitialized(IlrServletContextListener.java:26)
at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:2384)
at com.ibm.ws.webcontainer31.osgi.webapp.WebApp31.notifyServletContextCreated(WebApp31.java:514)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1012)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6574)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:467)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApplication(DynamicVirtualHost.java:462)
at com.ibm.ws.webcontainer.osgi.WebContainer.startWebApplication(WebContainer.java:1132)
at com.ibm.ws.webcontainer.osgi.WebContainer.access$000(WebContainer.java:108)
at com.ibm.ws.webcontainer.osgi.WebContainer$3.run(WebContainer.java:944)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522)
at java.util.concurrent.FutureTask.run(FutureTask.java:277)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.lang.Thread.run(Thread.java:785)

[23/09/18 09:36:05:818 BST] 0000002e com.ibm.ws.webcontainer.servlet                              I SRVE0242I: [res] [/res] [FacesServlet]: Initialization successful.
...

Access RES

https://workflow.uk.ibm.com:10443/res/login.jsf

(1) Need to authenticate as resAdmin
(2) Need to run through "Installation Settings Wizard" to set up database
(3) Deploy Rule App e.g. HelloWorldRuleApp_19012016.jar
(4) Use HTDS to test Rule App via REST
(5) Monitor logs for output

cat /home/wasadmin/wlp/usr/servers/odm/logs/console.log

...
Hello Dave Hay!
...

cat /home/wasadmin/wlp/usr/servers/odm/logs/messages.log

...
[23/09/18 09:40:02:220 BST] 00000051 SystemOut                                                    O Hello Dave Hay!
...

URL for HTDS: -

https://workflow.uk.ibm.com:10443/DecisionService/run.jsp?path=/HelloWorldRuleApp/1.0/HelloWorld&trace=false&type=WADL&kind=native

I'll update this once I get my hands on 8.9.2 ……

Jenkins and the Case of the Missing Body

I was repeatedly seeing this: - java.lang.IllegalStateException: There is no body to invoke with a Jenkins Pipeline that I was executing...