Total Pageviews

Showing posts with label webMethods. Show all posts
Showing posts with label webMethods. Show all posts

2017/05/05

[webMethods] 在 Flow Service 中使用 Branch

步驟 1. 建立一個 Math Flow,用來展示加減乘除的數學運算


步驟 2. 建立 input / output parameters,num1 與 num2 是供輸入的兩個整數參數,operator 是輸入加減乘除用的參數,result 是運算結果


步驟 3. 在 MathFlow 中,建立一個 branch step,依照 operator 參數所輸入的值來做不同的處理


步驟 4. 依據不同的 operator 使用不同的套件,即 pub.math:addInts, pub.math:subtractInts, pub.math:multiplyInts, pub.math:divideInts,Label 的值代表是 operator 所輸入的值


步驟 5. 在 pipeline tab 拉 pub.math:addIntspub.math:subtractIntspub.math:multiplyIntspub.math:divideInts 對應的值








步驟 6. 若 operator 輸入非預期的字元,則要做額外的處理,label 設定為 $default,並設定印出 The operator is invalid 此警告訊息




步驟 7. 若 operator 沒有輸入值,,則要做額外的處理,label 設定為 $null,並設定印出 The operator is null 此警告訊息





執行結果




2017/05/04

[webMethods] 刪除 Flow Service 中不需要的參數 - Drop the Selected Variable

假設以下是一個已經完成的 Flow Service,Pipeline Out 那個 column 代表著執行此 Flow Service 會產生的三個 output parameters:



Run Flow Service 的結果如下:



若我們希望 Pipeline Output 只要有 document 物件就好,其餘兩個 parameters 不要顯示,可以在 Pipeline tab 選定 parameter(s),再點選 Drop the Selected Variable 並儲存即可



若是要還原的話,操作如下:

2017/05/03

[webMethods] 如何將 JSON String 轉換成 ESB 中的 Document 物件

我有一個 Service Class,可以透過 buildTestJson() 取得測試用的 JSON String,或者是呼叫 buildHeartbeatMsgJson() 並傳入一個 HBMessage 物件取得 JSON String
import java.io.Serializable;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class OpcHeartbeatService {
    
    private final static Logger logger = LoggerFactory.getLogger(OpcHeartbeatService.class);
    
    public static void main(String[] args) {
        OpcHeartbeatService test = new OpcHeartbeatService();
        logger.info("buildTestJson = " + test.buildTestJson());
    }
    
    public String buildTestJson() {
        HBMessage hb_msg = new HBMessage("test", "123445", "HBT_MSG");
        return buildHeartbeatMsgJson(hb_msg);
    }
    
    public String buildHeartbeatMsgJson(HBMessage hb_msg) {
        JSONObject dataset = new JSONObject();
        
        JSONObject hbObject = new JSONObject();
        hbObject.put("serviceId", hb_msg.getServiceId());
        hbObject.put("token", hb_msg.getToken());
        hbObject.put("type", hb_msg.getType());
        
        dataset.accumulate("heartbeatMsg", hbObject);
        
        return dataset.toString();
    }

    public static class HBMessage implements Serializable{
        private static final long serialVersionUID = 1L;
        
        private String serviceId;
        private String token;
        private String type;
        
        public HBMessage() {
            super();
        }

        public HBMessage(String serviceId, String token, String type) {
            super();
            this.serviceId = serviceId;
            this.token = token;
            this.type = type;
        }

        public String getServiceId() {
            return serviceId;
        }
        
        public void setServiceId(String serviceId) {
            this.serviceId = serviceId;
        }
        
        public String getToken() {
            return token;
        }
        
        public void setToken(String token) {
            this.token = token;
        }
        
        public String getType() {
            return type;
        }
        
        public void setType(String type) {
            this.type = type;
        }
        
        @Override
        public String toString() {
            return "HBMessage [serviceId=" + serviceId + ", token=" + token + ", type=" + type
                    + "]";
        }
    }
}



在 Design 中建立一個 Java Service,名為 OPC_Heartbeat




在 OPC_Heartbeat 中定義一個 output 參數 (i.e. heartbeatJson),用來接收 buildTestJson() 所得到的 JSON String




在 OPC_Heartbeat 中,呼叫 OpcHeartbeatService 的 buildTestJson() method,取得測試的 JSON String ,並將 JSON String 傳給 output parameter
public final class OPC_Heartbeat_SVC

{

    /** 
     * The primary method for the Java service
     *
     * @param pipeline
     *            The IData pipeline
     * @throws ServiceException
     */
    public static final void OPC_Heartbeat(IData pipeline) throws ServiceException {
        OpcHeartbeatService hbService = new OpcHeartbeatService();
        String hbJson = hbService.buildTestJson();
        
        IDataCursor pipelineCursor = pipeline.getCursor();
        IDataUtil.put(pipelineCursor, "heartbeatJson", hbJson);
        pipelineCursor.destroy();
    }
    
    // ignore......
}    



OPC_Heartbeat 執行結果




將 OPC_Heartbeat 拉近 Flow Service,並利用 pub.json:jsonStringToDocument 此現成套件協助我們將 JSON String 轉成 ESB 中的 Document 物件




2017/04/10

[webMethods] 如何在 Java Service 中,將資料寫入 Integration Server 中的 Cache

Problem
假設我們已經在 Integration Server 中,在 Public Cache Managers 中建立一個名為 Test 的 Cache Manager,並於 Test 中建立一個名為 hello 的 cache



若我們希望在 Java Service 中,用 webMethods 提供的套件來:
1. 新增資料到 cache
2. 從 cache 中取出資料
3. 移除 cache 中的資料  


