Tuesday, December 30, 2008

More options in Native Format Builder

INTRODUCTION:
This wizard helps you in creating XSDs for your sample files. This is used to create a native schema file from formats such as:- comma-separated value (CSV), fixed-length file, data type description (DTD), and Cobol Copybook.

SCENARIO:
Suppose you need to create a schema file for a pipe-delimeter or $ delimeter sample file. If you closely look into the options provided under Step 5 of 7 (If you select Delimited Radio button in Step1 of 7) in Native Format Builder, you will see only 5 options available i.e. Single Space, Comma, Semicolon, White space (any number of tab, space) and Tab.
Then how to create a pipe-delimeter or $ delimeter schema file??

SOLUTION:
Goto options provided under Step 5 of 7 (If you select Delimited Radio button in Step1 of 7) in Native Format Builder.
In the Fields ->Delimited by drop down option, double click. A pointer will appear. Now instead of using drop down option manually type the |(pipe).

Then finish off the wizard. Your work is done..So simple.
The pipe delimited file schema file is ready to use.

Keep learning and stay connected to SOA.

WISHING ALL THE BLOG READERS A VERY HAPPY NEW YEAR 2009.

Friday, December 26, 2008

Magikkk of 'Translate'

Ahhh...Writing blog after a longtime. During this time, got an oppurtunity to diagonise BPEL...so now thinking of sharing some of my knowledge and experiences with all.

INTRODUCTION:
Here I am going to discuss a very small function of XSLT:- TRANSLATE.
Translate function returns inputString with occurrences of characters in fromString replaced by the character at the corresponding position in toString. This function takes 3 parameters.

SYNTAX: translate(inputString as string,fromString as string,toString as string)

SCENARIO:
If we deal in currency values, often we see that the value is separated by commas. For example, Value1=2,000,000/Value2=3,000/Value3=30,000

Now suppose you need to store this value in the database. To acheive this you need to remove all the commas from the incoming value. For this purpose we have to use the TRANSLATE function.

SOLUTION:
For the above scenario, use Translate as:
translate(inputString as string,fromString as string,toString as string)

Here,
inputString as string= Your input XPath, for instance, /ns0:Order/ns0:Lines/ns0:UnitPrice/ns0:Money
fromString as string=","
toString as string=""

Now use a conversion function 'Number' to convert the string in number. Thats it and you are done.
Hope I have cleared my point.

Keep learning with me and MERRY CHRISTMAS to all the readers.

Tuesday, November 18, 2008

What, if you forget the Password?

PROBLEM:
What, if you forgot the password for logging into BPEL, ESB or EM? Is there any way to reset it?

SOLUTION:
Step-wise solution to the above problem is mentioned below:

1) Look for the file system-jazn-data.xml under location:
SOA_HOME/j2ee/<home_container>/config
2) Open the file system-jazn-data.xml in your editor.
3) Edit credentials tag for the corresponding name tag as shown below:
<name>oc4jadmin</name>
.
.
<credentials>!<your_new_password></credentials>

Note:Do remember to add ! sign before your password.
4) Restart the SOA Server.
5) You are all set to use new paasword.

Note2: If you encounter any errors after doing this, follow the steps provided in my blog dated 21st June 2008.

Keep learning with me.

Saturday, November 15, 2008

Timed out problem of OPMN

PROBLEM:
Why OPMN (SOA Server) sometime gives timed out message/error during shutdown?

SOLUTION:
Here is the solution. To resolve this issue:
1) Shutdown OPMN completely
2) Goto the location where resides opmn.xml and edit it.
3) Add the -Djava.net.preferIPv4Stack=true option to all the start/stop-args command sections.

EXAMPLE:
<ias-component id="default_group">
<process-type id="home" module-id="OC4J" status="enabled">
<module-data>
<category id="start-parameters">
<data id="java-options" value="-Xrs -server -XX:MaxPermSize=128M -ms512M -mx1024M -XX:AppendRatio=3 -Djava.net.preferIPv4Stack=true -Djava.security.policy=$ORACLE_HOME/j2ee/home/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false -Doraesb.home=C:\product\10.1.3.1\OracleAS_1\integration\esb -Dhttp.proxySet=false -Doc4j.userThreads=true -Doracle.mdb.fastUndeploy=60 -Dorabpel.home=C:\product\10.1.3.1\OracleAS_1\bpel -Xbootclasspath^/p:C:\product\10.1.3.1\OracleAS_1\bpel/lib/orabpel-boot.jar -Dhttp.proxySet=false"/>
</category>
<category id="stop-parameters">
<data id="java-options" value="-Djava.net.preferIPv4Stack=true -Djava.security.policy=$ORACLE_HOME/j2ee/home/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false"/>
</category>
</module-data>
<start timeout="600" retry="2"/>
<stop timeout="300"/>
<restart timeout="720" retry="2"/>
<port id="default-web-site" range="8888" protocol="http"/>
<port id="rmi" range="12401-12500"/>
<port id="rmis" range="12701-12800"/>
<port id="jms" range="12601-12700"/>
<process-set id="default_group" numprocs="1"/>
</process-type>
</ias-component>

Keep learning with me...

Wednesday, October 15, 2008

Oracle JDeveloper 11g Released

Introduction:
Oracle JDeveloper 11g showcases new features to provide a full development environment for Java EE 5 – including EJB 3.0 and JSF 1.2 – and rounded out with new features for AJAX developers, including an impressive new ADF Faces rich client set of components as well as Javascript editing and debugging.

JDeveloper 11g marks a significant milestone in the progress of application development.Web services development is greatly improved with updated support for JAX-WS, a complete Web services test framework, and a comprehensive WSDL editor. There are also many developer productivity enhancements to the IDE and Java development features to explore. And, building applications with Oracle ADF has been dramatically improved with the addition of ADF Faces rich client, a new JSF-based ADF controller framework, and countless productivity-boosting enhancements.

JDeveloper now makes use of an installer to prevent errors during installation.

Features of the installer include:
a. Platform-specific(native) installers for Windows & Linux,including a bundled JDK.
b. Generic installer (without a JDK) for all other platforms.
c. Install into a new or existing Middleware home.
d. Perform a complete installation, or install just the components you need.
e. Create shortcuts in the Start menu on Windows.
f. QuickStart page after installation provides easy access to common tasks.
g. Installer supports 3 modes: GUI/graphical, console, and silent.

For more information, you can visit:
http://www.oracle.com/technology/products/jdev/collateral/papers/11/newfeatures/index.html

BPEL : ORABPEL-11622

Problem:
A "javax.transaction.RollbackException" is thrown when BPEL PM is under heavy load.

