//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010 ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge : http://sourceforge.net/projects/huihoo
* Mailing list : willow@lists.sourceforge.net
*/
//----------------------------END LICENSE-----------------------------
package org.huihoo.workflow.impl.store.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.huihoo.willow.core.WorkflowServiceBase;
import org.huihoo.workflow.WorkflowException;
import org.huihoo.workflow.store.SchemaContext;
import org.huihoo.workflow.store.persistent.UserTransaction;
import org.huihoo.workflow.store.spi.SpiCaseDatabase;
import org.huihoo.workflow.usermodel.WorkflowParticipant;
import org.huihoo.workflow.runtime.WorkflowCase;
import org.huihoo.workflow.runtime.WorkflowService;
import org.huihoo.workflow.runtime.WorkflowWork;
import org.huihoo.workflow.xpdl.WorkflowActivity;
import org.huihoo.workflow.xpdl.WorkflowProcess;
import org.huihoo.workflow.xpdl.WorkflowTransition;
import org.huihoo.workflow.xpdl.activity.JoinType;
import org.huihoo.workflow.xpdl.event.WorkflowActivityEvent;
import com.zosatapo.commons.store.ConnUtils;
import org.huihoo.workflow.impl.monitor.EventMonitorThread;
import org.huihoo.workflow.impl.monitor.MonitorEvent;
import org.huihoo.workflow.impl.monitor.MonitorEventResult;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class JoinActivityController
{
public static Log log = LogFactory.getLog(JoinActivityController.class);
public static boolean dispatch_join(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug("[dispatch_join] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
JoinType joinType = workflowTransition.getToWorkflowActivity().getJoinType();
if (JoinType.JOIN_AND.equals(joinType))
{
return dispatch_andJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
else if (JoinType.JOIN_XOR.equals(joinType))
{
return dispatch_xorJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
else if (JoinType.JOIN_OR.equals(joinType))
{
return dispatch_orJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
else if (JoinType.JOIN_ROUTE.equals(joinType))
{
return dispatch_routeJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
else if (JoinType.JOIN_INSTANCE_AND.equals(joinType))
{
return dispatch_instanceAndJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
else if (JoinType.JOIN_INSTANCE_XOR.equals(joinType))
{
return dispatch_instanceXorJoin(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
workflowWork,
workflowTransition,
pathDispBatch);
}
throw new WorkflowException("JoinType " + joinType + " not supported by current realse");
}
public static boolean dispatch_andJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_andJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
WorkflowServiceBase context = (WorkflowServiceBase) workflowService;
EventMonitorThread eventMonitorThread = context.getEventMonitorThread(workflowProcess.getWorkflowPackage());
MonitorEvent monitorEvent =
new MonitorEvent(workflowService, workflowProcess, operator, userTransaction, workflowWork, workflowTransition);
eventMonitorThread.sendEvent(monitorEvent);
MonitorEventResult eventResult = monitorEvent.getResult();
if (eventResult.getException() != null)
{
throw new WorkflowException(eventResult.getException());
}
Connection conn = (Connection) userTransaction.getStoreConnection().get();
PreparedStatement pstmt = null;
String strSQL = null;
WorkflowCase workflowCase = workflowWork.getWorkflowCase();
WorkflowActivity dispActivity = workflowTransition.getFromWorkflowActivity();
String disp_owner_process_id = dispActivity.getWorkflowProcess().getUUID();
String disp_activity_id = dispActivity.getUUID();
String packageId = workflowProcess.getWorkflowPackage().getUUID();
String processId = workflowProcess.getUUID();
String caseId = workflowCase.getUUID();
log.debug("\nandJoin monitorEvent == > "+monitorEvent);
try
{
if (eventResult.getBatchNo() == 0)
{
strSQL =
"INSERT INTO "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ "(vc_packageid,vc_processid,vc_caseid,vc_owner_processid,vc_activityid,int_batchNo) "
+ " VALUES(?,?,?,?,?,?)";
pstmt = conn.prepareStatement(strSQL);
pstmt.setString(1, packageId);
pstmt.setString(2, processId);
pstmt.setString(3, caseId);
pstmt.setString(4, disp_owner_process_id);
pstmt.setString(5, disp_activity_id);
pstmt.setInt(6, eventResult.getBatchNo() + 1);
pstmt.execute();
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
else
{
strSQL =
"UPDATE "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ " "
+ "SET int_batchNo=?,vc_disp_flag=? "
+ "WHERE vc_packageid=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=? "
+ "AND vc_owner_processid=? "
+ "AND vc_activityid=? ";
pstmt = conn.prepareStatement(strSQL);
pstmt.setInt(1, eventResult.getBatchNo() + 1);
pstmt.setString(2, "TRUE");
pstmt.setString(3, packageId);
pstmt.setString(4, processId);
pstmt.setString(5, caseId);
pstmt.setString(6, disp_owner_process_id);
pstmt.setString(7, disp_activity_id);
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
}
catch (SQLException ex)
{
throw new WorkflowException(ex);
}
finally
{
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
String andJoinWorkId = eventResult.getJoinWorkID();
if (andJoinWorkId == null)
{
//�������ز�һ��,throw InternalError()???
}
else
{
WorkflowWork andJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
andJoinWorkId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
andJoinWork,
pathDispBatch,
WorkflowActivityEvent.WORK_DISPATCH);
if (eventResult.last())
{
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
andJoinWork);
}
}
return true;
}
public static boolean dispatch_xorJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_xorJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
WorkflowServiceBase context = (WorkflowServiceBase) workflowService;
EventMonitorThread eventMonitorThread = context.getEventMonitorThread(workflowProcess.getWorkflowPackage());
MonitorEvent monitorEvent =
new MonitorEvent(workflowService, workflowProcess, operator, userTransaction, workflowWork, workflowTransition);
eventMonitorThread.sendEvent(monitorEvent);
MonitorEventResult eventResult = monitorEvent.getResult();
if (eventResult.getException() != null)
{
eventResult.getException().printStackTrace();
throw new WorkflowException(eventResult.getException());
}
Connection conn = (Connection) userTransaction.getStoreConnection().get();
PreparedStatement pstmt = null;
String strSQL = null;
WorkflowCase workflowCase = workflowWork.getWorkflowCase();
WorkflowActivity dispActivity = workflowTransition.getFromWorkflowActivity();
String disp_owner_process_id = dispActivity.getWorkflowProcess().getUUID();
String disp_activity_id = dispActivity.getUUID();
String packageId = workflowProcess.getWorkflowPackage().getUUID();
String processId = workflowProcess.getUUID();
String caseId = workflowCase.getUUID();
log.debug("\nxorJoin monitorEvent == > "+monitorEvent);
try
{
if (eventResult.getBatchNo() == 0)
{
strSQL =
"INSERT INTO "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ "(vc_packageid,vc_processid,vc_caseid,vc_owner_processid,vc_activityid,int_batchNo) "
+ " VALUES(?,?,?,?,?,?)";
pstmt = conn.prepareStatement(strSQL);
pstmt.setString(1, packageId);
pstmt.setString(2, processId);
pstmt.setString(3, caseId);
pstmt.setString(4, disp_owner_process_id);
pstmt.setString(5, disp_activity_id);
pstmt.setInt(6, eventResult.getBatchNo() + 1);
pstmt.execute();
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
else
{
strSQL =
"UPDATE "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ " "
+ "SET int_batchNo=?,vc_disp_flag=? "
+ "WHERE vc_packageid=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=? "
+ "AND vc_owner_processid=? "
+ "AND vc_activityid=? ";
pstmt = conn.prepareStatement(strSQL);
pstmt.setInt(1, eventResult.getBatchNo() + 1);
pstmt.setString(2, "TRUE");
pstmt.setString(3, packageId);
pstmt.setString(4, processId);
pstmt.setString(5, caseId);
pstmt.setString(6, disp_owner_process_id);
pstmt.setString(7, disp_activity_id);
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
}
catch (SQLException ex)
{
throw new WorkflowException(ex);
}
finally
{
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
if (eventResult.first())
{
String xorJoinWorkId = eventResult.getJoinWorkID();
WorkflowWork xorJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
xorJoinWorkId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
xorJoinWork,
pathDispBatch,
WorkflowActivityEvent.WORK_DISPATCH);
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
xorJoinWork);
}
else
{
//���Էǵ�һ����ɵ�ǰ������??? FIXME!!!!
}
return true;
}
public static boolean dispatch_orJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_orJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
WorkflowServiceBase context = (WorkflowServiceBase) workflowService;
EventMonitorThread eventMonitorThread = context.getEventMonitorThread(workflowProcess.getWorkflowPackage());
MonitorEvent monitorEvent =
new MonitorEvent(workflowService, workflowProcess, operator, userTransaction, workflowWork, workflowTransition);
eventMonitorThread.sendEvent(monitorEvent);
MonitorEventResult eventResult = monitorEvent.getResult();
if (eventResult.getException() != null)
{
eventResult.getException().printStackTrace();
throw new WorkflowException(eventResult.getException());
}
Connection conn = (Connection) userTransaction.getStoreConnection().get();
PreparedStatement pstmt = null;
String strSQL = null;
WorkflowCase workflowCase = workflowWork.getWorkflowCase();
WorkflowActivity dispActivity = workflowTransition.getFromWorkflowActivity();
String disp_owner_process_id = dispActivity.getWorkflowProcess().getUUID();
String disp_activity_id = dispActivity.getUUID();
String packageId = workflowProcess.getWorkflowPackage().getUUID();
String processId = workflowProcess.getUUID();
String caseId = workflowCase.getUUID();
log.debug("\norJoin monitorEvent == > "+monitorEvent);
try
{
if (eventResult.getBatchNo() == 0)
{
strSQL =
"INSERT INTO "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ "(vc_packageid,vc_processid,vc_caseid,vc_owner_processid,vc_activityid,int_batchNo) "
+ " VALUES(?,?,?,?,?,?)";
pstmt = conn.prepareStatement(strSQL);
pstmt.setString(1, packageId);
pstmt.setString(2, processId);
pstmt.setString(3, caseId);
pstmt.setString(4, disp_owner_process_id);
pstmt.setString(5, disp_activity_id);
pstmt.setInt(6, eventResult.getBatchNo() + 1);
pstmt.execute();
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
else
{
strSQL =
"UPDATE "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ " "
+ "SET int_batchNo=?,vc_disp_flag=? "
+ "WHERE vc_packageid=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=? "
+ "AND vc_owner_processid=? "
+ "AND vc_activityid=? ";
pstmt = conn.prepareStatement(strSQL);
pstmt.setInt(1, eventResult.getBatchNo() + 1);
pstmt.setString(2, "TRUE");
pstmt.setString(3, packageId);
pstmt.setString(4, processId);
pstmt.setString(5, caseId);
pstmt.setString(6, disp_owner_process_id);
pstmt.setString(7, disp_activity_id);
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
}
catch (SQLException ex)
{
throw new WorkflowException(ex);
}
finally
{
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
String orJoinWorkId = eventResult.getJoinWorkID();
if (orJoinWorkId == null)
{
//�������ز�һ��,throw InternalError()???
}
else
{
WorkflowWork orJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
orJoinWorkId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
orJoinWork,
pathDispBatch,
WorkflowActivityEvent.WORK_DISPATCH);
if (eventResult.last())
{
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
orJoinWork);
}
}
return true;
}
public static boolean dispatch_routeJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_routeJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
WorkflowActivity routeActivity = workflowTransition.getToWorkflowActivity();
String orJoinWorkId = null;
orJoinWorkId =
caseDatabase.createWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
routeActivity,
null,
workflowWork.getDispatchTime());
WorkflowWork routeJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
orJoinWorkId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
routeJoinWork,
pathDispBatch,
WorkflowActivityEvent.WORK_DISPATCH);
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
routeJoinWork);
}
public static boolean dispatch_weightJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_weightJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
//-------------------------------------------
// reserved for extenstion,not supported now
//-------------------------------------------
return true;
}
public static boolean dispatch_instanceAndJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug(
"[dispatch_instanceAndJoin] workitem: "
+ workflowWork.getInfo()
+ " | transition: "
+ workflowTransition.getInfo());
WorkflowServiceBase context = (WorkflowServiceBase) workflowService;
EventMonitorThread eventMonitorThread = context.getEventMonitorThread(workflowProcess.getWorkflowPackage());
MonitorEvent monitorEvent =
new MonitorEvent(workflowService, workflowProcess, operator, userTransaction, workflowWork, workflowTransition);
eventMonitorThread.sendEvent(monitorEvent);
MonitorEventResult eventResult = monitorEvent.getResult();
if (eventResult.getException() != null)
{
throw new WorkflowException(eventResult.getException());
}
Connection conn = (Connection) userTransaction.getStoreConnection().get();
PreparedStatement pstmt = null;
String strSQL = null;
WorkflowCase workflowCase = workflowWork.getWorkflowCase();
WorkflowActivity dispActivity = workflowTransition.getFromWorkflowActivity();
String disp_owner_process_id = dispActivity.getWorkflowProcess().getUUID();
String disp_activity_id = dispActivity.getUUID();
String packageId = workflowProcess.getWorkflowPackage().getUUID();
String processId = workflowProcess.getUUID();
String caseId = workflowCase.getUUID();
log.debug("\ninstanceAndJoin monitorEvent == > "+monitorEvent);
try
{
if (eventResult.getBatchNo() == 0)
{
strSQL =
"INSERT INTO "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ "(vc_packageid,vc_processid,vc_caseid,vc_owner_processid,vc_activityid,int_batchNo) "
+ " VALUES(?,?,?,?,?,?)";
pstmt = conn.prepareStatement(strSQL);
pstmt.setString(1, packageId);
pstmt.setString(2, processId);
pstmt.setString(3, caseId);
pstmt.setString(4, disp_owner_process_id);
pstmt.setString(5, disp_activity_id);
pstmt.setInt(6, eventResult.getBatchNo() + 1);
pstmt.execute();
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
else
{
strSQL =
"UPDATE "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ " "
+ "SET int_batchNo=?,vc_disp_flag=? "
+ "WHERE vc_packageid=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=? "
+ "AND vc_owner_processid=? "
+ "AND vc_activityid=? ";
pstmt = conn.prepareStatement(strSQL);
pstmt.setInt(1, eventResult.getBatchNo() + 1);
pstmt.setString(2, "TRUE");
pstmt.setString(3, packageId);
pstmt.setString(4, processId);
pstmt.setString(5, caseId);
pstmt.setString(6, disp_owner_process_id);
pstmt.setString(7, disp_activity_id);
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
}
catch (SQLException ex)
{
throw new WorkflowException(ex);
}
finally
{
ConnUtils.cleanupNoThrow(pstmt);
pstmt = null;
}
String andJoinWorkId = eventResult.getJoinWorkID();
if (andJoinWorkId == null)
{
//�������ز�һ��,throw InternalError()???
}
else
{
WorkflowWork andJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
andJoinWorkId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
andJoinWork,
pathDispBatch,
WorkflowActivityEvent.WORK_DISPATCH);
if (eventResult.last())
{
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
andJoinWork);
}
}
return true;
}
public static boolean dispatch_instanceXorJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug("[dispatch_instanceXorJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
WorkflowServiceBase context = (WorkflowServiceBase) workflowService;
EventMonitorThread eventMonitorThread = context.getEventMonitorThread(workflowProcess.getWorkflowPackage());
MonitorEvent monitorEvent =
new MonitorEvent(workflowService, workflowProcess, operator, userTransaction, workflowWork, workflowTransition);
eventMonitorThread.sendEvent(monitorEvent);
MonitorEventResult eventResult = monitorEvent.getResult();
if (eventResult.getException() != null)
{
throw new WorkflowException(eventResult.getException());
}
WorkflowCase workflowCase = workflowWork.getWorkflowCase();
WorkflowActivity dispActivity = workflowTransition.getFromWorkflowActivity();
String disp_owner_process_id = dispActivity.getWorkflowProcess().getUUID();
String disp_activity_id = dispActivity.getUUID();
String packageId = workflowProcess.getWorkflowPackage().getUUID();
String processId = workflowProcess.getUUID();
String caseId = workflowCase.getUUID();
log.debug("\ninstanceXorJoin monitorEvent == > "+monitorEvent);
if (eventResult.first())
{
String xor_work_id = eventResult.getJoinWorkID();
WorkflowWork xorJoinWork =
caseDatabase.findWorkflowWork(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
xor_work_id);
String batchNo =
caseDatabase.getCaseIdGenerator().genWorkflowPathBatch(packageId, processId, dispActivity.getUUID(), caseId);
caseDatabase.createWorkflowPath(
workflowProcess,
operator,
userTransaction,
workflowWork.getWorkflowCase(),
workflowWork,
xorJoinWork,
batchNo,
WorkflowActivityEvent.WORK_DISPATCH);
return DispatchController.execute_dispatchIfNecessary(
workflowService,
workflowProcess,
operator,
caseDatabase,
userTransaction,
xorJoinWork);
}
return true;
}
public static boolean dispatch_instanceOrJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug("[dispatch_instanceWeightJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
//-------------------------------------------
// reserved for extenstion,not supported now
//-------------------------------------------
return true;
}
public static boolean dispatch_instanceWeightJoin(
WorkflowService workflowService,
WorkflowProcess workflowProcess,
WorkflowParticipant operator,
SpiCaseDatabase caseDatabase,
UserTransaction userTransaction,
WorkflowWork workflowWork,
WorkflowTransition workflowTransition,
String pathDispBatch)
throws WorkflowException
{
log.debug("[dispatch_instanceWeightJoin] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());
//-------------------------------------------
// reserved for extenstion,not supported now
//-------------------------------------------
return true;
}
}