Monday, May 31, 2010

SOASuite11g - Master Child process co-ordination using Signal

A Master BPEL process calling multiple child BPEL processes is a common solution implemented in case of complex workflows. The new SOA 11g coordination feature using signal offers a light wait solution to coordinate between master and multiple child processes.

In 10g, if a Master process has an asynchronous call to a child process, the only option to coordinate with master process was to use co-relation and wait back for response. The downside was that Master had to wait till the entire child process is finished and returns back the response even though it may be interested in only a few tasks within the process.

The SOA 11g signal feature allows Master process to signal to the child to start a specific set of tasks inside the child process. And similarly the child can signal to the Master that set of tasks that Master is interested has been completed and Master can continue with its processing. The child process will continue with its rest of the tasks. Signals are easier to implement and light-weight than implementing correlation set based solutions. The limitation of this feature is that it can be used only between Master and multiple Child processes and not with a Master process and multiple instances of a Child process. This is because labels can not be set dynamically and each signal pair (signal/receive signal) needs to have unique label. In case you try it you will get a Coordination fault saying duplicate label used.

The important steps you will have to do other than adding the Signal activities is to enable signaling by adding

bpelx:invokeAsDetail="true" property to your invoke activity 
 
In case you are having multiple invokes and Signals in the process then you need to link the Labels with the invoke activity. 
bpelx:detailLabel="childProcess1"

I was having a look at the implementation. It seems Signalling is implemented using the unique conversation ID of the process and labels. For correlating the master and child processes, it creates a coordination ID based on the unique process ID (cube instance key) and labels.

Wednesday, May 26, 2010

Dehydration/internal schemas in SOA 10g and SOA11g

One of the queries that I got recently was about the differences in the dehydration/internal schemas used from SOA 10g and SOA11g. So today’s blog is on what changed from 10g to 11g as far as dehydration/internal schemas are concerned. In SOA 10g BPEL engine used orabpel schemas extensively for storing the process as well as the instance audit details. ESB engine used oraesb schema for all its internal communications by using different topics (ERROR, CONTROL, MONITOR etc) as well as important server parameters. In the case of SOA 11g since the entire architecture has been revamped, the internal schemas were refactored so as to fit in the scheme of things.

In SOA11g BPEL and Mediator engine requires MDS repository and SOA Service Infrastructure database to start and run properly. MDS stand out as one of the new features in 11g. BPEL & Mediator uses MDS as process metadata store. During deployment of a composite, all the process metadata will be stored on to MDS. BPEL engine uses SOA infrastructure database for persisting the BPEL process state, audit information and instance details where as Mediator engine uses it to persist the messages and message states.

During startup of the soa-infra application, BPEL and Mediator engines are initialized and after that it will load all the composites from the MDS repository. If the composite contains any BPEL processes, it targets those individual components to the BPEL engine. If the composite contains any Oracle Mediator components, it targets them to the Oracle Mediator engine. Hope this helps

Friday, May 21, 2010

Event delivery Network – publishing events using SQL API

Business Events always had been an interesting option when it comes to initial design of an interface. For all real time integrations, we will always prefer a business event in case end system supports it. In scenarios where business events are not supported, applications are developed to sense pre-defined conditions or continuously poll for new events. But these do not offer the flexibility and scalability required to handle new and more complex changes that will come in the future. In other scenarios, the business event feature may be there but the business event may not contain the entire payload which needs to be fetched using the ids provided as part of the business event data. Business Events is one of the new features in SOA Suite 11g, named as the Event Delivery Network (EDN). Event-driven architecture can always complement service-oriented architecture (SOA) because services can be activated by triggers fired on incoming events.

Refer the blog by Clemens on how to publish/subscribe to an event using Java APIs

http://blogs.oracle.com/soabpm/2009/07/event_delivery_network_chapter.html

I will throw some light on the steps involved as well as the internal APIs provided by EDN that you can use to publish events.

Publisher and Subscriber needs to be aware of the data format that they need to communicate in. So the first step will be to define the Payload of the business event. For this define an XSD schema which will become your payload.

On subscriber side we need to define Business Event through an edl file.

<definitions xmlns="http://schemas.oracle.com/events/edl" targetNamespace="'http://schemas.oracle.com/events/edl/EDNtest ">

<schema-import namespace="http://xmlns.geo.com/ns/Employee" location="xsd/Employee.xsd"/>

<event-definition name="createEmployee">

<content xmlns:ns0="http://xmlns.geo.com/ns/Employee" element="ns0:Employee"/>

</event-definition>

<event-definition name="removeEmployee">

<content xmlns:ns0="http://xmlns.geo.com/ns/Employee" element="ns0:Employee"/>

</event-definition>

</definitions>


Important thing to note is an event will be in its own namespace for example -“'http://schemas.oracle.com/events/edl/EDNtest” and the payload will have its own namespace - “http://xmlns.geo.com/ns/Employee”

There are a couple of tables and queues defined in SOAINFRA schema with the prefix EDN which are used as part of the event delivery system in SOA suite 11g. There is a queue named ‘edn_event_queue’ which is used to store all the published events. It uses underlying EDN_EVENT_QUEUE_TABLE for storing all the event payloads.

