(OK) cBPM-CentOS—wrapped by fastcgi—files—executing commands

15606 단어
다음은 cBPM [root@localhost html]# gedit /root/.bashrc [root@localhosthtml] \ # gedit / etc / profile 말미 에 다음 을 추가 합 니 다.HOME=/etc/nginx/html export CRITERIA_HOME=/etc/nginx/html --------------------------------- [root@localhostcriteria - lin] \ # gedit. / src / criteria / criteria. Workflow Engine / WAPI / WAPI. cpp ------------------------- 절대 경 로 를 사용 하면 다음 과 같다.코드 에 해석 이 안 돼 서 요.  ${CRITERIA_HOME}。 미봉 책.        //ztg alter path         //String sWfHome = System::getEnvironmentVariable("${CRITERIA_HOME}");         //String sWfHome = "/opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor";         String sWfHome = "/etc/nginx/html";     //ztg alter path     //string sDirectory = bOS::CoreSystem::System::expandEnvironmentStrings ("${WF_HOME}");     //String sDirectory = "/opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor";     String sDirectory = "/etc/nginx/html"; ------------------------- [root@localhosthtml] \ # gedit 데이터베이스 / criteria. xml --- -------------------------------------------------------------------코드 에 해석 이 안 돼 서 요.  ${CRITERIA_HOME}。 미봉 책.etc / nginx / html / database / processTemplate 대신: ${CRITERIA HOME} / database / processTemplate ----------------- [root@localhost html]# gedit database/processTemplate/TestNotePad.xml ------------------------- ?NoteResult?@gedit @% FileName 1% 가 변경 되 었 습 니까?NoteResult?@touch@%FileName1% FileName1  ——>  /opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor/notepad.txt ------------------------- [root@localhost html]# cp /opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor/executer . [root@localhost html]# cp -a /opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor/database/ . [root@localhost html]# export WF_HOME=/etc/nginx/html; export CRITERIA_HOME=/etc/nginx/html [root@localhost html]# spawn-fcgi -a 127.0.0.1 -p 8088 -f /etc/nginx/html/executer [root@localhost html]# ./executer TestNotePad [root@localhost html]# lsof executer +++++++++++++++++++++++++++++++++++++++++
[root@localhost html]# gedit index.html

    <!DOCTYPE html>
    <html>
      <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
        <script type="text/javascript" src="cbpm.js"></script>
      </head>
      <body>
        <div id="loginContent" class="container">
            <div id="loginResult" style="display:none;">
            </div>
            <form id="loginForm" name="loginForm" method="post" action="">
            <fieldset>
                <legend>Enter information</legend>
                <p>
                <label for="processname">Process name</label>
                <br />
                <input type="text" id="processname" name="processname" class="text" size="20" />
                </p>
                <p>
                <button type="submit" class="button positive">
                 start
                </button>
                </p>
            </fieldset>
            </form>
        </div>
      </body>
    </html>


+++++++++++++++++++++++++++++++++++++++++ [root@localhost html]# gedit cbpm.js

    $(document).ready(function(){
      $("form#loginForm").submit(function() { // loginForm is submitted


    var processname = $('#processname').attr('value'); // get first name
    //var name = $('#name').attr('value'); // get name

    //if (processname && name) { // values are not empty
    if (processname) { // values are not empty
        $.ajax({
            type: "GET",
            url: "/executer.cgi", // URL of the Perl script

            // send processname and name as parameters to the Perl script
            //data: "processname=" + processname,
            data: processname,

            // script call was *not* successful
            error: function() {
                alert("script call was not successful");
            },

            // script call was successful
            // perl_data should contain the string returned by the Perl script
            success: function(perl_data){
                alert("Your name is: " + perl_data)
            }
        });
    }

    else {
      $('div#loginResult').text("Enter your name");
      $('div#loginResult').addClass("error");
    }

    $('div#loginResult').fadeIn();
    return false;
      });
    });


