明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

漫談EJB (1)

[摘要]本文面向的觀眾是對(duì)J2EE技術(shù)有興趣的入門(mén)者。Java語(yǔ)言 Java語(yǔ)言最早被稱(chēng)為Oak,它是為了實(shí)現(xiàn)嵌入式的消費(fèi)類(lèi)電子產(chǎn)品應(yīng)用而產(chǎn)生的,它的作者是James Gosling。Ed Frank, Patrick Naughton, Jonathan Payne, Chris Warth在隨后...
本文面向的觀眾是對(duì)J2EE技術(shù)有興趣的入門(mén)者。

Java語(yǔ)言

Java語(yǔ)言最早被稱(chēng)為Oak,它是為了實(shí)現(xiàn)嵌入式的消費(fèi)類(lèi)電子產(chǎn)品應(yīng)用而產(chǎn)生的,它的作者是James Gosling。Ed Frank, Patrick Naughton, Jonathan Payne, Chris Warth在隨后的幾年時(shí)間中為Java語(yǔ)言加入了大量的特性,并把Java語(yǔ)言的目標(biāo)做了一個(gè)重新的定位,定位于適合Internet的語(yǔ)言。

Java語(yǔ)言是一種多用途的語(yǔ)言、并發(fā)的語(yǔ)言、以類(lèi)為基礎(chǔ),面向?qū)ο蟮恼Z(yǔ)言。它的設(shè)計(jì)盡可能的做到和操作系統(tǒng)是無(wú)關(guān)的,也就是Java所宣傳的那句話(huà):“一次編寫(xiě),到處運(yùn)行!盝ava的設(shè)計(jì)參考了C和C++語(yǔ)言,因此熟悉C和C++的程序員對(duì)Java語(yǔ)言上手很快,而Java設(shè)計(jì)的原則是能夠利用Java語(yǔ)言快捷的編寫(xiě)應(yīng)用,所以我們可以發(fā)現(xiàn),在Java語(yǔ)言中,并沒(méi)有那些C和C++中的復(fù)雜的機(jī)制。最明顯的就是C中被大量使用的指針,由于它的隨意性,被Java以引用來(lái)代替了。而C++中的操作符重載、模板、泛型的特性也因?yàn)槭褂帽容^復(fù)雜,Java也不予采用。但是目前Java仍然不斷的推出新的特性,以滿(mǎn)足應(yīng)用的發(fā)展。例如在新推出的JDK1.4中,Java語(yǔ)言就能夠支持Assertment機(jī)制和Perl語(yǔ)言中最有用的正則表達(dá)式機(jī)制。

Java語(yǔ)言主要由以下五種元素組成:標(biāo)識(shí)符、關(guān)鍵字、文字、運(yùn)算符和分隔符。這五種元素有著不同的語(yǔ)法含義和組成規(guī)則,它們互相配合,共同完成Java語(yǔ)言的語(yǔ)意表達(dá)。

1:標(biāo)識(shí)符。變量,類(lèi)和方法都需要一定的名稱(chēng),我們將這種名稱(chēng)叫做標(biāo)識(shí)符。

2:關(guān)鍵字。關(guān)鍵字是Java語(yǔ)言本身使用的標(biāo)識(shí)符,它有其特定的語(yǔ)法含義。所有的Java關(guān)鍵字將不能被用作標(biāo)識(shí)符。

3:數(shù)據(jù)類(lèi)型。Java有著不同的數(shù)據(jù)類(lèi)型。比較值得一提的是字符串?dāng)?shù)據(jù)類(lèi)型,字符串?dāng)?shù)據(jù)類(lèi)型是用一對(duì)雙引號(hào)括起來(lái)的字符序列,字符串?dāng)?shù)據(jù)實(shí)際上是由String類(lèi)所實(shí)現(xiàn),而不是C語(yǔ)言中所用的字符數(shù)組。每一個(gè)字符串?dāng)?shù)據(jù)將產(chǎn)生一個(gè)String類(lèi)的新的實(shí)例,用戶(hù)不必對(duì)字符串與類(lèi)這個(gè)概念發(fā)生關(guān)系而感到擔(dān)心,由于類(lèi)的特性,你不必?fù)?dān)心如何去實(shí)現(xiàn)它們,它們會(huì)自己照顧好自己,需要說(shuō)明的是字符串在Java里作為類(lèi)只是出于安全的考慮。

4:運(yùn)算符。任何語(yǔ)言都有自己的運(yùn)算符,Java語(yǔ)言也不例外,如+、-、*、/等都是運(yùn)算符,運(yùn)算符的作用是與一定的運(yùn)算數(shù)據(jù)組成表達(dá)式來(lái)完成相應(yīng)的運(yùn)算。對(duì)不同的數(shù)據(jù)類(lèi)型,有著不同的運(yùn)算符。

5:分隔符。分隔符用來(lái)使編譯器確認(rèn)代碼在何處分隔。‘’‘’‘;’‘:’都是Java語(yǔ)言的分隔符。

