非常感謝你的閱讀,如果你覺(jué)得好或者對(duì)你有幫助,請(qǐng)積極給一個(gè)留言反饋以示鼓勵(lì)。
?
提到這個(gè)話題,不免得提及Java設(shè)計(jì)理念,以及與Web Service可移植性密切相關(guān)的三個(gè)JSR規(guī)范:JSR1.9、JSR175、JSR181
提到可移植性,我們又不免想到如下方式:
??? ①XML配置文件屏蔽差異,類似Facade Pattern的形式統(tǒng)一入口
??? ②注釋
??? ③類似JBoss提出的Micro-Container
我們進(jìn)入正文:
Java一個(gè)理念是:Write Once, Run AnyWhere。Java哲學(xué):Java追求平衡的哲學(xué)--即簡(jiǎn)單和力量的共贏。
??? 從目標(biāo)可以看出可移植性是Java的一個(gè)設(shè)計(jì)理念。
??? 但Java世界的可移植性束縛苦惱著許多跨應(yīng)用服務(wù)器的開(kāi)發(fā)者、部署者。
JSR109
??? A. 目標(biāo):以一種可移植和互操作的方式為J2EE構(gòu)建和訪問(wèn)Web服務(wù)(即Web Service在J2EE上的實(shí)現(xiàn))。它指定了下面的條目:
??????? a. 客戶端編程模型:無(wú)論客戶端如何訪問(wèn)Web服務(wù),Web服務(wù)就像一個(gè)普通的遠(yuǎn)程對(duì)象一樣(即J2EE如何把Web Service作為傳統(tǒng)的遠(yuǎn)程對(duì)象來(lái)訪問(wèn));
??????? b. 服務(wù)器端編程模型:Web服務(wù)怎樣作為SLSB或JAX-RPC形式的Servlet實(shí)現(xiàn)(即怎樣用Servlet和SLSB來(lái)實(shí)現(xiàn)Web Service并使Web Service具有和它們一樣的生命周期)
??????? c. 部署模型:使用部署描述符來(lái)定義可以在所有符合J2EE規(guī)范的應(yīng)用服務(wù)器之間移植Web Service(即如何在應(yīng)用服務(wù)器上部署Web Service)
??? B. 個(gè)人觀點(diǎn):a、b兩點(diǎn)表現(xiàn)尚可,c著實(shí)不讓人滿意,因?yàn)閷?shí)現(xiàn)互操作的目標(biāo)沒(méi)有問(wèn)題,但是可移植性著實(shí)難以讓人滿意,問(wèn)題關(guān)鍵是:部署描述符:
??? C. 疑問(wèn):為何JSR109不明確規(guī)定部署描述符的明確XML Schema,尤其是文件名、文件的標(biāo)簽、以及部署的文件個(gè)數(shù)。
JSR175(Java語(yǔ)言元數(shù)據(jù)工具)
??? A. 目標(biāo):用于 Java 編程語(yǔ)言的元數(shù)據(jù),就是使用注釋編程
??? B. 個(gè)人觀點(diǎn):①簡(jiǎn)化了開(kāi)發(fā)尤其是配置文件 ②可移植性成為可能 ③類似“靜態(tài)類”機(jī)制成為可能
?? 說(shuō)明:只要加載了類,類中的注釋可以是運(yùn)行中的,加載類的時(shí)候完成了配置,而這個(gè)加載可以是入口函數(shù)的調(diào)用、可以是Servlet加載。
????????????我們知道只要加載了類,靜態(tài)類變量、靜態(tài)方法就自動(dòng)被初始化到內(nèi)存中;同理,要是有“靜態(tài)類”.......
??? C. 疑問(wèn):注釋能否像接口、類那樣進(jìn)行功能自定義化呢?!
??? D. 摘錄:
??? JSR175僅僅有少量的注釋類型變量,而這些有趣的注釋類型變量主要來(lái)自于其他的JSRs:
??????? ?JSR 250: Java平臺(tái)的公共注釋
??????? ?JSR 220: 企業(yè)級(jí)JavaBeans 3.0
??????? ?JSR 224: 基于XML的Java API Web Services (JAX-WS) 2.0
??????? ?JSR 181: Java平臺(tái)的Web Services Metadata
JSR181(Java Web服務(wù)元數(shù)據(jù))
??? A. 目標(biāo):致力于Java Web Service。
??????? 基本理念:Java Web服務(wù)僅僅是帶有某些標(biāo)注的普通Java對(duì)象(POJO)。使用帶有Java標(biāo)注的Java語(yǔ)言編寫(xiě)Web服務(wù),并且任何符合規(guī)范的處理器都能處理這些標(biāo)注,并生成適用于目標(biāo)運(yùn)行時(shí)環(huán)境的Web Service。
??????? 涉及范圍:
????? ?①定義用于進(jìn)行Web服務(wù)應(yīng)用程序編程的帶注釋的Java語(yǔ)法
?????? ②提供可促進(jìn)和加速開(kāi)發(fā)的簡(jiǎn)化Web服務(wù)開(kāi)發(fā)模型
????? ?③提供可通過(guò)工具進(jìn)行操作的語(yǔ)法
?????? ④定義構(gòu)建和部署Web服務(wù)的標(biāo)準(zhǔn),而無(wú)須了解通用API和部署描述符的知識(shí)和使用相關(guān)實(shí)現(xiàn)
??? B. 個(gè)人觀點(diǎn):由于規(guī)范沒(méi)有指定web服務(wù)的運(yùn)行環(huán)境,只提供了一個(gè)處理帶注釋的java文件的模型,以及到Java EE運(yùn)行期間的環(huán)境的映射。這不免又存在不可移植性。
本文主要談?wù)摽梢浦残?,我們首先分析為何?huì)出現(xiàn)這個(gè)現(xiàn)象?
首先我們知道J2EE中,部署后的應(yīng)用程序的入口是META-INF文件夾,而這個(gè)文件夾下的部署描述文件則帶有基本的描述信息。
在Web Service中, META-INF下具有部署描述符:webservices.xml和jax-rpc-mapping.xml;以及服務(wù)描述文件.wsdl。
??? webservices.xml依然沒(méi)有逃脫出JSR109在可移植性不足的陰影,那我們可以知道,由于WSDL是國(guó)際規(guī)范,XML Schema明確加以描述,只要消除了部署描述符的差異,可移植性必然增強(qiáng)。
??? 那如果沒(méi)有部署描述符如何?
??? 首先,我們來(lái)分析webservices.xml的作用:Web服務(wù)入口下的webservices.xml告訴容器在何處查找WSDL,以及將什么接口和實(shí)現(xiàn)用作Web服務(wù)。
??? 同時(shí),我們知道這些信息的解析起到了一個(gè)注冊(cè)表的作用:map(uri-wso對(duì)象) wso對(duì)象包含:wsdl文件,jax-mapping文件,服務(wù)接口、實(shí)現(xiàn)類,等。
??? 那我們有兩種策略:
?、龠\(yùn)行中生成部署描述符-Java的注釋
?、诜艞壊渴鹈枋龇母拍睿?br />???
??? 解釋第①中做法:
??? JSR181處理器,一定要在運(yùn)行中生成符合J2EE規(guī)范的部署描述符,而不是部署前就已生成好。
??? 方式<一>:靜態(tài)類,部署時(shí)必然要部署java類,如果有靜態(tài)類(JVM增加功能)概念,則可以通過(guò)帶注釋的靜態(tài)類來(lái)完成。
??? 方式<二>:Servlet加載一個(gè)類,這個(gè)類中具備完善的注釋,Servlet的加載機(jī)制必然導(dǎo)致類的加載,利用運(yùn)行時(shí)注釋生成部署描述符。
???
解釋第②中做法:
??? 不兼容是因?yàn)闆](méi)有嚴(yán)格的XML Schema來(lái)描述部署描述符,而入口卻是這些部署描述符的XML文件;
??? 如果有部署描述符(包含運(yùn)行中生成),無(wú)非是解析XML文件得到一個(gè)類似注冊(cè)表的作用;
??? 我們直接由java類來(lái)生成這些內(nèi)存注冊(cè)信息,而不是通過(guò)運(yùn)行時(shí)注釋。
??? 方式<一>:靜態(tài)類,部署時(shí)必然要部署java類,如果有靜態(tài)類(JVM增加功能)概念。
??? 方式<二>:Servlet加載一個(gè)類,這個(gè)類中具備完善的注釋,Servlet的加載機(jī)制必然導(dǎo)致類的加載,利用運(yùn)行時(shí)注釋生成內(nèi)存注冊(cè)信息。
??? 這兩種方式不由得想起是否可以在META-INF下放置一個(gè)類?
??? 是否可以類似Servlet機(jī)制,從Class-Loader入手?
??? 是否可以繼續(xù)改進(jìn)JVM,直接可認(rèn)出直接加載的類?
??? 考慮到各集團(tuán)的利益,可以看出JCP更多的致力于改良,而改革動(dòng)作很少,改良往往意味著不能更好的滿足新需求的呼喚,也埋下隱患.
???
Thanks very much to visit blog,? welcome your feedback,? your feedback is the Driver && Power to me