欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
EJB 3.0簡(jiǎn)介
EJB 3.0簡(jiǎn)介

SUN中國軟件技術(shù)中心 王強 wynne.wang@sun.com

1 簡(jiǎn)化開(kāi)發(fā)的目標

1.1我們的目標

EJB3.0是當前很多人談?wù)摰脑?huà)題,企業(yè)軟件開(kāi)發(fā)的一個(gè)關(guān)鍵是,提供一個(gè)盡量簡(jiǎn)單的的應用框架:它可以使開(kāi)發(fā)人員不用關(guān)注于復雜的問(wèn)題,比如事務(wù)處理、安全和持久化等??梢约芯﹃P(guān)注于商業(yè)邏輯,而不用關(guān)心那些低層的技術(shù)細節,從而提高開(kāi)發(fā)者的效率,得到高質(zhì)量的軟件。這也是制定EJB 3.0規范的目標,簡(jiǎn)化開(kāi)發(fā)!


1.2 當前的問(wèn)題


EJB3.0希望開(kāi)發(fā)人員能夠從這種新的開(kāi)發(fā)模式中受益,更好地推進(jìn)J2EE的應用. 隨著(zhù)JAVA不斷的進(jìn)步和發(fā)展,越來(lái)越多的企業(yè)選擇J2EE作為它們的解決方案,J2EE體系結構提供一個(gè)簡(jiǎn)化的中間層集成框架來(lái)滿(mǎn)足應用的需求。然而,對于一般的開(kāi)發(fā)人員,目前J2EE 1.4下的EJB 2.1 框架有些過(guò)于復雜了。 按照EJB2.1規范的定義,EJB組件必須事先很多的接口, 比如Home接口、Remote接口、local 接口,等等.還要針對各種應用類(lèi)型定義許多的xml描述文件。當我們需要訪(fǎng)問(wèn)某個(gè)組件或者服務(wù)的時(shí)候,必須通過(guò)JDNI查找,通過(guò)名字綁定服務(wù),才能找到我們需要的對象。

比如我們要使用某個(gè)EJB shopping cart, 就要首先實(shí)現一個(gè)initial context,然后通過(guò)他查找這個(gè)EJB 的home 接口,然后調用home街口的create方法,得到一個(gè)EJB object, 最后調用這個(gè)EJB object的商務(wù)方法. 下面是一個(gè)例子:
// EJB 2.1 Client view of the ShoppingCart Bean
...
Context initialContext = new InitialContext();
ShoppingCartHome myCartHome = (ShoppingCartHome)
initialContext.lookup(“JAVA:comp/env/ejb/cart”);
ShoppingCart myCart= myCartHome.create();
//Use the Bean
Collection widgets = myCart.startToShop(Widgets )
...
// Don‘t forget code to handle JAVAx.ejb.CreateException
...
EJB2.1的規范還要求我們必須實(shí)現Javax.EJB里面定義的接口, 實(shí)現里面的Methods比如 EJBCreate(), EJBPassivate(), and EJBActivate()。大多數情況下這些方法是不需要開(kāi)發(fā)人員作任何修改的。這些規定實(shí)際上都和真正核心的商務(wù)邏輯沒(méi)什么關(guān)系,都只是一些技術(shù)模板,規定了開(kāi)發(fā)人員必須按照這樣的模板進(jìn)行開(kāi)發(fā). 比如下面這段代碼:

人們開(kāi)始思考,怎么樣才能把EJB的開(kāi)發(fā)變的更加簡(jiǎn)單,更好的利用這種技術(shù). 當前正在制定的EJB 3.0的標準的目標就是簡(jiǎn)化開(kāi)發(fā), 讓更多的開(kāi)發(fā)人員被它的易用和強大功能所吸引過(guò)來(lái),喜愛(ài)這項技術(shù)。為了達到這個(gè)目標,要做的第一件事情,也是最重要的事情,就是從一個(gè)開(kāi)發(fā)人員的角度,將EJB的使用盡量的簡(jiǎn)化。