Error:
Caused by: ORABPEL-11622
Could not create/access the TopLink Session.
This session is used to connect to the datastore. [Caused by: Transaction has been marked for rollback: Timed out]
See root exception for the specific exception. You may need to configure the connection settings in the deployment descriptor
(i.e. $J2EE_HOME/application-deployments/default/DbAdapter/oc4j-ra.xml) and restart the server. Caused by Exception [TOPLINK-23005]
(Oracle TopLink - 10g Release 3 (10.1.3.1.0) (Build 061004)):
oracle.toplink.exceptions.TransactionException
Exception Description: Error binding to externally managed transaction
Internal Exception: javax.transaction.RollbackException: Transaction has been marked for rollback

Solution:
A step by step solution for this error is shown as under:
a. Goto SOA_HOME/bpel/domains//config

b. Open domain.xml and change syncMaxWaitTime to 1800.
(If the existing value is more than this don't make any changes here)

c. Goto SOA_HOME/j2ee/OC4J_SOA/application-deployments/orabpel/ejb_ob_engine

d. Open orion-ejb-jar.xml and change all the transaction-timeout values to 3600. (If the existing value is more than this don't make any changes here).

e. Goto SOA_HOME/j2ee/OC4J_SOA/config

f. Open transaction-manager.xml and change transaction-timeout value to 7200. (This value you could use as high as 60000, if needed).

Thursday, October 9, 2008

Setting Log level

Setting Log Level for BPEL

Steps:
1) Log in BPEL Console
2) Click on Manage BPEL Domain
3) Goto auditLevel and set the property to production, then click Apply.
4) Goto Logging, on the same page, and set all loggers to error and click on Apply.

Keep Learning...

Tuesday, October 7, 2008

Setting for oc4j-ra.xml

Oracle recommends to modify the container settings in oc4j-ra.xml. By doing so, it increases the performance of the SOA server.

Steps:
1) Goto the location SOA_HOME/j2ee/oc4j_soa/application-deployments/default/DbAdapter

2) Open the file oc4j-ra.xml

Default Value:
<connection-pooling use="none">
</connection-pooling>

New Value:
<connection-pooling use="private">
<property name="waitTimeout" value="300"/>
<property name="scheme" value="fixed_wait"/>
<property name="maxConnections" value="100"/>
<property name="minConnections" value="0"/>
</connection-pooling>

3) Similarly, open the file oc4j-ra.xml present under location:
SOA_HOME/j2ee/oc4j_soa/application-deployments/default/AqAdapter

4) Change the default value to the New value as shown above for DB Adapter.

5) Bounce the SOA Server.

Keep Learning with me...

Monday, September 29, 2008

Using 'DirectSQL'

Introduction:
This is a feature of the Database Adapter. Oracle claims that by using it, it will improves the performance. This option is available from 10.1.3 version onwards.
It will let you 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 e.g. the cache option, will not be used under DirectSQL.

Restrictions:
The restrictions that needs to be taken into account are listed below:

1) Only works for flat table structures.
2) For an Inbound Adapter you must have DeletePollingStrategy.
3) For an Outbound Adapter you can only use it with Insert.
4) Limited to work with String, Number, Date, Time, Clob and Blob DataTypes only.
5) Does not work with the DetectOmissions feature.

Configuration:
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" />

Addition setting:
You must also set DetectOmissions="false", this because DetectOmissions defaults to "true".

ORABPEL-02118

Problem:
This ORABPEL error will drive you crazy. This error occurs when you try to invoke an asynchronous BPEL process that is deployed to Oracle BPEL Process Manager 10.1.3.3 or later.

Solution:
I got the solution for this error over Internet & thought of sharing this with my blog readers.
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 or later, 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.

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>

Friday, September 12, 2008

XSLT: Remove NameSpaces

This post will guide how to strip the namespaces from qualified XML document. This is most common requirement which comes during working.

Problem: Stripping all 'xmlns' attributes from qualified XML document

Solution:
Here is an XSLT that you can use to strip all namespaces from XML document:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xsl">
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@* | text()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>


Learn with me...Way to go...

Human Task Patterns

Here I am going to give a overview of different patterns related to Human Workflow.

Simple Workflow:
In simple workflow some user activity is required for the business process to carry on. The business process may still continue, if human task expires, along some other flow.

Simple Workflow with Auto Escalation:
When a human task expires, the task can then be escalated to assignee’s manager (default rule) or to some other person, as specified by the Escalation Function.

Simple Workflow with Auto Renewal:
Renewal differs from Escalation, in terms, when the task is escalated; it goes to some other person, when renewed, the task is reassigned to the same user.

Sequential Workflow:
This pattern routes the human task to business users in a sequential manner.

Sequential Workflow with Escalation:
In case some user is not performing an action for desired time, his task could be escalated to his supervisors.

Parallel Workflow:
When multiple users work on a single task at a given point of time, for example, Public suggesions.

Adhoc Workflow:
The task is assigned to a user, where he decides where the task should go next, and completes when one of the assignees finally work on the task.

FYI Tasks:
FYI tasks are those which just allow the assignees to add comments/attachments, but their action does not affect the execution of business process.

External Routing Service:
When a third party routing algorithm determines the assignment and routing policy.

Task Continuation:
Task continuation where in the history, attachments and comments are accessible from the previous task. An example could be if you wish to implement Parallel workflow with final reviewer. The first task would be a group vote, and in second task, you can check task continuation, for the reviewer to understand basis of vote, if need be.

Wednesday, September 10, 2008

ESB Debugging

This blog of mine will focus on how to enable debugging for ESB. Here I am providing a step-by-step procedure to enable debugging. By doing this you can diagonose and troubleshoot your ESB related issue in much better way.

STEPS:

1. Login to SOA Enterprise Manager.
2. Click on the appropriate container name(HOME/OC4J_SOA).
3. Click on Administration link.
4. Click on Logger Configuration icon.
5. In the Search field type ESB and press 'enter' or 'Go' button.
6. The search result will give you the list of services related to ESB.
7. Go through the list, choose and set the appropriate service to FINEST.
8. Restart the container.

Thats it. You are done with the configuring ESB debugging.

I am also providing the list of log files which you need to see/refer at the time of any issues, for troubleshooting ESB.

LIST OF LOG LOCATIONS:

1. SOA_HOME/opmn/logs/opmn.log
2. SOA_HOME/j2ee/OC4J_SOA/log/OC4J_SOA_SOA_GROUP/oc4j/log.xml
3. SOA_HOME/opmn/logs/SOA_GROUP~OC4J_SOA~SOA_GROUP~1.log
4. SOA_HOME/j2ee/OC4J_SOA/application-deployments/esb-rt/OC4J_SOA_SOA_GROUP/application.log
5. SOA_HOME/j2ee/OC4J_SOA/application-deployments/esb-dt/OC4J_SOA_SOA_GROUP/application.log


Keep Learning with me....Happy Learnings...

