Skip to Main Content

Integration

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

ESB Endpoint Properties

478686Aug 15 2007 — edited Oct 3 2007
I noticed in ESB you can now setup Endpoint Properties. I'm interested in using them for error handling, specifically rejectedMessageHandlers. I found some documentation on using that as a property, but can't seem to get it to work. I've tried setting up the property to use file, AQ, and BPEL, none of which seemed to work, I followed the documentation and a post on this forum. Has anyone gotten this to work properly? Is there somewhere in the app server log that I could see the output of endpoint properties? I'm kind of stuck.

Thanks for any direction.

Comments

478686
I'm using version 10.1.3.3 on Windows XP.
525992
Hi,

I am also having trouble in making use of this feature. I tried with setting the rejectedMessageHandler property of the inbound adapter to invoke BPEL by following the bpel://<domain> syntax with out any success.

I am noticing NamingNotFound exception in the oc4j_soa container log.xml for ejb/collaxa/system/DeliveryBean ejb. This tells me that the ESB is trying make use of BPEL remote APIs to invoke the process and is failing to do so due to some bug. I am planning to log a SR with Oracle Support on this. If you also can do the same, we can make it high priority for them.

Not sure how this passed the so called Oracle regression testing of Fussion Middleware with thousands of test scripts. There are lot of references to this feature in Oracle collateral so one would expect it to work out of the box.... :-)

Regards,
Rajesh
Regards,
Rajesh
525992
The root cause seem to be the adapter framework is trying to invoke BPEL process by using remote DeliveryService bean while using local Locator APIs. So either they need to call the LocalDeliveryService or instantiate Locator object with remote context properties.

Let's see how it take for Oracle to fix this.... :-)

Regards,
Rajesh
478686
Which SOA Suite version are you on? Marc Kelderman posted describing how to get the endpoints to work in 10.1.3.3. I followed those steps, but with no luck. I don't see anything in the diagnostic log file about the DeliveryBean stuff, did you have to change a logger level to see that?
525992
I am on 10.1.3.3
I am seeing the following exception in $J2EE_HOME/log/oc*/oc*/log.xml file

<MSG_TEXT>JCA: Rejection handler failed
Error while trying to hand off bad message to Rejection handler bpel://default:D0978108040F48D060880D888301C27EDDC048307AFA162A|JCARejectionHandler|han
dleRejection|message due to: java.lang.Exception: Failed to create "ejb/collaxa/system/DeliveryBean" bean; exception reported is: "javax.naming.NameNot
FoundException: ejb/collaxa/system/DeliveryBean not found
at com.evermind.server.rmi.RMIServerContext.lookup(RMIServerContext.java:207)
at com.evermind.server.ApplicationContext.unprivileged_lookup(ApplicationContext.java:257)
at com.evermind.server.ApplicationContext.lookup(ApplicationContext.java:197)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.oracle.bpel.client.util.BeanRegistry.lookupDeliveryBean(BeanRegistry.java:279)
at com.oracle.bpel.client.delivery.DeliveryService.getDeliveryBean(DeliveryService.java:250)
at com.oracle.bpel.client.delivery.DeliveryService.post(DeliveryService.java:174)
at com.oracle.bpel.client.delivery.DeliveryService.post(DeliveryService.java:149)
at oracle.tip.adapter.fw.AdapterFrameworkListenerBase.invokeBpelProcess(AdapterFrameworkListenerBase.java:1209)
at oracle.tip.adapter.fw.AdapterFrameworkListenerBase.invokeBpelProcess(AdapterFrameworkListenerBase.java:1247)
at oracle.tip.adapter.fw.AdapterFrameworkListenerBase.invokeBpelProcess(AdapterFrameworkListenerBase.java:1266)
at oracle.tip.adapter.fw.AdapterFrameworkListenerBase.handleUndeliverableRequestMessage(AdapterFrameworkListenerBase.java:1522)
at oracle.tip.adapter.fw.AdapterFrameworkListenerBase.sendRejectedMessageToExceptionHandler(AdapterFrameworkListenerBase.java:1394)
at oracle.tip.esb.server.service.impl.inadapter.ESBListenerImpl.onReject(ESBListenerImpl.java:536)
at oracle.tip.esb.server.service.impl.inadapter.ESBListenerImpl.onReject(ESBListenerImpl.java:633)
at oracle.tip.adapter.fw.jca.messageinflow.MessageEndpointImpl.onReject(MessageEndpointImpl.java:361)
at oracle.tip.adapter.aq.inbound.AQActivationSpecDequeuer.handleRejections(AQActivationSpecDequeuer.java:110)
at oracle.tip.adapter.aq.inbound.AQActivationSpecDequeuer.doRaise(AQActivationSpecDequeuer.java:409)
at oracle.tip.adapter.aq.inbound.AQActivationSpecDequeuer.raiseInboundInteraction(AQActivationSpecDequeuer.java:314)
at oracle.tip.adapter.aq.inbound.AQActivationSpecDequeuer.raise(AQActivationSpecDequeuer.java:246)
at oracle.tip.adapter.aq.inbound.AQActivationSpecDequeuer.run(AQActivationSpecDequeuer.java:225)
at oracle.j2ee.connector.work.WorkWrapper.runTargetWork(WorkWrapper.java:242)
at oracle.j2ee.connector.work.WorkWrapper.doWork(WorkWrapper.java:215)
at oracle.j2ee.connector.work.WorkWrapper.run(WorkWrapper.java:190)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:814)
at java.lang.Thread.run(Thread.java:595)