1.3 JCP專(zhuān)家組的工作


這個(gè)工作是由EJB3.0 專(zhuān)家組來(lái)完成的。我們知道JAVA的開(kāi)發(fā)和推動(dòng)是由一個(gè)開(kāi)放的組織來(lái)完成的,這個(gè)組織的名字叫做JAVA Community Process。簡(jiǎn)稱(chēng)JCP. SUN的理念是: 創(chuàng )新無(wú)處不在. 所以JCP小組從世界的每個(gè)角落聽(tīng)取關(guān)于JAVA的建議,將各方面對JAVA的要求通過(guò)制定JSR(JAVA Specification Request )形式確定下來(lái). EJB 3.0規范的JSR編號是 220. 整個(gè)專(zhuān)家組的制定成員包括J2EE 注冊用戶(hù), 應用服務(wù)器的開(kāi)發(fā)廠(chǎng)商和J2EE社區的成員.


簡(jiǎn)化一個(gè)現有的技術(shù),尤其是得到廣泛的開(kāi)發(fā)人支持的技術(shù),比如EJB, 不是一個(gè)簡(jiǎn)單的工作. 作為鋪墊,專(zhuān)家組進(jìn)行了大量的準備工作,檢驗了EJB技術(shù)的復雜性,當前EJB流域流行的各種模式和反模式,以及從客戶(hù)和開(kāi)發(fā)人員來(lái)的各種需求。開(kāi)發(fā)人員和用戶(hù)根據實(shí)際的需要,希望EJB能夠提供他們滿(mǎn)意的特性.
檢驗結果發(fā)現,大多數情況下,人們不需要更高級的技術(shù),而是需要更簡(jiǎn)化的技術(shù),來(lái)簡(jiǎn)化當前的開(kāi)發(fā)模式。而不是像以前的EJB發(fā)布一樣,在技術(shù)復雜度上的提高。定義一個(gè)新技術(shù),不僅對老的技術(shù)有一定的更新, 也要能充分并容老的技術(shù), 提供一定的向后兼容性. 因為采用這些技術(shù)的企業(yè),已經(jīng)在這些技術(shù)上投資了很多. 如果因為技術(shù)的更新就使得對應的IT系統和數據變得不能使用,是一件非常糟糕的事情.


所以,定義了EJB3.0規范的同時(shí),如何支持現有的EJB技術(shù)是非常必要的. 要保證現有的EJB API是持續可用的, 還要和新的EJB3.0 API結合起來(lái), 對早期的API應該繼續提供支持而不是標記為不贊成使用

1.4 標注的新功能


EJB3.0的很多新特性是通過(guò)JAVA SE5.0來(lái)實(shí)現的。這里我們就要談到JAVA SE 5.0,它所提供的許多特性,其中最有趣的一點(diǎn)就是標注(Annotation)的功能。我們知道以前的JAVA語(yǔ)言都是命令格式的, 比如a.b(), 表示讓類(lèi)a做事情b, 但是很多時(shí)候我們只是需要對某個(gè)對象做一些注解,比如對某個(gè)類(lèi)標記為可持續化的Serializable. 這只是一個(gè)標記,為了以后的處理提供說(shuō)明,本身不需要做任何操作。
在Deploy 的時(shí)候, 提供了很多說(shuō)明的XML文件,比如部署描述文件,里面說(shuō)明了引用的EJB的名字,接口, 以及當前EJB的Transaction Type等等信息. 所有這些信息都是說(shuō)明性的,而不是命令性的. 用來(lái)對某個(gè)對象的某個(gè)屬性坐一段說(shuō)明. 因此,有一個(gè)非常有趣的想法,能不能通過(guò)對JAVA語(yǔ)言的擴展,結合標注和命令這兩者的優(yōu)點(diǎn) ?


