真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

J2EE中使用SpringAOP框架和EJB組件(1)

J2EE中使用Spring AOP框架和EJB組件(1)

[@more@]本文介紹了一種把J2EE應用程序中的EJB轉換為Spring托管組件的方法,以及轉換之后可以采用的強大技術。它還給出了幾個實際的例子,說明如何借助于Spring的AOP框架、應用面向方面的方法來擴展J2EE應用程序,并在不修改現有代碼的情況下實現新的業(yè)務需求。

快速發(fā)展的開發(fā)人員社區(qū)、對各種后端技術(包括JMS、JTA、JDO、Hibernate、iBATIS等等)的支持,以及(更為重要的)非侵入性的輕量級IoC容器和內置的AOP運行時,這些因素使得Spring Framework對于J2EE應用程序開發(fā)十分具有吸引力。Spring托管的組件(POJO)可以與EJB共存,并允許使用AOP方法來處理企業(yè)應用程序中的橫切方面——從監(jiān)控和審計、緩存及應用程序級的安全性開始,直到處理特定于應用程序的業(yè)務需求。

創(chuàng)新互聯建站是一家集網站建設,浮梁企業(yè)網站建設,浮梁品牌網站建設,網站定制,浮梁網站建設報價,網絡營銷,網絡優(yōu)化,浮梁網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

本文將向您介紹Spring的AOP框架在J2EE應用程序中的實際應用。

簡介

J2EE技術為實現服務器端和中間件應用程序提供了堅實的基礎。J2EE容器(比如BEA WebLogic Server)可以管理系統級的元素,包括應用程序生命周期、安全性、事務、遠程控制和并發(fā)性,而且它可以保證為JDBC、JMS和JTA之類的常見服務提供支持。然而,J2EE的龐大和復雜性使開發(fā)和測試變得異常困難。傳統的J2EE應用程序通常嚴重依賴于通過容器的JNDI才可用的服務。這意味著需要大量直接的JNDI查找,或者要使用Service Locator模式,后者稍微有所改進。這種架構提高了組件之間的耦合度,并使得單獨測試某個組件成為幾乎不可能實現的事情。您可以閱讀Spring Framework創(chuàng)建者所撰寫的J2EE Development without EJB一書,其中深入分析了這種架構的缺陷。

借助于Spring Framework,可以將使用無格式Java對象實現的業(yè)務邏輯與傳統的J2EE基礎架構連接起來,同時極大地減少了訪問J2EE組件和服務所需的代碼量。基于這一點,可以把傳統的OO設計與正交的AOP組件化結合在一起。本文稍后將會演示如何重構J2EE組件以利用Spring托管的Java對象,然后應用一種AOP方法來實現新特性,從而維護良好的組件獨立性和可測試性。

與其他AOP工具相比,Spring提供了AOP功能中的一個有限子集。它的目標是緊密地集成AOP實現與Spring IoC容器,從而幫助解決常見的應用問題。該集成是以非侵入性的方式完成的,它允許在同一個應用程序中混合使用Spring AOP和表現力更強的框架,包括AspectJ。Spring AOP使用無格式Java類,不要求特殊的編譯過程、控制類裝載器層次結構或更改部署配置,而是使用Proxy模式向應該由Spring IoC容器托管的目標對象應用通知。

可以根據具體情況在兩種類型的代理之間進行選擇:

◆第一類代理基于Java動態(tài)代理,只適用于接口。它是一種標準的Java特性,可提供卓越的性能。

◆第二類代理可用于目標對象沒有實現任何接口的場景,而且這類接口不能被引入(例如,對于遺留代碼的情況)。它基于使用CGLIB庫的運行時字節(jié)碼生成。

對于所代理的對象,Spring允許使用靜態(tài)的(方法匹配基于確切名稱或正則表達式,或者是注釋驅動的)或動態(tài)的(匹配是在運行時進行的,包括cflow切入點類型)切入點定義指派特定的通知,而每個切入點可以與一條或多條通知關聯在一起。所支持的通知類型有幾種:環(huán)繞通知(around advice),前通知(before advice),返回后通知(after returning advice),拋出異常后通知(after throwing advice),以及引入通知(introduction advice)。本文稍后將給出環(huán)繞通知的一個例子。想要了解更詳細的信息,可以參考Spring AOP框架文檔。

