程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java/COM集成

Java/COM集成

編輯:關於JAVA

COM(以前稱為OLE)代表微軟公司的“組件對象模型”(Component Object Model),它是所有ActiveX技術(包括ActiveX控件、Automation以及ActiveX文檔)的基礎。但COM還包含了更多的東西。它是一種特殊的規范,按照它開發出來的組件對象可通過操作系統的專門特性實現“相互操作”。在實際應用中,為Win32系統開發的所有新軟件都與COM有著一定的關系——操作系統通過COM對象揭示出自己的一些特性。由其他廠商開發的組件也可以建立在COM的基礎上,我們能創建和注冊自己的COM組件。通過這樣或那樣的形式,如果我們想編寫Win32代碼,那麼必須和COM打交道。在這裡,我們將僅僅重述COM編程的基本概念,而且假定讀者已掌握了COM服務器(能為COM客戶提供服務的任何COM對象)以及COM客戶(能從COM服務器那裡申請服務的一個COM對象)的概念。本節將盡可能地使敘述變得簡單。工具實際的功能要強大得多,而且我們可通過更高級的途徑來使用它們。但這也要求對COM有著更深刻的認識,那已經超出了本附錄的范圍。如果您對這個功能強大、但與不同平台有關的特性感興趣,應該研究COM和微軟公司的文檔資料,仔細閱讀有關Java/COM集成的那部分內容。如果想獲得更多的資料,向您推薦Dale Rogerson編著的《Inside COM》,該書由Microsoft Press於1997年出版。
由於COM是所有新型Win32應用程序的結構核心,所以通過Java代碼使用(或揭示)COM服務的能力就顯得尤為重要。Java/COM集成無疑是Microsoft Java編譯器以及虛擬機最有趣的特性。Java和COM在它們的模型上是如此相似,所以這個集成在概念上是相當直觀的,而且在技術上也能輕松實現無縫結合——為訪問COM,幾乎不需要編寫任何特殊的代碼。大多數技術細節都是由編譯器和/或虛擬機控制的。最終的結果便是Java程序員可象對待原始Java對象那樣對待COM對象。而且COM客戶可象使用其他COM服務器那樣使用由Java實現的COM服務器。在這裡提醒大家,盡管我使用的是通用術語“COM”,但根據擴展,完全可用Java實現一個ActiveX Automation服務器,亦可在Java程序中使用一個ActiveX控件。
Java和COM最引人注目的相似之處就是COM接口與Java的“interface”關鍵字的關系。這是接近完美的一種相符,因為:
■COM對象揭示出了接口(也只有接口)
■COM接口本身並不具備實施方案;要由揭示出接口的那個COM對象負責它的實施
■COM接口是對語義上相關的一組函數的說明;不會揭示出任何數據
■COM類將COM接口組合到了一起。Java類可實現任意數量的Java接口。
■COM有一個引用對象模型;程序員永遠不可能“擁有”一個對象,只能獲得對對象一個或多個接口的引用。Java也有一個引用對象模型——對一個對象的引用可“造型”成對它的某個接口的引用。
■COM對象在內存裡的“生存時間”取決於使用對象的客戶數量;若這個數量變成零,對象就會將自己從內存中刪去。在Java中,一個對象的生存時間也由客戶的數量決定。若不再有對那個對象的引用,對象就會等候垃圾收集器的處理。

Java與COM之間這種緊密的對應關系不僅使Java程序員可以方便地訪問COM特性,也使Java成為編寫COM代碼的一種有效語言。COM是與語言無關的,但COM開發事實上采用的語言是C++和Visual Basic。同Java相比,C++在進行COM開發時顯得更加強大,並可生成更有效的代碼,只是它很難使用。Visual Basic比Java簡單得多,但它距離基礎操作系統太遠了,而且它的對象模型並未實現與COM很好的對應(映射)關系。Java是兩者之間一種很好的折衷方案。
接下來,讓我們對COM開發的一些關鍵問題進行討論。編寫Java/COM客戶和服務器時,這些問題是首先需要弄清楚的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved