同C++/COM程序員相比,Microsoft Java編譯器、虛擬機以及各式各樣的工具極大簡化了Java/COM程序員的工作。編譯器有特殊的引導命令和包,可將Java類當作COM類對待。但在大多數情況下,我們只需依賴Microsoft JVM為COM提供的支持,同時利用兩個有力的外部工具。
Microsoft Java Virtual Machine(JVM)在COM和Java對象之間扮演了一座橋梁的角色。若將Java對象創建成一個COM服務器,那麼我們的對象仍然會在JVM內部運行。Microsoft JVM是作為一個DLL實現的,它向操作系統展示出了COM接口。在內部,JVM將對這些COM接口的函數調用映射成Java對象中的方法調用。當然,JVM必須知道哪個Java類文件對應於服務器執行模塊;之所以能夠找出這方面的信息,是由於我們事前已用Javareg在Windows注冊表內注冊了類文件。Javareg是與Microsoft Java SDK配套提供的一個工具程序,能讀入一個Java類文件,生成相應的類型庫以及一個GUID,並可將類注冊到系統內。亦可用Javareg注冊遠程服務器。例如,可用它注冊在不同機器上運行的一個服務器。
如果想寫一個Java/COM客戶,必須經歷一系列不同的步驟。Java/COM“客戶”是一些特殊的Java代碼,它們想激活和使用系統內注冊的一個COM服務器。同樣地,虛擬機會與COM服務器溝通,並將它提供的服務作為Java類內的各種方法展示(揭示)出來。另一個Microsoft工具是jactivex,它能讀取一個類型庫,並生成相應的Java源文件,在其中包含特殊的編譯器引導命令。生成的源文件屬於我們在指定類型庫之後命名的一個包的一部分。下一步是在自己的COM客戶Java源文件中導入那個包。
接下來讓我們討論兩個例子。