Monday, June 4, 2012

BPM11g-Getting started with BPMHelloWorld process-issues/workarounds

It has been some time that I got queries on how to get started on BPM .The best way to start on any technology or product stack is to do it the HelloWorld way. Always start with a hello world example.
I am using 11.1.1.1.6 environment for the examples.
There is a good step by step guide of getting started in BPM  @ link
To start up with you can just do the small part of getting the hello message /greeting and writing it to a file . In Jdev it will look like this.
 

The Request Hello in turn is implemented using a Human work flow activity, which receives in a HelloMessage and makes a service call which in turn calls a file adapter to write to a file.
Two activities between Start and End in BPM layer. The implementations of these 2 activities are done in SOA layer using Human work Flow and call to a file adapter.
I will list down some points/issues you may face doing this example
  •       The JDev Role matters, In case you select the BPM Role for Jdeveloper development, the implementation tab will be missing from your activities when you drill down. So if you want to the implementation in SOA then the Role must be default which gives access to both BPM and SOA together.
  •            During your development the main tab that yo will be using is the BPMProjectNavigator which will list the different components that will be part of your process.

  •        There are some chances the auto-create Task form may run into issues. So create the Task form again and delete previous UI project associated with the BPM process. 
  •            Once you compile/deploy BPM process, you will need to login to BPM workspace to view and initiate the process. The common issue is that The BPM process is not visible in th BPM workspace.  The User roles become pretty important in BPM. By default the Role of the Hello world activities will be tied to Role. You can change it to Requester or other role based on your process design.
These roles will now need to be mapped to users.
In case the process doesn’t show up you will have to check or create /modify users for roles.
The below screenshots show the configurations that need to be done on User roles in jdeveloper, EM and BPM workspace.
In jdeveloper
a)    Add the users to the roles used in the process/project.

In Oracle Enterprise Manager
a)    Expand the domain farm  and select  Application Deployments
b)    Select the deployed Application .Go to Security >Application Roles
c)    Add the <project name>.<rolename> and Users to the roles who can access the role.

In oracle BPM workspace
a)    Go to Administration tab >Roles
b)    Add the user to  <composite name>.<role name> members.
  •   In BPM workspace when you click on process to initiate the process for entering the Hello Message. The UI page throws an error .Page not found exception.
Error:  OracleJSP error: java.io.FileNotFoundException: Set the init-param debug_mode to "true" to see the complete exception message.

         The error is because adfc-config.xml refers to Empty1.jspx file.
    Create a empty jspx file and name it as Empty1.jspx , add below content in the file.
<?xml version='1.0' encoding='windows-1252'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=windows-1252"/>
<f:view>
<af:document id="d1">
<af:form id="f1"></af:form>
</af:document>
</f:view>
</jsp:root>
Once you add the file and redeploy the process the error will not recur.
Then you can enter all the hello message and submit the values, which in turn will make a service call to write a message to the file as specified in file adapter.
This is all some points I wanted to share with the newbies starting on BPM 11g
Hav a gr8 day ahead J

Thursday, March 29, 2012

B2B performance issues due to large payloads

My customer was having performance issues while processing big payloads in B2B.  The problem was that the B2B server was hanging whenever a large payload was getting processed at B2B gateway.  The customer wanted a resolution to this problem..
Analysis
-------------------
Whenever Oracle B2B is processing an EDI file, it stores EDI payload and XML file in lob segment in B2B_DATA_STORAGE table. For big files this log segment grows significantly and create b2b runtime problem.The server hangs due to this background process.

Solution
----------------------
Oracle B2B has largepayload support, in which payload will not get persisted in DB.’

Please refer B2B Documentation for more details


Inbound Setup
-----------------
 Large Payload Size is the property that needs to be set for inbound cases. 
Go to Administration > Configuration.

Description of Figure A-1 follows

If a composite is deployed to handle the large payload, this is the only configuration needed. If B2B is not delivering the payload to a composite, set Use JMS Queue as default to true
 Go to Administration > Configuration.

Description of Figure A-2 follows

With Use JMS Queue as default set to true, the payload is delivered to B2B_IN_QUEUE, a JMS-based queue.


Hope this helps

Tuesday, December 6, 2011

SOAP Version Mismatch Exception in SOA 11g


Recently one of the queries that was posted in the practice forum was regarding the SOAP version mismatch

Issue
----------------------------
Facing the below exception in client environment when an external client is invoking bpel service deployed on SOA Suite 11.1.1.4.

oracle.j2ee.ws.saaj.soap.SOAPVersionMismatchException: Mime Header Content-Type: text/xml requires SOAP envelope namespace: http://schemas.xmlsoap.org/soap/envelope/: Mime Header Content-Type: text/xml requires SOAP envelope namespace: http://schemas.xmlsoap.org/soap/envelope/

They tried the option of generating SOAP1.2 binding in the wsdl (i.e., open the wsdl in design mode and drag the ‘binding’ component on to the centre pallete, and choose the option of SOAP 1.2) and the WSDL file will have the namespace like http://schemas.xmlsoap.org/soap12/ which is still different from the namespace client is sending.


1.    When the SOAP 1.2 generated wsdl is opened in browser, only SOAP 1.1 namespace is visible. Is the SOA suite overriding SOAP 1.2 with 1.1? How do we enforce SOA suite to use SOAP1.2 namespace?