這也是有一個(gè)專(zhuān)家組在JCP的組織內完成的, JSR規范的編號是JSR 175, 為JAVA SE 5.0支持注解(Annotation)的功能. 這個(gè)規范為EJB3.0 的簡(jiǎn)化實(shí)現提供了一些基本的支持, 也是最關(guān)鍵的支持. 標注可以有自己的屬性,也可以定義自己的持續時(shí)間,表示這段信息是否保存到 源代碼中,還是一直持續到Class中,或者一直保持到運行時(shí)間. 標注有自己的缺省值.大多數情況下,無(wú)須說(shuō)明我們就可以推算出來(lái)這個(gè)對象的行為?!?br>2 輕松的實(shí)現開(kāi)發(fā)

2.1 減輕開(kāi)發(fā)人員的負擔

EJB3.0的簡(jiǎn)化工作包括下面幾個(gè)部分:
提供一個(gè)簡(jiǎn)化的API, 包括對EJB的定義,對EJB的引用等等
減少開(kāi)發(fā)的類(lèi)數目,不再需要那么多的interface
相關(guān)性注入
簡(jiǎn)化的查詢(xún)機制
從開(kāi)發(fā)人員的角度不必要使用部署描述文件, 很多的工作可以放到代碼里面用標注來(lái)說(shuō)明,比如Entity Bean 的Transaction Type
簡(jiǎn)化的持久化功能
簡(jiǎn)化和改善數據對象的O/R Mapping.


標注可以應用到編程語(yǔ)言的一些基本元素上,比如類(lèi),方法,變量,包等等. 當我們在代碼中使用了這些標注, 根據這個(gè)標注對應的持續策略, 它可以被編譯到Class 文件中去,或者一直保持到運行的時(shí)候。大多數在 EJB 3.0 中定義的標注都是Runtime保持策略, 這樣做的好處是提供了最大的靈活性。而且由于大量工作放到了運行的時(shí)候來(lái)做,也減少一部分Deploy的工作。


我們通過(guò)定義缺省的語(yǔ)法來(lái)說(shuō)明大多數常見(jiàn)的情況。開(kāi)發(fā)人員不需要再專(zhuān)門(mén)說(shuō)明常見(jiàn)的情況,“OK, 沒(méi)問(wèn)題,缺省的設置就已經(jīng)可以滿(mǎn)足需要了“ 這樣,開(kāi)發(fā)人員的工作大大減輕了。
這也引出來(lái)了EJB3.0中的一個(gè)很有意思的概念 "Configuration By Exception" --只有在例外的情況下才需要我們的參與.


EJB3.0的目標是簡(jiǎn)化開(kāi)發(fā)人員的工作,讓他們專(zhuān)注于商務(wù)應用的開(kāi)發(fā)而不是把精力放到很多繁瑣的例行工作上,這些工作可以交給Container來(lái)完成。EJB通過(guò)注入來(lái)指定自己需要的資源,不用再寫(xiě)那些麻煩的方法. 將對象的創(chuàng )建和獲取提取到外部。由外部容器提供需要的組件。這樣,開(kāi)發(fā)人員只用在開(kāi)始的時(shí)候定義,說(shuō)我需要這個(gè)資源, 后面就可以直接使用這個(gè)資源, 這樣會(huì )大大的簡(jiǎn)化開(kāi)發(fā), 因為開(kāi)發(fā)人員只用關(guān)心如何使用這個(gè)對象和商務(wù)方法, 而不用擔心其他的技術(shù)細節。

2.2 拋開(kāi)繁瑣的細節
下面我們看看都作了那些簡(jiǎn)化。我們的目的是把那些繁瑣的技術(shù)細節隱藏起來(lái),程序開(kāi)發(fā)人員只用關(guān)心自己的商務(wù)邏輯代碼,而不用關(guān)心那些復雜的技術(shù)模板,必須實(shí)現的接口等,哪怕這些方法和接口根本不需要實(shí)現.