Thursday, August 21, 2008

ESB Error: I Hate Spaces

In this blog entry I am going to deal with a very common problem related to ESB which people experience.
Problem:
The error which I am discussing it here occurs when you click on the services already registred on ESB Console.

Create a simple ESB project, deploy it to the Integration Server. Login to the ESB Control. When you click on any of the services in ESB Control, you receive the following pop-up error:

"The metadata XML that was processed does not comply with the ESB Metadata XML Schema.
Cause: Invalid text 'esb:///ESB_Projects/ESB_TEST/PollDB.wsdl' in element: 'wsdlURL'.

If you are manually editing the Import Files, ensure that the metadata is valid and well formed. Otherwise, this is an Internal Error. Contact Oracle Support."

Solution:
The solution is pretty simple. This error occurs when the Application name contains spaces. The application name in JDeveloper must not contain spaces.

EXAMPLE1: ESB Test Appl (Wrong Application Name)
EXAMPLE2: ESB_Test_Appl (Right Application Name)

Bingo......

Keep Learning with me...

Friday, August 15, 2008

ORABPEL-13080

During working on MQ Adapter for one of the clients project, I faced this problem so thought of posting it in my blog.

Error Summary:
org.collaxa.thirdparty.apache.wsif.WSIFException: esb:///ESB_Projects/Jdev-Abhishek_ESP200011/ESP_PLF_JLE_JLN_IncomingMQAdapter.wsdl [
Enqueue_ptt::Enqueue(schedule) ] - WSIF JCA Execute of operation 'Enqueue' failed due to: Error.
"[MessageProducer] Error while putting message in PORTAL.PUBLISHER.ERRORS "
; nested exception is:
ORABPEL-13080
Error.
"[MessageProducer] Error while putting message in PORTAL.PUBLISHER.ERRORS "
Contact oracle support if error is not fixable.

Solution:
ORABPEL-13080 error is associated with the MQ Adapter. I have identified two possible cause for this error:

1) Queue is full.
2) Queue not accessible.

So to get rid of this error, either check your MQ Adapter connection details and priviledge or Clear the unwanted messages from the Queue.

Thats it...Keep Learning...

Wednesday, August 13, 2008

Using orcl:sequence-next-val

Recently this question was asked to me as a comment to one of my post. I have replied to the comment. I also felt to post this as a blog so that it can prove beneficial to others. Here it goes...

INTRODUCTION:
The function orcl:sequence-next-val takes 2 parameters. It return the next value of an Oracle sequence. It is similar to sequence generation what we see in Oracle SQL.

How to proceed:
First of all you need to drag that function to the tranformation swimlane.
Create a database sequence in Database, say,TEST. This will be the first parameter for the orcl:sequence-next-val function.

The second parameter will be your database connection details, i.e. the database in which your source table is defined.
Suppose your database is having details as:
Username: abhi
Password: abhishek
Host: 172.128.5.13
Port: 1521
SID: Oracle

so the second parameter will look like this:
'jdbc:oracle:thin:abhi/abhishek@172.128.5.13:1521:Oracle'

or for the second parameter you can add a datasource entry in data-sources.xml file under soa_home\j2ee\oc4j_soa\config.

Say the datasource name is BPEL_DBS. so the function will look like,
orcl:sequence-next-val('TEST','jdbc/BPEL_DBS')

After doing this, map it to the destination field.

Your are done...Happy Learnings...

Friday, August 8, 2008

File Adapter : Hidden Treasure-2

Getting File Size

I am assuming that people reading this blog know how to get the File name and the input directory of the file. In this blog entry I will demonstrate an another aspect of File Adapter i.e. getting the input file size.
Note:- If you don't know about getting file name & input directory, refer to my blog entry dated 14th June 2008.

Introduction:
If you see the fileAdapterInboundHeader.wsdl file in Jdeveloper, you will notice that this wsdl is containing only two elements i.e. fileName and directory. Now If you goto the BPEL Console and look closely at the variable part (which contains file name and directory information), you will notice that at runtime Assign activity is displaying 5 elements. So I felt that somehow I can get the file size too. Its pretty simple.

Solution:
To acheive it, just you have to modify the fileAdapterInboundHeader.wsdl file. Note that the fileAdapterInboundHeader.wsdl is a read-only file so to modify it, you have to remove the read-only permission. After removing the permission you can edit the code.

After change, the code will look like this:


Note the highlighted element "size" below the directory element. After doing the changes, apply the read-only permission back to the file(not necessary).

Now you will be able use the size attribute in your assign activity.

Pretty cool stuff...right..

Have a Happy Happy learning...

BPEL : PURGING INSTANCES

Here I am providing various flavors of Purging BPEL instances.

Following options will be covered:

1) Purges instance for a particular domain, for particular state
and for particular specified period from the BPEL dehydration store.
SUBJECT:PURGE INSTANCE-1

2) purges instance for a particular domain,version and between specified period for any state other than state 0 and 1 from the BPEL dehydration store.
SUBJECT:PURGE INSTANCE-2

3) Purges all the instance in one go from the dehydration store. (Handle with care)
SUBJECT:PURGE INSTANCE-3

All you need to do is, run the code under ORABPEL Schema. So scroll down and enjoy the show.

Happy Learnings.....

BPEL: Purging Instances-3

INTRODUCTION:

This script purges all the instance in one go from the dehydration store. This script is useful in a developement environement. It is the faster way by which you can clear the dehydration store.

Guideline for using this code:
1. Don't run this script until you are very much sure of deleting all the instances from the dehydration store.
2. First stop the BPEL instance via Enterprise manager then run this script.


truncate table cube_instance;
truncate table cube_scope;
truncate table work_item;
truncate table wi_exception;
truncate table document_ci_ref;
truncate table document_dlv_msg_ref;
truncate table scope_activation;
truncate table dlv_subscription;
truncate table audit_trail;
truncate table audit_details;
truncate table sync_trail;
truncate table sync_store;
truncate table dlv_message;
truncate table invoke_message;
truncate table ci_indexes;
alter table cube_instance deallocate unused;
alter table cube_scope deallocate unused;
alter table work_item deallocate unused;
alter table wi_exception deallocate unused;
alter table document_ci_ref deallocate unused;
alter table document_dlv_msg_ref deallocate unused;
alter table scope_activation deallocate unused;
alter table dlv_subscription deallocate unused;
alter table audit_trail deallocate unused;
alter table audit_details deallocate unused;
alter table sync_trail deallocate unused;
alter table sync_store deallocate unused;
alter table dlv_message deallocate unused;
alter table invoke_message deallocate unused;
alter table ci_indexes deallocate unused;
alter table cube_scope enable row movement;
alter table cube_scope shrink space compact;
alter table cube_scope shrink space;
alter table cube_scope disable row movement;
alter table cube_instance enable row movement;
alter table cube_instance shrink space compact;
alter table cube_instance shrink space;
alter table cube_instance disable row movement;
exec dbms_utility.analyze_schema('ORABPEL', 'Compute');


Happy Learnings....

BPEL: Purging Instances-2

INTRODUCTION:

This procedure purges instance for a particular domain,version and between specified period for any state other than state 0 and 1 from the dehydration store.
Note:This procedure is calling another procedure 'delete_ci'.Procedure 'delete_ci' deletes a cube instance and all rows in other Collaxa tables that reference the cube instance.

-- ** It is possible to purge the instances all at once, but by doing that it will remove all the instances. This is nice during development. But in a production environment you want to have a controlled way. This procedure will do the work.

Guidlines for using this code:
1. Don't call this procedure until you are too sure of deleting the instances.
2. First stop the BPEL instance via Enterprise manager then run this procedure.
3. For running the code, pass the date fields in oracle standard format i.e DD-MON-RR format.

CODE:
CREATE OR REPLACE PROCEDURE sp_purge_instances_per_process (
p_domain_name IN VARCHAR2,
p_process_name IN VARCHAR2,
p_version IN VARCHAR2,
p_from_date IN VARCHAR2,
p_to_date IN VARCHAR2
)
/*

CODING BY: ABHISHEK SAURABH
CREATION DATE: 15-OCTOBER-2007
LAST MODIFIED: 15-OCTOBER-2007

*/
IS
CURSOR c (
v_domain_name IN VARCHAR2,
v_process_name IN VARCHAR2,
v_version IN VARCHAR2,
v_from_date IN VARCHAR2,
v_to_date IN VARCHAR2
)
IS
SELECT cie.cikey cikey, dmn.domain_id domain_id,
cie.process_id process_id, cie.revision_tag revision_tag,
cie.creation_date creation_date, cie.domain_ref domain_ref
FROM cube_instance cie, domain dmn
WHERE cie.domain_ref = dmn.domain_ref
---- the name of the domain
AND upper(dmn.domain_id)=upper(v_domain_name)
AND cie.creation_date between v_from_date and v_to_date
AND upper(cie.process_id)=upper(v_process_name)
AND cie.revision_tag LIKE v_version;
BEGIN
FOR r IN c (p_domain_name, p_process_name, p_version, p_from_date,p_to_date)
LOOP
DBMS_OUTPUT.put_line ( 'Purge '
|| r.process_id
|| '('
|| r.revision_tag
|| ')'
|| ' created on '
|| TO_CHAR (r.creation_date,
'YYYY-MM-DD HH24:MI:SS')
);
collaxa.delete_ci (r.cikey);

-- -- also workflow tasks --
DELETE FROM wftask wfn
WHERE wfn.instanceid = r.cikey;
END LOOP;
-- invoked messages

DELETE FROM invoke_message ime
WHERE ime.domain_ref IN (SELECT dmn.domain_ref
FROM domain dmn
WHERE upper(dmn.domain_id)=upper(p_domain_name))
AND ime.state > 1
AND upper(ime.process_id)=upper(p_process_name)
AND ime.revision_tag LIKE p_version
AND ime.receive_date between p_from_date and p_to_date;

DBMS_OUTPUT.put_line ('-> #invoke msg ' || SQL%ROWCOUNT);

-- callback messages
DELETE FROM dlv_message dme
WHERE dme.domain_ref IN (SELECT dmn.domain_ref
FROM domain dmn
WHERE upper(dmn.domain_id)=upper(p_domain_name))
AND dme.state > 1
AND upper(dme.process_id)=upper(p_process_name)
AND dme.revision_tag LIKE p_version
AND dme.receive_date between p_from_date and p_to_date;

DBMS_OUTPUT.put_line ('-> #callback msg ' || SQL%ROWCOUNT);
END sp_purge_instances_per_process;


It seems...coding has become my habit. :))

BPEL: Purging Instances-1

INTRODUCTION:
This procedure purges instance for a particular domain,for a particular state and for particular specified period from the BPEL dehydration store.

Note: This procedure is calling another procedure 'delete_ci'.
Procedure 'delete_ci' deletes a cube instance and all rows
in other Collaxa tables that reference the cube instance.
***********************************************************************
Guideline for running the code:
1. Pass the date fields in oracle standard format i.e DD-MON-RR format
2. Pass the state code depending upon the requirement.

STATE CODE----------STATE NAME
0----------------------Initiated state
1----------------------Open,Running state
2----------------------Open, Suspended state
3----------------------Open,Faulted state
4----------------------Closed,Pending-Cancel state
5----------------------Closed,Completed state
6----------------------Closed,faulted state
7----------------------Closed,Cancelled state
8----------------------Closed,aborted state
9----------------------Closed,Stale state
***********************************************************************
CODE FOR PURGING:
CREATE OR REPLACE PROCEDURE sp_purge_instances_per_state (
p_domain_name IN VARCHAR2,
p_state IN NUMBER,
p_from_date IN VARCHAR2,
p_to_date IN VARCHAR2
)
/*
CODING DONE BY: ABHISHEK SAURABH
CREATION DATE: 12-OCTOBER-2007
LAST MODIFIED: 18-OCTOBER-2007

Note:
1. Don't call this procedure until you are too sure of deleting the instances.
2. First stop the BPEL instance via Enterprise manager then run this procedure.
*/

IS
CURSOR c (
v_domain_name IN VARCHAR2,
v_state IN NUMBER,
v_from_date IN VARCHAR2,
v_to_date IN VARCHAR2
)
IS
SELECT cie.cikey cikey, dmn.domain_id domain_id,
cie.state state,cie.creation_date creation_date, cie.domain_ref domain_ref
FROM cube_instance cie, domain dmn
WHERE cie.domain_ref = dmn.domain_ref
---- the name of the domain
AND upper(dmn.domain_id)=upper(v_domain_name)
AND cie.creation_date between v_from_date and v_to_date
AND cie.state=v_state;
BEGIN
FOR r IN c (p_domain_name, p_state, p_from_date,p_to_date)
LOOP
DBMS_OUTPUT.put_line ( 'State code '
|| r.state
|| ' created on '
|| TO_CHAR (r.creation_date,
'YYYY-MM-DD HH24:MI:SS')
|| ' is purged.'
);
collaxa.delete_ci (r.cikey);
-- also workflow tasks --
DELETE FROM wftask wfn
WHERE wfn.instanceid = r.cikey;
END LOOP;
-- invoked messages
DELETE FROM invoke_message ime
WHERE ime.domain_ref IN (SELECT dmn.domain_ref
FROM domain dmn
WHERE upper(dmn.domain_id)=upper(p_domain_name))
AND ime.state > 1
AND ime.receive_date between p_from_date and p_to_date;
DBMS_OUTPUT.put_line ('-> #invoke msg ' || SQL%ROWCOUNT);
-- callback messages
DELETE FROM dlv_message dme
WHERE dme.domain_ref IN (SELECT dmn.domain_ref
FROM domain dmn
WHERE upper(dmn.domain_id)=upper(p_domain_name))
AND dme.state > 1
AND dme.receive_date between p_from_date and p_to_date;
DBMS_OUTPUT.put_line ('-> #callback msg ' || SQL%ROWCOUNT);
commit;
END sp_purge_instances_per_state;


