Assign not happening after XSL transformation

There are cases where a BPEL assign activity on a variable may fail(Selection Failure) after a XSLtransform activity on the same variable. Reason is that a transform activity doesn’t create empty tags if the value is null. Hence, the variable will be updated with some missing tags(for null values) after transformation, and when you try to assign to such a tag, you will get an error.

Inorder to overcome this, if you feel you may get null values for a particular tag which you may want to assign later, then use an if condition to set it to empty text if the value is null. In such cases, the tag is created with empty value, so you can use it for assigning later.

Posted in Uncategorized | Leave a comment

OSB IDE & OEPE

Often people are confused that Oracle Enterprise Plugin for Eclipse (OEPE) is the plugin for OSB on eclipse. But OEPE is actually a plugin to eclipse that supports development of technologies like J2EE, Spring, ORM, etc. on weblogic, but defenetely not OSB.

OSB IDE actually comes as part of the OSB installer. While installing Oracle Service Bus, one of the steps will be to provide Middleware Home & OEPE Home.

With this, it will install required plugins over OEPE to have the OSB IDE

Be aware about the versions of OEPE & OSB. Different versions of OEPE are used for different versions of OSB

You can get in Oracle website, or for quick reference
Here is the list

OSB Weblogic Server OEPE
11.1.1.6.0
11.1.1.7.0
10.3.6 11.1.1.8.0
11.1.1.5.0 10.3.5 11.1.1.7.2

Hope this helps resolve the confusion over OSB IDE and OEPE.

Posted in Uncategorized | Leave a comment

Using properties in Composite (or) Using Properties in BPEL

Hello

This post will take you through a demonstration on how to setup and use properties in a Composite

Often you’ll have scenarios where you’ll need to change/setup certain values at runtime. For ex, adminEmailAddress. During dev, usually the developer would use his mailId but when deployed in production, the admin has to be assigned. How is this addressed?

Using Properties

1. Define properties in Composite.xml against the BPEL process in which you want to use this properties

     
      <property name="bpel.preference.adminEmailAddress” type=”xs:string” many=”false”>admin@xyz.com
      …

Note that bolded bpel.preference should not be changed.

2. Use this property in BPEL
For ex, in the Mail activity, the to address needs to use this value
ora:getPreference(‘adminEmailAddress‘)

3. Set this property value in EM
Go to EM –> Weblogic Domain –> rt click on soa_domain–> System MBean Browser


oracle.soa.config –> Server : –> SCAComposite –> SCAComposite.SCAComponent –> Click on your Process

On the right side, click on Properties
You’ll see the property adminEmailAddress,  where you can replace whatever value you want.

Thanks for reading the post.

Posted in Uncategorized | Leave a comment

Unable to deploy ADF UI app – java.lang.ClassNotFoundException: oracle.adf.library.webapp.ResourceServlet

You may get the following exception while deploying the ADF UI application from Jdev/WLS

Operation ‘deploy’ on application ‘ProjectInitiate_V3_UI’ has failed on ‘AdminServer’
java.lang.ClassNotFoundException: oracle.adf.library.webapp.ResourceServlet
oracle.adf.library.webapp.ResourceServlet
Deploy operation failed.

Reason being the .war file that you are trying to deploy does not contain the whole lot of classes required. You make .ear file instead which has all the resources required.

The way you do it is, deploy the same at the Application level instead of Project Level from Jdev

OR

If you are deploying directly from EM/Console, deploy the .ear file instead of .war file

Posted in Uncategorized | Leave a comment

SOA Deployment taking indefinite time

Sometimes, you may encounter the following issue

The task cannot be processed further until the current edit session is activated. When this occurs, task processing will continue. The user can exit the deployer tool without affecting the task.

and the deployment never happens.

