It determines if it is called from an other BPEL process. If so, it derives the name of the process.
<bpelx:exec name="Java_Get_ParentName"
language="java" version="1.5">
<![CDATA[
String inputvar1 = "";
String parentId = "";
String parentName = "";
// Define variables to use;
com.oracle.bpel.client.IInstanceHandle instance;
com.oracle.bpel.client.IInstanceHandle[] instances;
com.oracle.bpel.client.util.WhereCondition condition;
try
{
parentId = getParentId();
//
if (parentId == null || parentId.equals(""))
{
// Process is called via NON BPEL process:
// SoapUI, BPELConsol, external WebService
//
parentId = String.valueOf(getInstanceId());
parentName = "myself";
}
else
{
//
// Set the whereclause
addAuditTrailEntry("Set Query to determine parent process");
condition =
new com.oracle.bpel.client.util.WhereCondition( "cikey = ?" );
condition.setLong(1, Long.parseLong(parentId));
//
// Perform the query using the Locator
addAuditTrailEntry(
"execute the query: cube_instance.cikey = " + parentId);
instances = this.getLocator().listInstances(condition);
addAuditTrailEntry(
"Number of instances found " + instances.length);
if (instances.length == 0)
{
addAuditTrailEntry("No instances found");
addAuditTrailEntry("Am I called from synchronous process???");
}
else
{
instance = instances[0];
parentName = instance.getProcess().getProcessId().toString();
addAuditTrailEntry
("The process name of the parent is " + processId);
}
}
}
catch (Exception e) {}
setTitle("I am called from " + parentId + "(" + processId + ")" );
setVariableData("parentId_LocalVariable", parentId);
setVariableData("parentName_LocalVariable", processId);
]]>
</bpelx:exec>
The trick is as follows. Using the "this.getParentId()" function is used to query the BPEL proces dehydration store. It queries the table CUBE_INSTANCE for those records that matches with the column CIKEY.
If there are no records found, then it is called from a synchronous process, because these type of processes are not dehydrated.
Uf the "this.getParentId()" function returns empty, the BPEL process is not called from a BPEL process, but from an external source; SoapUI, BPEL console or other webservice or client.