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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

vaadin_Vaadin应用程序中的EJB查找

發(fā)布時(shí)間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vaadin_Vaadin应用程序中的EJB查找 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

vaadin

自從我實(shí)現(xiàn)上一個(gè)服務(wù)定位器以來(lái)已經(jīng)有很長(zhǎng)時(shí)間了。 考慮到Java EE CDI (上下文和依賴(lài)注入)的成熟度,我認(rèn)為不再需要。 我的第一個(gè)實(shí)現(xiàn)是在基于Struts的Web應(yīng)用程序中使用EJB。

之后,我開(kāi)始使用JSF,它只需要帶有@EJB或@Resource的帶注釋的屬性即可與業(yè)務(wù)層進(jìn)行通信。 到目前為止,這一直是一個(gè)很棒的經(jīng)驗(yàn),直到他們讓我評(píng)估Vaadin作為業(yè)務(wù)應(yīng)用程序的前端技術(shù)為止。

在深入探討之前,我已經(jīng)閱讀了Vaadin Wiki上發(fā)表的文章“ Adding JPA to the Address Book Demo ”,其中介紹了如何從Vaadin的類(lèi)中調(diào)用EJB,以檢索和持久化業(yè)務(wù)層的數(shù)據(jù)。 EJB使用JPA來(lái)獲取數(shù)據(jù)并將其放入數(shù)據(jù)庫(kù)中。 他們建議從自定義servlet調(diào)用EJB,根據(jù)Java EE規(guī)范,該自定義servlet具有使用CDI進(jìn)行EJB調(diào)用的能力。

如果我們要調(diào)用1或3個(gè)EJB,這似乎是一個(gè)合適的解決方案,但是當(dāng)我們要處理大約40個(gè)EJB時(shí),在Servlet中該怎么辦? 如何將所有這些引用傳遞給Vaadin的應(yīng)用程序類(lèi)? 該類(lèi)的接口可以瘋了! 這就是為什么我認(rèn)為使用JNDI進(jìn)行查找是可取的。

以下代碼是我在概念證明(PoC)中使用的服務(wù)定位器。

import java.util.Collections; import java.util.HashMap; import java.util.Map; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException;public class MyServiceLocator {private Context initialContext;private Map cache;private static ClientServiceLocator ourInstance = new ClientServiceLocator();public static ClientServiceLocator getInstance() {return ourInstance;}private ClientServiceLocator() {try {this.initialContext = new InitialContext();this.cache = Collections.synchronizedMap(new HashMap());}catch(NamingException ne) { System.err.printf("Error in CTX looking up %s because of %s while %s",ne.getRemainingName(),ne.getCause(),ne.getExplanation());}}public Object lookupEjb(String ejbName) {if(this.cache.containsKey(ejbName)) {return this.cache.get(ejbName);}else {try {Object ejbRef = initialContext.lookup("java:comp/env/"+ ejbName);this.cache.put(ejbName, ejbRef);return ejbRef;} catch (NamingException ne) {throw new RuntimeException(ne);} catch (Exception e) {throw new RuntimeException(e);}}} }

MyServiceLocator類(lèi)遵循Singleton設(shè)計(jì)模式,請(qǐng)確保只有一個(gè)對(duì)象實(shí)例可以滿(mǎn)足來(lái)自Web應(yīng)用程序的所有請(qǐng)求。 唯一實(shí)例是在類(lèi)的初始化過(guò)程中創(chuàng)建的,并且由于構(gòu)造函數(shù)是私有的,因此該類(lèi)不能被另一個(gè)類(lèi)實(shí)例化,只能通過(guò)方法getInstance ()獲得。 構(gòu)造函數(shù)初始化上下文,并創(chuàng)建一個(gè)同步映射,其中存儲(chǔ)了所有已創(chuàng)建的引用。 方法lookupEjb字符串ejbName )查找名稱(chēng)在本地JNDI上下文中可用的EJB。 該方法僅適用于在web.xml文件中聲明了其引用的EJB,如下所示。

<web-app version="2.5"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>Information Systems</display-name>...<ejb-local-ref><ejb-ref-name>InformationSystemBean</ejb-ref-name><ejb-ref-type>Session</ejb-ref-type><local>example.business.InformationSystemBeanLocal</local><ejb-link>eac-architecture-ejb.jar#InformationSystemBean</ejb-link></ejb-local-ref> </web-app>

標(biāo)記<ejb-local-ref>用于聲明對(duì)本地EJB的引用。 上面的示例僅映射一個(gè)EJB。 因此,您必須對(duì)要映射的每個(gè)EJB重復(fù)此操作。 有關(guān)此標(biāo)簽的詳細(xì)信息,請(qǐng)參見(jiàn)此處 。 聲明后,我們可以使用以下代碼在應(yīng)用程序的任何部分中獲取EJB的實(shí)例:

private InformationSystemLocal informationSystemBsn = (InformationSystemLocal)MyServiceLocator.getInstance().lookupEjb("InformationSystemBean");

變量是使用EJB本地接口(即InformationSystemLocal )鍵入的。 服務(wù)定位器返回名為InformationSystemBean的EJB實(shí)例,默認(rèn)情況下是EJB的實(shí)現(xiàn)類(lèi)。 請(qǐng)注意,當(dāng)我們使用CDI時(shí),上面的代碼都不是必需的。 AjudaBsn的調(diào)用就像這樣:

@EJB private InformationSystemLocal informationSystemBsn;

CDI很好且優(yōu)雅,但不能廣泛應(yīng)用。 今天實(shí)現(xiàn)它的方式是Java EE規(guī)范的主要弱點(diǎn)。 也許有很強(qiáng)的理由為什么EJB的注釋不能在每個(gè)Java類(lèi)中都起作用。 我根本看不到這個(gè)錯(cuò)誤的原因,因?yàn)镾pring自從很久以前就已經(jīng)使用方面取向解決了這個(gè)問(wèn)題。

參考: Hildeberto博客上的 JCG合作伙伴 Hildeberto Mendonca提供的Vaadin應(yīng)用程序中的EJB查找

相關(guān)文章 :

  • JBoss AS 7 EJB3池配置
  • Java EE6 CDI,命名組件和限定符
  • EJB程序化查找
  • EJB 3.0注入和查找簡(jiǎn)介
  • 什么是CDI,它與@EJB和Spring有什么關(guān)系?

翻譯自: https://www.javacodegeeks.com/2012/01/ejb-lookup-in-vaadin-application.html

vaadin

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的vaadin_Vaadin应用程序中的EJB查找的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。