IBM Support

How to update in-flight work items associated with Case Manager tasks when a web service URL changes

Technical Blog Post


Abstract

How to update in-flight work items associated with Case Manager tasks when a web service URL changes

Body

In IBM Case Manager you can create a task via Process Designer that invokes either a local or an external web service. Over time, there could be a situation where the partnerlink endpoint URL specified needs to be changed. For example, the partner link URL changes from http to https, the port number changes, or the target web service host name changes due to a server decommission.

Changing the endpoint URL will only affect new tasks that are launched after the workflow map has been modified. Work items that were created before the workflow map change will still reference the old web service URL. What is the best way to address the existing in-flight work items?

The best practice would be to complete processing all in-flight workflows before changing the endpoint URL. If this option cannot be done, the alternative is to update the F_EndPointRef URL field on these affected work items. However, this method requires that the affected work items must be either in the Conductor queue or in the WSRequest(0) queue. Once the affected work items are in one of these two queues, you can use Process Engine Process Administrator to query the affected work items in edit mode. The F_EndPointRef URL field will be called F_EndPointRef<partnerlink name>.  The F_EndPointRef URL field is not visible in any other queues.

The value you want to paste in is XML, and should be like the following example :

<wsa:EndPointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"><wsa:Address&gt;http://hostname/TestWS/TestWS.asmx</wsa:Address></wsa:EndPointReference>

The URL in the <wsa:Address> tag with blue text above is the URL you will want to change to whatever a new web service URL you need to change to.

Remember that, if your workflow uses the default out of the box (OOTB) Malfunction map, you must also set the F_WFReminder field to 1 so that the failing step ( presumably a Web Service invoke step ) will be re-executed on returning from the Conductor queue. If your workflow does not use the default Malfunction map, you may need to take additional steps, whatever is necessary in your environment, to ensure that the faulting step is re-executed. Save the changes and dispatch/complete the work item from the Conductor queue.

Another approach is to stop the WSRequest(0) component adaptor via the Component Manager Process Task Manager, and let the work items collect in the WSRequest(0) queue. Then, change the web service URL endpoint values for the work items there before restarting the WSRequest(0) component adaptor. If you are making the change in the WSRequest(0) queue, you don't have to set F_WFReminder value to 1 in that case, and you don't have to complete the work items. You have to just restart the WSRequest(0) component adaptor via the Process Task Manager to start processing the work items in the WSRequest(0) queue .

In some situations, for example when changing from http to https, the WSDL URL also need to be changed. If it is necessary, the WSDL URL can be specified in the EndPointReference by adding a <WSDLEndPoint> element to the XML. See the following example :

<wsa:EndPointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"&gt;<WSDLEndPoint>http://hostname/TestWS/TestWS.asmx?wsdl</WSDLEndPoint><wsa:Address>http://hostname/TestWS/TestWS.asmx</wsa:Address></wsa:EndPointReference…;

A clue that the WSDLEndPoint needs to be added is that if the wsinvoke.log has an error stack that shows an exception trying to retrieve a wsdl like the following :

EXCEPTION=javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at filenet.ws.utils.WSWSDLRetriever.retrieveWSDL(WSWSDLRetriever.java:171)
at filenet.ws.utils.WSWSDLRetriever.retrieve(WSWSDLRetriever.java:79)
at filenet.ws.api.WSDefinition.init(WSDefinition.java:384)
at filenet.ws.api.wsrr.WSWSRRDefinition.<init>(WSWSRRDefinition.java:104)
at filenet.ws.api.wsrr.WSWSRRDefinition.getWSDefinition(WSWSRRDefinition.java:110)
at filenet.ws.api.WSDefinition.getWSDefinition(WSDefinition.java:2224)
at filenet.vw.integrator.adaptors.webservices.WSRequestOperation.getWSDLDefinition(WSRequestOperation.java:461)
at filenet.vw.integrator.adaptors.webservices.WSRequestOperation.getWSDLDefinition(WSRequestOperation.java:361)
at filenet.vw.integrator.adaptors.webservices.WSRequestOperation.getWSDLDefinition(WSRequestOperation.java:261)
at filenet.vw.integrator.adaptors.webservices.WSInvokeOperation.invoke(WSInvokeOperation.java:423)
at filenet.vw.integrator.adaptors.webservices.VWWebServicesAdaptorEx.run(VWWebServicesAdaptorEx.java:565)

Note that the wsinvoke.log will show "EndPoint", which is the WSDL URL that is being used, and it will also show the "Initial EndPointRef", which is the endpoint being used for the invoke. If you edit the endpoint reference using the procedure described here, "Initial EndPointRef" should show the changes you made.

The change to the F_EndpointRef<partnerLinkName> will need to be made once for each affected work item that has the wrong web service URL.

This procedure can be done using OOTB Process Administrator applet application, or it can be accomplished by writing a java API program to make the changes. This technique was tested/verified in PE 5.0.0.3. The similar technique might work in other releases.

If you need additional help in implementing the procedure above, please open a Problem Management Record (PMR) with Enterprise Content Management Business Process Manager support for further assistance.

 

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSCTJ4","label":"IBM Case Manager"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

UID

ibm11280626