自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

精通EJB組件和EJB容器

開(kāi)發(fā) 后端
本文向您介紹了EJB組件和EJB容器,以及EJB在J2EE中的配置與使用,包括J2EE接口等基礎(chǔ)知識(shí)。

技術(shù)的發(fā)展是順應(yīng)世界變化的趨勢(shì)的,從C/S 過(guò)渡到B/S模式,從客戶端的角度考慮企業(yè)級(jí)應(yīng)用或者說(shuō)電子商務(wù)領(lǐng)域不在關(guān)心客戶端維護(hù)問(wèn)題,這個(gè)任務(wù)已經(jīng)交給了任何一臺(tái)PC都會(huì)有的瀏覽器去維護(hù);從服務(wù)器端的角度考慮,以往C/S中的TCP/IP協(xié)議實(shí)現(xiàn)載體ServerSocket被Web Server Container所取代,例如大家都很熟悉的Tomcat、JBoss、WebLogic等等。總之一切的轉(zhuǎn)變都是為了使得Java技術(shù)能更好的為人類(lèi)生產(chǎn)生活所服務(wù)。

有人會(huì)問(wèn),直接去學(xué)J2ee跳過(guò)J2se行否?筆者是肯定不贊成的,實(shí)際上確實(shí)有人走這條路,但筆者自身體會(huì)是正是由于J2se的基礎(chǔ)很牢固,才會(huì)導(dǎo)致在J2ee學(xué)習(xí)的道路上順風(fēng)順?biāo)?,知識(shí)點(diǎn)上不會(huì)有什么迷惑的地方。舉個(gè)簡(jiǎn)單的例子吧:

筆者曾經(jīng)跟大學(xué)同學(xué)討論下面這兩種寫(xiě)法的區(qū)別:
ArrayList list = new ArrayList(); //筆者不說(shuō)反對(duì),但至少不贊成
List list = new ArrayList(); //筆者支持
曾經(jīng)筆者跟同學(xué)爭(zhēng)論了幾個(gè)小時(shí),他非說(shuō)第一種寫(xiě)法更科學(xué),第二種完全沒(méi)有必要。我無(wú)法完全說(shuō)服他,但筆者認(rèn)為良好的習(xí)慣和意識(shí)是任何時(shí)候都應(yīng)該針對(duì)接口編程,以達(dá)到解耦合和可擴(kuò)展性的目的。下面就以接口開(kāi)始進(jìn)入J2ee的世界吧:

1. J2EE與接口

每一個(gè)版本的J2EE都對(duì)應(yīng)著一個(gè)確定版本的 JDK,J2ee1.4對(duì)應(yīng)Jdk1.4,現(xiàn)在比較新的是JDK5.0,自然也會(huì)有J2EE 5.0。其實(shí)筆者一直在用的是J2EE1.4,不過(guò)沒(méi)什么關(guān)系,大家可以下任何一個(gè)版本的J2ee api來(lái)稍微瀏覽一下。筆者想先聲明一個(gè)概念,J2ee也是源自Java,所以底層的操作依然調(diào)用到很多J2se的庫(kù),所以才建議大家先牢牢掌握J(rèn)2se 的主流技術(shù)。

J2ee api有一個(gè)特點(diǎn),大家比較熟悉的幾個(gè)包java.jms、javax.servlet.http、javax.ejb等都以interface居多,實(shí)現(xiàn)類(lèi)較少。其實(shí)大家真正在用的時(shí)候百分之六十以上都在反復(fù)的查著javax.servlet.http這個(gè)包下面幾個(gè)實(shí)現(xiàn)類(lèi)的api函數(shù),其他的包很少問(wèn)津。筆者建議在學(xué)習(xí)一種技術(shù)之前,對(duì)整體的框架有一個(gè)了解是很有必要的,J2ee旨在通過(guò)interface的聲明來(lái)規(guī)范實(shí)現(xiàn)的行為,任何第三方的廠商想要提供自己品牌的實(shí)現(xiàn)前提也是遵循這些接口定義的規(guī)則。如果在從前J2se學(xué)習(xí)的道路上對(duì)接口的理解很好的話,這里的體會(huì)將是非常深刻的,舉個(gè)簡(jiǎn)單的例子:

 

  1. public interface Mp3{  
  2. public void play();  
  3. public void record();  
  4. public void stop();  

如果我定義這個(gè)簡(jiǎn)單的接口,發(fā)布出去,規(guī)定任何第三方的公司想推出自己的名字為Mp3的產(chǎn)品都必須實(shí)現(xiàn)這個(gè)接口,也就是至少提供接口中方法的具體實(shí)現(xiàn)。這個(gè)意義已經(jīng)遠(yuǎn)遠(yuǎn)不止是面向?qū)ο蟮亩鄳B(tài)了,只有廠商遵循 J2ee的接口定義,世界上的J2ee程序員才能針對(duì)統(tǒng)一的接口進(jìn)行程序設(shè)計(jì),最終不用改變代碼只是因?yàn)槭褂昧瞬煌瑥S商的實(shí)現(xiàn)類(lèi)而有不同的特性罷了,本質(zhì)上說(shuō),無(wú)論哪一種廠商實(shí)現(xiàn)都完成了職責(zé)范圍內(nèi)的工作。這個(gè)就是筆者想一直強(qiáng)調(diào)的,針對(duì)接口編程的思想。

