Category Archives: BPEL

Choosing your Oracle Application Integration Infrastructure

Today I presented at ODTUG Kaleidoscope. The presentation is aimed at supporting architects and especially developers to choose the right integration infrastructure for a job.

Kscope 11 FMW Symposium

Sharing some highlights from Symposium Sunday of Kscope 2011. The two most remarkable quotes of the day are:

ADF is the “Paint by the Numbers” for web front end development.

The most common application integration tools/solutions used are Post-it and a paper notepad.

However the real gem I discovered during this first day was:

User Experience Design Patterns

Madhuri Kolhatkar has delivered a great presentation on the effort Oracle has put into creating and implementing User Experience Design Patterns. Extended information is available on the Usable Apps pages of the Oracle website. Great insight on how this can help you in developing and delivering your applications can for example for OBIEE be found on Design Patterns and Guidelines for Oracle Applications. Take special note of the Pattern Selection Tool.

Purging BPEL and ESB instances

The question on the ability to purge instances for both Oracle BPEL and Oracle ESB keeps recurring so I decided to come up with a small overview.

Oracle BPEL

  • FMW version 11.1.1.4 and up, there is a new version of the purge_soainfra_oracle.sql. Ensure that you run the purge setup scripts from the 11.1.1.4 RCU or 11.1.1.5 RCU location, respectively, as this contains the latest purge details. Details are in the SOA Admin Guide
  • FMW version 11.1.1.1 and up, there is a purge_soainfra_oracle.sql script in the RCU_HOME/rcu/integration/soainfra/sql/purge directory. In the release before 11.1.1.4 you need to apply patch 10297850 to obtain the updated purge scripts. More details are in the FMW Admin Guide on Managing Database Growth. Mark Kelderman posted on how to improve the performance of this script by adding a specific index.
  • From BPEL in SOA Suite version 10.1.3.3.1 and up, there is a purge_instances_oracle.sql script in the SOA_HOME/bpel/system/database/scripts directory.
  • For BPEL in SOA Suite version 10.1.3.1 you need patch 7162289. After applying this patch purge_instances_oracle.sql will be located at SOA_HOME/bpel/system/database/scripts.
  • In case you’re still running BPEL 10.1.2.0.2 check Oracle support document 398578.1 and document 341102.1

Oracle ESB

  • For Mediator in FMW 11g refer to the scripts and links mentioned in the BPEL paragraph.
  • To purge ESB instances in 10.1.3.4 you need to apply at least MLR#4 to have purge scripts available. There are 3 scripts available:
  • $ORACLE_HOME/integration/esb/sql/other/purge_by_date.sql
    $ORACLE_HOME/integration/esb/sql/other/purge_by_id.sql
    $ORACLE_HOME/integration/esb/sql/other/purge_by_instance_id.sql
    

Update 2011-06 SOA Suite 11gR1 PS3

Recently the SOA Suite Engineering Team published a presentation on Purging strategies in Oracle SOA Suite 11gR1 PS3. Besides the information presented in this post, the presentation goes into targeted deletion from the EM and looks into looped and parallel purges. It also mentions the use of database partitioning. That can be very useful when you have long running instances and a large installation (the presentation gives more than 500GB total OR more than 10GB daily depending on environment specifics).

Update 2011-07 Purging the Extreme Edition

Mark Kelderman posted a blog on Purging SOA Suite 11g Extreme Edition. He give a SQL script that deletes data from Mediator, BPEL, BPM, Workflow and Composite, and after that reclaims disk space.

Update Purge Oracle Service Bus

Marc Kelderman posted on his blog on Purging OSB Report Data. Besides the default way to delete the data using the console. He also gives a SQL script to purge directly in the database.

SOA 11g database growth strategies

In January of 2012 the Oracle Fusion Middleware whitepaper on database growth strategies was published. The advice presented should facilitate better dialog between SOA and Database administrators when planning database and host requirements. An important aspect of the whitepaper is purging of the SOA database.

Related documentation:

Updated purging strategies on Oracle Support