學(xué)習(xí) Java 語(yǔ)言很簡(jiǎn)單,畢竟 Java 語(yǔ)言也只包含五十多個(gè)關(guān)鍵詞(keyword)與幾十個(gè)算符(operator),再加上 Java 語(yǔ)法(syntax)也很簡(jiǎn)單,所以一般人可以很快就學(xué)會(huì) Java 語(yǔ)言。危險(xiǎn)的是,很多人認(rèn)為已經(jīng)完全掌控 Java 語(yǔ)言,但其實(shí)對(duì)于內(nèi)部的運(yùn)作機(jī)制仍不能掌握,這些盲點(diǎn)有時(shí)候會(huì)讓你無(wú)法完全掌控 Java 語(yǔ)言。克服這些盲點(diǎn)的方式是看「The Java Language Specification, 2nd Ed.」(沒(méi)有中文版)來(lái)徹底弄懂 Java 程序語(yǔ)言,并看「Inside the Java Virtual Machine, 2nd Ed.」來(lái)徹底掌握 Java 虛擬機(jī)器的運(yùn)作方式。學(xué)會(huì)了語(yǔ)言,并不代表就可以設(shè)計(jì)出好的對(duì)象導(dǎo)向系統(tǒng)架構(gòu)。想要成為對(duì)象導(dǎo)向的專(zhuān)家,往往需要:(1) 多看相關(guān)的書(shū),特別是 Design Pattern 和 Refactoring 的書(shū)。(2) 多觀摩別人的程序(例如 Java API 的 design 與 implementation)(3) 多寫(xiě)程序。學(xué)會(huì) Java 語(yǔ)言之后,還需要學(xué)會(huì)一些 API 才能寫(xiě)出有用的程序。Java 的 API 非常多,必須規(guī)劃好一個(gè)學(xué)習(xí)路徑,才不會(huì)在浩瀚的 API 大海中迷失。必備的 API 包括了:IO、New IO、Collection Framework、Network、RMI、JAXP... 等。至于其它的 API,就看你的需求而定,大致上分成:

* GUI 類(lèi):JavaBean -> Swing -> JavaHelp -> Java2D -> Image IO -> JAI -> Java 3D ...
* Enterprise 類(lèi):JDBC -> JDO -> Servlet -> JSP -> EJB -> JMS -> JTA/JTS...
* J2ME 類(lèi)(這一類(lèi)不是我的專(zhuān)長(zhǎng),無(wú)法提供學(xué)習(xí)順序建議)

Java語(yǔ)言通常都是根據(jù)Java虛擬機(jī)規(guī)范(The Java Virtual Machine Specification)中的定義,編譯為字節(jié)碼指令集和二進(jìn)制格式。因此我們接下來(lái)就討論Java虛擬機(jī)(JVM)

JVM

我們已經(jīng)談過(guò)Java語(yǔ)言的語(yǔ)法類(lèi)似于C和C++,但是摒棄了C和C++中復(fù)雜、疑惑和不安全的特性。Java語(yǔ)言最早是用來(lái)構(gòu)建消費(fèi)類(lèi)網(wǎng)絡(luò)設(shè)備的軟件的,因此它要支持多主機(jī)的架構(gòu),并要求能夠提供安全的軟件組件。為了滿(mǎn)足這些需求,編譯好的代碼就必須能夠通過(guò)網(wǎng)絡(luò)來(lái)傳播,能夠在任何客戶(hù)端上運(yùn)行,同時(shí)還要保證客戶(hù)端是足夠安全的。

Java虛擬機(jī)是Java和Java 2 平臺(tái)的基石。它能夠保證Java語(yǔ)言和硬件、操作系統(tǒng)無(wú)關(guān),保證編譯后的代碼最小,并保護(hù)用戶(hù)不受惡意程序的攻擊。Java虛擬機(jī)到底是什么呢。其實(shí)它就是一臺(tái)不實(shí)際存在的計(jì)算機(jī)。和真實(shí)的計(jì)算機(jī)類(lèi)似,它也有自己的指令集,并可以在運(yùn)行環(huán)境中分配內(nèi)存區(qū)域。使用虛擬機(jī)機(jī)制來(lái)實(shí)現(xiàn)編程語(yǔ)言并不是Java的創(chuàng)舉,這已經(jīng)是非常普遍的做法了,最著名的許你就莫過(guò)于UCSD Pascal的P-Code機(jī)。

只要瀏覽器檢測(cè)到目前所處理的Web文件內(nèi)容含有一個(gè)Java Applet,瀏覽器將會(huì)為這個(gè)Java小程序另外開(kāi)一個(gè)JVM,執(zhí)行這個(gè)Java應(yīng)用小程序。在JVM中執(zhí)行的Java小程序可以得到充分安全的保護(hù)。如同我們上面所說(shuō),JVM是一個(gè)自給自足的作業(yè)環(huán)境,就像是一臺(tái)獨(dú)立的計(jì)算機(jī)一樣。例如,在JVM運(yùn)作的Applet,無(wú)法存取主機(jī)操作系統(tǒng)。優(yōu)點(diǎn)是:

1. 系統(tǒng)中立。Java應(yīng)用程序可以在任何JVM中運(yùn)作,不論該系統(tǒng)使用何種硬件、軟件。

2. 安全。正因JVM跟操作系統(tǒng)沒(méi)有任何接觸,Java程序很難損害到其它檔案或應(yīng)用程序。

缺點(diǎn)是,由于在JVM運(yùn)作的程序獨(dú)立在操作系統(tǒng)之外,也就無(wú)法享受操作系統(tǒng)各項(xiàng)特殊功能。

Java技術(shù)之所以在今天得到了如此廣闊的應(yīng)用,其中它的安全性是不能不提的。不同于其它技術(shù)(例如Microsoft的ActiveX)中安全性作為附加設(shè)計(jì)和補(bǔ)丁,Java從設(shè)計(jì)之初便考慮到了安全性。因此Java的安全性是在語(yǔ)言層次實(shí)現(xiàn)的。Java的安全性由下列三個(gè)方面保證:

1、 語(yǔ)言特性(包括數(shù)組的邊界檢查、類(lèi)型轉(zhuǎn)換、取消指針型變量)。

2、 資源訪(fǎng)問(wèn)控制(包括本地文件系統(tǒng)訪(fǎng)問(wèn)、Socket連接訪(fǎng)問(wèn))。

3、 代碼數(shù)字簽名(通過(guò)數(shù)字簽名來(lái)確認(rèn)代碼源以及代碼是否完整)。

Java的源代碼是先編譯成為一種字節(jié)碼的中間代碼,存放這種代碼的文件就是.class的文件。真正執(zhí)行的時(shí)候是將class文件裝載到JVM(虛擬機(jī))中,然后由JVM解釋執(zhí)行的。所以數(shù)組的上下界檢查及合法的類(lèi)型轉(zhuǎn)換是通過(guò)JVM得到保證的。Java通過(guò)一個(gè)類(lèi)裝載器類(lèi)(ClassLoader)將虛擬機(jī)代碼文件(即class文件)裝載到JVM中,當(dāng)完成裝載后,一個(gè)被稱(chēng)做安全管理器(SecurityManager)的類(lèi)開(kāi)始運(yùn)行,例如當(dāng)一個(gè)Applet的class文件被缺省的類(lèi)裝載器裝載到JVM中后,JVM會(huì)立即為它裝載一個(gè)SecurityManager的子類(lèi)AppletSecurity,由這個(gè)管理器來(lái)驗(yàn)證操作。代碼的所有動(dòng)作(例如文件讀寫(xiě))都要先經(jīng)過(guò)驗(yàn)證,只有被該安全管理器接受的動(dòng)作才能完成,否則就會(huì)拋出SecurityException異常。

對(duì)于JDK1.0,權(quán)限被籠統(tǒng)的劃分為兩大塊。一是擁有所有的權(quán)限,一個(gè)是僅擁有"沙箱\\"(sandBox)權(quán)限,這也是普通的Applet所擁有的權(quán)限。這時(shí)本地文件讀寫(xiě)或是與源主機(jī)(Orignal Server)以外的主機(jī)連接都是被禁止的。這種劃分的最大問(wèn)題就是缺乏靈活性。例如我們希望一個(gè)Applet在用戶(hù)信任的情況下能夠?qū)Ρ镜匚募到y(tǒng)的某個(gè)目錄進(jìn)行讀寫(xiě),但并不要通過(guò)Socket與其它主機(jī)連接。這是JDK1.0的權(quán)限劃分就不能達(dá)到要求。JDK1.1后改進(jìn)了權(quán)限的劃分,引入了權(quán)限集(PermissionSet)的概念。

由于我們的文章并不是討論JVM,因此,我們只是對(duì)JVM做一個(gè)簡(jiǎn)單的介紹。如果需要詳細(xì)了解的,可以參考『The JavaTM TMVirtual Machine Specification』。

客觀的看待Java

相對(duì)于其他編程語(yǔ)音,Java有一個(gè)無(wú)庸置疑的優(yōu)點(diǎn):用戶(hù)以及編譯器第一次不必了解生成可執(zhí)行代碼的特定CPU細(xì)節(jié)。Java引入了一個(gè)編譯代碼中間層,叫做字節(jié)代碼,并使用一個(gè)虛擬抽象的機(jī)器,而不是一個(gè)真實(shí)的機(jī)器。當(dāng)Java編譯器結(jié)束了一個(gè)源文件的編譯后,你所得到的不是可以立即在一個(gè)給定平臺(tái)上運(yùn)行的代碼,而是可以在任何真實(shí)的平臺(tái)上運(yùn)行的字節(jié)代碼,唯一的條件就是這個(gè)平臺(tái)要理解和支持Java。這些發(fā)展包含著一個(gè)文化的變革。作為一個(gè)開(kāi)發(fā)人員,你只需要確定Java虛擬機(jī)(JVM)提供的抽象層,不同的OS銷(xiāo)售商負(fù)責(zé)執(zhí)行代碼層,從而將中立于平臺(tái)的字節(jié)代碼映射到主機(jī)平臺(tái)的機(jī)構(gòu)中。在這種情況下,Java似乎是統(tǒng)一分布式計(jì)算機(jī)世界的領(lǐng)袖候選人了!熬帉(xiě)一次,永遠(yuǎn)運(yùn)行”(并且無(wú)論在哪里)就成為Java誘人但卻真實(shí)的口號(hào)。