executer  ——>  /opt/cBPM/criteria-lin/bin/Criteria/Debug/Tools.Executor/executer +++++++++++++++++++++++++++++++++++++++++ /opt/cBPM/criteria-lin/src/Criteria/Criteria.Tools/Criteria.Tools.Executor/src/main.cpp

    #include "bOSString.h"
    #include "bOSStringBuffer.h"
    using namespace bOS::CoreString;

    #include "Tracer.h"

    #include "bOSTimer.h"

    #include "WAPI.h"
    #include "WAPIActivity.h"
    #include "WAPIWorkItem.h"
    #include "WAPIProcess.h"

    #include "Activity.h"

    //ztg add, use fcgi
    #include "fcgi_stdio.h"

    //ztg add, use fcgi
    int main_fcgi( char* proc_name, int argc=2);
    //ztg add, use fcgi
    int main(void)
    {
        //main_fcgi("TestNotePad");
        //*
        while (FCGI_Accept() >= 0) {

            char *proc_name = getenv("QUERY_STRING");

            printf("Content type: text/html

"); //printf("%s",proc_name); //main_fcgi("TestNotePad"); main_fcgi(proc_name); } //*/ } static void usage() { //ztg alter, use fcgi, not use cout, instead of using printf printf("%s", "
Usage:
" " CriteriaToolsExecutor <WorkflowName> [NrExecution]

" "This program invokes criteria workflow engine and execute <WorkflowName>
" "Options:
" " NrExecution the number of process execution. Default is 1
"); /* cout << "
Usage:
" " CriteriaToolsExecutor <WorkflowName> [NrExecution]

" "This program invokes criteria workflow engine and execute <WorkflowName>
" "Options:
" " NrExecution the number of process execution. Default is 1
" << endl; */ } //ztg alter, use fcgi //int main(int argc, char* argv[]) int main_fcgi( char* proc_name, int argc) { if ( argc == 1 ) { usage(); exit(1); } String sWorkflowName; if ( argc >= 2 ) { //ztg alter, use fcgi //sWorkflowName = argv[1]; sWorkflowName = proc_name; } unsigned int uiSize =1; if ( argc == 3 ) { //ztg del, use fcgi //uiSize = atoi(argv[2]); } //ztg alter, use fcgi, not use cout, instead of using printf printf("%s", "The program will perform the following steps:

" "1: Criteria session initialization (only one time)
" " ----- for each process (begin) -----
" "2: Create process instance from template
" "3: Execute process instance just created
" " ----- for each process (end) -----
" "4: Querying for activity pending
" "5: close criteria session

"); /* cout << "The program will perform the following steps:

" "1: Criteria session initialization (only one time)
" " ----- for each process (begin) -----
" "2: Create process instance from template
" "3: Execute process instance just created
" " ----- for each process (end) -----
" "4: Querying for activity pending
" "5: close criteria session

"; */ //ztg del, use fcgi //cout << "Press a Key for beginning................................................" << endl; //getchar(); Response* response = new Response(); response->iCode= 0; //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Criteria session Initialization.....(look at Executor trace file)"); //cout << "Criteria session Initialization.....(look at Executor trace file)" << endl; CM_SETTING_TO("Executor", 7); InitSession(response); if ( response->iCode != 0 ) { //ztg alter, use fcgi, not use cout, instead of using printf printf("Criteria session Initialization [KO].Error[ %s ]. Exit.
", response->sMsg); //cout << "Criteria session Initialization [KO].Error[" << response->sMsg << "]. Exit." << endl; exit(2); } //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Criteria session Initialization [OK]"); //cout << "Criteria session Initialization [OK]" << endl; bOS::Utils::Timer tExecutionTimer; tExecutionTimer.start(); char* lProcessId = new char[50]; //char* acRet = NULL; StringBuffer outputSimplified; //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Create process instance from template"); //cout << "Create process instance from template" << endl; for ( unsigned int i=0; i<uiSize; i++) { bOS::Utils::Timer tTot; bOS::Utils::Timer tCreate; bOS::Utils::Timer tStart; tTot.start(); tCreate.start(); createWorkflowProcess((char*)sWorkflowName.c_str(), lProcessId, response); tCreate.stop(); if ( response->iCode == 0 ) { //cout << "Create process instance [OK]. Process Instance Id[" << lProcessId << "]" << endl; tStart.start(); startProcessInSynchWay(lProcessId, response); tStart.stop(); tTot.stop(); if ( response->iCode == 0 ) { //cout << "Execute process instance [OK]. Process Instance Id[" << lProcessId << "] just started" << endl; //ztg alter, use fcgi, not use cout, instead of using printf printf("[ %u ] Process [ %d ] [ %d ] [ %d ] [ %d ]
", i, lProcessId, tCreate.getTicks(), tStart.getTicks(), tTot.getTicks()); //cout << "[" << i << "] Process [" << lProcessId << "] [" << tCreate.getTicks() << "] [" << tStart.getTicks() << "] [" << tTot.getTicks() << "]" << endl; } else { //ztg alter, use fcgi, not use cout, instead of using printf printf("Execute process instance [KO]. Process Instance Id[ %s ]
", lProcessId); //cout << "Execute process instance [KO]. Process Instance Id[" << lProcessId << "] not started" << endl; } } else { //ztg alter, use fcgi, not use cout, instead of using printf printf("Create process instance [KO]. Err[ %s ]
", response->sMsg); //cout << "Create process instance [KO]. Err[" << response->sMsg << "]" << endl; } } //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Querying for activity pending"); //cout << "Querying for activity pending" << endl; unsigned long lWorkflowRunning=0; do { lWorkflowRunning= getNumberRunningWorkflow(response); if ( response->iCode == 0 ) { //ztg alter, use fcgi, not use cout, instead of using printf printf("WorkflowRunning[ %lu ]
", lWorkflowRunning); //cout << "WorkflowRunning[" << lWorkflowRunning << "]" << endl; } else { //ztg alter, use fcgi, not use cout, instead of using printf printf("Error retreiving RunningWorkflow.Err[ %s ]
", response->sMsg); //cout << "Error retreiving RunningWorkflow.Err[" << response->sMsg << "]" << endl; } } while ( lWorkflowRunning > 0); tExecutionTimer.stop(); //ztg alter, use fcgi, not use cout, instead of using printf printf("Execution Time(ms): %d
", tExecutionTimer.getTicks()); //cout << "Execution Time(ms): " << tExecutionTimer.getTicks() << endl; //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Press a Key for terminating................................................"); //cout << "Press a Key for terminating................................................" << endl; //getchar(); //ztg add sleep() //sleep(2); //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "EndSession......."); //cout << "EndSession......." << endl; response->iCode = 0; EndSession(response); if ( response->iCode == 0 ) { //ztg alter, use fcgi, not use cout, instead of using printf printf("%s
", "Session Terminated [OK]"); //cout << "Session Terminated [OK]" << endl; } else { //ztg alter, use fcgi, not use cout, instead of using printf printf("Terminating [KO].Err[ %s ]
", response->sMsg); //cout << "Terminating [KO].Err[" << response->sMsg << "]" << endl; } // return 0; }

+++++++++++++++++++++++++++++++++++++++++

좋은 웹페이지 즐겨찾기