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

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

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

    當(dāng)柳上原的風(fēng)吹向天際的時(shí)候...

    真正的快樂(lè)來(lái)源于創(chuàng)造

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

    #

    任務(wù):使用JavaCompute節(jié)點(diǎn)進(jìn)行XML轉(zhuǎn)化

    一.如圖建立Flow


    二.編輯JavaCompute節(jié)點(diǎn)的Java代碼如下:
    import com.ibm.broker.javacompute.MbJavaComputeNode;
    import com.ibm.broker.plugin.*;


    public class flow_JavaCompute extends MbJavaComputeNode {

        
    public void evaluate(MbMessageAssembly inassembly) throws MbException {
            MbOutputTerminal out 
    = getOutputTerminal("out");
            
    // MbOutputTerminal alt = getOutputTerminal("alternate");

            MbMessage inMessage 
    = inassembly.getMessage();
            MbMessage outMessage 
    = new MbMessage(inMessage);
            MbMessageAssembly outAssembly
    =new MbMessageAssembly(inassembly,outMessage);
            
            MbElement root
    =outMessage.getRootElement();
            MbElement rootElm
    =root.getLastChild().getFirstChild();

            MbElement employee1
    =rootElm.createElementAsLastChild(MbElement.TYPE_NAME,"empoyee",null);
            employee1.setValue(
    "Andy");
            
            MbElement employee2
    =rootElm.createElementAsLastChild(MbElement.TYPE_NAME,"empoyee",null);
            employee2.setValue(
    "Bill");
            MbElement id 
    = employee2.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE,"id""221415");
            
            out.propagate(outAssembly);
            outMessage.clearMessage();
        }

    }

    三.輸入XML如下
    <employees><employee>Hy</employee></employees>

    四.輸出XML如下:
    <employees><employee>Hy</employee><empoyee>Andy</empoyee><empoyee id="221415">Bill</empoyee></employees>
    注意這里面的代碼操作與我們常見(jiàn)XML很不一樣,一個(gè)是取根節(jié)點(diǎn)處,一個(gè)是給節(jié)點(diǎn)設(shè)置值處,一個(gè)是給節(jié)點(diǎn)增加屬性處。

    五.工程從這里下載
    http://www.tkk7.com/Files/heyang/JavaCompute0922_01.rar
    posted @ 2011-09-22 16:21 何楊 閱讀(1764) | 評(píng)論 (0)編輯 收藏

    ESQL:
    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
    SET OutputRoot.XML.employee.uuid = UUIDASCHAR;
            
    SET OutputRoot.XML.employee.uuid2 = UUIDASBLOB;
            
            
    SET OutputRoot.XML.employee.(XML.Attribute)id ='123';
            
    SET OutputRoot.XML.employee.name = 'Felix';
            
    SET OutputRoot.XML.employee.age = 33;

            
    SET OutputRoot.XML.employee.address[1] = 'Dalian 88';
            
    SET OutputRoot.XML.employee.address[2] = 'Beijing 188';
            
    SET OutputRoot.XML.employee.address[3] = 'Shanghai 288';

            
    SET OutputRoot.XML.employee.title.VALUE = NULL;
            
            
    SET OutputRoot.XML.employee.salary VALUE = NULL;

            
    SET OutputRoot.XML.employee.Comments.(XML.Content)=NULL;

            
    RETURN TRUE;
        
    END;
    END MODULE;

    Result XML:
    <employee id="123"><uuid>1d1932fe-b2a9-484d-8d32-e70440288914</uuid><uuid2>239143b0384e46ff9bb50a34c8b28732</uuid2><name>Felix</name><age>33</age><address>Dalian 88</address><address>Beijing 188</address><address>Shanghai 288</address><title/><salary></salary><Comments/></employee>
    posted @ 2011-09-21 16:52 何楊 閱讀(850) | 評(píng)論 (0)編輯 收藏

    Compute節(jié)點(diǎn)的ESQL是:
    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
    -- XML操作示例

            
    SET OutputRoot.XML.employee.(XML.Attribute)id = '001';
            
    SET OutputRoot.XML.employee.name = 'Felix';
            
    SET OutputRoot.XML.employee.age = 33;

            
    SET OutputRoot.XML.employee.address[1] = 'Dalian 88';
            
    SET OutputRoot.XML.employee.address[2] = 'Beijing 188';
            
    SET OutputRoot.XML.employee.address[3] = 'Shanghai 288';

            
    SET OutputRoot.XML.employee.title.VALUE = NULL;
            
            
    SET OutputRoot.XML.employee.salary VALUE = NULL;

            
    SET OutputRoot.XML.employee.Comments.(XML.Content)=NULL;

            
    RETURN TRUE;
        
    END;
    END MODULE;

    最終得到的XML是:
    <employee id="001"><name>Felix</name><age>33</age><address>Dalian 88</address><address>Beijing 188</address><address>Shanghai 288</address><title/><salary></salary><Comments/></employee>

    工程下載:
    posted @ 2011-09-21 16:13 何楊 閱讀(561) | 評(píng)論 (0)編輯 收藏

    任務(wù):給根節(jié)點(diǎn)加上屬性。

    步驟:
    仍然是使用一個(gè)MQ input節(jié)點(diǎn),一個(gè)MQ output節(jié)點(diǎn)和一個(gè)Compute節(jié)點(diǎn),Compute節(jié)點(diǎn)的ESql如下:
    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
    SET OutputRoot = InputRoot;
            
            
    DECLARE Count Integer 0;
            
    SET Count=CARDINALITY(InputRoot.XML.employees.employee[]);
            
            
    SET OutputRoot.XML.employees.(XML.Attribute)count=Count;
            
            
    RETURN TRUE;
        
    END;
    END MODULE;

    上圖粗體部分為關(guān)鍵,它的作用是給employees節(jié)點(diǎn)增加了一個(gè)屬性Count.

    輸入的XML分別如下:
    <employees><employee><id>001</id><name>張飛</name><age>28</age></employee><employee><id>002</id><name>關(guān)羽</name><age>29</age></employee><employee>    <id>003</id><name>趙云</name><age>30</age></employee></employees>

    輸入和輸出的XML分別如下:
    <employees count="3"><employee><id>001</id><name>張飛</name><age>28</age></employee><employee><id>002</id><name>關(guān)羽</name><age>29</age></employee><employee>    <id>003</id><name>趙云</name><age>30</age></employee></employees>

    工程下載:
    posted @ 2011-09-21 13:22 何楊 閱讀(549) | 評(píng)論 (0)編輯 收藏

    其它和前例一樣,但遍歷代碼如下:


    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
    -- 員工總數(shù)
            DECLARE Count INTEGER 0;
            
    -- 得到XML中員工總數(shù)
            SET Count=CARDINALITY(InputRoot.XML.employees.employee[]);
            
            
    -- 員工姓名匯總
            DECLARE Names CHARACTER;
            
    SET Names='';
                    
            
    -- 最大年齡
            DECLARE MaxAge INTEGER 0;
            
            
    -- 年齡合計(jì)
            DECLARE SumAge INTEGER 0;
            
            
    -- 當(dāng)前年齡
            DECLARE CurrAge INTEGER 0;
            
            
    -- 循環(huán)變量        
            FOR CurrItem AS InputRoot.XML.employees.employee[] DO
                
    -- 字符串拼接 
                SET Names=Names || CurrItem.name ;
                
    SET Names=Names || ',';
                
                
    -- 字符串轉(zhuǎn)換成整數(shù)再進(jìn)行年齡合計(jì) 
                SET CurrAge = CAST(CurrItem.age AS INTEGER);
                
    SET SumAge=SumAge+CurrAge;
                
                
    -- 得到最大年齡
                IF MaxAge<CurrAge THEN
                    
    SET MaxAge=CurrAge;
                
    END IF;
            
    END FOR;
            
            
            
    -- 平均年齡
            DECLARE AvgAge FLOAT;
            
    SET AvgAge=SumAge/Count;
            
            
    -- 拼接輸出XML
            SET OutputRoot.XML.summary.count=Count;
            
    SET OutputRoot.XML.summary.names=Names;
            
    SET OutputRoot.XML.summary.maxAge=MaxAge;
            
    SET OutputRoot.XML.summary.avgAge=CAST(AvgAge AS CHARACTER);
            
            
    RETURN TRUE;
        
    END;

    END MODULE;

    相比較而言,這種方式更簡(jiǎn)潔方便。

    下載地址:
    http://www.tkk7.com/Files/heyang/ESqlTest0920_02.rar
    posted @ 2011-09-21 11:29 何楊 閱讀(748) | 評(píng)論 (0)編輯 收藏

    任務(wù):將如下輸入XML變成如下輸出XML
    輸入XML:
    <employees><employee><id>001</id><name>張飛</name><age>28</age></employee><employee><id>002</id><name>關(guān)羽</name><age>29</age></employee><employee>    <id>003</id><name>趙云</name><age>30</age></employee></employees>

    輸出XML:
    <summary><count>3</count><names>張飛,關(guān)羽,趙云,</names><maxAge>30</maxAge><avgAge>2.9E+1</avgAge></summary>

    我們需要做一個(gè)Input節(jié)點(diǎn)和一個(gè)Output節(jié)點(diǎn)以及一個(gè)Comput節(jié)點(diǎn),并設(shè)置Compute節(jié)點(diǎn)的ESQL如下:
    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
    -- 員工總數(shù)
            DECLARE Count INTEGER 0;
            
    -- 得到XML中員工總數(shù)
            SET Count=CARDINALITY(InputRoot.XML.employees.employee[]);
            
            
    -- 員工姓名匯總
            DECLARE Names CHARACTER;
            
    SET Names='';
                    
            
    -- 最大年齡
            DECLARE MaxAge INTEGER 0;
            
            
    -- 年齡合計(jì)
            DECLARE SumAge INTEGER 0;
            
            
    -- 當(dāng)前年齡
            DECLARE CurrAge INTEGER 0;
            
            
    -- 循環(huán)變量        
            DECLARE I INTEGER 1;
            
    WHILE I<=Count DO
                
    -- 字符串拼接
                SET Names=Names || InputRoot.XML.employees.employee[I].name ;
                
    SET Names=Names || ',';
                
                
    -- 字符串轉(zhuǎn)換成整數(shù)再進(jìn)行年齡合計(jì)
                SET CurrAge = CAST(InputRoot.XML.employees.employee[I].age AS INTEGER);
                
    SET SumAge=SumAge+CurrAge;
                
                
    -- 得到最大年齡
                IF MaxAge<CurrAge THEN
                    
    SET MaxAge=CurrAge;
                
    END IF;
                
                
    SET I=I+1;
            
    END WHILE;
            
            
    -- 平均年齡
            DECLARE AvgAge FLOAT;
            
    SET AvgAge=SumAge/Count;
            
            
    -- 拼接輸出XML
            SET OutputRoot.XML.summary.count=Count;
            
    SET OutputRoot.XML.summary.names=Names;
            
    SET OutputRoot.XML.summary.maxAge=MaxAge;
            
    SET OutputRoot.XML.summary.avgAge=CAST(AvgAge AS CHARACTER);
            
            
    RETURN TRUE;
        
    END;

    END MODULE;

    本例工程下載地址:
    http://www.tkk7.com/Files/heyang/ESqlTest0920_01.rar
    posted @ 2011-09-21 10:59 何楊 閱讀(694) | 評(píng)論 (0)編輯 收藏

    任務(wù):由于上一節(jié)傳遞到OutQ和OutQ1中的地址仍為原來(lái)的形式,現(xiàn)需要修改成對(duì)應(yīng)的文字,即把
    <address>大連/上海</address>變成<address>大連</address>或<address>上海</address>的形式。

    1.修改Compute節(jié)點(diǎn)的ESQL,增加修改輸出XML的一句:


    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
            
    DECLARE Address CHARACTER;
            
    DECLARE Addresses CHARACTER InputRoot.XML.mail.address;
            
    DECLARE I INTEGER 0;
            
    DECLARE J INTEGER;
            
    DECLARE LEN INTEGER LENGTH(Addresses);
            
            
    WHILE (I<LEN) DO
                
    SET OutputRoot = InputRoot;
                
    SET J=I+1;
                
    SET Address=SUBSTRING(Addresses FROM J FOR 2);
                
                
    SET OutputRoot.XML.mail.address=Address;-- 修改輸出的地址部分
                SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelName = Address;
            
                PROPAGATE;
                
    SET I=J+2;
            
    END WHILE;
            
            
    RETURN FALSE;
        
    END;

    END MODULE;


    2.下圖顯示了修改地址后的結(jié)果:


    -The End-
    posted @ 2011-09-20 10:51 何楊 閱讀(550) | 評(píng)論 (0)編輯 收藏

    任務(wù):ESQL中字符串處理


    1.繼續(xù)沿用上次的工程,注意修改兩個(gè)Label節(jié)點(diǎn)的Label Name為漢字形式,并改寫Compute節(jié)點(diǎn)的ESQL如下:
    CREATE COMPUTE MODULE flow_Compute
        
    CREATE FUNCTION Main() RETURNS BOOLEAN
        
    BEGIN
            
            
    DECLARE Address CHARACTER;
            
    DECLARE Addresses CHARACTER InputRoot.XML.mail.address;
            
    DECLARE I INTEGER 0;
            
    DECLARE J INTEGER;
            
    DECLARE LEN INTEGER LENGTH(Addresses);
            
            
    WHILE (I<LEN) DO
                
    SET OutputRoot = InputRoot;
                
    SET J=I+1;
                
    SET Address=SUBSTRING(Addresses FROM J FOR 2);
                
    SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelName = Address;
            
                PROPAGATE;
                
    SET I=J+2;
            
    END WHILE;
            
            
    RETURN FALSE;
        
    END;

    END MODULE;

    2.將以下文本傳入InQ:
    <mail><id>0001</id><address>大連/上海</address></mail>

    3.OutQ和OutQ1都將收到信息,如下圖顯示。




    4.本例工程下載地址
    http://www.tkk7.com/Files/heyang/InputOutputTest0919.rar

    -The End-
    posted @ 2011-09-20 10:34 何楊 閱讀(568) | 評(píng)論 (0)編輯 收藏

    任務(wù):熟悉RouteToLabel節(jié)點(diǎn),Label節(jié)點(diǎn)及Catch的使用

    1.RouteToLabel節(jié)點(diǎn)在Routing下,與Filter節(jié)點(diǎn)在一起,label節(jié)點(diǎn)也在里面。如下圖拖拽出一個(gè)RouteToLabel節(jié)點(diǎn),兩個(gè)Label節(jié)點(diǎn)。


    2.再增加一個(gè)MQ Output節(jié)點(diǎn)Mq output2,關(guān)聯(lián)到OutQ3。這個(gè)節(jié)點(diǎn)作用是當(dāng)Compute導(dǎo)向出現(xiàn)異常(如address是深圳)時(shí)將信息發(fā)到OutQ3上。注意MQ
    Mq output2到Mq Input的連線的起點(diǎn)和終點(diǎn)。


    3.設(shè)置Compute節(jié)點(diǎn)的Compute Mode類型為ALL,這是為了在其中書寫新的ESQL做的準(zhǔn)備。


    4.編輯Compute節(jié)點(diǎn)的新的ESQL。

    SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelName = InputRoot.XML.mail.address;
    這條語(yǔ)句會(huì)查看輸入XML的mail節(jié)點(diǎn)的address節(jié)點(diǎn)的內(nèi)容,如果能找到對(duì)應(yīng)(mail節(jié)點(diǎn)的address節(jié)點(diǎn)的內(nèi)容==Label節(jié)點(diǎn)的Label Name)的Label節(jié)點(diǎn),則將消息導(dǎo)向到這個(gè)Label的后端;如果找不到的話,則將信息導(dǎo)向到Compute節(jié)點(diǎn)來(lái)源節(jié)點(diǎn)的catch端。

    5.設(shè)置Label節(jié)點(diǎn)一(大連)的Label Name。


    6.設(shè)置Label節(jié)點(diǎn)二(上海)的Label Name。


    7.給各條連線加上斷點(diǎn),用以觀察消息的流向。


    8.當(dāng)消息為“<mail><id>0001</id><address>dalian</address></mail>”時(shí),如愿,消息被導(dǎo)向到了MQ Output。


    -The End-
    posted @ 2011-09-19 17:13 何楊 閱讀(829) | 評(píng)論 (0)編輯 收藏

    任務(wù):熟悉Filter節(jié)點(diǎn)的使用。

    1.Filter節(jié)點(diǎn)在Routing菜單下。


    2.增加一個(gè)Filter節(jié)點(diǎn)和一個(gè)Output節(jié)點(diǎn)(與OutQ1關(guān)聯(lián)),并如下連線。注意Filter的出口,MQ output是連到False口,而MQ Output1是連到true口。


    3.連線完畢后Filter節(jié)點(diǎn)出現(xiàn)錯(cuò)誤狀態(tài),此時(shí)我們需要編輯其ESQL,附帶也把Compute節(jié)點(diǎn)的ESQL也編輯一下。


    4.以下是Compute節(jié)點(diǎn)和Filter節(jié)點(diǎn)的新SQL。


    5.啟動(dòng)測(cè)試后,向InQ輸入XML文本如下:



    6.OutQ1收到了轉(zhuǎn)化分流后的結(jié)果,其內(nèi)容正是我們想要的。


    7.讓我們改變一下小明的分?jǐn)?shù)再測(cè)試一下:


    8.結(jié)果如ESQL所料,OutQ得到了最終的信息。


    -The end-
    posted @ 2011-09-19 15:42 何楊 閱讀(743) | 評(píng)論 (2)編輯 收藏

    僅列出標(biāo)題
    共28頁(yè): First 上一頁(yè) 7 8 9 10 11 12 13 14 15 下一頁(yè) Last 
    主站蜘蛛池模板: 日本久久久免费高清| 亚洲人成网站观看在线播放| 亚洲av无码成人精品国产| 国产福利免费观看| 你懂的在线免费观看| 亚洲一区二区三区免费在线观看| 哒哒哒免费视频观看在线www| 免费人成网站在线观看不卡| 2017亚洲男人天堂一| 亚洲真人无码永久在线| 无码国产精品一区二区免费| 丰满少妇作爱视频免费观看| 亚洲欧洲日韩在线电影| 亚洲一区二区高清| 免费看污成人午夜网站| 99视频在线观看免费| 亚洲欧美日韩国产成人| 亚洲网站在线观看| 亚洲AV中文无码乱人伦在线视色| 亚洲免费网站在线观看| 国产精品成人69XXX免费视频| 中文字幕无码精品亚洲资源网久久 | 亚洲国产成人精品青青草原| 亚洲精品一级无码鲁丝片| 成人免费淫片在线费观看| 无码人妻精品中文字幕免费| 成人嫩草影院免费观看| 亚洲日本在线电影| 亚洲男女一区二区三区| 久久亚洲国产欧洲精品一| 国产亚洲精品精华液| 日本高清免费网站| 免费下载成人电影| 国产精品视频白浆免费视频| 一区二区免费国产在线观看| 亚洲色大成网站www永久男同 | 亚洲色欲色欱wwW在线| 亚洲导航深夜福利| 亚洲av中文无码乱人伦在线播放 | 亚洲日本一区二区三区在线不卡| 在线精品免费视频无码的|