但我們平心而論,Java的跨平臺(tái)并不是一個(gè)非常誘人的特性?跨平臺(tái)理論的發(fā)展很好地證明了這一點(diǎn)。我們看到,將Java代碼從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)—Java這個(gè)語(yǔ)言最重要和最受吹捧的特點(diǎn)—并不象宣傳的那樣容易。任何Java平臺(tái)都有其自己的虛擬機(jī),它可以理解通用的字節(jié)代碼,并且及時(shí)地將其編譯為本地代碼。矛盾由此產(chǎn)生,不同虛擬機(jī)的執(zhí)行也很不相同,這一點(diǎn)足以使代碼的移植比預(yù)期耗費(fèi)多得多的時(shí)間,而且基本上不是自動(dòng)的。在企業(yè)用戶(hù)的角度上來(lái)說(shuō),也很少會(huì)有企業(yè)會(huì)頻繁的更換平臺(tái),因此這個(gè)特性是否能夠帶來(lái)高價(jià)值是很難評(píng)價(jià)的。

那么,Java模型的好處在哪里呢?首先,Java是一種先進(jìn)的、面向?qū)ο蟮恼Z(yǔ)言,包含了預(yù)防常見(jiàn)錯(cuò)誤的內(nèi)置功能,并在僅僅一兩個(gè)對(duì)象中攜帶了許多經(jīng)常需要用到的功能。與C++相比,Java更易于讀寫(xiě),不容易出錯(cuò),而且更加美觀,但是它速度較慢也不太靈活。想實(shí)現(xiàn)在任何軟件和硬件平臺(tái)上都可虛擬移植,Java盡可能少地使用了公分母模型,也就是說(shuō)放棄了將每個(gè)平臺(tái)開(kāi)發(fā)到極限的能力。第二,虛擬機(jī)的概念本身就是可移植和可共用的,因此對(duì)于分布式環(huán)境來(lái)說(shuō)是理想的。Java對(duì)于為非Windows平臺(tái)開(kāi)發(fā)代碼是最好的語(yǔ)言。

那么對(duì)于Windows平臺(tái)來(lái)說(shuō),Java又怎么樣呢?讓Java適應(yīng)Windows是不可能的,這是由于Sun的許可約束問(wèn)題。但是Java實(shí)在是太吸引人了,Microsoft比誰(shuí)都能更清楚這一點(diǎn)。Microsoft在以前推出的Visual J++證明了這一點(diǎn),但是可惜的是,Microsoft又犯了霸權(quán)的老毛病,Visual J++并不好用。因此,Microsoft又一次采取了“拿來(lái)主義”的手法,很好地利用了Java 的眾多特性,隆重推出了Windows平臺(tái)的新銳力量,它就是相當(dāng)簡(jiǎn)單但十分強(qiáng)大的面向?qū)ο蟮腃#編程語(yǔ)言。C#超過(guò)了C++,它天生就包含了.NET框架類(lèi)庫(kù)中的所有類(lèi),并使語(yǔ)法簡(jiǎn)單化。說(shuō)到這里已經(jīng)有一些離題了,不過(guò)Java也不是說(shuō)在Windows平臺(tái)上就不能夠使用,JDK和大部分的IDE都支持Windows平臺(tái)。

Java技術(shù)的架構(gòu)--J2ME、J2SE和J2EE

通常我們以 JDK(Sun 所開(kāi)發(fā)的一套 Java 開(kāi)發(fā)工具)的版本來(lái)定義 Java 的版本。JDK 1.0 版于 1996 年初公開(kāi),JDK 1.1 版于 1997 年初公開(kāi),JDK 1.2 版于 1998 年底公開(kāi)。基于市場(chǎng)行銷(xiāo)的考量,Sun 在 JDK 1.2 版公開(kāi)后旋即將 Java 改名為「Java 2」,將 JDK 改名為「Java 2 Software Development Kit(以下簡(jiǎn)稱(chēng) J2SDK)」。J2SDK(原稱(chēng) JDK)1.3 于 2000 年 4 月公開(kāi),此版本仍稱(chēng)做「Java 2」。目前 J2SDK 1.4 也已經(jīng)公開(kāi)了,大家可以到Sun的官方Java站點(diǎn)上查閱到大量的JDK1.4的信息。

