Monday, 22 January 2018

IBM BPM Upgrade - String to Boolean - What's going wrong ?

I've been seeing this repeatedly over the past few weeks, as I test various combinations of upgrades, from IBM BPM 8.5.5 to 8.5.7 or 8.6: -


with the corresponding exception in SystemOut.log: -

[04/01/18 20:27:18:401 GMT] 000001a6 BPDInstanceDA E   CWLLG0323E: An exception occurred in saveSearchableValues, reason:java.lang.ClassCastException: java.lang.String incompatible with java.lang.Boolean.
                                 java.lang.ClassCastException: java.lang.String incompatible with java.lang.Boolean

In brief, this occurs when I do the following: -
  • Install IBM BPM 8.5.5
  • Start the Deployment Environment
  • Log into Process Portal
  • Start a new instance of the sample Standard HR Open New Position Process Application, and complete ONE task
  • Shut down BPM 8.5.5
  • Upgrade to 8.5.7 or 8.6 ( including the mandatory DBUpgrade task )
  • Start the Deployment Environment
  • Log into Process Portal
  • Attempt to resume/complete the second task of the Standard HR Open New Position process
For the record, this occurs whether I perform an in-place upgrade ( where one installs the 8.5.7 or 8.6 Delta Fixpack on top of 8.5.5 ) or a side-by-side upgrade ( where one uses an export of the original 8.5.5 Deployment Environment configuration and a cloned copy of the BPM databases to build a new 8.5.7 or 8.6 target environment ).

I checked the source 8.5.5 environment, and noted that the original Business Object parameter was a Boolean: -


but that it magically became a String in 8.6: -


After much faffing about, and thanks to the support of an awesome world-wide technical team, I realised the error of my ways.

The problem occurs because I'm running my tests using a Process Center ( development/deployment environment ) rather than a Process Server ( run-time environment ).

In brief, this occurs because the original Process Application ( PA ) on the source 8.5.5 Process Center was based upon the so-called Tip, which is the first "cut" of the application, rather than a snapshot ( which is taken before an application is deployed into a target Process Server, whether for test or production ).

When I upgraded my Process Center from 8.5.5 to 8.5.7 or 8.6, the Tip has changed ( because IBM created a new version of the Standard HR Open New Position Process Application ), and we now face the issue where the Business Object in the original Tip was using one data type ( String ) whereas the Business Object in the new Tip is using a different data type ( Boolean ).

BPM can't handle this - we don't have a snapshot, we only have the Tip, and yet the Business Objects are vastly different.

That's why the exception occurs.

When I redid my tests, upgrading an 8.5.5 Process Server to 8.6, with the same situation as before i.e. a running instance of the Standard HR Open New Position process, with an outstanding task, all works as one would expect.

So that's all good then …..

No comments:

Note to self - use kubectl to query images in a pod or deployment

In both cases, we use JSON ... For a deployment, we can do this: - kubectl get deployment foobar --namespace snafu --output jsonpath="{...