zoukankan      html  css  js  c++  java
  • (OK) cBPM-CentOS—wrapped by fastcgi—files—executing commands

    ----------------------------下面针对cBPM

    [root@localhost html]# gedit /root/.bashrc
    [root@localhost html]# gedit /etc/profile
    末尾添加:
    ---------------------------------
    export WF_HOME=/etc/nginx/html
    export CRITERIA_HOME=/etc/nginx/html
    ---------------------------------


    [root@localhost criteria-lin]# gedit ./src/Criteria/Criteria.WorkflowEngine/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@localhost html]# gedit database/Criteria.xml
    -------------------------
    使用绝对路径, 如下。因为 代码里面不能 解析  ${CRITERIA_HOME}。 权宜之计。
    /etc/nginx/html/database/processTemplate
    而非:
    ${CRITERIA_HOME}/database/processTemplate
    -------------------------


    [root@localhost html]# gedit database/processTemplate/TestNotePad.xml
    -------------------------
    ?NoteResult?@gedit@%FileName1%
    修改为
    ?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

    点击(此处)折叠或打开

    1. <!DOCTYPE html>
    2. <html>
    3.   <head>
    4.     <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
    5.     <script type="text/javascript" src="cbpm.js"></script>
    6.   </head>
    7.   <body>
    8.     <div id="loginContent" class="container">
    9.         <div id="loginResult" style="display:none;">
    10.         </div>
    11.         <form id="loginForm" name="loginForm" method="post" action="">
    12.         <fieldset>
    13.             <legend>Enter information</legend>
    14.             <p>
    15.             <label for="processname">Process name</label>
    16.             <br />
    17.             <input type="text" id="processname" name="processname" class="text" size="20" />
    18.             </p>
    19.             <p>
    20.             <button type="submit" class="button positive">
    21.              start
    22.             </button>
    23.             </p>
    24.         </fieldset>
    25.         </form>
    26.     </div>
    27.   </body>
    28. </html>


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

    [root@localhost html]# gedit cbpm.js


    点击(此处)折叠或打开

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


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

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

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

    13.         // script call was *not* successful
    14.         error: function() {
    15.             alert("script call was not successful");
    16.         },

    17.         // script call was successful
    18.         // perl_data should contain the string returned by the Perl script
    19.         success: function(perl_data){
    20.             alert("Your name is: " + perl_data)
    21.         }
    22.     });
    23. }

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

    28. $('div#loginResult').fadeIn();
    29. return false;
    30.   });
    31. });

     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

    点击(此处)折叠或打开

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

    4. #include "Tracer.h"

    5. #include "bOSTimer.h"

    6. #include "WAPI.h"
    7. #include "WAPIActivity.h"
    8. #include "WAPIWorkItem.h"
    9. #include "WAPIProcess.h"

    10. #include "Activity.h"

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

    13. //ztg add, use fcgi
    14. int main_fcgi( char* proc_name, int argc=2);
    15. //ztg add, use fcgi
    16. int main(void)
    17. {
    18.     //main_fcgi("TestNotePad");
    19.     //*
    20.     while (FCGI_Accept() >= 0) {

    21.         char *proc_name = getenv("QUERY_STRING");

    22.         printf("Content type: text/html ");
    23.         //printf("%s",proc_name);
    24.         //main_fcgi("TestNotePad");
    25.         main_fcgi(proc_name);

    26.     } //*/
    27. }



    28. static void usage()
    29. {
    30.     //ztg alter, use fcgi, not use cout, instead of using printf
    31.     printf("%s", " Usage: "
    32.             "    CriteriaToolsExecutor <WorkflowName> [NrExecution] "
    33.             "This program invokes criteria workflow engine and execute <WorkflowName> "
    34.             "Options: "
    35.             "    NrExecution        the number of process execution. Default is 1 ");
    36. /*
    37.     cout << " Usage: "
    38.             "    CriteriaToolsExecutor <WorkflowName> [NrExecution] "
    39.             "This program invokes criteria workflow engine and execute <WorkflowName> "
    40.             "Options: "
    41.             "    NrExecution        the number of process execution. Default is 1 "
    42.     << endl;
    43. */
    44. }


    45. //ztg alter, use fcgi
    46. //int main(int argc, char* argv[])
    47. int main_fcgi( char* proc_name, int argc)
    48. {
    49.     if ( argc == 1 )
    50.     {
    51.         usage();
    52.         exit(1);
    53.     }

    54.     String sWorkflowName;
    55.     if ( argc >= 2 )
    56.     {
    57.      //ztg alter, use fcgi
    58.         //sWorkflowName = argv[1];
    59.         sWorkflowName = proc_name;
    60.     }

    61.     unsigned int uiSize =1;
    62.     if ( argc == 3 )
    63.     {
    64.      //ztg del, use fcgi
    65.         //uiSize = atoi(argv[2]);
    66.     }

    67.     //ztg alter, use fcgi, not use cout, instead of using printf
    68.     printf("%s", "The program will perform the following steps: "
    69.                 "1: Criteria session initialization (only one time) "
    70.                 "    ----- for each process (begin) ----- "
    71.                 "2: Create process instance from template "
    72.                 "3: Execute process instance just created "
    73.                 "    ----- for each process (end) ----- "
    74.                 "4: Querying for activity pending "
    75.                 "5: close criteria session ");

    76. /*
    77.     cout << "The program will perform the following steps: "
    78.                 "1: Criteria session initialization (only one time) "
    79.                 "    ----- for each process (begin) ----- "
    80.                 "2: Create process instance from template "
    81.                 "3: Execute process instance just created "
    82.                 "    ----- for each process (end) ----- "
    83.                 "4: Querying for activity pending "
    84.                 "5: close criteria session ";
    85. */
    86.     //ztg del, use fcgi
    87.     //cout << "Press a Key for beginning................................................" << endl;
    88.     //getchar();

    89.     Response* response = new Response();
    90.     response->iCode= 0;

    91.     //ztg alter, use fcgi, not use cout, instead of using printf
    92.     printf("%s ", "Criteria session Initialization.....(look at Executor trace file)");
    93.     //cout << "Criteria session Initialization.....(look at Executor trace file)" << endl;

    94.     CM_SETTING_TO("Executor", 7);
    95.     InitSession(response);
    96.     if ( response->iCode != 0 )
    97.     {
    98.         //ztg alter, use fcgi, not use cout, instead of using printf
    99.         printf("Criteria session Initialization [KO].Error[ %s ]. Exit. ", response->sMsg);
    100.         //cout << "Criteria session Initialization [KO].Error[" << response->sMsg << "]. Exit." << endl;
    101.         exit(2);
    102.     }
    103.     //ztg alter, use fcgi, not use cout, instead of using printf
    104.     printf("%s ", "Criteria session Initialization [OK]");
    105.     //cout << "Criteria session Initialization [OK]" << endl;

    106.     bOS::Utils::Timer tExecutionTimer;
    107.     tExecutionTimer.start();

    108.     char* lProcessId = new char[50];
    109.     //char* acRet = NULL;

    110.     StringBuffer outputSimplified;

    111.     //ztg alter, use fcgi, not use cout, instead of using printf
    112.     printf("%s ", "Create process instance from template");
    113.     //cout << "Create process instance from template" << endl;
    114.     for ( unsigned int i=0; i<uiSize; i++)
    115.     {
    116.         bOS::Utils::Timer tTot;
    117.         bOS::Utils::Timer tCreate;
    118.         bOS::Utils::Timer tStart;

    119.         tTot.start();

    120.         tCreate.start();
    121.         createWorkflowProcess((char*)sWorkflowName.c_str(), lProcessId, response);
    122.         tCreate.stop();

    123.         if ( response->iCode == 0 )
    124.         {
    125.             //cout << "Create process instance [OK]. Process Instance Id[" << lProcessId << "]" << endl;
    126.             tStart.start();
    127.             startProcessInSynchWay(lProcessId, response);
    128.             tStart.stop();
    129.             tTot.stop();

    130.             if ( response->iCode == 0 )
    131.             {
    132.                 //cout << "Execute process instance [OK]. Process Instance Id[" << lProcessId << "] just started" << endl;

    133.                 //ztg alter, use fcgi, not use cout, instead of using printf
    134.                 printf("[ %u ] Process [ %d ] [ %d ] [ %d ] [ %d ] ", i, lProcessId, tCreate.getTicks(), tStart.getTicks(), tTot.getTicks());
    135.                 //cout << "[" << i << "] Process [" << lProcessId << "] [" << tCreate.getTicks() << "] [" << tStart.getTicks() << "] [" << tTot.getTicks() << "]" << endl;
    136.             }
    137.             else
    138.             {
    139.                 //ztg alter, use fcgi, not use cout, instead of using printf
    140.                 printf("Execute process instance [KO]. Process Instance Id[ %s ] ", lProcessId);
    141.                 //cout << "Execute process instance [KO]. Process Instance Id[" << lProcessId << "] not started" << endl;
    142.             }
    143.         }
    144.         else
    145.         {
    146.             //ztg alter, use fcgi, not use cout, instead of using printf
    147.             printf("Create process instance [KO]. Err[ %s ] ", response->sMsg);
    148.             //cout << "Create process instance [KO]. Err[" << response->sMsg << "]" << endl;
    149.         }


    150.     }

    151.     //ztg alter, use fcgi, not use cout, instead of using printf
    152.     printf("%s ", "Querying for activity pending");
    153.     //cout << "Querying for activity pending" << endl;

    154.     unsigned long lWorkflowRunning=0;
    155.     do
    156.     {
    157.         lWorkflowRunning= getNumberRunningWorkflow(response);
    158.         if ( response->iCode == 0 )
    159.         {
    160.             //ztg alter, use fcgi, not use cout, instead of using printf
    161.             printf("WorkflowRunning[ %lu ] ", lWorkflowRunning);
    162.             //cout << "WorkflowRunning[" << lWorkflowRunning << "]" << endl;
    163.         }
    164.         else
    165.         {
    166.             //ztg alter, use fcgi, not use cout, instead of using printf
    167.             printf("Error retreiving RunningWorkflow.Err[ %s ] ", response->sMsg);
    168.             //cout << "Error retreiving RunningWorkflow.Err[" << response->sMsg << "]" << endl;
    169.         }
    170.     }
    171.     while ( lWorkflowRunning > 0);

    172.     tExecutionTimer.stop();

    173.     //ztg alter, use fcgi, not use cout, instead of using printf
    174.     printf("Execution Time(ms): %d ", tExecutionTimer.getTicks());
    175.     //cout << "Execution Time(ms): " << tExecutionTimer.getTicks() << endl;

    176.     //ztg alter, use fcgi, not use cout, instead of using printf
    177.     printf("%s ", "Press a Key for terminating................................................");
    178.     //cout << "Press a Key for terminating................................................" << endl;
    179.     //getchar();
    180.     //ztg add sleep()
    181.     //sleep(2);


    182.     //ztg alter, use fcgi, not use cout, instead of using printf
    183.     printf("%s ", "EndSession.......");
    184.     //cout << "EndSession......." << endl;

    185.     response->iCode = 0;
    186.     EndSession(response);
    187.     if ( response->iCode == 0 )
    188.     {
    189.         //ztg alter, use fcgi, not use cout, instead of using printf
    190.         printf("%s ", "Session Terminated [OK]");
    191.         //cout << "Session Terminated [OK]" << endl;
    192.     }
    193.     else
    194.     {
    195.         //ztg alter, use fcgi, not use cout, instead of using printf
    196.         printf("Terminating [KO].Err[ %s ] ", response->sMsg);
    197.         //cout << "Terminating [KO].Err[" << response->sMsg << "]" << endl;
    198.     }
    199. //

    200.     return 0;
    201. }


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



    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(96) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    被放弃的概率权,机器下围棋不理会沉没成本
    百位性感女明星三围大曝光,体型测试设计
    斯坦福大学机器学习,EM算法求解高斯混合模型
    Javascript图片预加载详解
    使用马尔可夫模型自动生成文章
    18种女粉引流方法、效果、评估
    既然认准了这条路,就不必打听要走多久!
    新媒体运营10个大坑,思维导图版
    谷歌发布"自动机器学习"技术 AI可自我创造
    Centos7下PHP的卸载与安装nginx
  • 原文地址:https://www.cnblogs.com/ztguang/p/12649282.html
Copyright © 2011-2022 走看看