Java 技術(shù)根據(jù)硬件平臺(tái)與適用環(huán)境的差異,分成幾個(gè)分支。JDK 1.1 的時(shí)代,適用于一般消費(fèi)性電子產(chǎn)品等,嵌入式系統(tǒng)的 Java 平臺(tái)是 PersonalJava 與 EmbeddedJava,此二者并無(wú)明確的界線(xiàn),大致上來(lái)說(shuō),運(yùn)算資源、內(nèi)存、以及顯示裝置比較豐富者,使用 PersonalJava,例如 Set-Top Box、視訊電話(huà) ... 等;反之,資源較有限者使用 EmbeddedJava,例如呼叫器、行動(dòng)電話(huà) ... 等。除了 PC 使用的 Java 平臺(tái)、IA 使用的 PersonalJava 與 EmbeddedJava 平臺(tái)之外,JavaCard 也是一個(gè) Java 平臺(tái),使用于 Smart Card(IC Card)上。

Java 2 出現(xiàn)后,推翻了先前的 PersonalJava 與 EmeddedJava 的分法,改分成 Java 2 Platform Enterprise Edition(簡(jiǎn)稱(chēng) J2EE)、Java 2 Platform Standard Edition(簡(jiǎn)稱(chēng) J2SE)、Java 2 Platform Micro Edition(簡(jiǎn)稱(chēng) J2ME)。J2EE 適用于服務(wù)器,目前已經(jīng)成為企業(yè)運(yùn)算、電子商務(wù)等領(lǐng)域中相當(dāng)熱門(mén)的技術(shù);J2SE 適用于一般的計(jì)算機(jī);J2ME 適用于消費(fèi)性電子產(chǎn)品。除了這三者之外,JavaCard 依然是獨(dú)立的一套標(biāo)準(zhǔn)。

目前,Java技術(shù)的架構(gòu)包括三個(gè)方面:

J2EE(Java 2 Platform Enterprise Edition )—企業(yè)版 (J2EE) 是為面向以企業(yè)為環(huán)境而開(kāi)發(fā)應(yīng)用程序的解決方案。
J2SE(Java 2 Platform Stand Edition)—標(biāo)準(zhǔn)版 (J2SE) 為桌面開(kāi)發(fā)和低端商務(wù)應(yīng)用提供了可行的解決方案。
J2ME(Java 2 Platform Micro Edition )—小型版(J2ME)是致力于消費(fèi)產(chǎn)品和嵌入式設(shè)備的最佳解決方案






J2EE

J2EE已經(jīng)成為開(kāi)發(fā)商創(chuàng)建電子商務(wù)應(yīng)用的事實(shí)標(biāo)準(zhǔn)。正是認(rèn)識(shí)到J2EE平臺(tái)作為一種可擴(kuò)展的、全功能的平臺(tái),可以將關(guān)鍵的企業(yè)應(yīng)用擴(kuò)展到任何Web瀏覽器上并可適合多種不同的Internet數(shù)據(jù)流、可連接到幾乎任何一種傳統(tǒng)數(shù)據(jù)庫(kù)和解決方案、使企業(yè)經(jīng)理根據(jù)多家企業(yè)所提供的產(chǎn)品和技術(shù)開(kāi)發(fā)和部署最佳的解決方案進(jìn)而降低開(kāi)發(fā)網(wǎng)絡(luò)化應(yīng)用的費(fèi)用和復(fù)雜性這一巨大優(yōu)勢(shì),很多廠家都表示將對(duì)J2EE給予支持,并將J2EE技術(shù)作為大型BtoB市場(chǎng)和海量交易處理的安全穩(wěn)定的端到端平臺(tái)。J2EE技術(shù)的基礎(chǔ)就是J2SE標(biāo)準(zhǔn)版,它鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn)。其最終目的就是成為一個(gè)能夠使企業(yè)開(kāi)發(fā)者大幅縮短投放市場(chǎng)時(shí)間的體系結(jié)構(gòu)。它為靈活配置各種多層企業(yè)應(yīng)用軟件,特別是B2B、B2C等電子商務(wù)應(yīng)用,提供了強(qiáng)大的服務(wù)功能。最近又新加了Connector API服務(wù),使企業(yè)應(yīng)用的開(kāi)發(fā)和部署有了一系列成熟的技術(shù)。

J2SE

J2SE是Java 2平臺(tái)的標(biāo)準(zhǔn)版, 它適用于桌面系統(tǒng),提供CORBA標(biāo)準(zhǔn)的ORB技術(shù),結(jié)合Java的RMI支持分布式互操作環(huán)境。它運(yùn)行在Java虛擬機(jī)上。在引入了Java IDL后, J2SE支持IIOP通信。它是高可移植性、異構(gòu)性的實(shí)現(xiàn)環(huán)境和健壯平臺(tái),也是實(shí)現(xiàn)可伸縮性、可移植性、分布式異構(gòu)互操作應(yīng)用軟件開(kāi)發(fā)的標(biāo)準(zhǔn)平臺(tái)。

J2ME

