}
final List<Exchange> exchangeList = r.getExchangeList();
for (int i = 1; i < exchangeList.size(); i++) {
Exchange e = exchangeList.get(i);
// We skip failures, because INVOKE_CHECK job is not handled by
// replayer
if (e.getType() == ExchangeType.P && !e.isSetFailure()) {
answers.add(e);
}
}
{
final Exchange e = exchangeList.get(0);
final Date time = e.getCreateTime().getTime();
scheduler.scheduleReplayerJob(new Callable<Void>() {
public Void call() throws Exception {
__log.debug("initial call " + e);
final BpelProcess p = bpelEngine.getNewestProcessByType(r.getProcessType());
final ProcessDAO processDAO = p.getProcessDAO();
final MyRoleMessageExchangeImpl mex = ReplayerBpelRuntimeContextImpl.createMyRoleMex(e, bpelEngine);
p.invokeProcess(mex,
// time,
new BpelProcess.InvokeHandler() {
public boolean invoke(PartnerLinkMyRoleImpl target, RoutingInfo routing, boolean createInstance) {
if (routing.messageRoute == null && createInstance) {
ProcessInstanceDAO newInstance = processDAO.createInstance(routing.correlator);
runtimeContext = new ReplayerBpelRuntimeContextImpl(p, newInstance, new PROCESS(p.getOProcess()), mex,
// time,
ReplayerContext.this);
runtimeContext.setCurrentEventDateTime(time);
runtimeContext.updateMyRoleMex(mex);
// first receive is matched to provided
// mex
runtimeContext.execute();
return true;
} else if (routing.messageRoute != null) {
throw new IllegalStateException("Instantiating mex causes invocation of existing instance " + mex);
}
return false;
}
}, true);
for (int i = 1; i < exchangeList.size(); i++) {
Exchange e2 = exchangeList.get(i);
if (e2.getType() == ExchangeType.M) {
MyRoleMessageExchangeImpl mex2 = ReplayerBpelRuntimeContextImpl.createMyRoleMex(e2, bpelEngine);
runtimeContext.updateMyRoleMex(mex2);
scheduleInvoke(e2, mex2);
}
}