purging in OFM 11gAs part of the Oracle Fusion Middleware (FMW) SOA 11g Infrastructure Database: Installation, Maintenance and Administration Guide [ID 1384379.1] A purging guide has been published to offer strategies and procedures for managing database growth in a production SOA 11g implementation.
Purging is not supported for MS SQL Server out of the box or through a patch in any version of 11g. The provided scripts can, however, be used as a solid base from which to create usable purge scripts for SQL Server.

SOA and E20 Partner Community Forum – 2

Some notes and dump of thoughts on the second day of the SOA and E20 Partner Community Forum. A day filled with interesting breakout sessions. Some of them were discussing roadmaps and future developments in the stack, and thus subjective to an NDA.

SOA platform

Again after this session I came to the conclusion that in my opinion BAM is used too little.

During the session was raised whether people in the audience were using non-Oracle databases as dehydration store and Meta Data Store. The mainstream is using Oracle as dehydration store. And although it is certified, it is advised to use Oracle as the database for this purpose. On the Application Server, given the maturity of the J2EE platform, there is less discomfort in operations to deploy the SOA Suite on a non-Oracle App Server.

ADF

Only today I found out that there is an interesting JDeveloper 11g extension. The extension validates ADF code quality. Seems an interesting extension to check code quality besides the already available Java tools.

BPM

When comparing BPEL and BPM and looking into when to use what tool, the following was stated: For all things with human interaction BPM is the tool of choice. In integration driven appraoches BPEL is the tool of choice.

In Oracle point of view BPM includes:

  • People
  • Systems
  • Documents

without the need for separate platforms.

Example of a custom Spring Java worklist application for Oracle BPM.

Using Quartz with SOA Suite 11g

Already in 2006 Clemens posted on scheduling BPEL processes. More recently with BPEL in SOA Suite 11g a bug ( 8927175: PROVIDE QUARTZ SCHEDULER) was submitted. The rquest text:

The product does not have schedular to schedule BPEL processes. Need to schedule the BPEL processes through SOA11G and not through unsupported softwares(Quartz).

And the business need:

Some processes need to be scheduled at a particular time and at a particular day and should not be started Manually, increases the maintenance cost of the software.

These together indicate a clear need to schedule reoccurring processes. Although I’m not so sure that this functionality should be provided by this platform. One could see advantages in centralizing all scheduling task. There a good commercial product available for cases like that (Redwood’s Cronacle for example).

On Oracle Technet there is a good document on Configure a SOAScheduler for a composite in SOA Suite 11.

One Job, multiple Schedules

We need a Class that implements Job. Something like:

package net.deltalounge.quartzdemo;
 
import java.util.Map;
 
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
 
public class DemoJob implements Job {
    public DemoJob() {
        super();
    }
 
  public void execute(JobExecutionContext context)
     {
      Map dataMap = context.getJobDetail().getJobDataMap();
      RunMeTask task = new RunMeTask();
      String someString ="init";
      someString = context.getTrigger().getName();
      System.out.println("Quartz demo output: "+someString);      
    }
}

And we need a Class that creates and starts the Scheduler. This Class can also schedule the jobs. Here we actually see that although one Job Class is enough we need to declare mutiple JobDetails.

package net.deltalounge.quartzdemo;
 
import java.util.Map;
 
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
 
public class QuartzAppCronTrigger {
  public static void main( String[] args ) throws Exception
      {
        //scheduler task details
        JobDetail job = new JobDetail();
        job.setName("someJob");
        job.setJobClass(DemoJob.class);
        //
        JobDetail job2 = new JobDetail();
        job2.setName("someOtherJob");
        job2.setJobClass(DemoJob.class);
 
        //configure scheduler time
        CronTrigger trigger = new CronTrigger();
        trigger.setName("someJobTrigger");
        trigger.setCronExpression("0/30 * * * * ?");
 
        //configure scheduler time 2
        CronTrigger trigger2 = new CronTrigger();
        trigger2.setName("someOtherTrigger");
        trigger2.setCronExpression("0/20 * * * * ?");
 
        //create the schedule
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
        scheduler.scheduleJob(job2, trigger2);
      }
 
}

