The WebSphere Exception Trace: Deconstructed

If you’ve worked developing an application for more than five minutes, chances are that you’ve encounter a big long exception trace. The best thing to do is try to look at the very top for a non-generic exception that relates to your problem. This article will attempt to describe exactly what happened via the information contained in the stack trace. Hopefully it will provide a better understanding of the system and all the wonderful stuff that WebSphere does under the covers (but then exposes to you in dirty stack dump form).

This is an extremely long post, so click for the whole thing

The Scenario

My scenario consists of:

  1. An Default Messaging (SIBus) JMS Export wired to
  2. A POJO Component (that uses Event Sequencing) which is wired to
  3. A BPEL Component wired to
  4. A SOAP/HTTP Webservice Import

A message is put on the JMS queue. The message is converted to a business object by the export. The export passes the data object on to my Java Component. The java component converts it into a call to the BPEL process. The BPEL invokes the Web Service Import.

Lets see what happens when something goes wrong. In this case, an unhandled Web Services fault was thrown.

The Exception

[2/27/08 11:47:33:651 EST] 000000fb FFDC          Z com.ibm.ws.sca.internal.webservice.handler.PortHandler
com.ibm.ws.sca.internal.webservice.handler.PortHandler.processMessage#01
Exception: WebServicesFault
 faultCode: Server.generalException
 faultString: java.sql.SQLException: ORA-02291: integrity constraint (TTSBASE.TRANTRACKMSG_TRANTRACKLOG_FK)
violated - parent key not found

faultActor: null
 faultDetail:

java.sql.SQLException: ORA-02291: integrity constraint (TTSBASE.TRANTRACKMSG_TRANTRACKLOG_FK) violated -
 parent key not found

        at com.ibm.ws.webservices.engine.WebServicesFault.makeUserFault(WebServicesFault.java:220)
        at com.ibm.ws.webservices.engine.xmlsoap.builders.WebServicesFaultProcessor.createFault(WebServicesFaultProcessor.java:411)
        at com.ibm.ws.webservices.engine.xmlsoap.SOAPFault.getFault(SOAPFault.java:486)
        at com.ibm.ws.webservices.engine.SOAPPart.getFault(SOAPPart.java:1090)
        at com.ibm.ws.webservices.engine.SOAPPart.getFault(SOAPPart.java:747)
        at com.ibm.ws.webservices.engine.Message.getFault(Message.java:885)
        at com.ibm.ws.webservices.engine.Message.ifFaultThrowSelf(Message.java:865)
        at com.ibm.ws.webservices.engine.client.Connection.invokeEngine(Connection.java:869)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:702)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:653)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:481)
        at com.ibm.ws.webservices.engine.client.Call.invoke(Call.java:1514)
        at com.ibm.ws.webservices.multiprotocol.AgnosticCall.invoke(AgnosticCall.java:171)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler$OperationHandler.invoke(PortHandler.java:193)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler$OperationHandler.access$1200(PortHandler.java:106)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler.processMessage(PortHandler.java:571)
        at com.ibm.ws.sca.internal.webservice.handler.WebServiceImportHandler.processMessage(WebServiceImportHandler.java:282)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:587)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionSupportsActivitySessionSupports(ModuleSessionBean.java:260)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionSupportsActivitySessionSupports(Unknown Source)
        at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionAnyActivitySessionAny(UOWStrategyImpl.java:481)
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:146)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at $Proxy97.processMessage(Unknown Source)
        at com.ibm.bpe.invocation.SCAInvocationHandler.doinvoke_Sync_ReqRsp(SCAInvocationHandler.java:502)
        at com.ibm.bpe.invocation.SCAInvocationHandler.doinvoke(SCAInvocationHandler.java:411)
        at com.ibm.bpe.invocation.SCAInvocationHandler.invoke(SCAInvocationHandler.java:205)
        at com.ibm.bpe.engine.BpelActivityKindInvoke.doActivate(BpelActivityKindInvoke.java:465)
        at com.ibm.bpe.engine.BpelActivityStateInactive.activateOrSkip(BpelActivityStateInactive.java(Compiled Code))
        at com.ibm.bpe.engine.BpelEngineCore.continueControlLink(BpelEngineCore.java(Compiled Code))
        at com.ibm.bpe.engine.BpelContinueLinkMessage3.execute(BpelContinueLinkMessage3.java(Compiled Code))
        at com.ibm.bpe.engine.BpelEngine.processInternalMessages(BpelEngine.java(Compiled Code))
        at com.ibm.bpe.framework.EngineMessageExecutionWorkObject.processAllEngineMessages(EngineMessageExecutionWorkObject.java:254)
        at com.ibm.bpe.framework.EngineMessageExecutionWorkObject.run(EngineMessageExecutionWorkObject.java:149)
        at com.ibm.bpe.framework.EngineMessageExecutor.execute(EngineMessageExecutor.java:158)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:691)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:620)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:570)
        at com.ibm.bpe.framework.sca.ProcessSessionBean.invokeEngineSync(ProcessSessionBean.java:933)
        at com.ibm.bpe.framework.sca.ProcessSessionBean.invokeEngineSync(ProcessSessionBean.java:905)
        at com.ibm.bpe.framework.sca.ProcessSessionBean.processMessage(ProcessSessionBean.java:261)
        at com.ibm.bpe.framework.sca.EJSLocalStatelesscomponent_BP_LogEvent_a3df0404.processMessage(Unknown Source)
        at com.ibm.bpe.framework.sca.ProcessImplementationHandler.handleInboundCalls(ProcessImplementationHandler.java:271)
        at com.ibm.bpe.framework.sca.ProcessImplementationHandler.processMessage(ProcessImplementationHandler.java:158)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:587)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionRequiredActivitySessionNotSupported(ModuleSessionBean.java:309)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionRequiredActivitySessionNotSupported(Unknown Source)
        at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionGlobalActivitySessionFalse(UOWStrategyImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:160)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at $Proxy97.invoke(Unknown Source)
        at sca.component.java.impl.POJO_ParseEventImpl.processEvent(POJO_ParseEventImpl.java:261)
        at sun.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
        at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
        at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter$2.run(JavaReflectionAdapter.java:152)
        at java.security.AccessController.doPrivileged1(Native Method)
        at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
        at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter.invoke(JavaReflectionAdapter.java:149)
        at com.ibm.ws.sca.internal.java.handler.JavaImplementationHandler.processMessage(JavaImplementationHandler.java:292)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:578)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionNotSupportedActivitySessionSupports(ModuleSessionBean.java:277)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionNotSupportedActivitySessionSupports(Unknown Source)
        at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionLocalActivitySessionAny(UOWStrategyImpl.java:406)
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:129)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:578)
        at com.ibm.ws.sca.internal.async.impl.AbstractAsyncInboundHandler.processMessage(AbstractAsyncInboundHandler.java:116)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.processMessage(ServiceSIBusMessageBean.java:232)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.access$000(ServiceSIBusMessageBean.java:49)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean$1.onMessage(ServiceSIBusMessageBean.java:66)
        at com.ibm.wbiserver.manualrecovery.ejb.RecoveryMDBHandler.onMessage(RecoveryMDBHandler.java:115)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.onMessage(ServiceSIBusMessageBean.java:122)
        at com.ibm.wbiserver.sequencing.work.ESWorkBean.processMessageInBifurcatedSession(ESWorkBean.java:139)
        at com.ibm.wbiserver.sequencing.work.EJSLocalStatelessESWork_ddc8f6c2.processMessageInBifurcatedSession(Unknown Source)
        at com.ibm.wbiserver.sequencing.work.EsWorkImpl.run(EsWorkImpl.java:233)
        at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:713)
        at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:218)
        at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:154)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

The one thing to remember about a stack trace, is showing what was running in a server at a point in time. At the point of time in this stack, we have already:

  1. Picked up the message from the queue
  2. Converted it to a Data Object
  3. Sent the DataObject to the POJO
  4. The POJO has invoked the WebService Import

Deconstruction

Rather than working top to bottom on an exception (as recommended), lets see what the server was doing from bottom to top:

at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

All threads that are used by WebSphere come from a large pool, configurable by the administrator.

at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:713)
        at com.ibm.ws.asynchbeans.WorkWithExecutionContextImplgo(WorkWithExecutionContextImpl.java:218)
        at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:154)

The thread is told to go pick up a message asynchronously . I assume the ABWorkItemImpl & ExecutionContext tells the thread all the information required about what queue to look up, destination etc. Then the WebSphere J2EEContext starts.

at com.ibm.wbiserver.sequencing.work.ESWorkBean.processMessageInBifurcatedSession(ESWorkBean.java:139)
at com.ibm.wbiserver.sequencing.work.EJSLocalStatelessESWork_ddc8f6c2.processMessageInBifurcatedSession(Unknown Source)
at com.ibm.wbiserver.sequencing.work.EsWorkImpl.run(EsWorkImpl.java:233)

This block of methods deals with Event Sequencing. Event Sequencing needs to pick up the message from the internal JMS queue for the Java component before the java component itself, so that it can prevent multiple messages with the same key processing. A ‘Bifurcation‘ session is created, I don’t really understand why. Probably to separate the internal workings of event sequencing from the session that is given to to the client for processing.

at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.onMessage(ServiceSIBusMessageBean.java:122)

This is the first instance of SCA getting its hands on the message. The SCA SIBus MDB picks up the message from the queue defined by the JMS Export.

at com.ibm.wbiserver.manualrecovery.ejb.RecoveryMDBHandler.onMessage(RecoveryMDBHandler.java:115)

The Failed Event manager (FEM) aka (wbiserver.manualrecovery) tracks the message. The operation from a JMS queue is one-way, so the FEM needs to get it’s fingers into the stack to ensure the generation of a failed event.

at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.processMessage(ServiceSIBusMessageBean.java:232)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean.access$000(ServiceSIBusMessageBean.java:49)
        at com.ibm.wsspi.sca.async.bean.impl.ServiceSIBusMessageBean$1.onMessage(ServiceSIBusMessageBean.java:66)

Some SCA SIBus magic happens as it’s MDB works with the message to determine where the message should be routed to.

at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:578)
        at com.ibm.ws.sca.internal.async.impl.AbstractAsyncInboundHandler.processMessage(AbstractAsyncInboundHandler.java:116)

The JMS Message has been converted to an SCA ‘Managed Message’ and sent to the SCA Message dispatcher. The dispatcher reads the information from the assembly diagram to populate the SCA message with the intended component destination.

at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionLocalActivitySessionAny(UOWStrategyImpl.java:406)
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:129)

As the message has moved through the various SCA handlers, it passed through the ‘Unit of Work’ handler. This is SCA’s representation of the transactional behavior of the module. The UOWStrategy is reading the qualifiers of the interface/reference to determine if a transaction should be started, propagates or committed.

at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:578)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionNotSupportedActivitySessionSupports(ModuleSessionBean.java:277)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionNotSupportedActivitySessionSupports(Unknown Source)

The EJSLocalStatelessModule_nnnnnn is an EJB automatically generated into the module’s EJB project. It then extends the standard “ModuleSessionBean”. In this case, we are still flowing from the JMS Export to the POJO via a one-way operation, so there is no transaction “transactionNotSupported” and “activitySessionsSupports”. The Unit of Work manager continues to process the message to get it to the next component.

