麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

如何在EJB應用程序中使用Spring

2019-11-18 13:00:29
字體:
來源:轉載
供稿:網友

  摘要
  
  在傳統J2EE應用程序中,企業javaBeans(EJB)構成了應用程序架構的基礎。盡管SPRing提供了EJB所提供的許多服務的簡化版本,例如可申明的事務治理和對象持久性,但是,在一段時間內,許多應用程序將會繼續使用EJB來構建。幸運的是,你能夠在基于EJB的解決方案中使用Spring,本文是從Pro Spring中摘錄,Pro Spring的作者Rob Harrop和Jan Machacek主要研究在Spring中,如何簡化EJB的創建,以及Spring如何提供一個簡單,友好的方法來訪問EJB資源。(4600字,2005/2/14)
  
  隨著Spring的發展,現在開發者第一次真正有了一個EJB的輕量級代替者。使用Spring,你能夠利用許多EJB所提供的特性,例如可申明的事務治理,對象池和簡單的ORM(對象角色建模)等功能。這就是說,在可預見的未來,我們期望EJB繼續能夠用于應用程序的開發中。盡管在本書中,我們并沒有考慮使用或者不使用EJB的原因,但是,從我們在Spring方面出色的經驗來看,我們推薦你盡可能的使用Spring來代替EJB。有關Spring和EJB優點和缺點更加具體的討論,可以從Rod Johnson和Juergen Hoeller所寫的書《EXPert One-on-One J2EE without EJB》(Wrox, 2004)中得到。在本文中,我們將要重點討論的是如何將Spring技術應用在使用EJB構建的系統中。
  
  Spring中對EJB的支持
  
  Spring對EJB支持能夠粗略的分成兩類:訪問和實現。Spring中的訪問支持類使你能夠輕易的訪問EJB資源。在這一節里,我們研究Spring如何擴展基本的JNDI(Java名字目錄接口)支持框架對EJB的訪問,并且利用AOP(面向切面的編程)支持來提供對EJB資源的基于代理訪問。
  
  Spring提供了抽象基類來支持EJB的實現,這使得創建無狀態EJB,有狀態EJB,消息驅動EJB,這三種類型的EJB更加簡單。這三種類的使用前提并不是減輕創建EJB的負擔,而是讓你能夠從bean內部比較輕易的訪問Spring治理的資源,更重要的是,這有助于將業務邏輯從EJB實現中分離,寫到EJB的POJO(plain old Java object)對象中。在這里,不用擔心這些模糊說法,我們將會在下一章中,使用兩個例子來具體地討論他們。
  
  我們將要構建一個使用了兩個EJB服務的簡單的Web應用程序。第一個無狀態會話bean實現了EchoService業務邏輯接口,并且提供了簡單的響應能力。第二個是有狀態會話bean,它實現了CounterService業務邏輯接口,并且提供了有狀態計數服務。
  
  這些是簡單的例子,但是它們有助于演示所推薦的Spring中編譯EJB組件的解決辦法,和Spring中支持EJB的各種不同組件之間的區別。除了討論例子中的多種部署描述符外,我們并不對EJB作更具體的研究。然而,我們將對Spring在多種組件中對EJB支持的實現,以及這種實現如何影響應用程序作深入的研究。非凡地,我們研究Spring如何在applicationContext中定位EJB,以及如何使用JNDI基礎框架來定位JNDI資源。
  
  你可能注重到,我們提到的Spring支持三種EJB,但是我們僅僅實現兩種類型的EJB,無狀態和有狀態。消息驅動bean的支持類使用了類似于無狀態和有狀態會話bean所使用的模式。
  
  在Spring中構建EJB組件
  
  Spring提供了三種抽象類作為EJB bean類的基類,他們是:AbstractStatelesssessionBean,AbstractStatefulSessionBean和AbstractMessageDrivenBean。當使用Spring來構建EJB的時候,必須提供所有不同的接口和home類,但是,當實現bean類的時候,就需要從合適的Spring基類繼續。Spring提供的基類答應EJB組件訪問Spring的ApplicationContext,并且,這樣答應這些組件訪問Spring所治理的資源。
  
  在繼續使用Spring來構建EchoService和CounterService bean的具體討論之前,我們將要看看,Spring如何在ApplicationContext中定位EJB組件,以及在使用Spring時,所推薦編譯EJB解決辦法。
  
  Spring中EJB類層次
  
  Spring提供了定義良好的EJB支持類的類層次,如圖1所示。
  
 如何在EJB應用程序中使用Spring(圖一)
  圖1.Spring中的EJB支持類

  
  正如你看到的那樣,中心的基類AbstractEnterpriseBean暴露了beanFactoryLocator屬性來答應子類訪問正在使用的實例BeanFactoryLocator。在下一節中,將通過loadBeanFactory()和unloadBeanFactory()這兩個方法的使用來更加具體的討論BeanFactoryLocator接口。注重到AbstractStatelessSessionBean類已經實現了ejbCreate(),ejbActivate()和ejbPassivate()方法,而類AbstractStatefulSessionBean并沒有實現這些方法。Spring對鈍化bean有非凡的要求,我們將在后面章節“編譯有狀態會話bean”中更加具體的討論這種bean。
  
  接口BeanFactoryLocator
  
  Spring能夠從ApplicationContext中裝載所治理的資源,Spring中的EJB基類的主要特征就是能夠訪問ApplicationContext來裝載資源。這種功能不是基類本身提供的,而是被委托給BeanFactoryLocator接口的實現,像顯示在列表1中的情形一樣。
  
  列表1. BeanFactoryLocator接口
  
  public interface BeanFactoryLocator {
  BeanFactoryReference useBeanFactory(String factoryKey)
  throws BeansException;}
  
  當Spring不能控制資源的創建,也不能自動配置資源的情況下,就需要使用BeanFactoryLocator接口。在這些情況下,BeanFactoryLocator接口答應用一種外部可配置的方式在BeanFactory中配置資源。當然,在這樣的情況下,BeanFactory配置能夠簡單地托管資源,但是,那意味著,作為應用程序開發員的你,不能控制應用程序。使用BeanFactoryLocator,你就能夠完全控制用于配置的BeanFactory或者ApplicationContext如何定位EJB組件。
  
  注重到,BeanFactoryLocator并不直接返回BeanFactory實例;而是返回一個BeanFactoryReference。BeanFactoryReference是一個輕量級BeanFactory或ApplicationContext的包裝器,這個包裝器答應使用BeanFactory的資源平滑地釋放對BeanFactory的引用。對于BeanFactoryLocator的實現和BeanFactory或者ApplicationContext接口來說,這個接口BeanFactoryReference的實際的實現是非凡的。當我們在列表13中研究狀態會話bean如何釋放對BeanFactoryReference的引用掛起bean時,我們將再對這個引用功能進行研究。
  
  缺省情況下,所有EJB基類使用了BeanFactoryLocator的ContextJndiBeanFactoryLocator實現。本質上來說,這個類在一個給定JNDI地點上查找一個逗號分隔的配置文件列表,并且使用這些配置文件來創建ClassPathxmlApplicationContext的實例。三個基本EJB類都通過AbstractEnterpriseBean類表現出屬性beanFactoryLocator,通過設置這個屬性,就能夠提供你自己對于BeanFactoryLocator的不同實現。然而,假如你這樣做了,那么,請注重,你的bean的每一個實例都有它自己的ContextJndiBeanFactoryLocator實例,同樣,每個ContextJndiBeanFactoryLocator的實例都有它自己的ClassPathXmlApplicationContext實例。
  
  雖然為你的EJB實例創建的所有ApplicationContext實例都用同樣的方式配置的,但是,所配置的bean是不一樣的。考慮一下定義了echoService bean的Spring配置,其中,EchoServiceEJB將使用echoService。假如你的應用程序服務器創建100EJB個實例,那么,也創建了100個ContextJndiBeanFactoryLocator的實例,以及100個ClassPathXmlApplicationContext和echoService bean的實例
  
  假如應用程序不希望發生這種情況,那么Spring提供SingletonBeanFactoryLocator和ContextSingletonBeanFactoryLocator類來分別裝載BeanFactory和ApplicationContext的單件實例。有關他們更多信息,參見這些類的Javadoc。
  
  Spring對于EJB的解決方案
  
  EJB一個最大的缺點就是要想脫離EJB容器而單獨測試EJB組件非常困難,這使得EJB實現的業務邏輯的單元測試成為只有那些受虐狂者才愿意做的事。然而,這個問題的解決方法已經出現了一段時間了,它包括在POJO中實現與EJB bean類同樣的業務邏輯,然后,就能將bean類委托給POJO。在Spring中,由于不必將如何定位和創建POJO的實現的任何邏輯嵌入到EJB中,這種實現就是非常簡單,和靈活的。圖2顯示了在構建EchoService EJB的時候,如何使用這種方法的。
  
 如何在EJB應用程序中使用Spring(圖二)

  這里,正如所期望的那樣,你看到了bean類EchoServiceEJB實現了接口EchoService,并且注重到EchoServiceEJB依靠于接口EchoService,有一個EchoService類型的私有成員。
  
  構建一個無狀態會話bean
  
  無狀態會話bean是用Spring最輕易構建的EJB;這是因為無論在何種情況下,它都不需要非凡的處理,并且類AbstractStatelessSessionBean實現了所有ejbXXX()方法。
  
  正如列表2所示,我們創建了服務接口。
  
  列表2. EchoService接口
  
  package com.apress.prospring.ch13.ejb;public interface EchoService {
  public String echo(String message);}
  
  注重到,服務接口不是與EJB相關的,甚至,在實現EJB的時候并不要求這個服務接口。EJB開發中傳統辦法是在EJB相關的本地和遠程接口中定義業務邏輯方法。在這種辦法中,在標準Java接口中定義業務方法,然后本地和遠程bean接口擴展這個標準接口。這種服務接口不僅給本地和遠程接口提供了擴展的標準接口,而且也提供了EJB bean類和POJO實現類能夠實現的通用的接口。雖然我們并不推薦EJB bean類不要實現本地或者遠程接口,但是實現了這個服務接口的EJB bean也不會有什么問題。通過使所有EJB的組成組件共享通用的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高清一区二区在线观看 | 国产精品久久久久久久久久尿 | h色在线观看 | 成人精品免费在线观看 | 国产亚洲精久久久久久蜜臀 | 91社影院在线观看 | 久久探花 | 免费中文视频 | 亚洲男人的天堂在线视频 | 中文字幕免费在线观看视频 | 亚洲成人在线视频网站 | 午夜视| 午夜a狂野欧美一区二区 | 日韩视频一二三 | 羞羞网站| 成人精品久久久 | 免费国产在线视频 | 久久精品免费国产 | 久久国产精品电影 | 久久福利剧场 | 色综合网在线观看 | 污黄视频在线观看 | 久久网日本 | 久久久久91视频 | 日本爽快片100色毛片视频 | 毛片视频网站在线观看 | av免费在线观看免费 | 九九看片| 久久久久国产成人免费精品免费 | 久久91亚洲人成电影网站 | 欧美xxxxx视频| 国产乱轮视频 | 嗯~啊~弄嗯~啊h高潮视频 | 第四色成人网 | 国产妇女乱码一区二区三区 | 羞羞视频免费网站 | 欧美色淫| 国产一区二区三区四区在线 | 国产成人高清成人av片在线看 | 爱性久久久久久久 | 久精品国产|