If you don’t define multiple jobs prepare for an error like:

Exception in thread "main" org.quartz.ObjectAlreadyExistsException: Unable to store Job with name: 'someJob' and group: 'DEFAULT', because one already exists with this identification.
	at org.quartz.simpl.RAMJobStore.storeJob(RAMJobStore.java:222)
	at org.quartz.simpl.RAMJobStore.storeJobAndTrigger(RAMJobStore.java:195)
	at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:732)
	at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:265)
	at net.deltalounge.quartzdemo.QuartzAppCronTrigger.main(QuartzAppCronTrigger.java:36)

Install OSB next to VirtualBox SOA Suite 11g Appliance

In this post will show you how to install the Oracle Service Bus on the VirtualBox SOA Suite 11g appliance. For this demo we used a pretty straightforward installation scheme.

Oracle WebLogic Server installation

Download wls1033_oepe111150_linux32.bin for installation on Linux. Install using the command ./wls1033_oepe111150_linux32.bin:

Install WebLogic 10.3.3


The following screenshots will give you a good idea of the installation flow.

Oracle Service Bus installation

Start the Disk1/runInstaller.sh and specify the JRE/JDK location /oracle/osbhome/jdk160_18/.

Install Oracle Service Bus


This sequence of screenshots gives you a good impression.

Configure a WebLogic Domain

Configure a Domain using the Oracle Fusion Middleware Configuration Wizard using ./config.sh in the /oracle/osbhome/oracle_common/common/bin directory.
Configuring a WLS Domain
A straightforward configuration of the WLS Domain requires the following steps:


Start WebLogic

./startWebLogic.sh and Have Fun!

Another easy way to test drive SOA Suite and BPM 11g R1 PS2

In June an AMI (Amazon Machine Image to use on the EC2 platform) for SOA Suite and BPM 11g R1 PS2 became available. In the last days it was announced that a VirtualBox Appliance is available. The timing, just before Oracle OpenWorld 2010 cannot be a coincidence…

This appliance contains a fully configured, ready-to-use SOA/BPM 11g R1 installation. It contains the following software:

  • Oracle Enterprise Linux 5 Update 4
  • Oracle XE Universal database 10.2.0.1
  • Oracle WebLogic Server 10.3.3.0
  • SOA Suite 11gR1 PS2
  • BPM Suite 11gR1 PS2 (with bundle patch #1)
  • BAM 11gR1 PS2
  • B2B 11gR1 PS2
  • JDeveloper 11.1.1.3

The download and setup instructions can be found on Oracle Technet.

Configuring SOA Infrastructure for SOAP optimization

SOA Infrastructure Common SettingsIn the 10g release of Oracle SOA Suite you could set properties to instruct web service calls to go via SOAP or not. If you were calling services on the same server or domain you could gain some performance with a native call and avoiding the SOAP overhead. To do this you would set the optSoapShortcut property.

With SOA Suite 11g on WLS SOAP optimization is automatically configured. In the scenario where you upgraded to 11g R1 and are using this optimization shortcut approach, you should specify the Server URL in the SOA Infrastructure Common Settings. Optimized calls are only active when the host name value (referred to as WSDL URL in the composite.xml) matches the Server URL.

To configure the SOA Infrastructure Common Settings choose from the SOA Infrastructure Menu > SOA Administration > Common Properties. As shown in the screenshot. Other access ways to this configuration screen are described here.

Set the Server URLEnter the server URL in the Server URLs section. This URL is published as part of the SOAP address of a service in the concrete WSDL file. Either set both values to the host name (for example, myhost) or to the full domain name (for example, myhost.domain.com). If these values do not match, a regular SOAP call is performed instead of an optimized local call.

One of the scenarios that you have to set the Server URL in order to use the optimized local call is after a migration of AIA to AIA 11g R1.

AIAMigrationUtility fails for AIAAsyncErrorHandlingBPELProcess

While using the AIAMigrationUtility the following error occurs:

1
2
3
4
5
6
7
8
9
[exec]   [upgrade] Jul 26, 2010 3:02:04 PM oracle.viewgen.ViewGenerator main
[exec]   [upgrade] SEVERE: Upgrade failed. Check the logs for any exceptions. Ensure that the WSDL URLs specified in the project are reachable and a valid 10.1.3.x project is used for upgrade. Before re-attempting upgrade, restore the original project code source from the backup directory.
[exec]   [upgrade] oracle.j2ee.ws.wsdl.LocalizedWSDLException: WSDLException: faultCode=OTHER_ERROR: Failed to read WSDL from http://serverdomain:8001/orabpel/default/AIAAsyncErrorHandlingBPELProcess/1.0/AIAAsyncErrorHandlingBPELProcess?wsdl:WSDL not found
[exec]   [upgrade]         at oracle.viewgen.plugin.bpel.BPELPlugin.createComponentType(BPELPlugin.java:172)
[exec]   [upgrade]         at oracle.viewgen.ViewGenerator.main(ViewGenerator.java:223)
[exec]   [upgrade] Caused by: oracle.j2ee.ws.wsdl.LocalizedWSDLException: WSDLException: faultCode=OTHER_ERROR: Failed to read WSDL from http://serverdomain:8001/orabpel/default/AIAAsyncErrorHandlingBPELProcess/1.0/AIAAsyncErrorHandlingBPELProcess?wsdl:WSDL not found
[exec]   [upgrade]         at oracle.j2ee.ws.wsdl.xml.WSDLReaderImpl.openAsStreamConnection(WSDLReaderImpl.java:541)
[exec]   [upgrade]         at oracle.j2ee.ws.wsdl.xml.WSDLReaderImpl.readDocument(WSDLReaderImpl.java:427)
[exec]   [upgrade]         at oracle.j2ee.ws.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:366)