J2ME提供了HTTP高級(jí)Internet協(xié)議,使移動(dòng)電話(huà)能以Client/Server方式直接訪(fǎng)問(wèn)Internet的全部信息,不同的Client訪(fǎng)問(wèn)不同的文件,此外還能訪(fǎng)問(wèn)本地存儲(chǔ)區(qū),提供最高效率的無(wú)線(xiàn)交流。J2ME是Java 2平臺(tái)的微型版,它分成CDC(connected device configuration)和CLDC(connected limited device configuration)兩部分。CDC運(yùn)行在連接虛擬機(jī)上,為手提式計(jì)算機(jī)一類(lèi)較復(fù)雜的移動(dòng)設(shè)備提供應(yīng)用平臺(tái);CLDC運(yùn)行在核心虛擬機(jī)(KVM)上,它實(shí)現(xiàn)MIDP(Mobile Information Device Profile)移動(dòng)信息設(shè)備應(yīng)用平臺(tái),即針對(duì)手機(jī)之類(lèi)的設(shè)備建立移動(dòng)計(jì)算平臺(tái)。

在小型的J2ME(Java 2 Micro Edition)方面,主要是應(yīng)用在內(nèi)存容量小、體積也較小的電子裝置上。小至智能卡、行動(dòng)電話(huà),個(gè)人數(shù)字助理都是運(yùn)用J2ME的最佳平臺(tái)。Java在Palm的應(yīng)用上,PalmOS 4.0內(nèi)含KJava,Sun也推出針對(duì)PalmOS使用的J2ME版本。所以,以既有的Java程序設(shè)計(jì)知識(shí),就可以在Palm PDA上開(kāi)發(fā)出Palm的各式各樣應(yīng)用系統(tǒng)。Java和Palm這兩個(gè)標(biāo)準(zhǔn)平臺(tái)的結(jié)合,將是下一波PDA應(yīng)用的趨勢(shì)。Java在手機(jī)的應(yīng)用上,Nokia、Motorola、Ericsson 都將推出利用J2ME技術(shù)的新手機(jī),所以Java程序設(shè)計(jì)師有更多的平臺(tái)可供施展。此種結(jié)合J2ME及無(wú)線(xiàn)通訊技術(shù)的無(wú)線(xiàn)開(kāi)放應(yīng)用平臺(tái),將提供行動(dòng)商務(wù)極佳的解決方案。

在中型的J2SE(Java 2 Standard Edition)方面,Sun推出一個(gè)新的解決方案,稱(chēng)為Java Web Start。原先的Java Applet是在WebBrowser 中間開(kāi)出一塊方形區(qū)域來(lái)執(zhí)行Java程序,但是這樣在執(zhí)行效能和兼容性上都受限于原有的 Web Browser,F(xiàn)在新推出的Java Web Start則是在操作系統(tǒng)上直接執(zhí)行的Java Application,但是可以在網(wǎng)頁(yè)上激活。如此一來(lái)既可和網(wǎng)頁(yè)結(jié)合,在執(zhí)行上也更快、更有效率。并且,Sun和IBM都將推出支持64位運(yùn)算的Java版本,這對(duì)一般計(jì)算機(jī)上執(zhí)行的客戶(hù)端Java應(yīng)用系統(tǒng)的開(kāi)發(fā)將會(huì)是一大利器。

另外在大型的J2EE(Java 2 Enterprise Edition)應(yīng)用上,可以說(shuō)"J2EE"已經(jīng)成為服務(wù)器運(yùn)算環(huán)境的標(biāo)準(zhǔn)。Java Servlets、JSP(Java ServerPages)、EJB(Enterprise JavaBeans)、JavaMail、JDBC、JMS等,都是各家廠商產(chǎn)品開(kāi)發(fā)的重點(diǎn)方向。J2EE兼容的是一般Intel個(gè)人計(jì)算機(jī)(Linux、Windows.....)、麥金塔以及各家高效能高穩(wěn)定度的UNIX伺服主機(jī),未來(lái)必定成為服務(wù)器運(yùn)算市場(chǎng)上的主要選擇之一。

除了以上這三大Java組合之外,Java和XML的整合也是未來(lái)的重點(diǎn)。Sun公司已經(jīng)推出Java處理XML的標(biāo)準(zhǔn)延伸API - Java API for XML Parsing (JAXP),可以讓各家所制作的XML解析器有接口上的標(biāo)準(zhǔn)。所以在Java程序中,只要了解一套API(JAXP)就可以完全處理XML文件,讓XML的應(yīng)用更加方便。Java這個(gè)跨平臺(tái)的開(kāi)發(fā)環(huán)境,加上XML這個(gè)跨平臺(tái)的資料格式,此種跨平臺(tái)優(yōu)勢(shì)組合勢(shì)將成為未來(lái)訊息傳遞及資料交換的主要應(yīng)用技術(shù),如虎添翼地結(jié)合成一個(gè)最佳的跨平臺(tái)解決方案。

藉由J2SE (Java 2 Standard Edition)可以開(kāi)發(fā)在PC上的應(yīng)用軟件,藉由J2ME (Java 2 Micro Edition) 可以跨足更廣大的家電、智能卡、電子裝置等市場(chǎng),再藉由J2EE (Java 2 Enterprise Edition ) 可以整合伺服主機(jī)運(yùn)算環(huán)境。Java技術(shù)的應(yīng)用范圍幾乎已經(jīng)無(wú)所不在,Java技術(shù)更可以在網(wǎng)際網(wǎng)絡(luò)及電子商務(wù)各領(lǐng)域中,提供全方位的解決方案。