Happy Learnings....

Wednesday, August 6, 2008

Using "orcl:query-database" in transformation

In this blog, I am going to show the way to tackle dynamic 'where' condition in the function orcl:query-database. It returns a node-set by executing the SQL query against the specified database.

Just a brief introduction about how this function works:-
Signature:
orcl:query-database(sqlquery as string, rowset as boolean, row as boolean, datasource as string)

Arguments:
sqlquery – The SQL query to perform.
rowset – Indicates if the rows should be enclosed in a <rowset> element.
row – Indicates if each row should be enclosed in a <row> element.
datasource – Either a JDBC connect string (jdbc:oracle:thin:username/password@host:port:sid) or a JNDI name for the database.

Example1:
orcl:query-database("select empno from emp
where empno='50'",false(),false(),"jdbc/DbConnection")

Now coming back to the main agenda about giving dynamic value to the where clause. Its pretty simple. Just a little bit trick.

Use the function with the concat function, as:
Example2:
orcl:query-database(concat("select empno from emp where empno=",/tns:Root-Element/tns:Data/:tns:Empno),false(),false(),"jdbc/DbConnection")

Bingooooooooo....

Happppy Learning....

Friday, August 1, 2008

BPEL : ORABPEL-09903

I am back with ORABPEL error topic again. This time I will show you how to get rid of the error ORABPEL-09903.

Problem:
Error shown below is reported sometimes when you deploy a BPEL project:

C:\jdevstudio10133\jdev\test\testApps\build.xml:79: A problem occured while connecting to server using port "7777":
bpel_testApps_1.0.jar failed to deploy.
Exception message is: ORABPEL-09903
Could not initialize activation agent.

Solution:
This type of error happens when the JNDI entry is not proper or you have insufficient priviledges.
Check for the following things to get rid of this error:

1) Check the JNDI names, as they may be pointing to a different location. Test it.

2) Test that the user connecting to the queue has enough priviledges.

In my case, I was not having proper priviledges for accessing the queue.


Now compile and try to deploy your process.

Happy Learning...

Database Adapter: Handling Twins

Problem: I had faced this problem in past so thought of sharing this to all. You will encounter a peculiar problem while handling Database schema with the same name containing same table name, for the different systems.

Lets say,
System1:
System name: sys1
Schema name: schema1
Table name: Table1

System2:
System name: sys2
Schema name: schema1
Table name: Table1

Everything will work fine. But problem starts after making the project, i.e. if you want to see the wizard for Database adapter by opening the .esbsvc file, you will become mad to see that the table information is not visible in the window. Actually Jdeveloper automatically deletes descriptor file and some contents from Toplink mappings.

Solutions: After doing some research over this I found out some solutions for handling such types of problem.

Solution1:
1) Create one project against system1 and do the necessary adapter configuration for that database.

2) Now Create again a second project against System2 and do the necessary adapter configuration for that database. (Because the
databases are on different hosts, you use different database connections.)

3) Then create a third project, but do not use the Adapter Configuration Wizard. Instead, copy the BPEL or ESB artifacts (WDSL, XSD, and toplink_mapings.xml) from projects one and two.

4) Only Deploy the third project.

Bingo...It works fine.

Solution2:
This is very lengthy solution. You have to goto the project folder and you have to manually update the .mwp files present under Toplink folder. Also, you need to create descriptor folder containing class descriptor.xml file, under Toplink folder. To do this job, it involves lot of time and manual coding headache.

Actually to crack the problem, solution2 was my first approach. Later on, I found out much easier and better approach i.e. solution1. :)
So, I will personally recommend everybody to use the solution1 technique to get rid of such problem.

Happy learning...

Tuesday, July 29, 2008

Database Adapter: Hidden Treasure-1

Dealing with special characters

Problem: On working over one of my clients project I faced a peculiar issue. The issue was, I was trying to map my source column database(My case the database was AS/400) table to the destination column database(Oracle). My source table column name was containing $ signs like P$id,P$name.
This blog is maining written to deal with such problem.

Solution:I raised this issue on oracle forum and parallely I also did some research on this. What I came to know is not all special characters are allowed in XSD element/attribute names e.g. $, #, etc..
But finally I solved the problem.Let me show this with an example:

1) Create a dummy table with column name containing $ sign.

create table test(
p$id int,
p$name varchar2(20)
);

2) Create a BPEL or ESB project. Use database adapter in your project. You should be sure, what your project is going to do.

3) When the database adapter configuration is done. Goto the project folder and look for corresponding toplink and XSD files. We can find two files corresponding to it in our project folder.It will be basically <Service name>_table.xsd file and <Service name>_toplink_mappings.xml file.

4)Open the <Service name>_table.xsd file and change the element name for p$id and p$name to p_id and p_name. Save it.

5) Open the <Service name>_toplink_mappings.xml. Look for the tag <opm:attribute-mappings>. Only replace the "$" sign with an "_" for column name. I have made that text bold for better visibility.
Here I am pasting my piece of code.

<opm:attribute-mappings>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>p_id</opm:attribute-name>
<opm:field table="TEST" name="P$ID" xsi:type="opm:column"/>
<opm:attribute-classification>java.math.BigDecimal</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>p_name</opm:attribute-name>
<opm:field table="TEST" name="P$NAME" xsi:type="opm:column"/>
<opm:attribute-classification>java.lang.String</opm:attribute-classification>
</opm:attribute-mapping>
</opm:attribute-mappings>

6) Save it. Thats it.

Note:
No toplink mapping is used in case you are dealing with custom SQL. Conversion from $ value to _ is done automatically. So when DB adapter creates XSD file, it creates attributes with p_id and p_name.

Happy Learning...

Saturday, July 26, 2008

File Adapter : Hidden Treasure-1

Working on Logical Name Option of File adapter

This blog entry is for those who have worked with File Adapter a bit. In this blog I will mainly focus on showing you all the working of Logical Name option under Read operation for ESB.
We all are aware that while dealing with File Adapter Read operation, we can provide the input directory path in the form of either Physical Path or Logical Name.

ESB: The main problem in case of ESB is that we dont have files like bpel.xml to give details for the working of Logical Name.
Below I will show you how to deal with Logical Name with ESB.

