Advertisements
RSS

Tag Archives: BW

using Arrays and Dynamic subprocesses in iProcess

Last week I had a case where the requirement was to start a iProcess case from BusinessWorks. This is not new, but there were a few additional requirements:

  • The iProcess case would be started with 1-n codes mapped by BW
  • For each code in the main procedure, we needed to parallel start a subprocedure which would handle the BPM flow including complex business rules (iDecisions), conditions and forms.
First step is to define a array named CODES in the procedure. Then the challenge is to send the Array from BusinessWorks to iProcess. Normally objects are send as Fields to a case using a certain FieldType like swDate or swText. Due to enumeration you can see that a valid FieldType is “swArrayOfText” but documantion is not clear how to use a valid format (bracket, pipe, etc) to fill this fields value (as more developers have discovered)
The answer is as always very simple, when you know it. ;)
iProcess handles an swArrayOfText as a set of Text fields with an index. So the proper usage is not to try to send 1 Field with the whole Array but to construct a Field for each array item like CODES[1], CODES[2], etc. So we need to map them individually from BusinessWorks.
The BW mapping in the example below shows a For-Each mapping on the set Fields which does the trick.
In the iProcess procedure we now have our Array so we can now try to start a subprocedure for each item. Since we want to start the subprocedures parallel and not serial we can not use a “normal” LOOP and subprocedure definition.
The solution is a dynamic subprocedure defintion, however this mechanism works a bit different then the normal subprocedure definition. Big difference is that it needs an array of procedure names it will call and a template of input/output parameters. Since we will always call the same subprocedure this is somewhat odd in our case, but the only way to trigger parallel callouts. So first create a new array called SUBPROC. Then we need a script to fill the SUBPROC array with the amount of CODES in the CODES array.
IDX_CODES := 1
WHILE IDX_CODES <= UD_TOTAL
  SUBPROC[IDX_CODES] := "MySubProcedureName"
  IDX_CODES := IDX_CODES+1
WEND
IDX_SUBPROC := 0
The dynamic subprocedure definition is configured with the SUBPROC array.
In the input mapping to the subprocedure we need to pass the correct CODE to each subprocedure call. So we use a private-script in the mapping.
IDX_SUBPROC := IDX_SUBPROC + 1
$RETURN := CODES[IDX_SUBPROC]

Voila, this should do the trick.

Advertisements
 
Leave a comment

Posted by on 07-10-2010 in BusinessWorks, iProcess, Tibco

 

Tags: , ,

Connecting Tibco BusinessWorks to Weblogic JMS

In the last years I’ve been working with both the Tibco and Oracle (BEA) middleware software stack. In this period two of the products I’ve learned to appreciate are the Tibco BusinessWorks “zero-coding” service modeling concept and the formidable power of Oracle Weblogic’s clustering technique.

However a client wanted to use both products together, so here is the story in short.

First we configure the Oracle Weblogic server, domain, cluster, managed servers, JMSServer, JMSModule, etc. The Oracle Weblogic domain we will use has a admin and 2 managed servers (on the same host):



After that we need to configure the JMSServer components (for each managed server), create a JMSModule and add the ConnectionFactory, a Distributed Queue (if we are using Weblogic JMS let’s use one of it’s nicest features) and at last for each managed server a subDeployment, a member queue and a redirect error queue.


So we have our basic Weblogic JMS setup, let’s continue to the client side.
At first we copy the weblogic.jar file to the %TIBCO%\bw\5.x\lib folder as mentioned in the Tibco BW documentation.

We open our Tibco BusinessWorks Designer and create a new project. Then we add a JMS Connection and a JNDI Configuration to the project to configure the Weblogic JMS connection. (the last component is not really necessary, but I’ll explain why I use it in a few seconds).


So at first I tried to Test Connection without the JNDI configuration but this resulted in a endless waiting pop-up. So no success here. Then I included the JNDI configuration and with Test Configuration the following error showed up.

JNDI Configuration -> Test connection:
BW-JNDI-100002 Configuration Test Failed. Exception [java.lang.NoClassDefFoundError] occurred.
java.lang.NoClassDefFoundError: weblogic/security/service/PrivilegedActions


This error was familiar and has something to due with the fact that for WebLogic Server 10.0 and higher releases, client applications should use the wlfullclient.jar file to provide the WebLogic Server specific functionary previously provided in the weblogic.jar file.

So let’s generate the wlfullclient.jar with the JARbuilder tool as mentioned here on the Oracle website.
cd WL_HOME/server/lib
Use the following command to create wlfullclient.jar in the server/lib directory:
java -jar ../../../modules/com.bea.core.jarbuilder_X.X.X.X.jar

Copy the wlFullclient.jar to the %TIBCO%\bw\5.x\lib folder and make sure that the weblogic.jar is not there.
Restart your Tibco BusinessWorks designer. Test your JNDI Configuration and the JMS Configuration and the connection should be succesfull now.

Finally the Tibco Designer’s JMS palette is now at your disposal to build services using the Weblogic JMS server functionality as high-volume load-balancing and scaling.


 
1 Comment

Posted by on 08-09-2010 in BusinessWorks, Oracle, Tibco, Weblogic

 

Tags: , , ,