隨著應(yīng)用領(lǐng)域的不同,Java 有許多 API(Application Programming Interface),這些 API 分成三大類(lèi):

· Java Core API:由 Sun 制定的基本 API,任何 Java 平臺(tái)都必須提供。

· Java Standard Extension API (javax):由 Sun 制定的擴(kuò)充 API,Java 平臺(tái)可以選擇性地提供或加裝。

· 廠商或組織所提供的 API:由各家公司或組織所提供。

其中 Core API 和 Standard Extension API 已經(jīng)逐漸涵蓋了大部份的信息應(yīng)用領(lǐng)域,例如多媒體、數(shù)據(jù)庫(kù)、Web、企業(yè)運(yùn)算、語(yǔ)音、實(shí)時(shí)系統(tǒng)、網(wǎng)絡(luò)、電話(huà)、影像處理、加解密、GUI、分布式運(yùn)算 ......。如果你有某項(xiàng)需求尚未有標(biāo)準(zhǔn)的 Java API 可遵循,你可以向 Sun 提出制定新 API 的請(qǐng)求。經(jīng)過(guò)審核之后,你的要求可能會(huì)通過(guò)、駁回 ...... 等。如果通過(guò),就會(huì)開(kāi)始進(jìn)入制定 API 的程序。Java API 的制定過(guò)程因?yàn)楣_(kāi),且經(jīng)過(guò)許多業(yè)界技術(shù)領(lǐng)先公司的共同參與,所以相當(dāng)完善而優(yōu)異。


EJB的生態(tài)環(huán)境

在sun公司提供的EJB規(guī)范中,我們一個(gè)完整的基于EJB的分布式計(jì)算結(jié)構(gòu)由六個(gè)角色組成,這六個(gè)角色可以由不同的開(kāi)發(fā)商提供,每個(gè)角色所作的工作必須遵循Sun公司提供的EJB規(guī)范,以保證彼此之間的兼容性。


EJB組件開(kāi)發(fā)者: 開(kāi)發(fā)并銷(xiāo)售 EJB。
應(yīng)用組合者: 將不同的 EJB 搭建成應(yīng)用。
部署者: 使用相應(yīng)工具在運(yùn)行環(huán)境下配置 EJB。
EJB 服務(wù)器提供者: 開(kāi)發(fā)并銷(xiāo)售 EJB 服務(wù)器
EJB 容器供應(yīng)商: 開(kāi)發(fā)并銷(xiāo)售 EJB 容器
系統(tǒng)管理員: 監(jiān)視運(yùn)行時(shí)情況\r

1、EJB組件開(kāi)發(fā)者(Enterprise Bean Provider)

EJB組件開(kāi)發(fā)者負(fù)責(zé)開(kāi)發(fā)執(zhí)行商業(yè)邏輯規(guī)則的EJB組件,開(kāi)發(fā)出的EJB組件打包成ejb-jar文件。EJB組件開(kāi)發(fā)者負(fù)責(zé)定義EJB的remote和home接口,編寫(xiě)執(zhí)行商業(yè)邏輯的EJB class,提供部署EJB的部署文件(deployment descriptor)。部署文件包含EJB的名字,EJB用到的資源配置,如JDBC等。EJB組件開(kāi)發(fā)者是典型的商業(yè)應(yīng)用開(kāi)發(fā)領(lǐng)域?qū)<摇?br>
EJB組件開(kāi)發(fā)者不需要精通系統(tǒng)級(jí)的編程,因此,不需要知道一些系統(tǒng)級(jí)的處理細(xì)節(jié),如事務(wù)、同步、安全、分布式計(jì)算等。

2、應(yīng)用組合者(Application Assembler)

應(yīng)用組合者負(fù)責(zé)利用各種EJB組合一個(gè)完整的應(yīng)用系統(tǒng)。應(yīng)用組合者有時(shí)需要提供一些相關(guān)的程序,如在一個(gè)電子商務(wù)系統(tǒng)里,應(yīng)用組合者需要提供JSP(Java Server Page)程序。

應(yīng)用組合者必須掌握所用的EJB的home和remote接口,但不需要知道這些接口的實(shí)現(xiàn)。

3、部署者(Deployer)

部署者負(fù)責(zé)將ejb-jar文件部署到用戶(hù)的系統(tǒng)環(huán)境中。系統(tǒng)環(huán)境包含某種EJB Server和EJB Container。部署者必須保證所有由EJB組件開(kāi)發(fā)者在部署文件中聲明的資源可用,例如,部署者必須配置好EJB所需的數(shù)據(jù)庫(kù)資源。