1) Create an ESB project. Create a read file adapter and give Logical Name detail as shown below (Note: You can give Logical Name for Archive files also. Give different logical Names for incoming files and Archive. You cannot use same name)



Complete the read Adapter wizard.

2) Now automatically one routing service will be created by the wizard. Double click to open it.

3)The inbound file adapter window similar to the one shown below will be displayed with name like <SystemName_ServiceName>.esbsvc



4)When you click the plus sign (+) in Endpoint Properties section, the Endpoint Property Chooser dialog box will be displayed.



5) Select the InputDirectory property and click OK. Now you can specify the physical directory name in the Value field as shown below



6) Save it and proceed with your project.

Note: If you want to use Logical Name for Write operation of File Adapter same steps should be followed. Try it...

BPEL: If you are working on File Adapter Read operation and choosing the Logical Name option for Input Directory, you need to manipulate the bpel.xml file and provide the directory path there.

Thats it...You have learnt to use Logical Name option under File Adapter Read and write operation of ESB..

Happy Learning...

Tuesday, July 22, 2008

High Availability for Files

We can use the file adapter's high availability feature provided under SOA Suite 10.1.3.3. The following steps shown below will guide you to configure the file adapter for this feature:

1. Create a share folder on highly available file system.
Note:- This folder should have the write permission and should be accessible from all the systems that are running the file adapter.

2. Goto the following location:
SOA_HOME\bpel\system\service\config directory.

3. Open the file pc.properties.

4. Set oracle.tip.adapter.file.controldirpath to the shared folder name.
For example:
oracle.tip.adapter.file.controldirpath := Z:\\mysharedrive
or
oracle.tip.adapter.file.controldirpath := \\Myshare\Mydir

4. Restart the SOA Suite or Oracle BPEL Process Manager server.

Happy learning...

Saturday, July 19, 2008

Future of Oracle SOA after BEA aquisition

Oracle's aquisition of BEA is making everybody curious. The obvious questions coming to our mind are: what about the future of SOA suite, whats new in SOA from Oracle etc.etc.
Seeing Oracle’s vision towards SOA, it has been clear for the last few years that Oracle is not going to leave it like that. According to me, Oracle SOA is gonna rock. For Oracle's aquisition of BEA, I must say: "Its a match made in Heaven"!

Highlights:

1) Oracle has integrated WebLogic into both JDeveloper and the Application Server, replacing OC4J. This will be good for performance and stability.

2) Oracle has announced convergence of Oracle ESB and AquaLogic Service Bus towards Oracle Service Bus (will contain strong points of both ESB and AquaLogic-SB).

3) Now JRockit, the world’s leading VM, will be the standard VM for Oracle.

4) Coherence will be the central component for dehydration. So we get zero latency in the VM and unparallelled performance for the dehydration store.

5) Integration of BPM Studio into the BPA Suite is the another good news. I must say that the Oracle BPA Suite, in conjunction with the Oracle SOA Suite (BPEL PM in particular) is the world’s best-of-breed for process management, design and execution. The added functionality from BPM Studio will create a comprehensive set of tools to support both process architecture, design and execution in a fully supported roundtrip engineering environment.

Wednesday, July 16, 2008

Playing with XSLT- Part 2

Hmmm..Again I am back with some more XSLT stuff.

Problem:
Importing some data from a .csv file(containing date as one field) and inserting it into the database.
If the date field (from csv file) is passed in the format 'YYYY-MM-DD', it works fine. But the problem comes when you try to pass the date value in format 'DD-MM-YYYY' or in any other formats.

Solution:
To explain the above case I have taken the format 'DD-MM-YYYY' as subject.
Weel well..so to acheive it you need to do is to create some embedded java code or use the following in the assign or transformation activity:(subsitute the tns:date with your variable)

concat(substring(tns:Date,orcl:last-index-within-string(tns:Date,"-") + 2.0,4.0),"-",substring(tns:Date,orcl:index-within-string(tns:Date,"-")+2,2.0),"-",substring-before(tns:Date,"-"))


Bingo.....

ORACLE AIA

Today instead of posting something on technical side, I thought of sharing something on Oracle AIA (again), which is the current buzz in the market.

FIRST LOOK:
Oracle AIA (Application Integration Architecture) is developed to widely-accepted open standards. Like everything new from Oracle, AIA revolves around the service-oriented architecture (SOA) concept. It thus represents a first step toward Fusion Applications – one that can be taken without the need for massive conversions or retraining. Hundreds of specific cases where sophisticated application integration is needed have already been identified.
Most IT environments, especially within larger organizations, consist of a variety of applications from a mix of vendors, not to mention custom–made software. It is increasingly necessary to automate business processes that cross the boundaries between these applications. However, creating solutions that obtain data and use the logic of multiple divergent applications tends to be time consuming and complex. Application Integration Architecture (AIA) is Oracle’s proposed approach to reducing the cost and complexity of doing so.

WHAT IS IT?
Let’s define AIA: AIA is a set of standards and rules by which Oracle and its partners can create elegant bridges between applications. Oracle will use AIA to insure that all of them are built the same way using a common approach and set of standards .This is a framework which contains the functionality of various ERP applications owned by Oracle like - Oracle E-Business, Siebel, JD Edwards and PeopleSoft which can be recombined and tailored to enterprise needs.

Technical products inside Application Integration Architecture (Till date*)
1. BPEL Process Manager
2. BPEL Repository
3. E-Business Suite
4. Siebel
5. Adapters
6. Oracle Warehouse Builder
**More in AIA framework regarding JDE and PeopleSoft will be added soon.

COMPONENTS OF AIA:
• Best practices Processes
• Foundation Pack
• PIP (Process Integration Packs)

DISCOVER THE TREASURE:
To make your AIA treasure hunt much easier, here I am providing you with some of the useful links:
• Oracle AIA:
http://www.oracle.com/applications/oracle-application-integration-architecture.html
• AIA Documentation:
http://www.oracle.com/technology/documentation/intarch.html
• PIPs:
http://www.oracle.com/applications/process-integration-packs.htm
• Oracle AIA Foundation Pack:
http://www.oracle.com/applications/oracle-foundation-pack.html
• List of validated integrations:
http://www.oracle.com/partnerships/isv/integration/search.html

Happy learning...

Friday, July 11, 2008

Playing with XSLT: Convert string to dateTime

Seems that most of us feel difficulty in dealing with date & time in XSLT.
PART-1
Problem: This post tells you about how to map a string source column to a date destination column.
Assumptions:
To acheive it I created dummy table in Database,
Table name: Test
SourceColumn name: a_str
SourceColumn Value: 20080514
Destination column name: a_dt

Solution:
Lets say,
XPath Expression: /top:testCollection/top:test/top:a_str=$d