不再需要EJB的部件接口
每個(gè)EJB 都只是一個(gè)普通的JAVA Class
不再需要home接口, 我們不再用home 來(lái)創(chuàng )建這個(gè)EJB
不再需要實(shí)現javax.ejb.EnterpriseBean借口
對于需要在回調方法里實(shí)現的部分,我們采用標注的方式說(shuō)明一個(gè)方法為回調方法
不再需要使用復雜的JNDI名字調用機制,對于需要服務(wù)或者資源的地方
我們采用了相關(guān)性注入的方法,另外也可以通過(guò)簡(jiǎn)化的lookup方法來(lái)查找資源

下面讓我們看一個(gè)簡(jiǎn)單的無(wú)狀態(tài)SessionBean的例子。無(wú)狀態(tài)session Bean是最簡(jiǎn)單也是最常用 Bean,很多初學(xué)EJB的人都從無(wú)狀態(tài)Session Bean開(kāi)始。如何讓無(wú)狀態(tài)Session Bean 變的簡(jiǎn)單易用成為一個(gè)非常有意義的話(huà)題。

前面假設我們已經(jīng)定義了相關(guān)的interface, 這個(gè)EJB2.1的的功能是對員工的工資做處理,打開(kāi)一個(gè)數據庫連接,進(jìn)行員工工資信息的某些操作,等等.

// EJB 2.1
public Class PayrollBean implements JAVAx.ejb.SessionBean
{
SessionContext ctx;
DataSource empDB;
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
public void ejbCreate() {
Context initialContext = new InitialContext();
empDB = (DataSource)initialContext.lookup( JAVA:comp/env/jdbc/empDB );
}
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void setBenefitsDeduction (int empId, double deduction) {
...
Connection conn = empDB.getConnection();
...
}
...
}
// NOTE deployment descriptor needed


這里我們首先要實(shí)現一個(gè) sessionBean interface,保持一個(gè)對sessioncontext的引用,然后是在EJBcreate 方法里面我們調用JNDI得到一個(gè)datasource。 后面我們必須要定義一些回調方法,雖然這些方法我們不會(huì )實(shí)現任何邏輯。然后在 商務(wù)方法里面,我們打開(kāi)一個(gè)數據庫連接。

注意,我們還沒(méi)有完。為了使用這個(gè)EJB, 必須加上x(chóng)ml的部署描述文件打好包。

下面是一個(gè)常見(jiàn)的部署描述文件可以是這樣子的。

<session>
<ejb-name>PayrollBean</ejb-name>
<local-home>PayrollHome</local-home>
<local>Payroll</local>
<ejb-class>com.example.PayrollBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<resource-ref>
<res-ref-name>jdbc/empDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>
...
<assembly-descriptor>
...
</assembly-descriptor>

從開(kāi)發(fā)人員的角度來(lái)檢查這樣一個(gè)簡(jiǎn)單的EJB 是非常有意義的。我們可以更好的理解有那些地方可以有改動(dòng)。一個(gè)主要的問(wèn)題是,定義了這么多的方法和結構以后,程序的清晰化受到了影響,結構變得混亂。真正需要關(guān)注的商務(wù)方法沒(méi)有很好的強調和體現。

下面讓我們看一看EJB 3.0 是如何實(shí)現一個(gè)簡(jiǎn)單的stateless session Bean的。

// Same example, EJB 3.0
@Stateless public class PayrollBean implements Payroll {
@Resource DataSource empDB;
public void setBenefitsDeduction (int empId, double deduction) {
...
Connection conn = empDB.getConnection();
...
}
...
}


@Stateless 標注表示這是一個(gè)stateless session Bean. 使用這樣的標注可以讓我們不再需要使用SessionBean 接口, 這樣就大大的簡(jiǎn)化了EJB的實(shí)現類(lèi)。 Bean的商務(wù)接口是payroll. 這是一個(gè)普通的JAVA interface. 缺省的情況,container會(huì )把他作成一個(gè)local interface. 如果需要實(shí)現一個(gè)遠程接口,只需再定義一個(gè)標注 @Remote. 注意在接口里面不需要定義 RemoteExceptions,它由Container 層在后面處理掉了