部署過(guò)程分兩步:部署者首先利用EJB Container提供的工具生成一些類(lèi)和接口,使EJB Container能夠利用這些類(lèi)和接口在運(yùn)行狀態(tài)管理EJB。 部署者安裝EJB組件和其他在上一步生成的類(lèi)到EJB Container中。 部署者是某個(gè)EJB運(yùn)行環(huán)境的專(zhuān)家。

某些情況下,部署者在部署時(shí)還需要了解EJB包含的業(yè)務(wù)方法,以便在部署完成后,寫(xiě)一些簡(jiǎn)單的程序測(cè)試。

4、EJB 服務(wù)器提供者(EJB Server Provider)

EJB 服務(wù)器提供者是系統(tǒng)領(lǐng)域的專(zhuān)家,精通分布式交易管理,分布式對(duì)象管理及其它系統(tǒng)級(jí)的服務(wù)。EJB 服務(wù)器提供者一般由操作系統(tǒng)開(kāi)發(fā)商、中間件開(kāi)發(fā)商或數(shù)據(jù)庫(kù)開(kāi)發(fā)商提供。

在目前的EJB規(guī)范中,假定EJB 服務(wù)器提供者和EJB 容器提供者來(lái)自同一個(gè)開(kāi)發(fā)商,所以,沒(méi)有定義EJB 服務(wù)器提供者和EJB容器提供者之間的接口標(biāo)準(zhǔn)。

5、EJB 容器提供者(EJB Container Provider)

EJB 容器提供者提供以下功能:

提供EJB部署工具為部署好的EJB組件提供運(yùn)行環(huán)境 。EJB容器負(fù)責(zé)為EJB提供交易管理,安全管理等服務(wù)。

EJB 容器提供者必須是系統(tǒng)級(jí)的編程專(zhuān)家,還要具備一些應(yīng)用領(lǐng)域的經(jīng)驗(yàn)。EJB 容器提供者的工作主要集中在開(kāi)發(fā)一個(gè)可伸縮的,具有交易管理功能的集成在EJB 服務(wù)器中的容器。EJB 容器提供者為EJB組件開(kāi)發(fā)者提供了一組標(biāo)準(zhǔn)的、易用的API訪(fǎng)問(wèn)EJB 容器,使EJB組件開(kāi)發(fā)者不需要了解EJB服務(wù)器中的各種技術(shù)細(xì)節(jié)。

EJB容器提供者負(fù)責(zé)提供系統(tǒng)監(jiān)測(cè)工具用來(lái)實(shí)時(shí)監(jiān)測(cè)EJB容器和運(yùn)行在容器中的EJB組件狀態(tài)。

6、系統(tǒng)管理員(System Administrator)

系統(tǒng)管理員負(fù)責(zé)為EJB服務(wù)器和容器提供一個(gè)企業(yè)級(jí)的計(jì)算和網(wǎng)絡(luò)環(huán)境。

系統(tǒng)管理員負(fù)責(zé)利用EJB 服務(wù)器和容器提供的監(jiān)測(cè)管理工具監(jiān)測(cè)EJB組件的運(yùn)行情況。

將責(zé)任分離的另一個(gè)好處是在代碼級(jí)上,可以將基于EJBs的系統(tǒng)邏輯的分派給更適合的專(zhuān)家。SUN的EJB規(guī)范建議使用幾個(gè)獨(dú)立的角色,對(duì)于確定運(yùn)作環(huán)境的責(zé)任鏈?zhǔn)欠浅V匾。舉例說(shuō),EJB提供者是由商業(yè)專(zhuān)家和分析人員扮演的角色,他們確定一個(gè)組織內(nèi)的最佳信息流程。但是仍舊有Second Domain Expert,如應(yīng)用程序匯編人員,他們集成不同的EJB組件并確保它可以確保滿(mǎn)足應(yīng)用程序的需求。

還有兩種角色歸入到系統(tǒng)級(jí)的部分,第一個(gè)是配置人員,他們負(fù)責(zé)實(shí)際的安裝和配置基于EJB的系統(tǒng)。這需要有設(shè)置目錄服務(wù)和集成現(xiàn)有應(yīng)用程序的經(jīng)驗(yàn)。第二個(gè)是系統(tǒng)管理員,他們要提供全天的監(jiān)視和支持,確保應(yīng)用程序正常運(yùn)作。盡管系統(tǒng)管理員這個(gè)角色不需要是Java編程專(zhuān)家,但是他需要能夠應(yīng)付以下問(wèn)題:

設(shè)置Java Virtual Machine (JVM)并關(guān)聯(lián)系統(tǒng)環(huán)境參數(shù)(如:CLASSPATH)
使用Java Archive (jar)命令保存類(lèi)文件
懂得WEB服務(wù)器和Servlet的工作原理。
要能通過(guò)監(jiān)視運(yùn)行中程序的狀態(tài)確定優(yōu)化方法。

很明顯,有些角色是可以交叉的,比如系統(tǒng)管理員和配置人員。盡管配置人員可能是將類(lèi)文件復(fù)制到服務(wù)器而系統(tǒng)管理員需要確定配置人員是否復(fù)制到了正確的位置。


標(biāo)簽:漫談EJB (1)