<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 11  文章 - 79  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    歡迎合作

     

    聯(lián)系方式:openhandx@foxmail.com

     

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

     

     

     

     

      OpenHandX-Batch

    快速部署手冊(cè)

     

     

     

     

     

    2010-3-23

     

    作者:彭明華

    openhandx@foxmail.com

     

    本文檔中的任何部分都不得以任何手段任何形式進(jìn)行復(fù)制與傳播

    目錄

    1            前言

    2            基本原理

    3            總控服務(wù)器

    4            任務(wù)服務(wù)器

    5            如何向異步批量發(fā)起事件


     

    1          前言

    OpenHandX-Batch異步批量框架的功能在《OpenHandX-Batch企業(yè)級(jí)批量應(yīng)用架構(gòu).doc》已經(jīng)說(shuō)得很清楚,OpenHandX-Batch異步批量架構(gòu)由7大組件構(gòu)成,用戶可以根據(jù)自己的情況選配不同的組件實(shí)現(xiàn)熱插拔,因此組件的組合非常多。本文就如何快速部署一個(gè)標(biāo)準(zhǔn)的企業(yè)級(jí)批量架構(gòu)來(lái)說(shuō)明。

    2          基本原理

    再次重復(fù)一下基本原理。



    舉例說(shuō)明異步批量的最基本原理,實(shí)際應(yīng)用要比這復(fù)雜得多。比如:某企業(yè)要生成年終表報(bào),并且年終報(bào)表要按照企業(yè)的各個(gè)部門、分公司出,報(bào)表的數(shù)據(jù)來(lái)源有企業(yè)的財(cái)務(wù)系統(tǒng)、ERP系統(tǒng)、CRM系統(tǒng)。

    技術(shù)分析:

    1、              生成報(bào)表首先要把數(shù)據(jù)從各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)抽取、加工、匯總,最終生成報(bào)表,每步操作都要按照各個(gè)部門、分公司分類

    2、              總公司報(bào)表要等到各個(gè)部門和分公司加工、匯總的數(shù)據(jù)出來(lái)后再匯總,最后生成總公司報(bào)表

    3、              各個(gè)部門和分公司的數(shù)據(jù)抽取、加工、匯總可以是并行處理的,各個(gè)部門和分公司的報(bào)表生成可以和總公司的數(shù)據(jù)匯總并行處理。

    批量執(zhí)行步驟:

    由上圖可以看出OpenHandX-Batch異步批量框架需要部署總控服務(wù)器和任務(wù)服務(wù)器,為了便于說(shuō)明,這里所有服務(wù)器之間的通訊采用數(shù)據(jù)庫(kù)。

    3          總控服務(wù)器

    總控服務(wù)器包括本身的配置和節(jié)點(diǎn)運(yùn)行圖配置。本身的配置涉及到事件的接收、任務(wù)的發(fā)送、任務(wù)信息的接收、日志的記錄。節(jié)點(diǎn)圖配置是指事件將要做的明細(xì)及運(yùn)行的流程。

    首先給異步批量總控服務(wù)器和任務(wù)服務(wù)器創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),按照asynBatch.pdm創(chuàng)建表

    其次配置節(jié)點(diǎn)圖,這里創(chuàng)建的樹型節(jié)點(diǎn)圖,主要配置分為4塊,以某公司年報(bào)表為例:

    1、節(jié)點(diǎn)圖表BT_NODEMAP

    NODEMAPID

    NAME

    PARAMS

    TYPE

    說(shuō)明

    節(jié)點(diǎn)運(yùn)行圖編號(hào)

    節(jié)點(diǎn)運(yùn)行圖名稱

    預(yù)先定義每個(gè)節(jié)點(diǎn)的任務(wù)參數(shù),格式:

    參數(shù)1=xxx,參數(shù)2=xxx

    節(jié)點(diǎn)運(yùn)行圖類型

    0-樹型運(yùn)行圖

    1-層型運(yùn)行圖

    舉例

    00001

    年報(bào)表

    0

    2、節(jié)點(diǎn)表BT_NODES

    NODEID

    PARAMS

    WEIGHT

    RERUN

    NAME

    ALIAS

    說(shuō)明

    節(jié)點(diǎn)編號(hào)

    預(yù)先定義當(dāng)前節(jié)點(diǎn)的任務(wù)參數(shù),格式:

    參數(shù)1=xxx,參數(shù)2=xxx

    根據(jù)節(jié)點(diǎn)任務(wù)繁重情況設(shè)置,越繁重設(shè)置值越大,讓任務(wù)服務(wù)器留出更多的資源給此節(jié)點(diǎn),默認(rèn)為1

    重跑模式

    0-出錯(cuò)流程退出

    1-出錯(cuò)忽略

    2-出錯(cuò)重試

    對(duì)應(yīng)任務(wù)運(yùn)行服務(wù)器配置文件中的節(jié)點(diǎn)名稱

    描述節(jié)點(diǎn)的中文名稱

    舉例

    00001

    1

    0

    DPT1

    部門數(shù)據(jù)抽取

    00002

    1

    0

    DPT2

    部門數(shù)據(jù)匯總

    00003

    1

    0

    DPTRPT

    部門報(bào)表生成

    00004

    1

    0

    HQ

    總公司數(shù)據(jù)匯總

    00005

    1

    0

    HQRPT

    總公司報(bào)表生成

    3、樹型節(jié)點(diǎn)關(guān)系表BT_TREENODEMAPRELA

    RELAID

    NODEMAPID

    PARENTIDS

    TYPE

    SOURCEID

    說(shuō)明

    關(guān)系編號(hào)

    對(duì)應(yīng)節(jié)點(diǎn)圖編號(hào),表示關(guān)系編號(hào)屬于哪個(gè)節(jié)點(diǎn)圖

    依賴的父關(guān)系,格式:

    RELAID1RELAID2

    關(guān)系類型

    0-為基本的節(jié)點(diǎn)

    1-該節(jié)點(diǎn)為另一個(gè)自節(jié)點(diǎn)圖

    TYPE相關(guān),對(duì)應(yīng)節(jié)點(diǎn)編號(hào)或節(jié)點(diǎn)圖編號(hào)

    舉例

    00001

    00001

    0

    00001

    00002

    00001

    00001

    0

    00002

    00003

    00001

    00002

    0

    00003

    00004

    00001

    00002

    0

    00004

    00005

    00001

    00004

    0

    00005

    00002的上級(jí)是00001表示00002運(yùn)行必須等到00001運(yùn)行完成,0000300004運(yùn)行必須要等到00002運(yùn)行完成。

    4、事件結(jié)束最后執(zhí)行的節(jié)點(diǎn)BT_FINYNODERELA

    NODEMAPID

    ORDERCODE

    NODEID

    說(shuō)明

    對(duì)應(yīng)節(jié)點(diǎn)圖編號(hào),表示關(guān)系編號(hào)屬于哪個(gè)節(jié)點(diǎn)圖

    則執(zhí)行的順序,一般從1開始

    對(duì)應(yīng)節(jié)點(diǎn)編號(hào)

    舉例

    00001

    1

    CLS

    00006節(jié)點(diǎn)是FINALLY節(jié)點(diǎn),不管事件的流程執(zhí)行中是否出現(xiàn)錯(cuò)誤都在最后執(zhí)行,類似Java代碼中的

    try。。。finally

    最后配置總控服務(wù)器的配置文件

    <?xml version="1.0" encoding="UTF-8"?>

    <!--

        批量框架的異步總控配置文件,配置代表調(diào)度所依賴的數(shù)據(jù)信息。調(diào)度采用單一JVM運(yùn)行模式。

        配置內(nèi)容包括調(diào)度數(shù)據(jù)服務(wù)信息。消息交互配置等

       

        開發(fā)者: 彭明華

        創(chuàng)建時(shí)間:2008-04-30

    -->

    <configs>

        <controller id="001" acquireRetryDelay="1" waitRetryDelay="20" maxEventCount="5" correspond="false"/>

        <application id="app01" priority="0" persistent="true" loadPersistent="true" description="同一個(gè)jvm任務(wù)">

    配置節(jié)點(diǎn)拆分成任務(wù)的實(shí)現(xiàn)類

    配置解析器配置所在的位置,如:在testDB的若干表中

    采用樹型節(jié)點(diǎn)運(yùn)行圖解析器,id="*"表示對(duì)所有事件節(jié)點(diǎn)圖都采用此方案

            <nodeMap id="*" className="open.batch.controller.impl.application.TreeNodeMap" params="source=testDb,nodemaptable=BT_NODEMAP,relatable=BT_TREENODEMAPRELA,nodetable=BT_NODES,finallynodetable=bt_finynoderela">

                <chunk className="open.batch.controller.impl.application.MultiInstanceTreeNodeChunk"/>

    配置接收事件的實(shí)現(xiàn)類及對(duì)應(yīng)的數(shù)據(jù)庫(kù)和表

                <log className="open.batch.controller.impl.application.DBLog" params="source=testDb,eventtable=BT_EVENTSRUNLOG,nodetable=BT_NODESRUNLOG,tasktable=bt_tasksrunlog,tasklog=false,nodelog=true,eventlog=true"/>

    配置任務(wù)發(fā)送的實(shí)現(xiàn)類及對(duì)應(yīng)的數(shù)據(jù)庫(kù)和表

            </nodeMap>

            <eventReceiver className="open.batch.controller.impl.message.DBEventReceiver" source=" testDb" params="table=BT_EVENTS"/>

            <taskSender className="open.batch.controller.impl.message.DBTaskSender" source="testDb" params="table=bt_tasks"/>

    配置任務(wù)信息接收的實(shí)現(xiàn)類及對(duì)應(yīng)的數(shù)據(jù)庫(kù)和表

            <taskReceiver className="open.batch.controller.impl.message.DBTaskReceiver" source="testDb" params="table=bt_taskinfos"/>

            <resource>

    配置異步批量用的數(shù)據(jù)源(數(shù)據(jù)庫(kù))

                <database id="testDb" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK" driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="20"/>

            </resource>

        </application>

    </configs>

    配置任務(wù)發(fā)送的實(shí)現(xiàn)類及對(duì)應(yīng)的JMS和隊(duì)列名

    另外:這里舉例的配置使用的都是數(shù)據(jù)庫(kù)表,也可以使用JMS的實(shí)現(xiàn)類

    如:

           <taskSender className="open.batch.controller.impl.message.MessageTaskSender" source="pvmsjms" params="queue=task"/>

    配置任務(wù)信息接收的實(shí)現(xiàn)類及對(duì)應(yīng)的JMS和隊(duì)列名

            <taskReceiver className="open.batch.controller.impl.message.MessageTaskReceiver" source="pvmsjms" params="queue=taskinfo"/>

            <resource>

    配置異步批量用的數(shù)據(jù)源(JMS

                <jms id="pvmsjms" url="tcp://localhost:61616" driver="org.activemq.ActiveMQConnectionFactory"/>

            </resource>

    4          任務(wù)服務(wù)器

    任務(wù)服務(wù)器是具體執(zhí)行任務(wù)的地方,因此它的配置有兩個(gè):任務(wù)服務(wù)器配置、任務(wù)的節(jié)點(diǎn)配置

    任務(wù)服務(wù)器配置

        <application id="app01" priority="0">

    配置任務(wù)信息發(fā)送的實(shí)現(xiàn)類及對(duì)應(yīng)的數(shù)據(jù)庫(kù)和表

    任務(wù)的節(jié)點(diǎn)配置文件,可以同時(shí)定義多個(gè)

            <taskDefineConfig file="taskdefine.xml"/>

            <log className="open.batch.taskserver.impl.run.DBLog" source="testdb" params="table=BT_TASKSRUNLOG"/>

            <taskSenderclassName="open.batch.taskserver.impl.message.DBTaskSender" source="testdb" params="table=bt_taskinfos"/>

    配置任務(wù)接收的實(shí)現(xiàn)類及對(duì)應(yīng)的數(shù)據(jù)庫(kù)和表

            <taskReceiverclassName="open.batch.taskserver.impl.message.DBTaskReceiver" source="testdb " params="table=bt_tasks"/>

            <resource>

                <databaseid="testdb" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK"

                    driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/>

                <databaseid="erpdb" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK"

    以下是報(bào)表用的數(shù)據(jù)源,有ERPCRM和報(bào)表相關(guān)的

                    driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/>

            </resource>

                <databaseid="crmdb" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK"

                    driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/>

            </resource>

                <databaseid="reportdb" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK"

                    driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/>

            </resource>

    </application>

    任務(wù)的節(jié)點(diǎn)配置(taskdefine.xml

    部門數(shù)據(jù)抽取節(jié)點(diǎn)配置

    <?xml version="1.0" encoding="UTF-8"?>

    <taskDefines>

        <taskDefine name="DPT1" params="">

            <taskRun singleInstance="true" className="open.dpt.Dpt"/>

    部門數(shù)據(jù)匯總節(jié)點(diǎn)配置

        </taskDefine>

       

        <taskDefine name="DPT2" params="">

    生成部門報(bào)表節(jié)點(diǎn)配置

            <taskRun singleInstance="true" className=" open.dpt.DptGatHer"/>

        </taskDefine>

        <taskDefine name="DPTRPT" params="">

            <taskRun singleInstance="true" className="open.dpt.DptReport"/>

        </taskDefine>

    總公司數(shù)據(jù)匯總節(jié)點(diǎn)配置

       

        <taskDefine name="HQ" params="">

            <taskRun singleInstance="true" className="open.hq.HQGatHer"/>

    總公司報(bào)表生成節(jié)點(diǎn)配置

        </taskDefine>

        <taskDefine name="HQRPT" params="">

            <taskRun singleInstance="true" className="open.hq.HQreport "/>

        </taskDefine>

        <taskDefine name="nullTask"/>

    </taskDefines>

    注意:總控服務(wù)器的BT_NODESname與以上配置的節(jié)點(diǎn)名字要一致

    5          如何向異步批量發(fā)起事件

    只要應(yīng)用程序向BT_EVENTS的表里寫入一條數(shù)據(jù)即發(fā)起一個(gè)新的事件

    事件表BT_EVENTS

    ID

    EVENTID

    PARAMS

    CREATETIME

    RECTIME

    NODEMAPID

    說(shuō)明

    事件表的自動(dòng)編號(hào)

    應(yīng)用發(fā)起的事件編號(hào)或標(biāo)示,應(yīng)用通過(guò)此號(hào)找到已發(fā)的事件

    定義整個(gè)事件的任務(wù)參數(shù),格式:

    參數(shù)1=xxx,參數(shù)2=xxx

    創(chuàng)建時(shí)間

    接收時(shí)間

    節(jié)點(diǎn)圖編號(hào),與要BT_NODEMAP定義的運(yùn)行圖節(jié)點(diǎn)編號(hào)一致,不同的編號(hào)決定使用不同的節(jié)點(diǎn)運(yùn)行圖

    舉例

    [不填]

    RPT0001

    dtpnum=001;002;003

    [當(dāng)前系統(tǒng)時(shí)間]

    [不填]

    00001

    WEIGHT

    DESCRIPTION

    權(quán)重,越大表示該事件的工作越多,讓總控服務(wù)器留出更多的資源給此事件,默認(rèn)為1

    描述

    5

    年報(bào)表

    posted on 2010-04-08 16:12 彭明華 閱讀(2795) 評(píng)論(13)  編輯  收藏 所屬分類: OpenHandX工具

    FeedBack:
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-16 10:26 小山羊
    今天把AsynBatchConsole部署了,數(shù)據(jù)為oracle,數(shù)據(jù)也導(dǎo)入了,配置為
    <database id="pvmsdb1" url="jdbc:oracle:thin:@localhost:1521:orcl" driver="oracle.jdbc.driver.OracleDriver" username="root" password="111111" maxConnection="20"/>
    <database id="pvmsdb2" url="jdbc:oracle:thin:@localhost:1521:orcl" driver="oracle.jdbc.driver.OracleDriver" username="root" password="111111" maxConnection="20"/>

    我選擇的是“節(jié)點(diǎn)圖編輯平臺(tái)”,登陸成功后,出現(xiàn)以下問(wèn)題,我跟蹤了發(fā)現(xiàn)是從緩沖池讀取連接時(shí),conn為空,錯(cuò)誤如下:
    10:21:52,406 INFO [STDOUT] 2010-04-16 10:21:52,406 [http-127.0.0.1-8000-2] ERROR open.batch.console.mapedit.MapEditServlet - MapEditServlet
    java.lang.ClassCastException: $Proxy57
    at open.database._Connection.getConnection(_Connection.java:38)
    at open.database.DatabaseDataSource.getFreeConnection(DatabaseDataSource.java:125)
    at open.database.DatabaseDataSource.getConnection(DatabaseDataSource.java:90)
    at open.database.DatabaseDataSource.getConnection(DatabaseDataSource.java:76)
    at open.batch.console.mapedit.NodeMapDAO.query(NodeMapDAO.java:918)
    at open.batch.console.mapedit.NodeMapDAO.queryNodeMap(NodeMapDAO.java:54)
    at open.batch.console.mapedit.NodeMapManager.queryNodeMap(NodeMapManager.java:41)
    at open.batch.console.mapedit.MapEditServlet.doPost(MapEditServlet.java:187)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at open.batch.console.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
    at java.lang.Thread.run(Unknown Source)
    10:21:52,406 INFO [STDOUT] 2010-04-16 10:21:52,406 [http-127.0.0.1-8000-2] DEBUG open.batch.console.mapedit.MapEditServlet - {"info":"$Proxy57\n","success":false}

      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-16 10:29 小山羊
    以下是我跟蹤的問(wèn)題,到_Connection中就出現(xiàn)錯(cuò)誤,
    /**
    * Returns the conn.
    * @return Connection
    */
    public Connection getConnection() {
    //返回?cái)?shù)據(jù)庫(kù)連接conn的接管類,以便截住close方法
    Connection conn2 = (Connection)Proxy.newProxyInstance(
    conn.getClass().getClassLoader(),
    conn.getClass().getInterfaces(),this);
    return conn2;
    }

    不知道是什么原因?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-16 11:37 小山羊
    調(diào)試到
    private Connection getFreeConnection(long nTimeout)
    throws SQLException
    {
    Connection conn = null;
    synchronized(conns){
    for(int i=conns.size()-1;i>=0;i--){
    _Connection _conn = conns.get(i);
    if(!_conn.isInUse() && _conn.getConnection().isClosed()){
    conns.remove(i);
    }else if(!_conn.isInUse()){
    conn = _conn.getConnection();
    _conn.setInUse(true);
    break;
    }
    }
    中的if(!_conn.isInUse() && _conn.getConnection().isClosed())判斷時(shí)開始出現(xiàn)問(wèn)題
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-20 19:58 彭明華
    @小山羊
    從錯(cuò)誤的問(wèn)題詳細(xì)信息看,是以下代碼出的問(wèn)題
    Connection conn2 = (Connection)Proxy.newProxyInstance(
    conn.getClass().getClassLoader(),
    conn.getClass().getInterfaces(),this);
    可能是oracle驅(qū)動(dòng)版本的問(wèn)題,換個(gè)版本試試  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-28 08:47 小山羊
    能不能提供一個(gè)jms得配置文件?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-04-29 11:06 小山羊
    在日志中發(fā)現(xiàn)的錯(cuò)誤:TreeNodeMap read nodeMap error
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null where NODEMAPID='00002'' at line 1
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-05-06 09:07 彭明華
    @小山羊
    是這句話引起的錯(cuò)誤
    select * from " + configParams.get("nodemaptable") + " where NODEMAPID=?
    由于配置文件的<nodeMap的params屬性中沒(méi)有配置 nodemaptable  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2010-05-06 09:13 彭明華
    @小山羊
    <jms id="pvmsjms" url="tcp://192.168.1.247:61616" driver="org.activemq.ActiveMQConnectionFactory"/>  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2012-09-17 16:56 wmj2003
    upst = cnn.prepareStatement("update " + configParams.get("table") + " set TASKID=TASKID where ID=" + id);  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2012-09-17 16:58 wmj2003
    open.batch.taskserver.impl.message.DBTaskReceiver 中g(shù)etTask()方法的實(shí)現(xiàn)有問(wèn)題,在集群環(huán)境中,多臺(tái)服務(wù)器獲取任務(wù)的是否在插敘的時(shí)候鎖表呢?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2012-09-17 17:00 wmj2003
    open.batch.taskserver.impl.message.DBTaskReceiver 中g(shù)etTask()方法的實(shí)現(xiàn)有問(wèn)題,在集群環(huán)境中,多臺(tái)服務(wù)器獲取任務(wù)的時(shí)候,是否需要鎖表呢?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2012-10-31 09:19 彭明華
    @wmj2003
    最近再忙另外一個(gè)項(xiàng)目,很少上blog,抱歉.
    upst = cnn.prepareStatement("update " + configParams.get("table") + " set TASKID=TASKID where ID=" + id);
    就是一個(gè)鎖表記錄操作,鎖完后再查詢狀態(tài)RECTIME,就能保證多臺(tái)服務(wù)器獲并發(fā)時(shí)任務(wù)不會(huì)重復(fù)被執(zhí)行  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Batch1.0 快速部署手冊(cè) 2012-11-22 10:29 wmj2003
    @彭明華
    看明白了,呵呵,我也忘記早給你回復(fù)。以前都是通過(guò)查詢鎖表實(shí)現(xiàn)的。這也是一種好方法,多交流。  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲综合网曝门系列| 亚洲高清免费视频| 亚洲国产综合91精品麻豆| 亚洲AⅤ优女AV综合久久久| 最近的免费中文字幕视频 | 亚洲成AV人片一区二区密柚| 亚洲精品视频在线观看你懂的| 国产一区二区三区免费看| 成年男女免费视频网站| 亚洲色婷婷一区二区三区| 亚洲理论电影在线观看| 33333在线亚洲| 亚洲一欧洲中文字幕在线| 日韩亚洲人成在线| 午夜亚洲WWW湿好爽| 香蕉97碰碰视频免费| 七次郎成人免费线路视频| 搡女人免费免费视频观看| 两个人看的www免费高清| 久操视频在线免费观看| 久久久久免费精品国产小说| 久久国产乱子伦精品免费不卡| 国产成人精品免费直播| 亚洲 小说区 图片区 都市| 亚洲精品在线视频观看| 中文字幕在线观看亚洲日韩| 你懂的在线免费观看| 四虎永久免费观看| 亚洲国产理论片在线播放| 亚洲人成色在线观看| 无码 免费 国产在线观看91| a级毛片视频免费观看| 永久免费AV无码网站在线观看| 亚洲国产精品无码久久青草| 亚洲国产老鸭窝一区二区三区| 日韩久久无码免费毛片软件| 国产自国产自愉自愉免费24区| 9久9久女女免费精品视频在线观看| 国产精品国产午夜免费福利看| 亚洲午夜国产精品| 无码中文字幕av免费放dvd|