程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 如何使用Java編寫NT服務

如何使用Java編寫NT服務

編輯:JAVA編程入門知識

  內容簡介:本文通過例子講解了如何利用Java的特性快速編寫安全可靠的NT服務,並展示了Java的多線程如何實施,以及如何應用套接字實現網絡服務。
  
  一、NT服務介紹
  
  所謂NT服務,實際上是一類非凡的應用程序所謂NT服務,實際上就是一個可以在系統啟動時自動在一定身份下啟動的伴隨系統長時間存在的進程。象FTP server、HTTP server、脫機打印等都是采用NT服務的形式提供的。這實際上類似Unix的root daemon進程。NT服務歸納起來,NT服務又以下幾個特征:
  
  1、可以自啟動,不需要交互啟動。這對於服務器來說是一個重要的特征。當然,你可以決定服務是否自啟動,甚至可以屏蔽某個服務。
  2、NT服務沒有用戶界面,基本上類似一個DOS 程序,因為NT服務必須長時間運行,所以不想普通win32進程一樣有自己的界面。但是NT服務可以同用戶有界面交互,這是一類非凡的服務進程。可以通過NT的任務治理器來看到服務進程。
  3、NT服務通過SCM(Services Control Manager)接口來治理,安裝、啟動、停止、撤除等都需要SCM的接口功能來進行。控制面板的服務控制器就是利用SCM接口來治理系統中的所有服務的。實際上,還有一些可以控制服務的程序或者命令,有net.exe 、服務器治理器等 、SCM.exe等。
  4、這些進程都以一定的身份運行,以方便進行服務器資源的存取。一般情況下使用域中的LocalSystem賬號運行,此賬號對本機上的大多數資源(除非非凡禁止)有完全的存取權限,這樣可以保證服務程序的“強大”。但是,也有些服務采用非凡的賬號運行,你也可以非凡設定一個服務的帳號。
  5、由系統自動以線程方式運行,一般情況下不過多占用系統資源,這同普通的進程有所區別,假如不采用線程方式,一般進程往往消耗整個CPU資源。一般需要時時存在,又不能過多消耗資源的任務以服務來實現最合適。
  
  二、Java編寫服務的預備
  
  1、作為本地化的實現,實現NT服務的Java程序當然不是100%純Java,單靠標准類庫是無法實現我們的編寫NT服務的目的,所以MS提供了一套SDK for Java(本文采用的是Microsoft SDK for Java 4.0),提到了如何利用MS提供的擴展類庫和相應的工具,實現符合Windows平台需要的程序。其中包括了實現NT服務的所需要的類庫API框架以及將Java編譯的class文件組裝成標准的NT服務程序的工具。SDK的下載路徑可以從www.microsoft.com/java/查找到。
  
  2、安裝完SDK後可以看到在安裝目錄下有jntsvc目錄,此目錄就包含了service.zip文件,它實際上是一個NT services的類庫框架,封裝了一些NT服務實現細節,使得我們可以按照框架舒適實現我們關心的細節。將service.zip展開至開發機器的系統安裝Service庫到Java擴展庫WinntjavaTrustLib下,假如在其他操作系統下進行開發,參照此系統目錄進行安裝文件。
  3、在該目錄下還有一個jntsvc.exe文件,也就是Java NT Service的意思啦。她可以幫助您實現將按照SDK提供的框架實現的編譯後的class文件組裝成一個標准的NT服務可執行文件。JntSvc幫助我們在已經編譯好的.class文件基礎上設置了所有NT服務程序必須的特征,是很重要的工具,得到NT服務取決於如何有效利用她。為了我們能夠方便從任何其他目錄的控制台窗口調用她,我們將JntSvc.exe所在的目錄全路徑加入path環境變量。這可以通過設置系統屬性的高級屬性頁當中進行環境變量的設定。
  
  4、按照要求,我們寫好各項代碼,然後編譯編寫Java程序,得到class文件。我們當然不會在Vj Studio中啟動她,因為它目前還沒有可執行文件的入口,系統無法啟動她。為了得到NT服務程序,我們需要在class文件所在目錄的控制台窗口執行一個命令:X:>jntsvc *.class /OUT:ECHOSvc.exe /SVCMAIN:EchoSvc "/SERVICENAME:ECHOSvc"。具體的Jntsvc的參數我們可以看一看jntsvc -?得到,這裡的意思大概是:將當前目錄下的所有class文件組裝成一個NT服務進程exe文件,文件名為EchoSvc.exe,服務的啟動入口在echosvc.class中,在注冊表中相應的服務名稱為/Servicename參數指定的EchoSvc。假如有多個多個NT服務需要組裝在一個Exe文件中,還可以在 /Out參數後指定每一個服務展示名稱。/SVCMAIN參數指定服務的入口,所謂入口是指服務啟動之初是從哪一個類的實例開始的。"/SERVICENAME:"參數指定了該服務將以什麼名稱出現。這些參數都是jntsvc.exe實用工具需要組裝服務所必須的信息,根據這些信息將編譯後的.class文件按照win32格式要求得到一個可執行文件。
  
  需要注重的是,這個exe文件的運行必須要有JVM存在,她實際上是通過解釋.class來實現服務提供的。假如需要另外的擴展包,可以通過在/Classpath參數指定另外的擴展包的位置。所以在安裝Java編寫得到的NT服務的機器上必須存在JVM。假如是擁有IE5.x那麼不用操心這個問題,IE核心組件已經包括了JVM;但是假如是IE6版本,則需要到MS的網站上下載JVM。假如您講SDK for Java安裝在服務器上就更方便了。
  
  5、假如沒有什麼錯誤,您將得到一個可執行文件echosvc.exe。像大多數服務可執行文件一樣,它可以將自己安裝到系統中: echosvc.exe –install,這一個過程將會往系統注冊表添加一些項目,非凡是關於服務的項目,SCM也可以列出這個服務了。我們可以在控制台下采用DOS NT服務控制命令Net start/stop來測試服務是否真像普通服務一樣可以按照標准方式來控制,當然在服務治理器當中啟停該服務更不會有問題。
  
 

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