at sca.component.java.impl.POJO_JMSEventImpl.processJMS(POJO_JMSEventImpl.java:261)
        at sun.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
        at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
        at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter$2.run(JavaReflectionAdapter.java:152)
        at java.security.AccessController.doPrivileged1(Native Method)
        at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
        at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter.invoke(JavaReflectionAdapter.java:149)
        at com.ibm.ws.sca.internal.java.handler.JavaImplementationHandler.processMessage(JavaImplementationHandler.java:292)

Here we see that the Java Implementation handler has picked up the message for a java component. It then goes through some internal java security verification as it dynamically invoked the java component. The component POJO_JMSEventImpl is invoked. Our message is now in the java component.

at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at $Proxy97.invoke(Unknown Source)

We have to remember that this stack trace is at a point in time when the exception occured. So the java component has gone off, done it’s mappings and is now ready to invoke the reference to pass the message off to the BPEL component. We see this is done with a dynamic proxy which causes Proxy related Invocation Handlers to pick up the message.

at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:587)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionRequiredActivitySessionNotSupported(ModuleSessionBean.java:309)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionRequiredActivitySessionNotSupported(Unknown Source)
        at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionGlobalActivitySessionFalse(UOWStrategyImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:160)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))

Once again, we see the pattern. The MessageDispatcher gets the message, the Unit of Work manager manages the transactions and the generated EJB for the module is invoked again. I don’t know what ‘PCI’ stands for. I have a feeling it could be “Process Component Information”.

at com.ibm.bpe.framework.sca.EJSLocalStatelesscomponent_BP_LogEvent_a3df0404.processMessage(Unknown Source)
        at com.ibm.bpe.framework.sca.ProcessImplementationHandler.handleInboundCalls(ProcessImplementationHandler.java:271)
        at com.ibm.bpe.framework.sca.ProcessImplementationHandler.processMessage(ProcessImplementationHandler.java:158)

The message has been handed off to the BPEL runtime. It starts with the Process Implementation Handler which then invokes my BPEL process “BP_LogEvent”.

at com.ibm.bpe.engine.BpelEngine.processInternalMessages(BpelEngine.java(Compiled Code))
        at com.ibm.bpe.framework.EngineMessageExecutionWorkObject.processAllEngineMessages(EngineMessageExecutionWorkObject.java:254)
        at com.ibm.bpe.framework.EngineMessageExecutionWorkObject.run(EngineMessageExecutionWorkObject.java:149)
        at com.ibm.bpe.framework.EngineMessageExecutor.execute(EngineMessageExecutor.java:158)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:691)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:620)
        at com.ibm.bpe.engine.BpelEngine.receiveEvent(BpelEngine.java:570)
        at com.ibm.bpe.framework.sca.ProcessSessionBean.invokeEngineSync(ProcessSessionBean.java:933)
        at com.ibm.bpe.framework.sca.ProcessSessionBean.invokeEngineSync(ProcessSessionBean.java:905)

My BPEL process is a synchronous call, so the bean does a synchronous invocation. I’m not sure what these Events are that the BPEL Engine is recieving. The EngineMessageExecutor is the class that converts from an SCA message into a BPEL internal message. The engine is then told to process the message.

at com.ibm.bpe.engine.BpelActivityKindInvoke.doActivate(BpelActivityKindInvoke.java:465)
        at com.ibm.bpe.engine.BpelActivityStateInactive.activateOrSkip(BpelActivityStateInactive.java(Compiled Code))
        at com.ibm.bpe.engine.BpelEngineCore.continueControlLink(BpelEngineCore.java(Compiled Code))
        at com.ibm.bpe.engine.BpelContinueLinkMessage3.execute(BpelContinueLinkMessage3.java(Compiled Code))

The BPEL is at the point in my process where its going to invoke the SOAP/HTTP Web Services import. The BPEL is following the links, connections and sequences defined in the process template. BpelActivityKind is being ‘activated’ aka invoked.