2.3 引用對象的新方法
在老的EJB規范中,還有一個(gè)比較復雜的地方是訪(fǎng)問(wèn)環(huán)境對象。EJB 2.1 里面訪(fǎng)問(wèn)環(huán)境要首先在組件定義的相關(guān)性引用,比如resource-refs, EJB-refs, 然后在JNDI名字空間里面配置這些環(huán)境對象。 最后查找運行的時(shí)候JNDI空間里面查找這些環(huán)境對象
EJB 3.0對此提供了兩種簡(jiǎn)化的方案:

1) 相關(guān)性注入
2) 一個(gè)簡(jiǎn)化的查詢(xún)lookup方法

相關(guān)性注入是一種技術(shù),開(kāi)發(fā)人員在原代碼中加入標注的一個(gè)定義,說(shuō)明需要這個(gè)環(huán)境對象,然后由Container在初始化的時(shí)候把真的環(huán)境對象注入里面。
目前EJB3.0 spec里面有兩種注入方式,setter注入和變量注入, 這些在以后的規范中可能會(huì )有變化,比如一種統一的注入方式。 我們可以通過(guò)注入標記@EJB來(lái)定義一個(gè)EJB的引用,也可以通過(guò)注入標記@resource 表示我們要引用一個(gè)資源,它可以是EJB以外的一切環(huán)境對象. 專(zhuān)家組為了盡可能的簡(jiǎn)化開(kāi)發(fā),將使用注入的對象類(lèi)型作了簡(jiǎn)化。

EJB3.0 將仍然提供一個(gè)動(dòng)態(tài)查詢(xún)的方法,但是從程序開(kāi)發(fā)人員的角度,不需要再使用JNDI API,而是采用更為簡(jiǎn)化的EJB Context 的 Lookup方法。

在新的EJB 3.0規范中,因為不再需要復雜的home接口和EJB 接口。EJB client端的編碼也大大的簡(jiǎn)化了,和訪(fǎng)問(wèn)一個(gè)普通的JAVA 對象沒(méi)有什么區別。上面的那個(gè)EJB2.1的例子比較起來(lái),在EJB 3.0 里面使用一個(gè)EJB變的非常簡(jiǎn)單,只需要兩行代碼:

// EJB 3.0 client view
@EJB ShoppingCart myCart;
...
Collection widgets = myCart.startToShop(Widgets );
...

首先定義一個(gè)EJB的應用,然后就可以直接調用這個(gè)EJB的商務(wù)方法,剩下的工作由Container來(lái)為我們完成。

2.4 新的事務(wù)管理

EJB中的事務(wù)(Transaction)管理大大簡(jiǎn)化了用戶(hù)開(kāi)發(fā)程序。把應用分成一個(gè)一個(gè)小的單元,叫做transaction. 事務(wù)系統保證了這個(gè)單元里面的任務(wù)是完整的,要么全部執行,要么出錯后完全退回到初始狀態(tài)。


J2EE中有兩種類(lèi)型的事務(wù), 容器管理的和Bean管理的。他們在如何啟動(dòng)和結束事務(wù)上是不同的。Bean 管理的事務(wù)由組件使用 UserTransaction類(lèi)顯式啟動(dòng)和結束的。代碼中需要調用方法 UserTransaction.begin() 和 UserTransaction.commit() 。Container 管理的事物是由container 自動(dòng)來(lái)完成的。
針對不同的事務(wù)類(lèi)型,可以定義6種不同的事務(wù)屬性。
事務(wù)屬性告訴 Container 是否把EJB方法里面的工作放到用戶(hù)的事務(wù)里面。還是針對這個(gè)方法重新啟動(dòng)一個(gè)新的事務(wù). 或者執行這個(gè)方法而不包含在事務(wù)里面,等等。
在EJB3.0規范中,我們缺省的定義是容器管理的事務(wù). 而且針對所有的Bean方法,應用Required Transaction屬性,它的意思是如果調用這個(gè)方法的應用沒(méi)有Transaction Environment,那么這個(gè)方法會(huì )自動(dòng)創(chuàng )建一個(gè)新的。
開(kāi)發(fā)人員可以使用標注的方式在針對整個(gè)EJB或者某個(gè)具體的方法指定他的Transaction Attribute.
首先我們看一個(gè)工資處理的EJB的例子, 這是一個(gè)標準的EJB 3.0 Stateless Session Bean。缺省情況下,每個(gè)方法是都是由container來(lái)管理Transaction的,缺省的事務(wù)屬性是required
// Uses container-managed transction, REQUIRED attribute
@Stateless public PayrollBean implements Payroll {
public void setBenefitsDeduction(int empId, double deduction) {...}
public double getBenefitsDeduction(int empId) {...}
public double getSalary(int empId) {...}
public void setSalary(int empId, double salary) {...}
}

