Visar inlägg med etikett bpel. Visa alla inlägg
Visar inlägg med etikett bpel. Visa alla inlägg

måndag, augusti 18, 2008

BPA, BPEL & BPM. Jungle or a Wide Open Road?

We (Oracle) provide several tools within the business process design & development area. Also, with the acquisition of BEA we got even more tools to add to our product stack. At a first glance this might be a bit confusing and it also might appear as there are some overlaps between the different tools, however, if you look a little deeper you will find that there is a place for each of these tools within your arsenal for creating business processes.

Let's start by have a quick glance at the players, whom they are and what they are do before we do a more throughout comparison between them.

To start with, the players are: Oracle Business Process Analysis Suite, Oracle BPM Suite.

Oracle Business Process Analysis Suite
This is the architects' tool. It includes support for process modeling and simulation which makes this a key component of the business process lifecycle. It provides a graphical modeling environment for defining process maps and detailed process flows consisting of both human and automated steps. It also supports data modeling, organizational modeling, impact analysis and rich report generation. Through simulation, you can quickly determine the performance of the process under certain hypothetical conditions. The Business Process Architect Quick Start Guide
is a good place to learn more about this tool.

Oracle BPM Suite
This is a software suite that integrates all phases of the BPM lifecycle (modeling, implementation, execution and monitoring). It will provide the user with an end-to-end tool for all aspects of the business process lifecycle. It is also very suitable to process development according to agile ideas.

Oracle BPEL Process Manager
The Oracle BPEL PM tool will enable to user to create processes that adhere to the BPEL standard. It consists of both a design time and a runtime environment. The design time environment is integrated into Oracle JDeveloper and the BPEL PM runtime is highly performing and can be installed on top the most common application servers.

So, after introducing the players, let's have a deeper look into when to use each of these tools by using some examples.

Example 1
Acme Inc. is entering the world of SOA. They will replace or integrate all their current processes into a single SOA strategy. Ron is an architect that has been given the task to model this new SOA strategy. Which of the above tools would be most appropriate for Ron to use?

Example 2
Karen is a department manger who also is quite technical. She work for a company that promotes empowerment quite heavily, and she has quite lot of flexibility of how she runs the day to day business of her department. Today she manually handles the holiday requests of her staff using mail and a spreadsheet; however, she would like to automate the process somehow. The company does not have a generic holiday approval process; it is up to each manager to handle, which is in line with their ideas on empowerment. Which of the above tools would be the best for Karen to use to automate this process?

Example 3
John is a software engineer that has been given the task to implement an order entry process. The process has already been designed and he has been given the blueprint. The process is very crucial to the business of the company and needs to be available 24*7, thus it will be deployed in a HA environment. Which of the above tools would be the best for John to use?

Well, the answers might be obvious to the you, however, they should give you an idea on where each of the tools in the Oracle BPM stack can help you with various aspects of your process modeling & creation.

Oh, I almost forgot, the answers. In Example 1 the Oracle BPA Suite is the obvious choice. In Example 2, most people would go for Oracle BPM Suite as this will help with all phases of the BPM lifecycle. Example 3 would be an example on where to use Oracle BPEL Process Manager as you have High Availability requirements.

torsdag, juni 05, 2008

Using DirectSQL in BPEL / ESB Database Adapter

If you read the Database Adapters User's Guide you will sooner or later get to the Performance section, and there you will find DirectSQLPerformance briefly mentioned. However, it is not described in details, so here are some additional comments on this feature.


The Default Behaviour

The normal way for the Database Adapter to work is to use TopLink between the adapter and the Database. This is transparent to the end user when creating a database adapter in either ESB or BPEL. The only hint that you will get that TopLink is involved is in your source project. Here you will find a generated TopLink mapping file and some additional classes used by TopLink within your project. In most cases you will not have to worry about this at all. TopLink behaves like a good citizen within your process, and things work fine.


What is DirectSQL?

This is a feature of the Database Adapter that let it bypass the TopLink framework, and instead use direct JDBC SQL calls to the database. Well, it will not totally bypass TopLink, it will still be used for generating the SQL, obtaining connections, and table introspection. However, other functions of TopLink (for example the cache) will not be used under DirectSQL.

So, why bother about DirectSQL at all? Well it can, under some circumstances, give you better performance. I have found that it is very hard to identify these circumstances and predict when it will and when it won't improve the performance. The advice is basically just to test it, and see if improves the performance or not.


What are the Gotchas?