To make the database understand about the date, we need to transform the source value. For that we need to use chain of functions.
Analyse the solution given below:

<ns2:a_dt>
<xsl:value-of select='concat(substring($d,1.0,4.0),"-",substring($d,5.0,2.0),"-",substring($d,7.0,2.0))'/>
</ns2:a_dt>

Bingo...It works.


PART-2
Problem: To map a string source column (containing date and time) to a date destination column.
Assumptions:
To acheive it I created dummy table in Database,
Table name: TestSource
Column name: a_strSource
Column Value: 20080514111213
Destination column name: a_dt


Solution:
Lets say,
XPath Expression: /top:testCollection/top:test/top:a_str=$d

To make the database understand about the date and Time, we need to transform the source value. For that we need to use chain of functions. Notice that a "T" is concatinated in the code. This one is for adding the Timezone.
Analyse the solution given below:

<ns2:a_dt>
<xsl:value-of select="concat(substring($d,1.0,4.0),"-",substring($d,5.0,2.0),"-",substring($d,7.0,2.0),'T',substring($d,9.0,2.0),":",substring($d,11.0,2.0),":",substring($d,13.0,2.0))"/>
</ns2:a_dt>

Bingo...It works.

Thursday, July 10, 2008

XSLT:Examples of Date and Time Formatting-Part-2


Example: Non-Gregorian Calendars
The above example image is for calendars other than the Gregorian calendar.These examples use non-Latin characters which might not display correctly in all browsers, depending on the system configuration.(Source: w3c xslt doc)

XSLT:Examples of Date and Time Formatting


Example: Gregorian Calendar
The following image above shows a selection of dates and times and the way they might be formatted (Source: w3c transformation doc)

Saturday, June 21, 2008

Installing the 10.1.3.3 or 10.1.3.3.1 patch

Problem: I came across this good article over forum and thought of sharing it. When installing the 10.1.3.3 or 10.1.3.3.1 patch, some people are getting an error when they go to the BPEL Console. The error is:

[java.lang.NoSuchMethodException]com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth)Exception Trace:java.lang.NoSuchMethodException: com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth) at java.lang.Class.getMethod(Class.jav[a:1581)

Solution:

Let me first clear this, I don't know what's causing the problem, except that sometimes the installer misses a step. A certain server-side JAR file was not updated during the installation of the patch. You can copy it from the client-side. Obviously you start these steps after you installed the patch.

1. Delete SOA_HOME\j2ee\home\applications\orabpel\ejb_ob_engine.jar (or move it if you want to keep a copy of it)

2. Copy SOA_HOME\bpel\system\j2ee\ejb\ejb_ob_engine_oc4j.jar to SOA_HOME\j2ee\home\applications\orabpel

3. Rename SOA_HOME\j2ee\home\applications\orabpel\ejb_ob_engine_oc4j.jar to ejb_ob_engine.jar

4. Restart your server

Hope it works fine...

Saturday, June 14, 2008

BPEL: Getting File Name and directory name from File Adapter

Problem:
How to know the file name and the directory name at run time that we selected during configuring File adapter in our BPEL Process?

Solution:
I will give the answer for this in step wise manner.
1) Create an empty BPEL process.
2) Create a Read File Adapters. This will create fileAdapterInboundHeader.wsdl and .wsdl file.
3) Drag receive activity to the swim lane and link it to the read operation and create variable(choose in receive activity). Check the create instance check box.
4) Create a variable of type InboundHeader_msg, say Varaiable_1 ( this message is chosen from the fileAdapterInboundHeader.wsdl).
5) Create two more variables of simple type (String), say Test1 and Test2.
5) Drag the assign activity. In the assign activity create a copy operation you can see the Variable_1 having two elements i.e. FileName and DirectoryName. You can point these two elements to the variable Test1 and Test2 respectively.
6) Now double click on receive activity go to the "Adapter" tab and choose the above Variable_1 as the Input Header Variable.

Similarly you can do it for File Write Adapter. In this case the fileAdapterOutboundHeader.wsdl contains only one element i.e. file name.

And you are done....Now you can use that value for further operations, depending upon your needs.

Have a happy learning.....

Monday, May 5, 2008

AIA : Oracle Application Integration Architecture

AIA (Application Integration Architecture) is an integration architecture framework proposed by Oracle. It strongly recommends industry to start following this framework to build future integration packs for various business use cases. Oracle AIA is a set of products that enables companies to create greater alignment between IT and business strategy, so when business needs to react, IT can react with it.

Fusion middleware SOA products are the underlying products used in implementing AIA framework. AIA Framework is delivered as AIA Foundation Pack by Oracle. AIA Foundation Pack comprises of the following components

1. Enterprise Business Objects (EBO)
2. Enterprise Business Service (EBS)
3. SOA Governance Tools (BSR, CAVS and Error logging and resolution framework)
4. Reference Architecture

Process Integration Packs (PIPs) which are available with Application Integration Architecture are as under:

1.Siebel CRM On Demand Integration Pack for Oracle E-Business Suite.
2.Siebel CRM Integration Pack for Oracle E-Business Suite Order Management.
3.Oracle Application Integration Architecture for Communications.
4.Siebel Life Sciences Integration Pack for Oracle Adverse Event Reporting System.
5.Siebel CRM Integration Pack for Oracle Trade Promotion Management.
6.Siebel CRM Integration Pack for i-flex's FLEXCUBE Account Origination - Liability Products.

To know more on Oracle AIA, refer to the link mentioned below:

http://www.oracle.com/applications/oracle-application-integration-architecture.html

OAF vs ADF : Part - 2

OAF:- OAF is a MVC technology stack, fully oriented towards Oracle EBS application development. The OAF stack is comprised of underlying technologies like UIX and BC4J. It includes AOL that provides common EBS artifacts such as menus, functions, messages, profiles, flexfields and attachments, and common services like function and data security. MDS is used for metadata management.



ADF:- ADF is a comprehensive, model-view-controller technology stack that is oriented towards general-purpose application development. The ADF stack is primarily comprised of ADF Faces, ADFm and ADFbc. The ADF stack allows users to select among several choices of UI and business services technologies.

Wednesday, April 30, 2008

BPEL: File Adapter - Write Opeartion

Problem:Can we use File Adapter to write in a file in append mode. i.e. a BPEL process opening a file appending some text and closing the file each time it called.


Solution:
To write a file in append mode, you need to add one line in wsdl file.

Make an entry with Append="true"
inside tag found in wsdl file, created after Write file adapter.

PhysicalDirectory="C:\TMP"
InteractionSpec="oracle.tip.adapter.file.outbound.FileInteractionSpec"
FileNamingConvention="write.txt"
OpaqueSchema="true"
Append="true">

Monday, April 28, 2008

OAF vs ADF

