Search Google

Thursday, July 30, 2015

淺談Context based Java batch自動測試與JMX

今天要跟大家分享目前自動測試Context based Java batch的做法與使用的工具.  這裡說的Context based Java batch指的是所有batch job都是從Spring context將MBean export後透過JMX呼叫執行.  說到JMX第一個想到的通常就是JConsole.


我們的案例中export出三個MBean, JmxJobListMBean是用來檢視job清單, JmxJobRunner是用來執行job.

透過JmxJobListMBean的listJob可以得到一份job名稱的清單.

知道要執行的job名稱後再呼叫JmxJobRunner的runJob來執行job名稱對應的service.

將job名稱與參數分別填入p1, p2欄位後執行runJob即可取得執行結果

到目前為止我們已經透過JConsole呼叫MBean export出來的功能成功地執行batch job, 但是使用JConsole代表著需要人工執行, 如果不想自己寫code但又想要透過script自動執行驗證時又該怎麼做呢?  這時候我們可以用Jmxterm來達成, 下面是透過Jmxterm執行上述batch job的做法

首先使用下列指令建立與JMX server的連線
java -jar jmxterm-1.0-alpha-4-uber.jar -n -u ${user} -p ${password} -l ${jmx_server_ip}:${jmx_server_port}

接著執行下列指令取得job名稱清單
 run -b bean:name=JmxJobListMBean -d bean listJob

最後執行下列指令將參入帶入job名稱對應的service並執行
 run -b bean:name=JmxJobRunner -d bean runJob ${job名稱} ${參數}

下圖中有上述指令與執行結果


OK, 現在我們可以不用人工的方式透過JMX執行batch job了, 接下來我們要再結合JMeter達成自動執行+驗正執行結果.  我們會用到JMeter的OS process sampler執行上述指令, 待OS process sampler執行結束後再搭配其他sampler (eg. JDBC)或是單純使用post process assertion檢查執行結果是否如預期.


搭配JMeter OS process sampler後比較特別的地方是在原本與JMX server建立連線的指令後面多加了"-i jmxterm.txt", 這個新加的參數表示會把jmxterm.txt檔案內容餵進與JMX server建立的連線中執行.  所以jmxterm.txt的內容就是執行runJob的指令, eg.
run -b bean:name=JmxJobRunner -d bean runJob ${job名稱} ${參數}



Saturday, July 18, 2015

Bluemix業配文+入門教學

身為I社的一份子, 當公司全力在推CAMSS的時候一定也要來盡點心力, 我想大家對於中規中舉的介紹早已麻木, 所以就讓擅長打野武士戰法的我來跟大家介紹如何開開心心地以非正規的方式使用Bluemix提供的免費功能~

今天要介紹的功能是大部分webapp所環繞著的三大要素
1. Runtime server
2. Git server
3. DB server

1. Runtime server目前涵蓋了以下幾種大家常見的環境:
雖然我個人偏好在local跑Runtime server, 畢竟要設定或debug時還是比較方便, 但是如果可以在Bluemix上面跟客戶做完最後一哩路測試等於可以省去系統轉移+後續測試所需的工, 因為測試完之後只需要將帳號轉移給業主管理就結束了, 光是這點我想對許多SOHO族是相當有利, 而業主每個月付的費用就是原本需要花費的web hosting service費用.


想知道更多關於如何開始使用Runtime server請點這

2. 為什麼要特別提到Git server呢? 不就是做版本控管嗎?
是的, 在開發的過程中大家多多少少會需要做source code的版本控管, 也因為近年來許多opensource project陸續放到GitHub上讓越來越多人使用Git做版本控管.
要使用Git做版本控管一定要有個Git server, 如果用免費版的GitHub就表示所有放上去的source code自動成為opensource, 如果不想讓自己的source code變成opensource通常有兩種方式: (a) 付錢成為GitHub的付費使用者就可以把repository/project轉成私人模式, (b) 自己架Git server.
對於不想付費又不想自己架Git server的使用者而言, Bluemix提供的DevOps服務就顯得格外有用. 透過Bluemix的DevOps服務可以建立private Git server做版本控管同時保有source code的ownership.
想知道如何從local git client使用Bluemix提供的Git server請點這

3. webapp絕大部分應該都會需要用到DB, 以往我們難免需要自己在local電腦上架個DB server或付費租用線上DB才能開始開發測試. 今天Bluemix真正實現了"只要有心人人都可以有100MB的免費DB空間可用"!
這個部份比較tricky, 正規文件裡面並沒有特別說明(匆匆帶過倒是有), 所以在這裡特別說明如何從local端存取Bluemix提供的DB instance.
首先我們需要先有一個Runtime server instance (可以參照第1點結尾的連結), 這樣申請下來的DB server才有地方可掛 --> 才有地方可以看設定.
接著點擊上圖紅色框框申請DB server instance, 要注意的是下圖中的兩個紅色框框. 上面的紅色框框指定新申請的DB server instance要掛到哪一個Runtimer server instance, 下面的紅色框框指名要使用免費方案 --> 100MB空間 + 10 concurrent connections
到目前為止我們知道我們有了一個Runtime server + 一個DB server, 接下來我們要透過Runtime server的設定取得DB server的連線資訊. 從Bluemix的儀表板中看到一個Runtime server instance:

點進上圖下方紅色框框代表的Runtime server instance之後可以看到該instance的配置
到這裡我們就已經快要完成取經任務, 只要再點進上圖中左方panel中的"環境變數"就可以看到DB的設定參數!

有了上圖中右邊兩個紅色框框的資訊我們就可以從local直接透過Internet存取這100MB的free DB.

當然, 不把DB掛進Runtime server也可以透過DB service提供的web UI進行"簡單"的操作
如果想要透過這個web UI匯入格式稍微複雜一點的資料就會碰壁, web UI畢竟無法提供command line指令的細顆粒度微調, 所以我還是偏好直接透過Data Server Runtime Client直接建立remote connection操作的野武士戰法.

相信沒有直接按"End"鍵一路看到這裡的捧友們此時對於如何使用Bluemix提供的service已經有更深一層的了解, 雖然不是太正規的用法, 但是我相信對於中小企業的企業主與SOHO族們應該相當有幫助.

我們下回見~