Rejected message resubmit to subprocess.

Posted by memento13 on 13-Dec-2012 09:11

Hi,

I'm trying to implement service, which will resubmit rejected message back to process step.

It works fine with simple process, but when trying to submit to subprocess, then subprocess completes and parent process isn't executed. If I investigate tracking information, then initial rejected message has following information:

topLevelProcess="Ping.Main" process="Ping.PingProcess" step="PingPong:Call PingService"

But after resubmition process has following information:

topLevelProcess="Ping.PingProcess" process="Ping.PingProcess" step="Call PingService"

I have implemented  resubmit services as is given in example (Sonic\ESB8.0\samples\Sample.ESB\src\com\sonicsw\esb\samples\resubmit):

RMEMessagePart rmeMsgPart = new RMEMessagePart(message.getPart(0));

// The stepName syntax is like "nestedProcess1:nestedProcess2:service". Parse

// process name and step here.

String stepName = rmeMsgPart.getStep();

if (stepName != null && stepName.indexOf(":") != -1)

{

     StringTokenizer strTok = new StringTokenizer(stepName, ":");

     while (strTok.hasMoreTokens())

     {

          log.logInformation(strTok.nextToken());

     }

}

String processName = rmeMsgPart.getProcess();

XQProcessAddress processAddr = ((XQAddressFactory) context.getAddressFactory()).createProcessAddress(processName, stepName);

Is it possible to resubmit rejected message to subprocess step? What could be the problem?

I'm using Sonic 8.0.

Thanks

All Replies

Posted by memento13 on 19-Dec-2012 15:04

Investigated it a little bit further. It seems that if I use fault handler process and resubmit step, process continues in top/parent process continues. But if ESB Java service and ESB API is used, then top level process is not continued.

Posted by memento13 on 20-Dec-2012 06:28

Got this problem fixed.

The solution was, that fault message must be submitted to top level process, not subprocess as is shown in samples:

RMEMessagePart rmeMsgPart = new RMEMessagePart(message.getPart(0));

stepName = rmeMsgPart.getStep();

topLevelProcess = rmeMsgPart.getTopLevelProcess();

XQProcessAddress processAddr = ((XQAddressFactory) ctx.getAddressFactory()).createProcessAddress(topLevelProcess, stepName);

I think Progress (or whoever owns Sonic) should fix the sample, because it is misleading.

This thread is closed