I have gone through the below metioned links, which clearly states the difference between OAF and ADF. After reading these link you will get to know when to use OAF and when to use ADF.

The links are as under:

1) http://blogs.oracle.com/schan/2007/06/28#a1721

2) http://shiv-saroj.blogspot.com/2008/03/oaf-vs-adf-with-respect-to-oracle.html

Friday, April 25, 2008

JDeveloper: Tips and Tricks- Shortcuts

Today I was going through few blogs on JDeveloper. I found some of the links which says about shortcut keys, tips and tricks of using JDeveloper (Shay Shmeltzer's weblog)

1) http://blogs.oracle.com/shay/2007/05/31#a382

2) http://blogs.oracle.com/shay/2006/10/30

3) http://static7.userland.com/oracle/gems/shay/JDeveloperTreasureHunt.pdf

Thursday, April 24, 2008

Fusion Applications

Oracle Fusion Application is the next-generation enterprise applications suite, bringing together the best functionality and technology from of all Oracle applications. Oracle Fusion Applications will be released after Release 12. This is being designed to unify best-of-business capabilities from all Oracle Applications in a complete suite delivered on Oracle's open technology.

We have to keep in our mind that Fusion Applications is not the same as Release 12. Release 12 is expected to have its own stream of updates, such as 12.1 and 12.x.

For more on Fusion applications, visit the link:

http://www.oracle.com/applications/fusion.html

Wednesday, April 23, 2008

Distinguishing Fusion Middleware from Fusion Applications

I was searching for some good articles on Fusion, and I got some useful information on the diffrence between Oracle Fusion Middleware and Fusion Applications.

We have heard many times that Oracle is working on Fusion and they are going to release it soon..To clear the confusion between Fusion Middleware and Fusion Applications,I am going to explain the difference between the two.


Oracle Fusion Middleware:
As we are aware of the three tier architecture,that comprises of Client/UI,Application and database. Fusion Middleware is collection of products provided by Oracle that run on application servers. In other words, Fusion Middleware encompasses everything that doesn't run on a database server.

Fusion Middleware is an umbrella term that includes product suites such as:

- Oracle Application Server
- Oracle Identity Management
- Oracle Development Tools
- SOA Suite
- Business Intelligence Suite
- Business Integration
and many more...


Fusion Applications:
Fusion Applications is the next-generation enterprise application suite. Fusion Applications will be built using the next generation of Fusion Middleware. In other words, the next generation of Fusion Middleware will be the technology stack for Fusion Applications.

Thursday, April 17, 2008

ESB : Sending Email notification

Information regarding this can be found under these URLs:

1) Oracle Forum: http://forums.oracle.com/forums/thread.jspa?messageID=1531686

2) http://www.oracle.com/technology/obe/obe_as_10g/wireless/wirelessmessaging/mesg.htm

ESB : ESB Support an Inbound Email Adapter??

Not in the version 10.1.3. Oracle ESB does not currently support the activation agent framework required for this.

Workaround:
A somewhat simple workaround is to write a J2EE servlet that uses JavaMail to poll a mail server and generate a JMS message that Oracle ESB receives using the JMS adapter.

BPEL : Exception ORA-01691

Exception looks like:

<2008-04-15 16:05:59,168>

Error while invoking bean "delivery": Cannot update lob column.
The process domain was unable to update the lob column "7" in the datastore.
The exception reported is: ORA-01691: unable to extend lob segment ORABPEL.SYS_
LOB0000069158C00007$$ by 128 in tablespace ORABPEL

Solution:

For overcoming this exception, you can do either of the things mentioned below:

** Clean up the dehydration store

or

** Increase orabpel tablespace size by running a script similar to the following mentioned below:


alter tablespace orabpel add datafile
'/oracle/product/oradata/orcl/orabpel02.dbf'
size 1024M
autoextend on
next 512M
maxsize 12040M;


Note:- This script is already included in the default IRCA tool of Oracle
BPEL Process Manager for 10.1.3.

Oracle SOA Suite 10.1.3.3: Best Practice guide

Link for Best practice guide on Oracle SOA 10.1.3.3

http://www.oracle.com/technology/tech/soa/index.html

Hope it helps everyone.

BPEL: Exception ORABPEL-05002

This post is in continuation to my post dated 27th september 07 on exception ORABPEL-05002. I have found some real good points to deal with such exceptions.

The exception looks like this,
Failed to handle dispatch message ... exception ORABPEL-05002
Message handle error.
An exception occurred while attempting to process the message "com.collaxa.cube.engine.dispatch.message.instance.PerformMessage"; the exception is: An exception occurred during transaction completion: ; nested exception is: javax.transaction.RollbackException: Timed out.

Solution:
You need to follow the steps mentioned below:

1.) Goto $Oracle_Home\j2ee\home\config\transaction-manager.xml:
change the transaction-timeout parameter, say 'x'

2.) Goto $Oracle_Home\j2ee\home\application-deployments\orabpel\ ejb_ob_engine\orion-ejb-jar.xml:
change the transaction-timeout parameter, say 'y' (i.e. y < x)

3.) Goto BPELConsole:
Change the syncMaxWaitTime in all domains, where you need a bigger timeout

4.) Restart the application server (SOA Server)

While setting the parameter values, be careful because by doing so you will block threads by using long-running synchronous invokes. So as a result, it can affect the performance of BPEL engine.

Thursday, January 31, 2008

BPEL:Invoking Partner Web Service through a Proxy Server

For invoking a partner Web Service through a proxy server, we need to configure our BPEL Process Manager. Following are the assumptions made before configuring it:-
1) Assume that BPEL PM is installed on host -> host123.company.com
2) Assume that one of your deployed BPEL processes must invoke a synchronous Web service hosted outside the fire wall at ->http://partner123.services.com
3) All the outbound HTTP traffic must be routed thro' an HTTP proxy server located at -> proxy123.company.com on port 8090.

Now perform the following steps to configure ant task and BPEL PM to invoke the partner Web service thro' an HTTP proxy server:

1) Open obsetenv.bat(for Windows)/obsetenv.sh(For Linux) file located under:
SOA_Oracle_Home\bpel\bin -> For Windows
SOA_Oracle_Home/bpel/bin -> For Linux

2) Modify the line set OB_JAVA_PROPERTIES as under:

set OB_JAVA_PROPERTIES="-Dhttp.proxySet=true"
"-Dhttp.proxyHost=proxy123.company.com"
"-Dhttp.proxyPort=8090" "-Dhttp.nonProxyHosts=host123.company.com"

We are setting the http.proxySet =true, to activate the client proxy and redirect all the outbound trafiic thro' the http.proxyHost and http.proxyPort.
By setting the http.nonProxyHosts to the server that hosts Oracle BPEL Server,
you prevent the local request from going through the proxy.