This happens because there you may have mistakenly/intentionally changed certain parameters in the WLS console, and did not activate/revert those. If you open the console (http://host:port/console), you see the ‘Activate Changes’ button enabled at the left top corner.
You just have to either activate/revert the changes, and the deployment happens now.

Posted in deployment happening for long time, deployment not hapenning, until the current edit session is activated | Leave a comment

Runtime Operation Error in BPM – ORABPEL-30017 – Invalid task definition

Hi

When you encounter this issue of getting a ‘Runtime Operation Exception’ while logging into BPM Workspace, or find a similar log

ORABPEL-30017

Invalid task definition.
The task definition at default/PrjTaskReminderNotification!1.0*soa_5cb0ae06-9485-488f-91b1-1b2872276fb9/Initiator could not be read. The task definition is associated with workflow default/PrjTaskReminderNotification!1.0*soa_5cb0ae06-9485-488f-91b1-1b2872276fb9/Initiator.
Make sure that the task definition is available at the specified URL and that it is a valid XML document.

Here’s the solution.
This happens when there are more than one active record in BPM_CUBE_PROCESS table.
You just have to make sure that there is only one active record per process.

Execute the following query by connecting to the SOA_INFRA schema of the database

select processId, processName, compositeName, revision, status, from BPM_CUBE_PROCESS;

If it returns multiple records for the same ProcessName, make the status of all those entries to -1,commit and redeploy the process.
Now, you can see the process in the workspace without any problem

Posted in BPM Workflows not appearing in P6 BPM portlet, Error in BPM Workspace, Invalid task definition, ORABPEL-30017, Runtime Operation Error, Unable to find BPM Processes in Workspace | 1 Comment

Publish Message to JMS Queue

This post takes you through a step-by-step procedure to create a JMSAdapter that publishes a message

1. Create a new SOA Project 
2. Define a message schema of the following type

3. Drag and drop JMSAdapter from the component palette to References section of composite.xml 
4. Configure the JMSAdapter as per the screenshots given below

The below wizard is important
Select the Queue where the message is to be published(which is created in previous tutorial)
Set the TimeToLive property whose meaning is obvious. The message disappears after this time
Also, set the JNDI name of the ConnectionPool that you’ve created in the previous tutorial


Your composite would look like this
5. Create a one-way Mediator with the input type similar to the one for JMSAdapter(with SOAP endpoint) and wire it to the JMSAdapter

6. Composite looks like this

7. Now, open the mediator, create the transformation file in the Routing Rule and deploy

Testing
Open the composite in EM and test it (give a payload of your choice)

To check if the message is published to JMS,
Goto Services –> Messaging –> JMS Modules –> MyJMSModule –> myQueue –> Monitoring tab –> click on the Queue name –> Show Messages –> click on the message

This message stays in the queue for the time that is configured in the wizard. After that time, the message expires.

Posted in Uncategorized | 1 Comment

Configuring JMS Resources for JMSAdapter

This post is a step-by-step guide to configure JMS resources in Weblogic Server in order to work with JMSAdapter
Working with JMSAdapter in Oracle SOA Suite 11g involves configuration of various JMS resources in WLS
  1. JMS Module(Optional) : Is a definition that contains various JMS Resources like queues, topics, etc.
  2. Sub-Deployment(Optional) : used to group target servers
  3. Connection Factory : is a Weblogic resource that enables JMS clients to create connections to JMS destinations
  4. Queue / Topic : the actual destination of the message, either a queeu(point to point) or topic(publish-subscribe)
  5. Connection Pool : Create a pool of connections for the JMSAdapter application
Creating a JMS Module
This step is not mandatory, you can use the default module ‘SOAJMSModule’
Weblogic Console –> Services –> Messaging –> JMS Module –> New –> Provide a JMS Module Name –> select the target server(to which you want to deploy this, usually the managed server where SOA is configured) –> Leave the check box(define resources in this module) –> Finish

This step creates a new JMSModule ‘MyJMSModule’.
Creating a sub-deployment
Every JMSModule has to be targetted to a Sub-Deployment. A Sub-Deployment is used to group targets
Click on the just created MyJMSModule –> click on Subdeployments tab at the top –> New –> Give name to the subdeployment –> select the target (can either be a server or JMSServer. As this is specific to JMS, I’ve selected SOAJMSServer(default available JMS Server. You can even create your own JMSServer))

 
 

 

Creating a Connection Factory
A Connection Factory is used to create connections for the JMS Clients to interact with JMS Resources
Click on the just created MyJMSModule –> New –> Connection Factory –> Give name & JNDI name –> soa_server1(selected by default) –> Finish


 

Creating a Queue
Queue is the actual destination
Click on the just created MyJMSModule –> New –> Queue –> Give name & JNDI name –> select subdeployment –> Finish

 

This sets up all the JMS Resources.
You are still left with one configuration to be done to use this queue with a JMS Adapter, which is creating an outbound connection pool
For this, go to Deployments –> JMSAdapter –> Configuration –> Outbound Connection Pools –> New –> oracle.tip.adapter.jms.IJmsConnectionFactory –> Next –> Provide JNDI Name for the Connection Pool(This will be used in the JMSAdapter configuration in the Composite)
This will create a Connection Pool, but Connection Factory(the resource used to connect to Queue) is not yet configured, which is done in the next step

Click on the just created connection pool –> enter the ConnectionFactoryLocation as the JNDI name that you’ve created in Step 2 (which is jms/myConnFactory and hit Enter) –> Save
Update the JMSAdapter deployment
Console –> Deployments –> click on DbAdapter checkbox –> Update –> select defaults –> Finish
Now, you can use the ConnectionPool name eis/jms/myConnPool in the dbAdapter in your SOA Composite
If you get any error saying the connectionPool not found, restart the SOA Server

Please read the next post on working with JMS Adapter

Posted in Uncategorized | Leave a comment

Multi-Instance Processing in BPM – Iterating over Arrays in BPM

It is often a common scenario to trigger multiple instances of a particular part of a BPM process. A typical example would be
You have an array as input, and the same process to run for each of the element set in this array(each element may refer to a particular user tasks)
OR

Every night, a batch process to run and each of the managers in the organization to be notified with the to-be-reviewed activities assigned to them ie, each person should be notified only with his tasks which requires a particular process to be run for each of the managers

NOTE :
This post specifically applies to Oracle BPM Suite 11g 11.1.1.5, before the FeaturePack(FP). In this version, the LoopCounter Variable in the subprocess is not visible, which is a bug. And this post is the workaround for that.
Post FeaturePack release, the variable is available in the Sub-Process, so the process of assigning the individual input in the script task at the starting of the Sub-Process is not required. I’ll write another blog for it.

In this example,
 there are several managers, and a separate instance of the sub-process(shown below) is to be triggered to each of the managers, paralelly


Input to the sub-process has to be of type Array – thumb rule 😉 – as only then, you can split the data  and make each of the instances get corresponding data
Schema for the input to the sub-process is given at the end of the post

There is a way to instantiate parallel processes in BPM, and that’s called MultiInstanceinvocations
1.       Create a sub-process and, create the activities that are required to repeat for each manager
2.       Now, this should be invoked for all the elements in the array. So some configuration  to be done to the sub-process property
My process looked like below
3.       Double click the sub-process à


Select multiinstance as loop characteristic
Cardinality is no. of instances to be produced, here it is count (allActivities.reviewerWiseActivities, which otherwise is equal to no. of managers – with tasks)
Uncheck Is Sequencial
Don’t touch Arguments definition tab, as since this is a pre-Feature pack release, there is a bug and you cannot go with the standard way
1.       Input to the sub process is an array, but typically each manager has to be assigned only with his tasks, which will be one element in the array. So use a script task as the first activity in the sub-process and copy nth element from the array and assign it to sub-process dataobject



Here, the value in the left box is :: AllActivitiesPDO.reviewerWiseActivities[loopCounter] which is obvious to understand.
Bug in Pre-Feature pack release is that this loop counter is not available in the properties window of the sub process. That’s the reason, we are splitting the array within the subprocess but not before invoking the subprocess.
Had this been post Feature pack release, you can split the array in the properties window of the subprocess, define input and output elements, and skip this script task.
That’s it! Now, n number of sub process instances will start paralelly
Hope this is useful J

Input Schema

     elementFormDefault=”qualified”>
   
       
           
           
           
           
           
           
           
           
           
       
   
   
   
       
           
           
           
           
           
           
           
       
   
   
       
           
               
           
       
   
   
       
           
           
           
           
           
           
           
       
   
Posted in Uncategorized | 2 Comments

BPM – UCM Integration : Human Task Attachments(stored in UCM)

This post deals with Human Task attachments stored in UCM

This post applies specifically to Oracle BPM Suite 11g 11.1.1.5 Version before the FeaturePack, which is otherwise called PS4(Pure Vanilla BPM PS4)

UCM Integration with BPM is inbuilt from PS5 onwards(the document tab in the Human Task and some configuration in EM), but till PS4 there is no direct provision to talk to the UCM store. It has to be invoked just as any other web service, get the content and operate on it.

Human Task attachments is such a common scenario, and the attachments are normally fetched from some content repo like UCM.
How do we get the content from UCM and attach it to the Human Task so that the participant that acts on the task will have the attachments in his taskform/Email.

UCM – as such – provides various WebServices to deal with various operations. List of WebServices can be seen in its documentaion

This post deals with the GetFile WebService of UCM(http://docs.oracle.com/cd/E17904_01/doc.1111/e11011/c05_core.htm#BABFDEFH) which, as the name implies, is used to retrieve the content stored in UCM

First, login to the UCM console, and click on ————, get the WSDL in to the project OR create a reference to it.
This WebService has an operation that takes in 3 parameters. Often, we deal with only one parameter from the list(either the documentId or documentName(in UCM)), with other two as null.
But there is a bug in the WebService where if you pass a payload similar to

1232

<RevisionSelectionMethod/>

the service returns error – inspite of the fact that you’ve passed the correct docId of the document you want to retrieve.
Workaround for this is to remove the empty tags completely which you cannot directly make in the invoke activity, so use a mediator before the call in which you remove out the not required tags(in the routing rule transformation – by not mapping these two)

A screenshot of the same

Once this is done, the webservice returns a result which is the content of the document, which you need to assign to the attachments part of the execData of the HumanTask.

Hope this gave you an understanding of how to retrieve the documents from UCM (in PS4)

The next post is about dealing with multiple attachments in Human Tasks

Posted in Uncategorized | Leave a comment