Where are the Marc Kelderman instr?

Regards,
Rajesh
478686
Not too detailed, but his instrs are in this thread.

1936143
525992
Yep. That's exactly what I did and ran into above exception.
What kind of error/issue are you facing?
478686
I'm not sure what error I'm getting, nothing is coming up in the logs.....maybe I'm looking in the wrong place. Also, if I have an erred message and don't set the end point property, I no longer get the instance message in the default message folder(rejectedMessage under the jca folder).
525992
Default functionality is to use file handler to write it the folder you are looking in jca/rejectedMessages. By specifying this endpoint property you are overriding the default behavior.

Regards,
Rajesh
534379
I do not think you can invoke a bpel process for a rejected message from the ESB by doing the following:
<property name="rejectedMessageHandlers">
bpel://<bpel-domain[:<password>]>|<process-name>|<operation-name>|<input-message-partname>
</property>

The above call assumes some BPEL process specific context to be set while invoking the call. When invoked from ESB, such context data is not set and hence you see the exception.

I haven't tried it yet, but I believe you must use the WSIF based rejection handler as such:

<property name="rejectedMessageHandlers">
wsif://file:/C:/orabpel/samples/test/ErrorTest/FileAdapterWrite.wsdl|write|message
</property>

Hope this helps.

Regards.
478686
Oracle claims that the BPEL call will work. Just can't seem to get it to. I've read in other posts that people have gotten it to work though........ : (
JohanL
I´ve also received the same error "ejb/collaxa/system/DeliveryBean when trying to invoke a BPEL-service from endpointproperty rejectedMessageHandlers in an esb service. The ESB runtime is in a different oc4j home than our BPEL runtime. Do anyone have a solution for this, calling a BPEL-service from ESB rejected message handler?

Best Regards
Johan
478686
OK, I'm getting pretty frustrated with this. I've tried all four "flavors" of message handlers.

It went something like this:

File:
<endpointProperties>
<property name="rejectedMessageHandlers" value="file://C:/"/>
</endpointProperties>

This seems to be the only option that works.

Queue
<endpointProperties>
<property name="rejectedMessageHandlers" value="queue://jdbc:oracle:thin:@host:port:SID|user/encrypted_pass|<Some Queue>"/>
</endpointProperties>

I get this error:
JCA: Rejection handler failed
Error while trying to hand off bad message to Rejection handler queue://jdbc:oracle:thin:@host:port:sid|user/encrypted_pass|<Some Queue>
due to:
Please address the underlying issue or correct/redeploy the process.

.......not very descriptive....and no those aren't the actual values I used in testing.


BPEL

I get the same delivery bean error as posted above.

WSIF

wsif://http://localhost:7777/orabpel/default/ESBErrorHandler/1.0/ESBErrorHandler?wsdl|HandleError|message

I get:

JCA: Rejection handler failed
Error while trying to hand off bad message to Rejection handler wsif://http://localhost:7777/orabpel/default/ESBErrorHandler/1.0/ESBErrorHandler?wsdl|HandleError|message
due to: Please specify a PortType. Choices are: {{http://xmlns.oracle.com/ESBErrorHandler}HandleError, {http://xmlns.oracle.com/pcbpel/rejectionHandler}RejectionHandlerPortType}
Please address the underlying issue or correct/redeploy the process.



Now maybe I'm calling this wrong, I've not done much with WSIF. It can't seem to tell which port to invoke.


If anyone has gotten any of these working, please let me know. I could use the help.
478686
Rajesh, have you heard anything from Oracle regarding the SR you opened? I may also open one.
Dave Berry-Oracle
ESB does not support BPEL rejection handler but the others should work fine. The following Adapter Tech Note shows the syntax.
http://www.oracle.com/technology/products/integration/adapters/pdf/Adapter_TN_004_Adapter_ErrorManagement.pdf

And page 22 of the Error handling lesson on otn.oracle.com/goto/es shows how to put these endpoint properties into the Adapter esbsvc file.

http://www.oracle.com/technology/products/integration/esb/files/esb-transactions-errorhandling.pdf
478686
Ya, I overlooked the BPEL usage.....but I'm still getting errors using WSIF. I keep getting:

JCA: Rejection handler failed
Error while trying to hand off bad message to Rejection handler wsif://http://localhost:7777/orabpel/default/ESBErrorHandler/1.0/ESBErrorHandler?wsdl|HandleError|message
due to: Please specify a PortType. Choices are: {{http://xmlns.oracle.com/ESBErrorHandler}HandleError, {http://xmlns.oracle.com/pcbpel/rejectionHandler}RejectionHandlerPortType}
Please address the underlying issue or correct/redeploy the process.



ESBErrorHandler is the wsdl for the BPEL process, and RejectionHandlerPortType is from the rejected message wsdl.

Any ideas?
Dave Berry-Oracle
what is your endpoint property syntax? Here is what the tech note has

<property name="rejectedMessageHandlers">
wsif://<wsif-wsdl-location>|<operation-name>|<input-message-part-name>
</property>
For example
<property name="rejectedMessageHandlers">
wsif://file:/C:/orabpel/samples/test/ErrorTest/FileAdapterWrite.wsdl|write|message
</property>
478686
<property name="rejectedMessageHandlers">
wsif://http://localhost:7777/orabpel/default/ESBErrorHandler/1.0/ESBErrorHandler?wsdl|HandleError|message
</property>

HandleError is my operation, I've also tried pointing to the physical wsdl file with the same result.
Dave Berry-Oracle
and "message" is your message part name? If it's not too big, can you post the wsdl?

Another probably better option is to use a WSIF rejection handler to post the message to a JMS Topic and use a Durable subscriber in BPEL subscribe to it. Then if for some reason the BPEL process is not up, the JMS provider will hold on to it.

Message was edited by:
Dave Berry
478686
I originally wanted to post to an AQ topic, but it looks like the only thing that goes to the queue is the payload and MSGID. I'd need to grab the exception message from the db somewhere.


But, here is some of my WSDL anyway:


<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ESBErrorHandler"
targetNamespace="http://xmlns.oracle.com/ESBErrorHandler"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:client="http://xmlns.oracle.com/ESBErrorHandler"
xmlns:ns2="<some-local-URN-Where-Error-Schema-Is-Defined>"
xmlns:rej="http://xmlns.oracle.com/pcbpel/rejectionHandler"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<import namespace="http://xmlns.oracle.com/pcbpel/rejectionHandler"
location="http://localhost:7777/orabpel/xmllib/jca/RejectionMessage.wsdl"/>

<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="<some-local-URN-Where-Error-Schema-Is-Defined>"
schemaLocation="http://localhost/ESBFault.xsd"/>
</schema>
</types>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MESSAGE TYPE DEFINITION - Definition of the message types used as
part of the port type defintions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<message name="FaultInstance">
<part name="ErrorMessage" element="client:ESBFaults"/>
</message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PORT TYPE DEFINITION - A port type groups a set of operations into
a logical service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<portType name="MyRejectionHandlerPortType">
<operation name="myHandleRejectionOperation">
<input message="rej:RejectionMessage"/>
</operation>
</portType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PARTNER LINK TYPE DEFINITION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<plnk:partnerLinkType name="ESBFaultHandler">
<plnk:role name="ESBFaultHandlerProvider">
<plnk:portType name="client:MyRejectionHandlerPortType"/>
</plnk:role>
</plnk:partnerLinkType>
</definitions>
452933
I've done ESB rejection handler to a JMS queue and it does send the exception message along with the payload.

As for your WSDL, I believe your wsif declaration should be

wsif://http://localhost:7777/orabpel/default/ESBErrorHandler/1.0/ESBErrorHandler?wsdl|myHandleRejectionOperation|ErrorMessage

I haven't actually done WSIF to WS configuration before but I don't believe you have the correct operation and message name defined based on your WSDL.
1 - 21
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Oct 31 2007
Added on Aug 15 2007
21 comments
2,211 views