Solution
------------------
 The problem is due to version mismatch Client is expecting a SOAP 1.2 service where as we are exposing a SOAP 1.1 service. By default the Jdev created BPEL service will be using SOAP 1.1 .The way to change it is to mention a soap version as part of the service in composite.xml

In composite.xml, add the soap version for the exposed service and redeploy, it will start using SOAP 1.2 bindings. By default if soap version is not specified it uses soap 1.1.

sample code snippet of Composite,xml
---------------------------------------------------------
<service name="bpeltest1_client_ep" ui:wsdlLocation="BPELTest1.wsdl">
  </service>


Hope this helps in resolving the version mismatch issues accessing SCA composite services.

Tuesday, October 4, 2011

Human Workflow - with multiple callbacks

In one of my discussions with a customer, there was a query regarding the Human workflow and the flow of control between different activities. They wanted to know how the BPEL service and Workflow service interacts with each other. If you see the InitiateTask operation it is a synchronous operation which calls the workflow service and passes the payload and task attributes and gets the control back to BPEL process.
In case of a basic flow the initiate task is executed, workflow service instance is created and service waits in queue of user to be approved/rejected or complete an outcome. Where as in BPEL the control returns after initiateTask invocation, but the next activity is a receive callback from Workflow service which will only trigger once the user completes his action. So the BPEL process instance gets dehydrated and waits for action.
In case of designing an advanced flow with multiple callbacks, the BPEL generates extra code to handle multiple operation updates that happen from the workflow service. The workflow service will run as an independent process flow which has java API calls to invoke the callback operations defined in the TaskService wsdl  to give back control to BPEL after different task stages. In BPEL, the flow goes into a while loop waiting for a callback from the workflow service. The Pick activity as shown below will be looking for onMessage from ->OnTaskCompleted,OnTaskAssigned,OnTaskUpdated and OnSubTaskUpdated.
  • onTaskCompleted — This callback is invoked when the task is completed, expired, withdrawn, or errored.
  • onTaskAssigned — This callback is invoked when the task is assigned to a new set of assignees due to the following actions:
    • Outcome update
    • Skip current assignment
    • Override routing slip
  • onTaskUpdated — This callback is invoked for any other update to the task that does not fall in the onTaskComplete or onTaskAssigned callback. This includes updates on tasks due to request for information, submit information, escalation, reassign, and so on.
  • onSubTaskUpdated — This callback is invoked for any update to a subtask.
 To go to advanced mode, select the Allow task and routing customizations in BPEL callbacks check box. This  will enable the workflow service to  notify the BPEL process using OnMessage callbacks every time a task is routed to a different user or when the task status changes
Coming to my customer requirements, they wanted to be notified incase the task is reassigned for more than 3 times .In case of a reassign the OnTaskUpdated  callback will be invoked and control will get into the OnTaskUpdated  parallel flow where you can add the required customizations.. So this logic was embedded in this callback flow. After the flow is completed it again goes back and waits in the while loop till next callback event is activated from the workflow service.
The figure defines the human workflow process flow inside the BPEL. The while loop enables the BPEL process instance to wait on pick activity till the task status gets updated to task completion/expiration/error/stale/withdrawn. This brings in multiple options for customization within the BPEL based on the workflow status/updates. This is really good feature using multiple callbacks functionality.

Friday, September 16, 2011

Weblogic:Classloading and Classloader Analysis Tool


There is a Classloading Analysis Tool(CAT) provided in Weblogic server(PS3) which helps you to monitor the class loading pattern that happens with an application. It helps you in identifying any class loading issues that can happen due to different java classes that are duplicated with different libraries. To understand the use of CAT, you should first know the class loading pattern in Weblogic.
Classloading in Weblogic happens in different levels.The below image shows the hierarchy in which the class loading happens
System classloader is the top-level classloader that loads the WebLogic implementation classes and supporting libraries defined on the classpath (those added to setDomanEnv and commEnv) 
Domain level classloader is a child to the SYSTEM classloader and loads libraries that are included in the domain lib directory.
Application level classloader is the next in order.  WebLogic Server automatically creates a hierarchy of classloaders when an application is deployed. The root classloader in this hierarchy is the APPLICATION classloader and it loads modules defined in the application, including EJBs, as well as java EE shared libraries and libraries included in the configured library directories for the application.
For each web application, a child class loader is created and it loads the shared Java EE libraries as well as the libraries and compiled classes in the WEB-INF folder.

What happens if the CAT find issues in the class loading pattern of the application
WebLogic has  a feature called the Filtering ClassLoader which overrides the TOP-DOWN classloading and essentially enables child-first classloading.  When filter is enabled, priority is given to the resources from the child of the FilteringClassLoader (an application classloader) before the ones from the system classloader . This will be mainly used when the version used by systme class loader or top level class loaders are different from the one required by the application.
Usage(in weblogic.xml)
&lt;prefer-application-packages&gt;
          &lt;package-name&gt;geo.*&lt;/package-name&gt;
&lt;/prefer-application-packages&gt;


How to use  CAT?
Login to http://host:port/wls-cat/ and enter your credentials.


- Analyze classloading conflicts
- View the system and application classloaders
- Generate reports



CAT will suggest you solutions to overcome the conflicts which is also a good feature.
Below references give you detailed explanation on weblogic class loading as well as fetures involved in CAT tool.
References: 
  1. CAT tool
  2. Class Loading by Jeff West