正如先前提到的那樣,只可以通知由Spring IoC容器托管的目標對象。然而,在J2EE應用程序中,組件的生命周期是由應用服務器托管的,而且根據集成類型,可以使用一種常見的端點類型把J2EE應用程序組件公開給遠程或本地的客戶端:

◆無狀態(tài)的、有狀態(tài)的或實體bean,本地的或遠程的(基于RMI-IIOP)

◆監(jiān)聽本地或外部JMS隊列和主題或入站JCA端點的消息驅動bean(MDB)

◆Servlet(包括Struts或其他終端用戶UI框架、XML-RPC和基于SOAP的接口)

J2EE中使用Spring AOP框架和EJB組件(1)498)this.style.width=498;" />

圖1:常見的端點類型

要在這些端點上使用Spring的AOP框架,必須把所有的業(yè)務邏輯轉移到Spring托管的bean中,然后使用服務器托管的組件來委托調用,或者定義事務劃分和安全上下文。雖然本文不討論事務方面的問題,但是可以在“參考資料”部分中找到相關文章。

我將詳細介紹如何重構J2EE應用程序以使用Spring功能。我們將使用XDoclet的基于JavaDoc的元數據來生成home和bean接口,以及EJB部署描述符??梢栽谙旅娴摹跋螺d”部分中找到本文中所有示例類的源代碼。

重構EJB組件以使用Spring的EJB類

想像一個簡單的股票報價EJB組件,它返回當前的股票交易價格,并允許設置新的交易價格。這個例子用于說明同時使用Spring Framework與J2EE服務的各個集成方面和最佳實踐,而不是要展示如何編寫股票管理應用程序。按照我們的要求,TradeManager業(yè)務接口應該就是下面這個樣子:

public interface TradeManager {

public static String ID = "tradeManager";

public BigDecimal getPrice(String name);

public void setPrice(String name, BigDecimal price);

}

在設計J2EE應用程序的過程中,通常使用遠程無狀態(tài)會話bean作為持久層中的外觀和實體bean。下面的TradeManager1Impl說明了無狀態(tài)會話bean中TradeManager接口的可能實現。注意,它使用了ServiceLocator來為本地的實體bean查找home接口。XDoclet注釋用于為EJB描述符聲明參數以及定義EJB組件的已公開方法。

/**

* @ejb.bean

* name="org.javatx.spring.aop.TradeManager1"

* type="Stateless"

* view-type="both"

* transaction-type="Container"

*

* @ejb.transaction type="NotSupported"

*

* @ejb.home

* remote-pattern="{0}Home"

* local-pattern="{0}LocalHome"

*

* @ejb.interface

* remote-pattern="{0}"

* local-pattern="{0}Local"

*/

public class TradeManager1Impl implements SessionBean, TradeManager {

private SessionContext ctx;

private TradeLocalHome tradeHome;



/**

* @ejb.interface-method view-type="both"

*/

public BigDecimal getPrice(String symbol) {

try {

return tradeHome.findByPrimaryKey(symbol).getPrice();

} catch(ObjectNotFoundException ex) {

return null;

} catch(FinderException ex) {

throw new EJBException("Unable to find symbol", ex);

}

}

/**

* @ejb.interface-method view-type="both"

*/

public void setPrice(String symbol, BigDecimal price) {

try {

try {

tradeHome.findByPrimaryKey(symbol).setPrice(price);

} catch(ObjectNotFoundException ex) {

tradeHome.create(symbol, price);

}

} catch(CreateException ex) {

throw new EJBException("Unable to create symbol", ex);

} catch(FinderException ex) {

throw new EJBException("Unable to find symbol", ex);

}

}

public void ejbCreate() throws EJBException {

tradeHome = ServiceLocator.getTradeLocalHome();

}

public void ejbActivate() throws EJBException, RemoteException {

}

public void ejbPassivate() throws EJBException, RemoteException {

}

public void ejbRemove() throws EJBException, RemoteException {

}

public void setSessionContext(SessionContext ctx) throws EJBException,

RemoteException {

this.ctx = ctx;

}

}


當前名稱:J2EE中使用SpringAOP框架和EJB組件(1)
網頁鏈接:http://weahome.cn/article/ijceih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部