Initiating a bpel process from a MDB within the same oc4j instance
A colleque of mine reported yesterday the following scenario ..
As per customer requirement, he needs to initiate a new process from an MDB ( a message driven bean, bound to jms queue or topic) .. So he created a standalone java client class and used the com.oracle.bpel.client.Locator class (as in tutorial 102.InvokingProcesses/rmi). As the application was running outside of the server he used the follwing API call
public Locator(java.lang.String domainId,
java.lang.String password,
Hashtable pInitialContextProperties)
throws ServerException
Then he implemented his MDB - with the onMessage() method and the former application code within it .. interestingly it failed, throwing a strange exception .. Not just a NameNotFound (if you encounter this one, here is a link with details) - but also another famous one, the INVALID_WSDL as shown below
<2006-03-07 12:01:27,003>
"http://host:9700/orabpel/default/BPELProcessForRH/
1.0/_BPELProcessForRH.wsdl", because "WSDLException: faultCode=INVALID_WSDL:
The document: http://host:9700/orabpel/default/BPELProcessForRH/
1.0/_BPELProcessForRH.wsdl is not a wsdl file or does not have a root element of "definitions" in the "http://schemas.xmlsoap.org/wsdl/" namespace or the "http://www.w3.org/2004/08/wsdl" namespace.".
Make sure wsdl is valid. You may need to start the OraBPEL server, or make sure the related bpel process is deployed correctly.
Here is the solution ..
As you are already in a container transaction (remember your mdb is an ejb) & within a context, use the following constructor on the Locator class instead
public Locator(java.lang.String domainId,
java.lang.String password)
throws ServerException
and besides, ensure that the mdb application is a child application of orabpel.. (which can be configured in the server.xml with the parent attribute)
Having questions? send your feedback on Initiating a process from within a mdb here
4 Comments:
this one's interesting...
3:54 AM
Hi Clemens,
Can't we use BPEL JMS technology adapter to acheive the same result. The only draw back here is adapter continuously polls on the source queue for messages.
Regards,
Rajesh
12:30 AM
Hi Clemens,
What is a underlying protocol used by Locator object to locate the BPEL process. If RMI communication is not allowed in organization, how will Locator object work to find the BPEL process ?
Regards,
Prasanna
6:39 PM
I started off with writing an intelligent proxy- that would fgure out the protocoll to use ..
for now you can also invoke the process over soap, rest, and so forth ..
doc'ed in samples/tutorials/102.InvokingProcesses.
hth
6:43 PM
Post a Comment
<< Home