該如何做?



How-to

以下是 sample code:
// --- <<IS-BEGIN-SHARED-SOURCE-AREA>> ---
    
    private static final String cacheManagerName = "Test";
    private static final String cacheName = "hello";
    
    public static void addValueToCacheByKey(IData pipeline, String key, Object value) throws ServiceException {
        IDataCursor cursor = pipeline.getCursor();
    
        IDataUtil.put(cursor, "cacheManagerName", cacheManagerName);
        IDataUtil.put(cursor, "cacheName", cacheName);
        IDataUtil.put(cursor, "key", key);
        IDataUtil.put(cursor, "value", value);
    
        try {
            Service.doInvoke("pub.cache", "put", pipeline);
        } catch (Exception e) {
            throw new ServiceException(e);
        }
        cursor.destroy();
    }
    
    public static Object getValueFromCacheByKey(IData pipeline, String key) throws ServiceException {
        IDataCursor cursor = pipeline.getCursor();
    
        IDataUtil.put(cursor, "cacheManagerName", cacheManagerName);
        IDataUtil.put(cursor, "cacheName", cacheName);
        IDataUtil.put(cursor, "key", key);
        
        IData data = null;
        try {
            data = Service.doInvoke("pub.cache", "get", pipeline);
        } catch (Exception e) {
            throw new ServiceException(e);
        }
        Object result = IDataUtil.get(data.getCursor(), "value");
        
        cursor.destroy();
        
        return result;
    }
    
    public static void removeCacheByKey(IData pipeline, String key) throws ServiceException {
        IDataCursor cursor = pipeline.getCursor();
        
        IDataUtil.put(cursor, "cacheManagerName", cacheManagerName);
        IDataUtil.put(cursor, "cacheName", cacheName);
        IDataUtil.put(cursor, "key", key);
        
        try {
            Service.doInvoke("pub.cache", "remove", pipeline);
        } catch (Exception e) {
            throw new ServiceException(e);
        }
    }   
    // --- <<IS-END-SHARED-SOURCE-AREA>> ---




2017/04/09

[webMethods] 如何設定在 Integration Server 啟動時,執行 Java Service

Problem
假設我們有一個 OPC Connection 的 Java Service,我們希望這個 Java Service 在啟動 integration server 時,順便啟動此 OPC_Connection Java Service,取得OPC connection,完成初始化的相關動作


How-to
步驟1. 點選要設定的 Java Service 所屬的 package,按下右鍵,並選擇Property



步驟2. 在 dialog 中,點選最後一個選項 (Startup / Shutdown Services),在 Startup Services 處,將 OPC_Connection Service 選取到 Selected services,按下 OK (若要將 flow service 設定為 startup service,其程序相同)


步驟3. 重啟 Integration Server,可以到 administration console 中看到 OPC_Connection 印出的 log



若日後有更動 folder 位置,記得要重做步驟 1 與步驟 2,Designer不會自動更新 service 的位置,會出現以下錯誤
Startup service acme.albert.adapters:OPC_Connection was not found in Acme package


2017/04/08

[webMethods] 如何在Designer 中 create 的 Java Service,使用已經寫好的外部的Java Class

步驟1. 先將所寫好的程式包成一個 jar file


步驟2. 將包好的 jar file 與其相依賴的 jar files 放到 ESB 特定package的目錄中 (即 [integration_server_dir]/packages/[your_pacakge_name]/code/jars ),並重啟 webMethods Integration Server

步驟3. 在出現編譯錯誤的程式碼,按下修正錯誤,點選 Fix project setup...



步驟4. 點選 here



步驟5. 點選 Add External Jars


步驟6. 選取所需用到的 jar files,按下開啟舊檔



步驟7. 按下 OK



步驟8. 此時即可 import 我所寫好的 Java class




若日後有更動外部的Java code,步驟如下:

步驟1. 先將所寫好的程式包成一個 jar file

步驟2. 將包好的 jar file 放到 ESB 特定 package 的目錄中,並重啟 webMethods Integration Server


步驟3. 將 jar file 更新到你的 Designer 會用到的 library directory

步驟4. 點選目前正在開發的 package,點選右鍵並按下 Reload Package,這樣 Designer 裡就可以用到最新版本的 Java code

2017/04/07

[webMethods] 如何安裝 Designer 工具

Installation Steps
1. 執行 installer,等待出現 installation window 以後,點選 Advanced Options


2. 點選 Images tab、勾選 Use installation image、選取要安裝的 image file,先點選 Validate Image 確定所選取的 image file 是否完整,確認 image file 是正確的才點選 OK



3. 選擇要安裝的 Installation directory,點選 Next



4. 選擇要安裝的 packages,點選 Next



5. 點選 checkbox,按下 Next




6. 選取 trial license file,按下 Next



7. 直接按下 Next



8. 直接按下 Next



9. 直接按下 Next



10. 此步驟需要等待數分鐘



11. 安裝完成畫面,按下 Close 即可完成安裝步驟




Designer Configuration Steps

1. 啟動 Designer 工具


2. Window => Preferences






3. 點選 Integration Servers 的選項



4. 輸入你要連線的 Integration Server 的 IP、Port、User name、Password,點選 Verify Server 可以檢查是否可以正常連上 Integration Server,按下 OK 即可完成設定


5. 完成設定後,若可以正常連上 Integration Server,Status 會顯示 Connected



Reference

[1] http://techcommunity.softwareag.com/pwiki/-/wiki/Main/Guide+to+Downloading+and+installing+the+webMethods+Free+Trial+Version