There is an internal API which is being called by the java SendEvent class to publish the data on to the queue. The API is ‘edn_internal_publish_event’. So in cases where we need to publish an event from functions and procedures we can call this publish API on the SOAINFRA schema.

code snippet on how to publish an event using SQL API

call edn_internal_publish_event('http://schemas.oracle.com/events/edl/EDNtest','createEmployee','<business-event xmlns:ns1="http://schemas.oracle.com/events/edl/EDNtest'" xmlns="http://oracle.com/fabric/businessEvent">

<name>ns1:createEmployee</name>

<id>e4196227-806c-4680-a6b4-6f8df931b3f3</id>

<content>

<Employee xmlns="http://xmlns.geo.com/ns/Employee">

< EmpID>101</EmpID>

< Name>Geo Tho</ Name >

< Department>Engineering</Department >

</ Employee>

</content>

</business-event>

', 'R', null, null, '3')

First parameter will be the namespace of the event, second will be business event-definition name from edl file, third being the payload (business event tags are required), and sixth parameter being the priority. Hope this helps.

Wednesday, May 12, 2010

Configuring OER 11.1.1.2 Harvester with Jdeveloper 11g

There is a OER plugin for JDeveloper that supports harvesting.

  1. Login to the machine where Weblogic server is installed and navigate to the repository home. Go to $MIDDLEWARE_HOME\repository111\core\tools\solutions\ folder.

Copy 11.1.1.2.0-OER-Harvester.zip to your Local machine or where Jdeveloper is installed. Create a folder harvester under <jdeveloper> home. Extract the 1.1.1.2.0-OER-Harvester.zip file to the <jdeveloper>/harvester folder.

  1. Edit tools11g.xml to match your JDeveloper installation.

Replace every occurance of "C:/oracle/middleware/jdev_5361/jdeveloper" with the location of your JDeveloper installation.

  1. Merge the contents of tools11g.xml into your JDeveloper's product preferences XML file. This is located in C:\Documents and Settings\<username>\Application Data\JDeveloper\system11.1.xxxxxx\o.jdeveloper\product-preferences.xml on Windows. This location is different from the OER 10g release where it used to be inside the Jdeveloper home.

If there is an existing entry, with the ExternalToolList tag select the <hash> tag from tools11g.xml and insert it after the lines:

"<hash n="oracle.ideimpl.externaltools.ExternalToolList">,

If the tag is not present , add the contents of tools11g right after the initial <ide:preferences> element.

  1. Start JDeveloper. Under Tools | External Tools you should see two new entries:
    • Submit this File into OER
    • Submit this Project into OER

Select it

o Click "Edit"

o Click the "Properties" tab, and configure the missing properties to point to your OER server.

o The "repository.password" field must be an encrypted password. Need to obtain an encrypted password by saving the unencrypted password in HarvesterSettings.xml,and running the encrypt.bat script that comes with harvester to encrypt it. The file will be modified to contain the encrypted password. Copy it to your Jdev repository.password properties

  1. To run one of the tools:

Select a file in the "Applications Navigator".Right click and select "Submit this File into OER" or "Submit this Project into OER"."Submit this File into OER" will harvest just the selected file. (This works for zips and jars too). "Submit this Project into OER"." will harvest the entire project.

Note:- Please make sure you import 11.1.1.2.0-OER-Harvester-Solution-Pack.zip into the OER server before you execute step5.

Login to OER as admin user. In the Admin tab you will get a Import Export > Import Export Client which will open a java utility to import the solution Pack. In case you miss out on this step you will get the following error.

[repository.submit] An error occurred performing the Repository operation:
[repository.submit] com.oracle.oer.sync.framework.MetadataIntrospectionException: com.oracle.oer.sync.framework.MetadataIntrospectionException: Unable to read plugin file: C:\Oracle\Middleware\jdeveloper\harvester\plugins\biz.introspector

Tuesday, May 11, 2010

Steps to remove a domain from Weblogic Server

As of now there is no out of the box feature with Weblogic Configuration wizard to remove or delete a domain. These are basically manual steps.

For example if I want to delete a domain named geo_domain below are the steps you need to remove the domain.

  1. Open domain-registry.xml under $Middleware_HOME .Remove the corresponding entry referring to geo_domain.

CodeSnippet :: domain-registry.xml

<?xml version="1.0" encoding="UTF-8"?>

<domain-registry xmlns="http://xmlns.oracle.com/weblogic/domain-registry">

<domain location="C:\Oracle\Middleware\user_projects\domains\soa_domain"/>

<domain location="C:\Oracle\Middleware\user_projects\domains\geo_domain"/>

</domain-registry>

  1. Open nodemanager.domains file under $Middleware_HOME \wlserver_10.3\common\nodemanager\ folder. Remove the corresponding entry referring to geo_domain.

CodeSnippet :: nodemanager.domains

#Domains and directories created by Configuration Wizard

geo_domain=C\:\\Oracle\\Middleware\\user_projects\\domains\\geo_domain

  1. Delete the domain folder under domains folder manually.

$Middleware_HOME\user_projects\domains\geo_domain

  1. Delete the domain folder under applications folder manually.

$Middleware_HOME\user_projects\ applications\geo_domain

Friday, May 7, 2010

Enhancements to Transactions(dehydration/audit trial ) in 11.1.1.3

There always used to be a concern that the BPEL instances don’t show up when one of the processes taking part in transaction issues a rollback. This used to happen because BPEL process state is also rolled back to the last commit and if there has been no commit and this process was invoked through a synchronous interaction then the process will be wiped out since nothing has been dehydrated. BPEL uses the same transaction to update process state in the and also to log audit events in the database. Many clients used to enquire on why there is no trace of the process as the BPEL process itself will not show up in the Console.
I am happy to see that Oracle has addressed this issue in 11g - 11.1.1.3 where they have made enhancements to BPEL's transactional behavior and audit-trail .Audit trail saving settings can be configured to take part in a local or different transaction, there by not affecting the transaction of the BPEL process. This feature allows you to get a complete trail, especially in the case of rollbacks or unhandled faults - no matter what happened to the underlying "working" transaction.

More on the new features of 11.1.1.3 :- http://blogs.oracle.com/soabpm/2010/03/11gr1_patchset_2_111130_soa_fe.html

Thursday, May 6, 2010

more on SCA configuration file in SOA 11g

Introducing SCA

In this blog I will be explaining the basic structure and components involved in composite.xml which as you all know is the master configuration file of a composite application. This file uses an XML-based format called the Service Component Definition Language to describe the components and specify how they relate to one another. As you know in an increasingly SO world the interaction between components should be modeled as services, cleanly separating the implementation technology from the function that’s provided.

There are some terminologies that you need to be familiar when it comes to using the SCA model in SOA 11g.

The fundamental elements of a SCA SCDL are:

· Component

SCA defines a basic atom as a component. The implementation of each component can be done using any technology. Implementation.<tech> tag inside the <component> tag will specify the component used to implement that component. It can be BPEL, Mediator, Human Workflow, Java class, Business Rules or any other supported technology.

· Composites

Components can be combined into larger structures called composites. The composite.xml is used as the configuration file to define the composite application. It is defined using the SCDL language. (Service Component Definition Language)

· References

Whenever a component needs the services of other components it uses references. Each reference defines an interface containing operations that the component needs to invoke

· Bindings

Bindings specify how that communication happens. There can be multiple bindings, and the binding to be used will be determined at runtime.

· Wire

A reference is connected to a service using a wire. A wire is an abstract representation of the relationship between a reference and some service that meets the needs of that reference.

· Service

A composite can also expose one or more services. These services are actually implemented by components within the composite.

Code Snippet :: composite.xml

<composite name="MyExample" .>

<component name="Component1">

<implementation.bpel process="Process1"/>

</component>

<component name="Component2">

<implementation.java class="com.geo.HellloWorld"/>

</component>

<component name="RouteRequest">

<implementation.mediator src="RouteRequest.mplan" />

</component>

<component name="ManualApprovalTask">

<implementation.workflow src="ManualApproval.task" />

</component>

<component name="ManualApprovalRule">

<implementation.decision src="ManualApprovalRule.decs" />

</component>

<reference name="FileWrite" ui:wsdlLocation="FileWrite.wsdl">

<interface.wsdl interface="http://geo.com/FileWrite#wsdl.interface(Write_ptt)" />

<binding.jca config="FileWrite_file.jca" />

</reference>

<reference name="getStatus" ui:wsdlLocation="http://<host>:port/soa-infra/services/default/CCValidation!1.0/GetStatus.wsdl">

<interface.wsdl interface="http://geo.com/GetStatus#wsdl.interface(execute_ptt)" />

<binding.ws port="http://geo.com/GetStatus#wsdl.endpoint(GetStatusByCC/execute_pt)" location="http://host:port/soa-infra/services/default/CCValidation!1.0/GetStatus?WSDL" />

</reference>

<wire>

<source.uri>RouteRequest/FileWrite</source.uri>

<target.uri>FileWrite</target.uri>

</wire>

<service name=“ HelloWorld” ui:wsdlLocation="HelloWorld.wsdl">

<interface.wsdl interface="http://geo.com/recieveHello#wsdl.interface(execute_ptt)"/>

<binding.ws/>

<service/>

</composite>

The SCDL configuration file’s implementation element tells the runtime both what kinds of containers it needs for a particular composite and where to find the implementations of the components in that composite .The SCA runtime provides all bindings, allowing components created using any technology to use any available binding. Hope this helps J

Tuesday, May 4, 2010

Oracle AIA Highlights: Oracle Announces Oracle® Application Integration Architecture (AIA) Foundation Pack 11gR1

The AIA 3.0 release has been rechristened as 11gR1 as Oracle wants to align the AIA releases to go with the Fusion middleware releases. Happy to see that finally it got released

Read Oracle Press Release for more : http://www.oracle.com/us/corporate/press/068339