日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EJB程序化查找

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EJB程序化查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在上一篇文章中,我們了解了EJB 引用和EJB 注入 。 盡管EJB注入是一種強大的容器工具,可以簡化模塊化應用程序的開發,但有時還是需要執行程序化EJB查找。

讓我們假設,例如,一組不同的EJB實現了由公共業務接口定義的公共策略 。 根據某種選擇算法(例如業務規則 )的結果,選擇了不同的策略,因此將在業務流程的范圍內執行不同的EJB。 在這種情況下,無法在注入時選擇目標EJB,因為注釋元素(例如@EJB )是在編譯時定義的,而部署描述符是在部署時定義的。 解決此問題的唯一方法是程序化 JNDI 查找 。

以前的帖子中描述的相同機制將適用。 將使用@EJB批注或Java EE模塊部署描述符的相應元素聲明EJB引用并將其與應用程序私有名稱空間中的名稱鏈接。

在應用程序專用命名空間中查找

在查詢代碼中使用的名稱空間和目標EJB之間建立間接級別的可移植方法是使用應用程序專用名稱空間。 這種間接級別在Java EE平臺中非常普遍:不僅用于EJB引用,而且用于各種資源引用,例如JDBC數據源,JMS隊列,JavaMail會話等。

對于EJB,如我們之前的文章所述,您只需定義一個私有名稱,供應用程序的查找和注入代碼使用。 這是一個專用于應用程序的名稱,是java:comp / env JNDI條目的子元素。 借助@EJB批注和部署描述符,您可以在此名稱和目標EJB之間建立鏈接。 唯一的區別是,應用程序算法將選擇適當的EJB并動態查找,而不是依賴容器將引用注入到您的組件中。

正如我們在已經看到部分2這一系列中,@EJB注釋可以在類型,方法和字段級用于聲明對EJB的引用,并且,任選地,而不需要寫任何的將其鏈接到目標豆部署描述符代碼。

如果是動態編程JNDI查找,則可以注釋一個類(例如Servlet)來建立對EJB的引用,而不是將字段(或屬性)注釋為注入目標。 在下面的示例中,我們將看到如何同時使用@EJB注釋和部署描述符。

聲明對EJB的引用

在之前的文章中使用的測試servlet中,我們可以在類級別使用@EJB批注以私有名稱ejb / ejbLocalRef聲明對EJB的引用:

@EJB(name = "ejb/ejbLocalRef",beanInterface = es.reacts.SessionTest0Local.class,beanName = "EJBServer1.jar#SessionTest1") public class ServletTest1 extends HttpServlet {[...] }

上一個示例中的注釋在功能上等效于以下部署描述符(在本例中為web.xml文件)片段:

<ejb-local-ref><ejb-ref-name>ejb/ejbLocalRef</ejb-ref-name><ejb-ref-type>Session</ejb-ref-type><local>es.reacts.SessionTest0Local</local><ejb-link>EJBServer1.jar#SessionTest1</ejb-link> </ejb-local-ref>

此示例中的@EJB語義與上一篇文章中的示例之間的最重要區別是,在這種情況下,我們提供了建立引用和到目標EJB的鏈接所需的所有信息,而無需注入甚至不依賴有關來自注入目標的信息(例如beanInterface )。

盡管注釋是在類級別應用的,但實際上等效于添加相應的部署描述符元素,因此, 聲明的引用將在整個Java EE模塊中可用 。 在這種情況下,您的Java EE Web模塊中的任何其他servlet都可以注入或查找由ejb / ejbLocalRef名稱引用的相同EJB:

@EJB(name = "ejb/ejbLocalRef") SessionTest0Local lc4;

由于引用聲明包含解析目標EJB所需的所有信息,因此此處不需要額外的“管道”。

EJB程序化查找

由于已經聲明并鏈接了引用,因此我們的代碼現在可以進行JNDI查找,并檢索對目標EJB所需業務接口的引用。 JNDI查找代碼是我們習慣的良好的ole查找代碼(稍有不同,我們將在后面指出):

InitialContext ctx = new InitialContext(); Object obj = ctx.lookup("java:comp/env/ejb/ejbLocalRef"); if (obj instanceof SessionTest0Local) {SessionTest0Local lc = (SessionTest0Local) obj;[...] }

(* 請注意,前面的片段已刪除了所需的異常處理代碼 。)

EJB 3.0的一個好消息是,您不需要像EJB v。2.1規范所要求的那樣使用PortableRemoteObject.narrow()方法來縮小引用的范圍。 在示例代碼中,我們可以使用instanceof運算符直接測試引用,并使用Java本機強制轉換設置SessionTest0Local引用。

查找本地和遠程業務接口之間絕對沒有區別。 僅在依賴部署描述符的情況下,才會根據EJB業務接口類型使用<ejb-ref>或<ejb-local-ref>執行EJB引用的聲明和鏈接。 就您的應用程序而言,查找代碼將相同。

模式

在不使用EJB注入而是依靠查找的情況下,使用注釋或部署描述符聲明和鏈接EJB引用既有優點也有缺點。

注釋的優點是,它們比相應的部署描述符元素更易于編寫和使用。 而且,就我的經驗而言,IDE對代碼自動完成的支持可能比某些“晦澀”的部署描述符編輯器更好(最好是例外)(Oracle JDeveloper和NetBeans等例外)。

部署描述符的優點是它可以集中資源引用聲明。 如果在您的Java EE模塊的整個代碼中都使用相同的EJB引用,并且不將其限制在單個類中,那么最好的選擇是使用部署描述符聲明和鏈接EJB(和其他資源)引用,并避免使用注釋。 這是必須謹慎選擇的設計選擇。 在需要查找的用例中,很有可能在應用程序組裝和部署階段執行EJB鏈接。 最好還是在中央存儲庫中對引用進行充分記錄和聲明,而不是在整個代碼中散布@EJB注釋,這樣部署人員的工作可能會大大減輕。

參考: The Gray Blog上我們JCG合作伙伴 Gray的 EJB程序化查找 。

相關文章 :
  • EJB 3.0注入和查找簡介
  • 基本的EJB參考,注入和查找
  • 使用Oracle WebLogic對應用程序外部的EJB的引用
  • EJB 3.1全局JNDI訪問
  • GWT EJB3 Maven JBoss 5.1集成教程
  • Java泛型快速教程
  • JVM如何處理鎖

翻譯自: https://www.javacodegeeks.com/2011/08/ejb-programmatic-lookup.html

總結

以上是生活随笔為你收集整理的EJB程序化查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。