ejb运行程序_EJB程序化查找

ejb运行程序

在上一篇文章中,我们了解了EJB 引用和EJB 注入 。 尽管EJB注入是一种强大的容器工具,可以简化模块化应用程序的开发,但有时还是希望执行程序化EJB查找。

例如,让我们假设一组不同的EJB实现由公共业务接口定义的公共策略 。 根据某种选择算法(例如业务规则 )的结果,选择了不同的策略,因此将在业务流程的范围内执行不同的EJB。 在这种情况下,无法在注入时选择目标EJB,因为注释元素(例如@EJB的注释元素)是在编译时定义的,而部署描述符是在部署时定义的。 解决此问题的唯一方法是程序化 JNDI 查找

以前的帖子中描述的相同机制将适用。 EJB引用将使用@EJB批注或Java EE模块部署描述符的相应元素声明并链接到应用程序私有名称空间中的名称。

在应用程序专用命名空间中查找

在查询代码中使用的名称空间和目标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运行程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php实现返回顶部,返回顶部js

返回顶部jsfunction goTopEx(){var objdocument.getElementById(“goTopBtn”);function getScrollTop(){return (document.documentElement.scrollTopdocument.body.scrollTop);}function setScrollTop(value){if(document.documentElement && document.documentEleme…

中国大学MOOC-数据结构基础习题集、06-2、旅游规划

题目链接&#xff1a;http://www.patest.cn/contests/mooc-ds/06-2 题目分析&#xff1a;陈姥姥说&#xff0c;这是Dijstra算法的一道题。题目是中文的&#xff0c;这里就不再啰嗦了。有一点提示一下&#xff0c;咱们平时用的Dijistra算法&#xff0c;是用来求最短路径的。这道…

我们正在下注:这个注解很快就会出现在JDK中

Yahor最近提出的Stack Overflow问题引起了我的兴趣&#xff1a; 如何在Java 8编译时确保方法签名“实现”功能接口 。 这是一个很好的问题。 让我们假设以下名义类型&#xff1a; FunctionalInterface interface LongHasher {int hash(long x); }该类型强加了清晰的合同。 实现…

java解码p7b证书文件,通过OpenSSL解码X509证书文件

在Windows平台下&#xff0c;如果要解析一个X509证书文件&#xff0c;最直接的办法是使用微软的CryptoAPI。但是在非Windows平台下&#xff0c;就只能使用强大的开源跨平台库OpenSSL了。一个X509证书通过OpenSSL解码之后&#xff0c;得到一个X509类型的结构体指针。通过该结构体…

php 网页手册模板,网站表单模板

前端界面默认网站表单模板介绍发布&#xff1a;/template/pc/default/home/form_post.html列表&#xff1a;/template/pc/default/home/form_list.html查看&#xff1a;/template/pc/default/home/form_show.html自定义网站表单模板介绍发布&#xff1a;/template/pc/default/h…

iOS安全攻防(三):使用Reveal分析他人app

使用Reveal分析他人app准备工作1&#xff09;已越狱的设备&#xff0c;而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装)2&#xff09;本地已安装了Reveal操作步骤1&#xff09;拷贝framework和dylib到越狱机scp -r /Applications/Reveal.app/Contents/SharedSup…

orm框架选型问题_ORM问题

orm框架选型问题在过去的几年中&#xff0c;像Hibernate这样的对象关系映射工具已经帮助开发人员在处理关系数据库方面获得了巨大的生产力增长。 ORM使开发人员可以专注于应用程序逻辑&#xff0c;并避免为诸如插入或查询之类的简单任务编写大量样板SQL。 但是&#xff0c;充分…

iwifi 命令

1&#xff1a; tftp -gr ctwancfg.html 192.168.1.18转载于:https://www.cnblogs.com/gavinwu/p/4221790.html

JBoss BPM Travel Agency演示与现代BPM数据集成

不久前&#xff0c;我们启动了一个规模较大的JBoss Travel Agency演示项目&#xff0c;以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 &#xff0c;不仅向您展示了如何安装它&#xff0c;项目中各种规则和流程工件的含义&#xff0c;还向您介绍了在实际使用…

京东php asp,jd jd demo 关于php的代码里面是 一些京东的接口 包含了 重要 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

开发工具: PHP文件大小: 183 KB上传时间: 2013-04-15下载次数: 1详细说明&#xff1a;jd demo 关于php的代码里面是关于一些京东的接口里面的代码包含了一些重要-jd demo about php code jingdong interface文件列表(点击判断是否您需要的文件&#xff0c;如果是垃圾请在下面评…

scala入门-10 隐式转换、隐式参数、隐式类

到目前为止&#xff0c;隐式转换是scala的重点和难点了&#xff0c;加油~ 我们先创建一个类名称叫Implicit.scala 再看一个隐式参数的例子&#xff1a; 上面的例子中使用了隐式参数&#xff0c;我们也可以明显的指明参数&#xff1a; 下面看一下隐式类&#xff1a; 相当于&…

抢答网页PHP,[抢答]抢答环节已结束,相关答案已封箱 - 薅羊毛(Coupon)版 - 北大未名BBS...

mojave (你说得都对) 在 ta 的帖子中提到&#xff1a;抢答活动已经全部结束。截止目前&#xff0c;以下题目的正确答案不足5个&#xff1a;第9题、第22题、第23题等。封盘时间为今晚23:00。各位可以在封盘之前继续回答。另外我们提醒大家&#xff0c;如果一题中有多个回答&…

连载《一个程序猿的生命周期》-2.城市校园生活

一个程序猿的生命周期 微信平台 口 号&#xff1a;职业交流&#xff0c;职业规划&#xff1b;面对现实&#xff0c;用心去交流、感悟。 公众号&#xff1a;iterlifetime 百木-ITer职业交流奋斗 群&#xff1a;141588103 微 博&#xff1a;http://www.weibo.com/u/57234…

jvm锁_JVM如何处理锁

jvm锁当我们谈论最新版本的Sun Hotspot Java虚拟机1.6时&#xff0c;当您尝试从java.util.concurrent.locks.Lock实现获取锁或输入同步块时&#xff0c;JVM将执行以下三种锁类型&#xff1a; 有偏见的 &#xff1a;有时&#xff0c;即使在并发系统中也没有争用&#xff0c;并且…

excel使用MySQL数据,如何使用mysql完成excel中的数据生成

Excel是数据分析中最常用的工具&#xff0c;本篇文章通过mysql与excel的功能对比介绍如何使用mysql完成excel中的数据生成&#xff0c;数据清洗&#xff0c;预处理&#xff0c;以及最常见的数据分类&#xff0c;数据筛选&#xff0c;分类汇总&#xff0c;以及数据透视等操作。本…

究竟什么是语法糖呢

其实语法糖只是一个概念&#xff0c;大家可能很早就在接触语法糖了&#xff0c;只是一直不知道这个就是语法糖 百科原话&#xff1a;语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物&#xff0c;是他最先发现了Lambda演算&#xff0c;由此而创立了函数式编程…

Spring Batch –使用JavaConfig替换XML作业配置

我最近协助一个客户启动并运行了Spring Batch实现。 该团队决定继续为批处理作业使用基于JavaConfig的配置&#xff0c;而不是传统的基于XML的配置。 随着这越来越成为配置Java应用程序的一种常用方法&#xff0c;我觉得是时候更新Keyhole的Spring Batch系列了 &#xff0c;向您…

php使用accdb,php如何连接access2007的accdb格式数据库文件?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼header("Content-type: text/html; charsetGBK");/*数据库路径,请自己修改&#xff0c;否则可能运行不正常*/$conn new COM("ADODB.Connection") or die("ADO连接失败!");$connstr "PROVIDER…

Karrigell 入门教程

http://wenku.baidu.com/link?urlPG3sP0mnKt-RPLxEPktTtqTsMlCflOwSTdOEgti21pnFaed1K_MSd4Xx-Z-ZvkgyTvIwWFTB1dEy1eQ9gKyIwIVMeKEiforBbVykW0Y2SM_ 讲karrigell 3.1.1&#xff0c;目录结构和2.x版本不一样了。新版本里面是没有Karrigell.ini 文中提到admin目录下有一个模块…

php autoload用法,php自动加载__autoload()函数用法

autoload在php主版本中是自动加载文件的一个方法了我们可以定义许多的文件在目录然后通过autoload加载了&#xff0c;下面来看看autoload函数用法。在PHP5之后&#xff0c;我们可以通过 __autoload来解决这个问题。 而且在PHP5.1之后&#xff0c;还提供了 spl_autoload_registe…