There is a regular expression in the replaceAIAAsyncURL target that doesn’t handle the versioned url. You can either replace it so it allows for version numbering:

1
2
<replaceregexp match="http://[\S&amp;&amp;[^/]]+(?::\d
+)??/orabpel/default/AIAAsyncErrorHandlingBPELProcess/.*AIAAsyncErrorHandlingBPELProcess\?wsdl"

or manually alter the bpel.xml files replacing the

1
http://serverdomain:8001/orabpel/default/AIAAsyncErrorHandlingBPELProcess/1.0/AIAAsyncErrorHandlingBPELProcess?wsdl

with

1
http://fmw11g-server:8001/soa-infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL

or the versioned wsdl of the Async error handling.

Restart a failed AIA 11g R1 installation

In this blogpost I’ll share some steps you can take to get your AIA 11g R1 installation back on track. If you do not perform the Pre-Installation Configurations as described in the Foundation Pack 11g Release 1 (11.1.1.2.0) Installation Guide (available as partnumber E17949-01 via eDelivery), it is possible that your AIA installation fails. After checking the pre-installation configuration it is possible to start the installation again if you follow these steps:

  1. Navigate to /user_projects/domains/ and delete the edit.lok file.
  2. Delete any file located in /user_projects/domains//pending
  3. Log into the weblogic console and activate all the changes.
  4. Restart SOA Suite and Weblogic domain.
  5. Press retry button on the installation screen

If the installation screens are no longer available because you closed them, use the log files to figure out what targets haven’t been performed yet and run these targets (in the sample case below it were Deployments and PostInstallScript):

Move to the /aia30/aia_instances/aia30poc/bin and source ./aiaenv.sh.

ant -f /aia30/Infrastructure/Install/AID/AIAInstallDriver.xml -DDeploymentPlan=/aia30/config/FPInstallDP.xml -DPropertiesFile=/aia30/config/AIAInstallProperties.xml Deployments

ant -f /aia30/Infrastructure/Install/AID/AIAInstallDriver.xml -DDeploymentPlan=/aia30/config/FPInstallDP.xml -DPropertiesFile=/aia30/config/AIAInstallProperties.xml PostInstallScript