接口到底有什么好處呢?我們這樣設(shè)想,現(xiàn)在有 AppleMp3、SonyMp3、SamsungMp3都實(shí)現(xiàn)了這個(gè)Mp3的接口,于是都有了play、 record、stop這三個(gè)功能。我們將Mp3產(chǎn)品座位一個(gè)組件的時(shí)候就不需要知道它的具體實(shí)現(xiàn),只要看到接口定義知道這個(gè)對(duì)象有3個(gè)功能就可以使用了。那么類(lèi)似下面這樣的業(yè)務(wù)就完全可以在任何時(shí)間從3個(gè)品牌擴(kuò)展到任意個(gè)品牌,開(kāi)個(gè)玩笑的說(shuō),項(xiàng)目經(jīng)理高高在上的寫(xiě)完10個(gè)接口里的方法聲明,然后就丟給手下的程序員去寫(xiě)里面的細(xì)節(jié),由于接口已經(jīng)統(tǒng)一(即每個(gè)方法傳入和傳出的格式已經(jīng)統(tǒng)一),經(jīng)理只需關(guān)注全局的業(yè)務(wù)就可以天天端杯咖啡走來(lái)走去了,^_^:

public Mp3 create();
public void copy(Mp3 mp3);
public Mp3 getMp3();

最后用一個(gè)簡(jiǎn)單的例子說(shuō)明接口:一個(gè)5號(hào)電池的手電筒,可以裝入任何牌子的5號(hào)電池,只要它符合5號(hào)電池的規(guī)范,裝入之后任何看不到是什么牌子,只能感受到手電筒在完成它的功能。那么生產(chǎn)手電筒的廠商和生產(chǎn)5號(hào)電池的廠商就可以完全解除依賴關(guān)系,可以各自自由開(kāi)發(fā)自己的產(chǎn)品,因?yàn)樗鼈兌甲袷?號(hào)電池應(yīng)有的形狀、正負(fù)極位置等約定。這下大家能對(duì)接口多一點(diǎn)體會(huì)了么?

2. EJB組件和EJB容器

針對(duì)接口是筆者特意強(qiáng)調(diào)的 J2ee學(xué)習(xí)之路必備的思想,另外一個(gè)就是比較常規(guī)的組件和容器的概念了。很多教材和專(zhuān)業(yè)網(wǎng)站都說(shuō)J2EE的核心是一組規(guī)范與指南,強(qiáng)調(diào)J2ee的核心概念就是組件+容器,這確實(shí)是無(wú)可厚非的。隨著越來(lái)越多的J2ee框架出現(xiàn),相應(yīng)的每種框架都一般有與之對(duì)應(yīng)的容器。

EJB容器,是用來(lái)管理組件行為的一個(gè)集合工具,組件的行為包括與外部環(huán)境的交互、組件的生命周期、組件之間的合作依賴關(guān)系等等。J2ee包含的容器種類(lèi)大約有 Web容器、Application Client容器、EJB容器、Applet客戶端容器等。但在筆者看來(lái),現(xiàn)在容器的概念變得有點(diǎn)模糊了,大家耳熟能詳是那些功能強(qiáng)大的開(kāi)源框架,比如 Hibernate、Struts2、Spring、JSF等,其中Hibernate就基于JDBC的基礎(chǔ)封裝了對(duì)事務(wù)和會(huì)話的管理,大大方便了對(duì)數(shù)據(jù)庫(kù)操作的繁瑣代碼,從這個(gè)意義上來(lái)說(shuō)它已經(jīng)接近容器的概念了,EJB的實(shí)體Bean也逐漸被以Hibernate為代表的持久化框架所取代。

