Friday, 14 October 2011

How to call a Java method inside a BPEL process using Java activity

Inside a BPEL process we can call a Java class to use any of its methods. This helps in reusing the Java code from existing projects or sometimes doing things in Java which are still not possible in BPEL

This is a 2 step process

Create a .jar file of the Java project

1.) Below is the screen shot of the Java class which we want to use in our BPEL process.

2.) Create a JAR file of this Java project.

Right click on the Java project and select New

Now select the Deployment Profile under General and select JAR File under Items.

Give the Name to Jar file "HelloWorldJava"

This HelloWorld.Jar goes inside the deploy folder of this project by default.

Use java class from the .jar file inside the BPEL process

Create a new SOA composite and drop a BPEL process inside composite.xml , Copy the HelloWorldJava.jar which we just created in the presious steps inside the Composite "SCA-INF/lib" folder.

Now drop a Java Embedding activity inside the BPEL process.

Inside the Java Embedding use the below code

We need to do 2 things here first include the Jar in the project and then use import statement to use those classes inside the BPEL

1.) To include the JAR in the project, double click on the project to open the project properties click on "Libraries and class path" now click "Add JAR/Directory.." and include the jar file which we have placed inside the SCA-INF/lib folder of the same project.

2.) Use Import statement inside the BPEL source code, inside the BPEL process we have to manually use Import statement to import the java class in order to use the class inside the BPEL.

Create a new variable "Greeting" of String type, inside the Java code we are passing the output of the java method to this variable, this will bring the output of the java to BPEL process.

Use a Assign activity to map the Greeting variable to output variable.

Deploy and test.


Audit Flow

The Java activity is still not that advance to give developer error details, the exceptions thrown are very confusing, if the above steps are followed life can be little easy when Java activity is used.

Best practices for using Java activity

1.) Creating JAR from JDEV
2.) Copy the JAR in the same projects SCA-INF/lib folder
3.) Include the JAR by going to "Libraries and class path".
4.) Use Import statement inside the source code of BPEL, make sure that all the import statement are included for what ever code is written inside the java acitvity, there is change in the package structure of various existing classes which are used inside 10G and 11G
example : For Java class Base64Decoder the import statement differ in 10G and 11G

10G "com.collaxa.common.util.Base64Encoder"
11G "oracle.soa.common.util.Base64Encoder"

Tuesday, July 12, 2011

Implementing MDS in Oracle SOA 11G

MDS is used as a repository for managing and reusing shared resources like XSD, WSDL, XSL files.
MDS should be implemented from day 1 of development otherwise developers will run into XSD mismatch, also during production it will be very tough to keep the XSD same.

The concept is very simple, rather than each project picking the xsd (any other file) from there project's 'xsd' folder, pick it from the common/shared folder.

Oracle SOA suite 11G provides Central MDS and Local MDS.
  • Central MDS is present inside the SOA server
  • Local MDS is a folder inside the JDeveloper

*** Ideally all the artifacts should be inside the central MDS.

We will go through step by step creating Central MDS repository for keeping XSD, use them in project and later see how to remove XSD from Central MDS.

Creating Central MDS repository for keeping XSD:

Step1.) Making MDS connection in JDeveloper

a.) Make a Database connection to MDS schema, all the XSD will get saved inside the DEV_MDS schema, this schema gets created when we run RCU.bat file, please run rcu.bat again if you have skipped it while installation.

b.) Create a new MDS connection, this MDS connection is to the Database, set the Connection type as "DB based MDS", this is actually creating MDS in the SOA server which saves all the repository files in the database (DEV_MDS).

We can now browse to the MDS repository and see what are the files inside it, this is the place where where the XSD files will come up.

Step2.) Pick the XSD files from the local system, While doing the JDeveloper installation it create a local MDS for us which is replicated in the central MDS, we will keep the XSD files in the local directory.

Go to this location on local system "Oracle\Middleware\jdeveloper\integration\seed\" and create a new folder in it 'apps' Oracle\Middleware\jdeveloper\integration\seed\apps
and paste all the XSD's you want to move to central MDS.
I have pasted here 'Employee.xsd'

Step3.) Create a simple JAR deployment profile that contains the artifacts,
Create a new SOA project in JDeveloper and select empty composite, double click on the project to go on the properties.

Create a new deployment profile with name "SharedSOACentralMDS" type "JAR File"

Click on contributors and add a new contributor.

Browse for the folder "Oracle\Middleware\jdeveloper\integration\seed\apps"

Now click on Filters to check which all files we want to put on Central MDS, this is the screen where we can decide which files will go inside the MDS

Next, we have to create a deployment profile of the type SOA Bundle at the level of the composite application.

Create a new deployment profile of type "SOA Bundle" and go on dependencies

Step4.) Deployment

Deployment success

Browse through the MDS connection we created in JDeveloper

Using files from MDS in project

Create a new BPEL process by dropping a BPEL process on composite.xml

For the input and output of this process we will refer to the XSD present in the central MDS.

Un-check the option for "copy to project" to use it from MDS and take a look at the URL "oramds:/apps/Employee.xsd"

Repeat the same for output variable too.

Now we will go inside the WSDL file and check what is the difference, instead of picking it from the xsd folder it is using "oramds:/apps/Employee.xsd" and picking it from the MDS

Deleting files from MDS

We can use Weblogic scripting tool (WLST) to delete this folder from MDS,
double click "wlst.cmd" inside C:\Oracle\Middleware\Oracle_SOA1\common\bin to start

No comments:

Post a Comment