下面還是這個(gè)例子,我們知道對于有關(guān)重要數據的改動(dòng),總是非常敏感的。比如我們在更改某個(gè)用戶(hù)的工資的時(shí)候同時(shí)修改他的所得稅,我們希望這兩個(gè)調用是在同一個(gè)Transaction里面發(fā)生的。

@Stateless public PayrollBean implements Payroll {
@TransactionAttribute(MANDATORY)
public void setBenefitsDeduction(int empId, double deduction) {...}
public double getBenefitsDeduction(int empId) {...}
public double getSalary(int empid) {...}
@TransactionAttribute(MANDATORY)
public void setSalary(int empId, double salary) {...}
}

那么調用用戶(hù)的工資改動(dòng)的方法就必須在一個(gè)已經(jīng)存在的Transaction Environment
中,為此,我們用@transactionattribute(mandatory)標注 這個(gè)方法必須在一個(gè)客戶(hù)端的transaction中,如果客戶(hù)端沒(méi)有這樣的一個(gè) Transaction Context, Container會(huì )扔出來(lái)一個(gè) Javax.ejb.EjbTransactionRequiredException 的錯誤信息。

 

2.5 新的安全機制
EJB架構不鼓勵開(kāi)發(fā)人員用代碼的方式實(shí)現安全機制,而是采用安全角色的方法,通過(guò)定義可以訪(fǎng)問(wèn)的安全角色,來(lái)限制對某個(gè)方法的訪(fǎng)問(wèn)權限。

缺省情況,在3.0里面所有的方法都是"unchecked"。也就是說(shuō)缺省情況下對所有方法是不用安全控制策略的。如果調用某個(gè)方法的客戶(hù)端具有某個(gè)用戶(hù)角色(Role) ,我們可以制定是否這個(gè)方法也是沿用這個(gè)角色。缺省情況下的安全策略是"Caller Identity",也就是說(shuō)被調用者的角色和調用者的角色應該是一致的

這是一個(gè)EJB 3.0的安全實(shí)現的例子。我們對于其他的方法都沒(méi)有設定安全策略。但是對于設定某個(gè)員工的工資是多少,這樣的安全要求比較高的方法設定了只有人事部門(mén)的管理員才能調用。我們采用了一個(gè)

@RolesAllowed("HR_PayrollAdministrator ")
// Security view
@Stateless public PayrollBean implements Payroll {
public void setBenefitsDeduction(int empId, double deduction) {...}
public double getBenefitsDeduction(int empId) {...}
public double getSalary(int empid) {...}
// salary setting is intended to be more restricted
@RolesAllowed( HR_PayrollAdministrator )
public void setSalary(int empId, double salary) {...}
}

2.6 事件的通知和檢查

EJB 3.0中, 開(kāi)發(fā)人員不需要實(shí)現那些不必要的callback methods。 他可以把任意方法指定為一個(gè)事件通知方法。通過(guò)標記一個(gè)通知標注,我們把一個(gè)方法標記為一個(gè)回調方法, 例如:

@Stateful public class AccountManagementBean
implements AccountManagement {
Socket cs;
@PostConstruct
@PostActivate
public void initRemoteConnectionToAccountSystem {
...
}

@PreDestroy
@PrePassivate
public void closeRemoteConnectionToAccountSystem {
...
}
...
}

在這個(gè)EJB 3.0 的例子當中, 我們定義了一個(gè)有狀態(tài)的session Bean,把初始化的工作都交給init remote connection方法,同時(shí)標記他為一個(gè)回調方法,在construct ,和 activite之后調用
同時(shí)我們把清理的工作都交給close remote connection方法,同時(shí)標記他為一個(gè)回調方法,在destroy 和passivate之前調用

對于那些高級的用戶(hù),需要定制自己的事件檢查和偵聽(tīng)機制。檢查方法和所被檢查的對象方法可以在同一個(gè) Bean 中,也可以在不同的JAVA Class里面。 這種檢查機制有下面的特點(diǎn):
在方法周?chē)M(jìn)行檢查
包裝商務(wù)方法的整個(gè)調用過(guò)程
可以對方法調用的參數和結果進(jìn)行處理
檢查類(lèi)的序列中,可以拿到上下文數據
多個(gè)檢查類(lèi)可以按照指定的順序執行
可以用部署表述符來(lái)指定執行順序

我們用 @Interceptors 標注指定一個(gè)外部的檢查方法類(lèi), 用 @AroundInvoke制定內部的某個(gè)方法為檢查方法。在檢查方法里面,我們用proceed()來(lái)調用具體的商務(wù)方法。目前的檢查方法是檢查一個(gè)Bean里面的所有方法,專(zhuān)家組正在制定標準, 讓它可以具體到檢查制定的某個(gè)方法。

下面是一個(gè)EJB3.0的檢查方法的例子:

我們制定了這個(gè)無(wú)狀態(tài)session Bean檢查方法類(lèi)是這三個(gè)類(lèi).
accountaudit, metrics, customsecurity。那么實(shí)際執行的時(shí)候會(huì )按照這個(gè)制定的順序來(lái)實(shí)行
檢查.

@Interceptors({
com.acme.AccountAudit.class,
com.acme.Metrics.class,
com.acme.CustomSecurity.class
})
@Stateless
public class AccountManagementBean
implements AccountManagement {
public void createAccount(int accountId, Details details) {...}
public void deleteAccount(int accountId) {...}
public void activateAccount(int accountId) {...}
public void deactivateAccount(int accountId) {...}
...
}

2.7 部署描述文件的優(yōu)先級

在EJB3.0中,我們可以用標注的方法來(lái)指定對環(huán)境對象的引用,也可以用部署描述符文件(Deployment Description)的方式來(lái)制定對環(huán)境對象的應用, 也可以?xún)蓚€(gè)同時(shí)使用. 如果我們在部署描述文件和代碼標注中都制定了環(huán)境對象,那么部署描述文件中的那個(gè)引用有更高的優(yōu)先級, 這樣就給了應用的Deployer相對比較大的靈活性來(lái)控制.

3 持久化的魔力


3.1 最初的目標

EJB 3.0 專(zhuān)家組的另外一個(gè)目標是為實(shí)體Bean( Entity Bean ) 和對象/關(guān)系的映射,提供一個(gè)輕量級的模型。實(shí)際上,目前關(guān)于實(shí)體Bean的爭論很多, 很多批評人士對它的架構感到不滿(mǎn),我們的目標是改善EJB 容器管理的持久化模型,從各地的一些優(yōu)秀的開(kāi)源軟件中吸取靈感,從一些反模式(Anti-Pattern)中吸取經(jīng)驗, 從而讓新的標準稱(chēng)為技術(shù)上的領(lǐng)%9

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
什么叫有狀態(tài)對象和無(wú)狀態(tài)對象?--bbs
ENTERPRISE JAVABEANS 3.0規范簡(jiǎn)介
Java面試題
EJB
Java面試題集
精通有狀態(tài)vs無(wú)狀態(tài)(Stateful vs Stateless)—Immutable模式之姐妹篇
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久