at $Proxy97.processMessage(Unknown Source)
        at com.ibm.bpe.invocation.SCAInvocationHandler.doinvoke_Sync_ReqRsp(SCAInvocationHandler.java:502)
        at com.ibm.bpe.invocation.SCAInvocationHandler.doinvoke(SCAInvocationHandler.java:411)
        at com.ibm.bpe.invocation.SCAInvocationHandler.invoke(SCAInvocationHandler.java:205)

The BPEL’s SCAInvocation handler performs the synchronous invocation.

at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process(ManagedMessageImpl.java:587)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage(ModuleSessionBean.java:336)
        at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionSupportsActivitySessionSupports(ModuleSessionBean.java:260)
        at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionSupportsActivitySessionSupports(Unknown Source)
        at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionAnyActivitySessionAny(UOWStrategyImpl.java:481)
        at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage(JoinUOWHandler.java:146)
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java(Compiled Code))
        at com.ibm.ws.sca.internal.proxy.impl.ProxyInvocationHandlerImpl.invoke(ProxyInvocationHandlerImpl.java(Compiled Code))
        at $Proxy97.processMessage(Unknown Source)

More internal gorp where a message is moving around internally while finding the appropriate invocation handler.

at com.ibm.ws.webservices.engine.client.Connection.invokeEngine(Connection.java:869)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:702)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:653)
        at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:481)
        at com.ibm.ws.webservices.engine.client.Call.invoke(Call.java:1514)
        at com.ibm.ws.webservices.multiprotocol.AgnosticCall.invoke(AgnosticCall.java:171)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler$OperationHandler.invoke(PortHandler.java:193)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler$OperationHandler.access$1200(PortHandler.java:106)
        at com.ibm.ws.sca.internal.webservice.handler.PortHandler.processMessage(PortHandler.java:571)
        at com.ibm.ws.sca.internal.webservice.handler.WebServiceImportHandler.processMessage(WebServiceImportHandler.java:282)

Here we see that the SCA’s internal webservice handler has picked up the message and converted it to a SOAP/HTTP call. It then calls the WAS webservices functionality to do the invoke.

at com.ibm.ws.webservices.engine.WebServicesFault.makeUserFault(WebServicesFault.java:220)
        at com.ibm.ws.webservices.engine.xmlsoap.builders.WebServicesFaultProcessor.createFault(WebServicesFaultProcessor.java:411)
        at com.ibm.ws.webservices.engine.xmlsoap.SOAPFault.getFault(SOAPFault.java:486)
        at com.ibm.ws.webservices.engine.SOAPPart.getFault(SOAPPart.java:1090)
        at com.ibm.ws.webservices.engine.SOAPPart.getFault(SOAPPart.java:747)
        at com.ibm.ws.webservices.engine.Message.getFault(Message.java:885)
        at com.ibm.ws.webservices.engine.Message.ifFaultThrowSelf(Message.java:865)

Whoops, the webservice has returned a fault. The engine gets that fault and throws it to our client (the bpel process)

[2/27/08 11:47:33:651 EST] 000000fb FFDC          Z com.ibm.ws.sca.internal.webservice.handler.PortHandler
com.ibm.ws.sca.internal.webservice.handler.PortHandler.processMessage#01
Exception: WebServicesFault
 faultCode: Server.generalException
 faultString: java.sql.SQLException: ORA-02291: integrity constraint (TRANTRACKMSG_FK)
violated - parent key not found

faultActor: null
 faultDetail:

java.sql.SQLException: ORA-02291: integrity constraint (TRANTRACKMSG_FK) violated -
 parent key not found

FFDC, the exception has been written to the ffdc log. The PortHandler is the guy responsible for the webservice invoke and we see the fault that was thrown from the client.

So as you can see, quite a lot goes on behind the scenes with WebSphere when messages pass through the wires.

Author: dan

Leave a Reply

Your email address will not be published. Required fields are marked *