There are some requirements that need to be fulfilled in order for this feature to work. If you have configured DirectSQL, but some of the requirements are not fulfilled, the adapter will fallback and use TopLink. It will in these cases also log a warning message why it didn't work.

The restrictions that needs to be taken into account are listed below:
  • For an Inbound Adapter you must have DeletePollingStrategy.
  • For an Outbound Adapter you can only use it with Insert.
  • It only works for flat table structures.
  • It is limited to work with String, Number, Clob, Blob and Date & Time Types only.
  • It does not work with the DetectOmissions feature.

How is it Configured?

It is configured in the adapter WSDL file:

<jca:operation
InteractionSpec="oracle.tip.adapter.db.DBWriteInteractionSpec"
DescriptorName="myService.PerfOut"
DmlType="insert"
DetectOmissions="false"
UseDirectSql="true"
OptimizeMerge="true"
MappingsMetaDataURL="myService_toplink_mappings.xml" />

Note that you in addition to setting UseDirectSql="true" you must also set DetectOmissions="false", this because DetectOmissions defaults to true.

måndag, april 07, 2008

Calling Asynchronous BPEL Process Results in ORABPEL-02118

If you try to invoke an asynchronous BPEL process that is deployed to Oracle BPEL Process Manager 10.1.3.3 or later you may end up with an ORABPEL-02118 error. Also, this problem was not seen in earlier versions of Oracle BPEL Process Manager.

This problem occurs due to that the default behaviour regarding variables for completed instances has changed between these versions. In pre 10.1.3.3 release the default behaviour were to keep global variable information along with the instance information for completed BPEL processes. In 10.1.3.3 this behaviour changed for performance reasons, so that the default behaviour is now not to keep any global variables for a BPEL process once the BPEL process has completed.

Note that you can configure this
behaviour on a process level basis by using the parameter keepGlobalVariables in the bpel.xml file for the specific process:

<BPELSuitcase>
<BPELProcess src="..." id="...">
<configurations>
<property name="keepGlobalVariables">true</property>
</configurations>
</BPELProcess>
</BPELSuitcase>

tisdag, februari 26, 2008

'Version Mismatch' Problem when Invoking a BPEL Partner Link that has Both SOAP 1.1 and SOAP 1.2 Endpoints

During a recent project we encountered a strange problem. When invoking a Partner Link that is defined towards a Web Service that has both SOAP 1.1 and SOAP 1.2 endpoints defined we got a Version Mismatch fault back. This was quite unexpected, and I assumed that doing some searches on the famous search engine using terms like 'VersionMismatch Oracle BPEL' would yield some relevant hits, but it didn't.

Suppose that you have created a Web Service that have multiple ports and bindings, for example, you have both a SOAP 1.1 and a SOAP 1.2 endpoint defined for the Web service. You have also tested the Web Service using a plain Java Client and that works fine. However, when you try to invoke the Web Service as a Partner Link from BPEL you get the following exception instead of the (expected) result:

<fault>
<remoteFault xmlns="http://schemas.oracle.com/bpel/extension">
<part name="code">
<code>VersionMismatch</code>
</part>
<part name="summary">
<summary>Version Mismatch</summary>
</part>
<part name="detail">
<detail>null</detail>
</part>
</remoteFault>
</fault>

It doesn't matter which endpoint (the SOAP 1.1 or the SOAP 1.2) you define the Partner Link to use. You end up with the exception in both cases. At a first glance it looks like BPEL is either sending a SOAP 1.1 message to the SOAP 1.2 port or sending a SOAP 1.1 message to the SOAP 1.2 port. If this occurs then the SOAP spec requires that a "Version Mismatching" fault is raised for such usage; but if this was the case - why does the error occurs regardless of which endpoint that is chosen???

Also, if you remove either of the ports & bindings from the Web Service WSDL (it doesn't matter which one) and then configures the Partner Link to use the other one, all works fine.

I do not have an explanation for this error, and have only tested it on Oracle SOA Suite 10.1.3.3.

However, there is an easy workaround to the problem:

  1. Download 2 local copies to your project of the WSDL for the Web Service.
  2. Remove one port & binding (not the same...) from each of the local WSDL copies.
  3. Define 2 Partner Links in your BPEL project, one based on each of the local WSDL copies.
  4. Implement a Switch to invoke the appropriate Partner Link in your BPEL process.

If you just have the need to invoke either of the endpoints, you of course just need to create one local copy, remove one of the ports & bindings and use this local copy of the WSDL for the Partner Link.