Package org.huihoo.workflow.xpdl

Examples of org.huihoo.workflow.xpdl.WorkflowPackage


    log.debug(
      "[dispatch_subflow] workitem: " + workflowWork.getInfo() + " | transition: " + workflowTransition.getInfo());

    WorkflowCase workflowCase = workflowWork.getWorkflowCase();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();
    WorkflowActivity toActivity = workflowTransition.getToWorkflowActivity();

    //1) create org.huihoo.workflow work for subflow task node
    String parentDispWorkId = null;
    if (workflowWork instanceof WorkflowSubWork)
    {
      //performer is null
      WorkflowSubWork subWork = (WorkflowSubWork) workflowWork;
      parentDispWorkId =
        caseDatabase.createWorkflowSubWork(
          workflowProcess,
          operator,
          userTransaction,
          workflowCase,
          toActivity,
          subWork.getParentWorkflowWork(),
          null,
          subWork.getDispatchTime());
    }
    else
    {
      //performer is null
      parentDispWorkId =
        caseDatabase.createWorkflowWork(
          workflowProcess,
          operator,
          userTransaction,
          workflowCase,
          toActivity,
          null,
          workflowWork.getDispatchTime());
    }

    WorkflowWork parentDispWork =
      caseDatabase.findWorkflowWork(workflowProcess, operator, userTransaction, workflowCase, parentDispWorkId);
    caseDatabase.createWorkflowPath(
      workflowProcess,
      operator,
      userTransaction,
      workflowCase,
      workflowWork,
      parentDispWork,
      pathDispBatch,
      WorkflowActivityEvent.WORK_DISPATCH);

    //only accept ,not dispatch
    DispatchController.accept_core(
      workflowService,
      workflowProcess,
      operator,
      caseDatabase,
      userTransaction,
      parentDispWork);

    //2) create org.huihoo.workflow work for subflow process first task node
    SubFlowImplementation impl = (SubFlowImplementation) toActivity.getImplementation();
    String suPprocessId = impl.getProcessID();
    WorkflowProcess subProcess = workflowPackage.findWorkflowProcess(suPprocessId);
    WorkflowTransition firstTransition =
      (WorkflowTransition) subProcess.getBeginActivity().getOutgoingTransitions().get(0);
    WorkflowActivity firstActivity = firstTransition.getToWorkflowActivity();
    String childDispWorkId =
      caseDatabase.createWorkflowSubWork(
View Full Code Here


    {
      listeners[i].beforeDispatched(event);
    }

    WorkflowCase workflowCase = workflowWork.getWorkflowCase();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();

    workflowWork.setDispatchTime(new java.util.Date());
    caseDatabase.updateWorkflowWork(workflowProcess, operator, userTransaction, workflowWork);

    //------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------
    WorkflowTransition customizedTransition = dispatch_revert(workflowService,workflowProcess,operator,caseDatabase,userTransaction,workflowWork);

    List filterTrans = null;

    if (customizedTransition == null)
    {
      filterTrans =
        OutTransitionFilter.filterOutTransition(workflowService,
          operator,
          caseDatabase,
          userTransaction,
          workflowWork);
    }
    else
    {
      filterTrans = new ArrayList();
      filterTrans.add(customizedTransition);
    }

    int sizeTrans = filterTrans.size();

    if (sizeTrans > 0)
    {
      WorkflowTransition transition = null;

      //-------------------------------------------------------------
      //   �������ɷ������Ĺ�����ʹ����ͬ���ɷ��Ǻ�
      //--------------------------------------------------------------
      String pathDispBatch = null;
      pathDispBatch =
        caseDatabase.getCaseIdGenerator().genWorkflowPathBatch(
          workflowPackage.getUUID(),
          workflowProcess.getUUID(),
          workflowActivity.getUUID(),
          workflowCase.getUUID());
     
      ParallelThread pThreads[] =new ParallelThread[sizeTrans];
      for (int i = 0; i < sizeTrans; ++i)
      {
        transition = (WorkflowTransition) filterTrans.get(i);

//        dispatch_control(workflowService,
//          workflowProcess,
//          operator,
//          caseDatabase,
//          userTransaction,
//          workflowWork,
//          transition,
//          pathDispBatch);

        pThreads[i]=new ParallelThread(workflowService,
          workflowProcess,
          operator,
          caseDatabase,
          userTransaction,
          workflowWork,
          transition,
          pathDispBatch);  
         
        pThreads[i].start();    
      }
     
      WorkflowException dispatch_exception = null;
      for (int i = 0; i < sizeTrans; ++i)
      {
        try
        {
          pThreads[i].join();
         
          if(pThreads[i].getException() != null)
          {
            dispatch_exception = pThreads[i].getException();
          }
        }
        catch(InterruptedException ex)
        {
          dispatch_exception = new WorkflowException("another thread has interrupted the ParallelThread");
        }
      }
     
      if(dispatch_exception != null)
      {
        throw dispatch_exception;
      }
    }
    else
    {
      // how I can do? just log it
      WorkflowContext context = workflowService.getWorkflowContext();
      String message =
        "---------BEGIN-------------Damn It ,Fatal Error----------------------\n"
          + "no available outgoing transition found. shXt, willow is powered by zosatapo (dertyang@hotmail.com) . \n"
          + "\t\t PackageID  = "
          + workflowPackage.getUUID()
          + "\n"
          + "\t\t ProcessID  = "
          + workflowProcess.getUUID()
          + "\n"
          + "\t\t ActivityID = "
View Full Code Here

    Connection conn = (Connection) userTransaction.getStoreConnection().get();
    PreparedStatement pstmt = null;

    WorkflowCase workflowCase = workflowWork.getWorkflowCase();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();

    String fromWorkID = null;
    String batchNo = null;
    try
    {
      pstmt = conn.prepareStatement(strSQL);
      pstmt.setString(1, workflowPackage.getUUID());
      pstmt.setString(2, workflowProcess.getUUID());
      pstmt.setString(3, workflowCase.getUUID());
      pstmt.setString(4, workflowWork.getUUID());

      ResultSet rs = pstmt.executeQuery();
      if (rs.next())
      {
        fromWorkID = rs.getString("vc_from");
        batchNo = rs.getString("vc_batchNo");

        rs.close();
        pstmt.close();

        strSQL =
          "SELECT count(*) FROM "
            + caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_PATH)
            + "  "
            + "WHERE  vc_packageid=? "
            + "AND    vc_processid=? "
            + "AND    vc_caseid=?  "
            + "AND    vc_from=? "
            + "AND    vc_batchNo=? ";
        pstmt = conn.prepareStatement(strSQL);
        pstmt.setString(1, workflowPackage.getUUID());
        pstmt.setString(2, workflowProcess.getUUID());
        pstmt.setString(3, workflowCase.getUUID());
        pstmt.setString(4, fromWorkID);
        pstmt.setString(5, batchNo);

        rs = pstmt.executeQuery();
        if (rs.next())
        {
          int count = rs.getInt(1);

          if (count > 1)
          {
            //ǰ�̻�ַ���Ψһ,���ܽ��л���
            throw new WorkflowException("WorkflowWork broadcast dispatch");
          }
        }
        else
        {
          //never to reach here
          throw new WorkflowException("WorkflowPath not found");
        }
      }
      else
      {
        throw new WorkflowException("WorkflowPath not found ");
      }
    }
    catch (SQLException ex)
    {
      throw new WorkflowException(ex);
    }
    finally
    {
      ConnUtils.cleanupNoThrow(pstmt);
    }

    WorkflowWork fromWork =
      caseDatabase.findWorkflowWork(
        workflowProcess,
        operator,
        userTransaction,
        workflowCase,
        fromWorkID);
    WorkflowParticipant participant = fromWork.getPerformer();

    String dispWorkId =
      caseDatabase.createWorkflowWork(
        workflowProcess,
        operator,
        userTransaction,
        workflowCase,
        activity,
        participant,
        workflowWork.getDispatchTime());
    String pathDispBatch =
      caseDatabase.getCaseIdGenerator().genWorkflowPathBatch(
        workflowPackage.getUUID(),
        workflowProcess.getUUID(),
        activity.getUUID(),
        workflowCase.getUUID());

    WorkflowWork dispWork =
View Full Code Here

    }

    try
    {
      WorkflowCase workflowCase = workItem.getWorkflowCase();
      WorkflowPackage pkg = workflowCase.getWorkflowProcess().getWorkflowPackage();
      WorkflowApplication app = pkg.findWorkflowApplication(getApplicationID());
      String implClassName = app.getQualifiedClassName();
      Class implClass = loader.loadClass(implClassName);

      WorkflowCall call = (WorkflowCall) implClass.newInstance();
      call.invoke(workItem, makeParamerers(workflowCase, app));
View Full Code Here

    Connection conn = (Connection) userTransaction.getStoreConnection().get();
    PreparedStatement pstmt = null;

    WorkflowCase workflowCase = workflowWork.getWorkflowCase();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();

    try
    {
      pstmt = conn.prepareStatement(strSQL);
      pstmt.setString(1, workflowPackage.getUUID());
      pstmt.setString(2, workflowProcess.getUUID());
      pstmt.setString(3, workflowCase.getUUID());
      pstmt.setString(4, workflowWork.getUUID());

      ResultSet rs = pstmt.executeQuery();
View Full Code Here

    WorkflowWork workflowWork)
    throws WorkflowException
  {
    WorkflowActivity workflowActivity = workflowWork.getWorkflowActivity();
    WorkflowCase workflowCase = workflowWork.getWorkflowCase();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();

    WorkflowTransition rever_transition = null;

    //�ɷ��Ĺ��������ɻ���(revert)�����Ĺ������Ҫ���⴦��
    String strSQL =
      "SELECT    vc_from,vc_owner_processid,vc_transitionid FROM "
        + caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_PATH)
        + "  "
        + "WHERE  vc_packageid=? "
        + "AND    vc_processid=? "
        + "AND    vc_caseid=?  "
        + "AND    vc_to=? "
        + "AND    int_eventType=? ";

    Connection conn = (Connection) userTransaction.getStoreConnection().get();
    PreparedStatement pstmt = null;

    try
    {
      pstmt = conn.prepareStatement(strSQL);
      pstmt.setString(1, workflowPackage.getUUID());
      pstmt.setString(2, workflowProcess.getUUID());
      pstmt.setString(3, workflowCase.getUUID());
      pstmt.setString(4, workflowWork.getUUID());
      pstmt.setInt(5, WorkflowActivityEvent.WORK_REVERT);//<-----very important

      ResultSet rs = pstmt.executeQuery();
      if (rs.next())
      {
        String fromWorkID = rs.getString("vc_from");

        //----------------------------------------------------------------------------
        // ֧�ֻ��˴���Ĺ���������ڵ���Ҫ�����ϸ���߼�����
        //
        // ���Ի��˴���Ĺ�����ǰ�̹��������Ψһ��
        // ͬʱǰ�̹������ֻ��Ψһ�ĺ�̹����� (�߼��ϵ�����,���ݽṹ)
        //----------------------------------------------------------------------------       
        if (rs.next())
        {
          throw new WorkflowException("Fatal WorkflowService Engine Error");
        }

        WorkflowWork fromWork =
          caseDatabase.findWorkflowWork(
            workflowProcess,
            operator,
            userTransaction,
            workflowCase,
            fromWorkID);

        String vc_owner_processid = rs.getString("vc_owner_processid");
        if (vc_owner_processid != null && !"".equals(vc_owner_processid))
        {
          String vc_transitionid = rs.getString("vc_transitionid");
          WorkflowProcess owner_processid = workflowPackage.findWorkflowProcess(vc_owner_processid);
          rever_transition = owner_processid.findWorkflowTransition(vc_transitionid);
        }
        else
        {
          rever_transition =
View Full Code Here

  }
 
  public SerialPackage  findPackage(String packageID) throws RemoteException
  {
    //System.err.println("-------findPackage--------"+packageID);
    WorkflowPackage workflowPackage=workflowService.findWorkflowPackage(packageID);
    if(workflowPackage!=null)
    {
      return new SerialPackage(workflowPackage);
    }
   
View Full Code Here

  public boolean accept(WorkflowProcess workflowProcess,WorkflowParticipant operator, WorkflowWork workItem) throws WorkflowException
  {
    log.debug("[accept] workitem: " + workItem);
 
    WorkflowActivity workflowActivity = workItem.getWorkflowActivity();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();
    WorkflowService workflowService=getCaseDatabase().getWorkflowService();
    CaseDatabaseImpl caseDatabase =(CaseDatabaseImpl) workflowService.getCaseDatabase();
    UserTransaction userTransaction = caseDatabase.getUserTransaction();
    boolean resultDone = false;
    try
View Full Code Here

  {

    log.info("[dispatch] workitem: " + workItem );

    WorkflowActivity workflowActivity = workItem.getWorkflowActivity();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();
    WorkflowService workflowService=getCaseDatabase().getWorkflowService();
   
    CaseDatabaseImpl caseDatabase =(CaseDatabaseImpl) workflowService.getCaseDatabase();
    UserTransaction userTransaction = caseDatabase.getUserTransaction();
View Full Code Here

  }
  public boolean revert(WorkflowProcess workflowProcess,WorkflowParticipant operator, WorkflowWork workItem) throws WorkflowException
  {
    log.debug("[revert] workitem: " + workItem );
    WorkflowActivity workflowActivity = workItem.getWorkflowActivity();
    WorkflowPackage workflowPackage = workflowProcess.getWorkflowPackage();
    WorkflowService workflowService=getCaseDatabase().getWorkflowService();
    CaseDatabaseImpl caseDatabase =(CaseDatabaseImpl) workflowService.getCaseDatabase();

    UserTransaction userTransaction = caseDatabase.getUserTransaction();
    boolean resultDone = false;
View Full Code Here

TOP

Related Classes of org.huihoo.workflow.xpdl.WorkflowPackage

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.