EJB組件,本意是指可以重用的代碼單元,一般代表著一個(gè)或者一組可以獨(dú)立出來(lái)的功能模塊,在J2ee中組件的種類(lèi)有很多種,比較常見(jiàn)的是EJB組件、DAO組件、客戶端組件或者應(yīng)用程序組件等,它們有個(gè)共同特點(diǎn)是分別會(huì)打包成.war,.jar,.jar,.ear,每個(gè)組件由特定格式的xml描述符文件進(jìn)行描述,而且服務(wù)器端的組件都需要被部署到應(yīng)用服務(wù)器上面才能夠被使用。

稍微理解完組件和容器,還有一個(gè)重要的概念就是分層模型,最著名的當(dāng)然是MVC三層模型。在一個(gè)大的工程或項(xiàng)目中,為了讓前臺(tái)和后臺(tái)各個(gè)模塊的編程人員能夠同時(shí)進(jìn)行工作提高開(kāi)發(fā)效率,最重要的就是實(shí)現(xiàn)層與層之間的耦合關(guān)系,許多分層模型的宗旨和開(kāi)源框架所追求的也就是這樣的效果。在筆者看來(lái),一個(gè)完整的 Web項(xiàng)目大概有以下幾個(gè)層次:

a) 表示層(Jsp、Html、Javascript、Ajax、Flash等等技術(shù)對(duì)其支持)
b) 控制層(Struts、JSF、WebWork等等框架在基于Servlet的基礎(chǔ)上支持,負(fù)責(zé)把具體的請(qǐng)求數(shù)據(jù)(有時(shí)卸載重新裝載)導(dǎo)向適合處理它的模型層對(duì)象)
c) 模型層(筆者認(rèn)為目前最好的框架是Spring,實(shí)質(zhì)就是處理表示層經(jīng)由控制層轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù),包含著大量的業(yè)務(wù)邏輯)
d) 數(shù)據(jù)層(Hibernate、JDBC、EJB等,由模型層處理完了持久化到數(shù)據(jù)庫(kù)中)

當(dāng)然,這僅僅是筆者個(gè)人的觀點(diǎn),僅僅是供大家學(xué)習(xí)做一個(gè)參考,如果要實(shí)現(xiàn)這些層之間的完全分離,那么一個(gè)大的工程,可以僅僅通過(guò)增加人手就來(lái)完成任務(wù)。雖然《人月神話》中已經(jīng)很明確的闡述了增加人手并不能是效率增加,很大程度上是因?yàn)楸舜俗龅墓ぷ饔许樞蛏系囊蕾囮P(guān)系或者說(shuō)難度和工作量上的巨大差距。當(dāng)然理想狀態(tài)在真實(shí)世界中是不可能達(dá)到的,但我們永遠(yuǎn)應(yīng)該朝著這個(gè)方向去不斷努力。最開(kāi)始所提倡的針對(duì)接口來(lái)編程,哪怕是小小的細(xì)節(jié),寫(xiě)一條List list= = new ArrayList()語(yǔ)句也能體現(xiàn)著處處皆使用接口的思想在里面。Anyway,這只是個(gè)開(kāi)篇,筆者會(huì)就自己用過(guò)的J2ee技術(shù)和框架再細(xì)化談一些經(jīng)驗(yàn)。

【編輯推薦】

  1. Eclipse+JBoss+EJB3配置文件發(fā)布Session Bean
  2. 為什么我喜歡EJB 3.0并且尤其喜歡EJB 3.1
  3. 關(guān)于EJB詳細(xì)概述(上)
  4. Java使用EJB容器的詳細(xì)概述
  5. 在Eclipse+JBoss+EJB3使用Session Bean的本地接口
責(zé)任編輯:佚名 來(lái)源: 百度博客
相關(guān)推薦

2009-06-11 16:01:17

EJB容器

2009-06-11 16:53:09

什么是EJBEJB

2009-06-11 14:52:20

EJB組件MyEclipse

2009-06-22 16:19:45

JavaBeansEJBPOJO

2009-06-11 14:11:01

EJB容器Java

2009-06-12 12:46:59

EJB3.0

2009-06-26 14:37:10

EJB和Spring

2009-06-26 14:29:03

2009-06-11 16:25:44

EJB2.0EJB

2009-06-12 09:41:07

EJB3.0Spring

2009-06-04 17:33:08

EJB 3.1EJB 3.0

2009-06-12 11:06:35

EJB技術(shù)

2009-06-25 16:35:12

EJB技術(shù)

2009-06-26 14:21:08

JDOEJB CMPHibernate

2009-06-06 19:26:50

java EJB詳細(xì)概述

2009-06-06 19:29:16

java EJB詳細(xì)概述

2009-06-26 14:54:18

Spring支持EJB

2009-06-12 11:46:39

JavaBeanEJB

2009-06-22 16:59:33

POJOSpringEJB 3.0

2009-06-12 09:07:01

EJB入門(mén)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)