亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

超越夢想 EJB 3.0 規范全新體驗

2019-11-18 12:34:39
字體:
來源:轉載
供稿:網友

  引言
  期待以久的EJB3.0規范在最近發布了它的初稿。在本文中將對新的規范進行一個概要性的介紹,包括新增的元數據支持,EJBQL的修改,實體Bean模型訪問bean上下文的新方法和運行時環境等等。作者還討論了EJB在未來要作出的調整以及EJB3.0與其他開發規范之間的關系。
  
  開始
  無論如何由于EJB的復雜性使之在J2EE架構中的表現一直不是很好。EJB大概是J2EE架構中唯一一個沒有兌現其能夠簡單開發并提高生產力的組建。EJB3.0規范正嘗試在這方面作出努力以減輕其開發的復雜性。EJB3.0減輕了開發人員進行底層開發的工作量,它取消或最小化了很多(以前這些是必須實現)回調方法的實現,并且降低了實體Bean及O/R映射模型的復雜性。
  
  在本文中,我首先會介紹EJB3.0中幾個主要的改變。它對進一步深入了解EJB3.0是非常重要的。隨后,我會從更高的層面來描述已經被提交到EJB3.0規范中的細節,并一個個的講解新的規范中的改變:實體Bean,O/R映射模型,實體關系模型和EJB QL(EJB查詢語言)等等。
  
  背景
  EJB3.0中兩個重要的變更分別是:使用了java5中的程序注釋工具和基于Hibernate的O/R映射模型。
  
  Java5中的元數據工具
  Java5(以前叫J2SE1.5或Tiger)中加入了一種新的程序注釋工具。通過這個工具你可以自定義注釋標記,通過這些自定義標記來注釋字段、方法、類等等。這些注釋并不會影響程序的語義,但是可以通過工具(編譯時或運行時)來解釋這些標記并產生附加的內容(比如部署描述文件),或者強制某些必須的運行時行為(比如EJB組件的狀態特性)。注釋的解析可以通過源文件的解析(比如編譯器或這IDE工具)或者使用Java5中的APIs反射機制。注釋只能被定義在源代碼層。由于所有被提交到EJB3.0草案中的注釋標記都有一個運行時的RetentionPolicy,因此會增加類文件占用的存儲空間,但這卻給容器制造商和工具制造商帶來了方便。
  
  Hibernate
  目前Hibernate非常受歡迎,它是開發源代碼的Java O/R映射框架,目的是把開發人員從繁瑣的數據持久化編程中解脫出來。它也有一個標準的HQL(Hibernate 查詢語言)語言,你可以在新的EJB QL中看到它的影子。Hibernate在處理如數據查詢、更新、連接池、事務處理、實體關系處理等方面非常簡單。
  概覽
  
  在已經提交的EJB3.0規范中主要涉及兩個方面的改變:
  
  1. 一套以注釋為基礎的EJB編程模型,再加上EJB2.1中定義的通過部署描述符和幾個接口定義的應用程序行為。
  
  2. 新的實體Bean持久化模型,EJBQL也有許多重要的改變。
  
  還有一些有關上述的提議,比如:一個新的客戶端編程模型,業務接口的使用以及實體Bean的生命周期。請注重EJB2.1編程模型(包括部署描述符和home/remote接口)仍然是有效的。新的簡化模型并沒有完全取代EJB2.1模型。
  
  EJB注釋
  EJB規范組織一個重要的目標是減輕原始代碼的數量,并且他們為此給出了一個完美而簡介的辦法。在EJB3.0的里,任何類型的企業級Bean只是一個加了適當注釋的簡單Java對象(POJO)。注釋可以用于定義bean的業務接口、O/R映射信息、資源引用信息,效果與在EJB2.1中定義部署描述符和接口是一樣的。在EJB3.0中部署描述符不再是必須的了;home接口也沒有了,你也不必實現業務接口(容器可以為你完成這些事情)。
  
  比如,你可以使用@Stateless注釋標記類把Java類聲明為一個無狀態會話bean。對于有狀態會話bean來說,@Remove注釋可以用來標記一個特定的方法,通過這個注釋來說明在調用這個方法之后bean的實例將被清除掉。
  
  為了減少描述組件的說明信息,規范組織還采納了由異常進行配置(configuration-by-exception)的手段,意思是你可以為所有的注釋提供一個明確的缺省值,這樣多數常規信息就可以據此推斷得出。
  
  新的持久化模型
  新的實體bean也是一個加了注釋的簡單Java對象(POJO)。一旦它被EntityManager訪問它就成為了一個持久化對象,并且成為了持久化上下文(context)的一部分。一個持久化上下文與一個事務上下文是松耦合的;嚴格的講,它隱含的與一個事務會話共存。
  
  實體關系也是通過注釋來定義的,O/R映射也是,并提供幾種不同的數據庫規范操作,在EJB2.1中這些要通過開發人員自己的設計模式或者其它技術來完成的(比如,自增長主鍵策略)。
  
  深入研究
  現在是時候具體了解EJB3.0草案了。讓我們開始探討所有EJB中四種企業級bean,并看看他們在新的規范中是什么樣子。
  
  無狀態會話bean
  在EJB3.0規范中,寫一個無狀態會話bean(SLSB)只需要一個簡單的Java文件并在類層加上@Stateless注釋就可以了。這個bean可以擴展javax.ejb.sessionBean接口,但這些不是必須的。
  
  一個SLSB不再需要home接口,沒有哪類EJB再需要它了。Bean類可以實現業務接口也可以不實現它。假如沒有實現任何業務接口,業務接口會由任意public的方法產生。假如只有幾個業務方法會被暴露在業務接口中,這些方法可以使用@BusinessMethod注釋。缺省情況下所有產生的接口都是local(本地)接口,你也可以使用@Remote注釋來聲明這個接口為remote(遠程)接口。
  
  下面的幾行代碼就可以定義一個HelloWorldbean了。而在EJB2.1中同樣的bean至少需要兩個接口,一個實現類和幾個空的實現方法,再加上部署描述符。
  
  import javax.ejb.*;
  
  /**
  * A stateless session bean requesting that a remote business
  * interface be generated for it.
  */
  @Stateless
  @Remote
  public class HelloWorldBean {
  public String sayHello() {
  return "Hello World!!!";
  }
  }
  
  有狀態會話bean
  除了幾個SFSB的非凡說明之外,有狀態會話bean(SFSB)和SLSB一樣精簡:
  
  1) 一個SFSB應該有一個方法來初始化自己(在EJB2.1中是通過ejbCreate()來實現的)。在EJB3.0的規范中建議這些初始化操作可以通過自定義方法完成,并把他們暴露在業務接口中。在使用這個bean之前由客戶端來調用相應的初始化方法。目前規范組織就是否提供一個注釋來標記某個方法用于初始化還存在爭議。
  
  2) Bean的提供者可以用@Remove注釋來標記任何SFSB的方法,以說明這個方法被調用之后bean的實例將被移除。同樣,規范組織仍然在討論是否要有一種機制來處理這種非凡的情況,即當這個方法出現異常的情況下bean的實例是否被移除。
  
  下面是對以上問題我個人的觀點:
  
  1) 是否應該有一個注釋來標明一個方法進行初始化呢?我的觀點是――應該有,這樣容器就可以在調用其他方法之前至少調用一個方法來進行初始化。這不僅可以避免不必要的錯誤(由于沒有調用初始化方法)而且可以使容器更明確的判定是否可以重用SFSB實例。我暫且把這個問題放一放,規范組織只考慮為一個方法提供一個注釋來聲明它是一個初始化方法。
  
  2) 對于第二個問題我的觀點也是肯定的。這有利于Bean的提供者合客戶端程序對其進行控制。只有一個遺留的問題:那就是一旦調用這個方法失敗,是否能移除這個bean 的實例?答案是不能,但是它將會在會話結束的時候被移除。
  
  消息驅動Bean
  消息驅動Bean是唯一一種必須實現一個業務接口的Bean。這個接口指出bean支持的是哪一種消息系統。對于以JMS為基礎的MDB來說,這個接口是javax.jms.MessageListener。注重MDB業務接口不是一個真正意義上的業務接口,它只是一個消息接口。
  
  實體Bean
  1) 實體Bean使用@Entity注釋來標記,所有實體bean中的屬性/字段不必使用@Transient注釋來標記。實體bean的持久化字段可以通過JavaBean-style機制或者聲明為public/PRotected字段來實現。
  
  2) 實體bean可以使用助手類來描述其狀態,但是這些類的實例并沒有持久化唯一性(persistent identity)的特性(即,唯一標識這個bean的字段等),實際上這些助手類與他們的實體bean實例是緊密結合的;并且這些對象還是以非共享方式來訪問實體對象的。
  
  實體關聯
  EJB3.0同時支持Bean之間雙向的合單向的關聯,它們可以是一對一、一對多、多對一或者是多對多的關聯。然而雙向關聯的兩端還要分為自身端(owning side)和對方端(inverse side)不同的端。自身端負責向數據庫通告關聯的變更。對于多對多的關聯自身端必須明確的聲明。實際上對方端通過isInverse=true進行注釋(由此自身端就不必說明了而是由另一段推斷出)??磥砩厦娴拿枋?,規范組織還能說讓EJB變的簡單了嗎?
  
  O/R映射
  EJB3.0中的O/R映射模型也有了重要的改變,它從原來的abstract-persistence-schema-based變成了現在的Hibernate-inspired模式。盡管目前規范組織還在就此進行討論但是一個明確的模型將會出現在下一個版本的草案中。
  
  舉例來說,O/R映射模型將通過bean類中的注釋來聲明。而且此方法還會指出對應的具體表和字段。O/R映射模型提供了一套自有的SQL;而且除了提供一些基本的SQL外還支持某些高層開發的功能。比如,有一個通過@Column注釋聲明的字段columnDefinition,那么可以寫這樣的SQL:columnDefinition="BLOB NOT NULL"
  客戶端程序模型
  
  一個EJB客戶端可以通過@Inject注釋以一種“注入”的方式獲得一個bean的業務接口引用。你也可以使用另一個注釋@javax.ejb.EJBContext.lookup()來完成上面的操作,但是規范中沒有告訴我們一個普通的Java客戶端怎樣獲得一個Bean的實例,因為這個普通的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人久久综合97精品| 国产精品网站视频| 日韩成人xxxx| 亚洲男人的天堂在线播放| 欧美黑人性视频| 久久国内精品一国内精品| 在线播放日韩专区| 一夜七次郎国产精品亚洲| 亚洲自拍另类欧美丝袜| 久久精品国产一区二区三区| 亚洲美女av在线| 久久免费视频在线观看| 日本精品视频在线观看| 日韩精品中文字幕视频在线| 中文字幕久久久av一区| 久久天天躁夜夜躁狠狠躁2022| 亚洲另类激情图| 色爱av美腿丝袜综合粉嫩av| 色与欲影视天天看综合网| 伊人一区二区三区久久精品| 国产亚洲在线播放| yw.139尤物在线精品视频| 中文字幕精品久久久久| 57pao成人国产永久免费| 欧美电影在线免费观看网站| 亚洲综合大片69999| 国产精品久久久久久久久免费| 国产精品电影在线观看| 欧美日韩激情小视频| 57pao国产成人免费| 91香蕉嫩草神马影院在线观看| 亚洲无av在线中文字幕| 国产+成+人+亚洲欧洲| 欧美一乱一性一交一视频| 欧美成人精品在线| 久久久久国产一区二区三区| 色爱av美腿丝袜综合粉嫩av| 欧美激情亚洲另类| 日韩在线中文字| 国产精品亚洲美女av网站| 亚洲美女免费精品视频在线观看| 亚洲成人av中文字幕| 久久精品国产亚洲精品| 亚洲精品videossex少妇| 97久久国产精品| 成人黄色av免费在线观看| 成人综合网网址| 日韩成人av网址| 中文字幕一精品亚洲无线一区| 亚洲va欧美va国产综合剧情| 亚洲国产精品女人久久久| 国产亚洲欧美一区| 日本午夜精品理论片a级appf发布| 国产裸体写真av一区二区| 久久手机精品视频| 色伦专区97中文字幕| 97超级碰在线看视频免费在线看| 亚洲免费精彩视频| 日韩免费在线看| 久久综合九色九九| 久久久久国产精品一区| 欧美在线欧美在线| 中文字幕日韩精品在线| xxxxx成人.com| 91在线观看免费高清完整版在线观看| 亚洲精品国产欧美| 亚洲国产精品免费| 国产日韩精品综合网站| 日韩在线观看高清| 亚洲偷欧美偷国内偷| 一区二区亚洲欧洲国产日韩| 国产成人精品综合| 91香蕉嫩草神马影院在线观看| 亚洲大胆人体在线| 欧美激情精品久久久久久黑人| 国产成人拍精品视频午夜网站| 美女性感视频久久久| 91色精品视频在线| 成人免费淫片视频软件| www日韩中文字幕在线看| 日韩精品在线免费| 在线看福利67194| 久久99亚洲热视| 亚洲色图激情小说| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲色图第一页| 国产精品嫩草视频| 欧美成人精品不卡视频在线观看| 中文日韩在线观看| 国产极品精品在线观看| 一本色道久久88亚洲综合88| 91国在线精品国内播放| 久久精品亚洲国产| 热99在线视频| 欧美影院在线播放| 欧美午夜片在线免费观看| 欧美午夜电影在线| 日韩电影免费在线观看中文字幕| 亚洲黄色www| 日韩专区在线观看| 午夜精品久久久久久久99热| 黑人欧美xxxx| 国产精品成人在线| 91网站在线看| 亚洲欧美在线一区| 精品亚洲aⅴ在线观看| 韩国三级日本三级少妇99| 久久视频中文字幕| 欧美激情网友自拍| 深夜福利一区二区| 国产日韩欧美在线| 亚洲自拍偷拍色片视频| 日韩成人av在线播放| 国产91免费观看| 亚洲国产成人精品久久久国产成人一区| 久久天天躁狠狠躁夜夜爽蜜月| 日本在线观看天堂男亚洲| 久久视频在线直播| 91九色精品视频| 黑丝美女久久久| 日产精品久久久一区二区福利| 日韩欧美亚洲成人| 欧美性猛交视频| 在线精品国产欧美| 久久精品国产综合| 日韩a**中文字幕| 日韩电影中文字幕在线| 日韩av影视综合网| 国产精品视频白浆免费视频| 国产精品丝袜一区二区三区| 欧美激情视频网址| 最近日韩中文字幕中文| 亚洲欧洲日产国码av系列天堂| 亚洲综合精品伊人久久| 91精品国产高清久久久久久91| 日本久久久久久| 欧美激情久久久| 日韩电影大全免费观看2023年上| 欧美激情亚洲视频| 亚洲在线免费视频| 91九色视频导航| 国产成人自拍视频在线观看| 欧美激情影音先锋| 国产精品入口免费视频一| 97成人精品视频在线观看| 久久精品99久久香蕉国产色戒| 成人h片在线播放免费网站| 8090理伦午夜在线电影| 日韩欧美在线中文字幕| 欧美在线不卡区| 日韩av免费在线看| 日韩一二三在线视频播| 97精品一区二区三区| 亚洲性av在线| 欧美成人性色生活仑片| 最近2019年好看中文字幕视频| 欧美色视频日本高清在线观看| 大桥未久av一区二区三区| 2019最新中文字幕| 91精品久久久久久久久久久久久久| 成人欧美一区二区三区在线湿哒哒| 91精品久久久久久综合乱菊| 亚洲人成绝费网站色www| 美女久久久久久久久久久|