前一陣子學弟提到要寫一個 Robot test case 來測試 SyncFree (一個開放原始碼的檔案同步軟體,由北科大資工系軟體系統實驗室開發),這個 test case 需要準備某種測試環境:
- 在 Windows 上用網路芳鄰開放一個共享的目錄,此目錄作為測試檔案同步功能的來源端(source)。
- 在 Ubuntu 上的本地端硬碟建立一個目錄,此目錄作為測試檔案同步功能的目的端(destination)。
這個 Robot test case 要測什麼呢?要測試當 SyncFree 正在執行同步檔案功能的時候(同步尚未全部完成的當下),source 端的網芳共享目錄突然中斷了。在此情況下,SyncFree 還是要確保來源和目的端的資料以及系統的狀態都是正確的。換句話說,這是一個 robustness test case(測試 SyncFree 軟體的
學弟提出了一個問題,
學弟:這個 Robot test case 沒辦法完全自動化耶,因為不知道要如何在同步到一半的時候把網芳共享目錄給中斷。
Teddy:那有可能不行。你可以在 Robot 程式中呼叫一個外部 script,然後用這個 Windows 上的 script 來停掉網芳共享目錄。
Teddy:或是你可以透過 WMI(Windows Management Instrumentation)直接寫 Java 程式來關閉網芳共享目錄。
學弟:啥米!有這種東西....
***
在 Windows 平台上,透過 WMI 可以做到許多管理與查詢的功能,例如,查詢 CPU 負載,網路封包,服務(service)的狀態等等。也可以啟動或是停止服務。有興趣的鄉民可以自行查一下 WMI 的文件。Teddy 今天要介紹的是三個 Java 開放原始碼元件,讓鄉民們可以用 Java 來存取 WMI。
這三個元件分別是:
- com4j,MIT 授權,支援 64/32-bit JVM。
- j-Interop (Pure Java - COM Bridge),支援 64/32-bit JVM。
- JACOB (Java COM Bridge),LGPL 授權, 支援 64/32-bit JVM。
說是介紹,其實也不算是介紹,應該說是推薦使用,這樣鄉民們就可以省去一些『試用期』。首先看一下授權,如果鄉民們的軟體是不開放原始碼的軟體,那麼使用 MIT 和 LGPL 的授權應該是 OK 的(不會因為使用這些元件而被迫開放自己的原始碼...如果 Teddy 有說錯請糾正)。
關於 com4j,Teddy 用過的經驗是在 64-bit 環境下(64-bit OS and 64-bit JVM),曾經發生過把 Windows WMI service 搞到掛掉的情況,但是在 32-bit 環境下卻很正常,所以不太推薦。
j-Interop 是完全用 Java 開發的軟體,沒有任何的 native code(其他兩個都有用 C/C++ 寫的 native code)。j-Interop 實做 DCOM 通訊協定,所以可以透過網路去存取其他電腦的 WMI 服務。但是缺點是,如果你要存取的是本機電腦,似乎(Teddy 不是 100% 肯定)也要提供一組帳號,密碼才可以存取 WMI 服務。com4j 和 JACOB 就沒有這樣的限制。
在 Jenkins(一個超好用的開放原始碼持續整合系統)中就有用到這個 j-Interop 來啟動與管理遠端 Windows 機器中的建構環境(支援 distributed build 的功能)。所以如果鄉民們有類似 Jenkins 這樣遠端存取其 Windows 電腦 WMI 服務需求的話,那麼用 j-Interop 是不錯的選擇。
如果是要存取本地端的 WMI 服務又不希望使用者一定要設定帳號與密碼的話,最後這個 JACOB 是 Teddy 推薦的元件。在 64-bit 與 32-bit 環境下工作都滿正常的。
講完收工。
***
友藏內心獨白:範例程式網路上找一下就有了。
沒有留言:
張貼留言