ejb 2.0 3.0_EJB 3.0注入和查找简介

ejb 2.0 3.0

介绍

Enterprise JavaBeans Specification v。3.0引入了简化的,基于注释的API,用于EJB注入和查找。 EJB 3.0现在是POJO,可以使用简单的注释将其注入其他组件(例如EJB和Servlet)。 EJB 3.0是Java EE 6的许多其他基于POJO的规范之一,例如JSR-229“ Java EE平台的上下文和依赖注入” (以前称为“ Web Bean”)。 Java EE从未如此简单!

尽管如此,尽管EJB 3.0注释使程序员摆脱了组装Java EE应用程序和连接其所有组件的复杂性,但是您应该注意一些细微之处。 其中一些(例如“全局JNDI名称”)由Enterprise JavaBeans Specification v。3.1解决 。 同时,在广泛部署Java EE 6应用程序服务器之前,您可能会面临编写依赖于非便携式应用程序服务器特定行为的代码的风险。

更糟的是,当使用EJB 本地接口时,您可能会遇到一些问题,该接口应该是您自己的bean的应用程序范围接口。 由于本地业务接口实际上暗示着本地方法调用(它们使用传递引用的语义,并且仅限于同一JVM实例),因此在访问应用程序中组件的业务接口时,这些接口是首选。 通常,此用例将构成Java EE应用程序中的大多数EJB调用。

声明一个EJB

根据EJB v。3.0简化的API规范,在声明会话bean时,可以根据会话bean类型使用两个注释:

  • @无状态
  • @状态

这两个注释共享两个公共的注释元素: namemappingName

名称

注释元素名称定义了bean的“名称”,并且默认为bean类的非限定名称。 Bean名称在包含EJB的模块范围内必须唯一。

被映射的名字

EJB 3.0规范将mappingName定义为“会话Bean应该映射到的特定于产品的名称”。 通常,应用程序服务器使用maptedName将会话Bean映射到全局 JNDI名称。 EJB 3.1规范不赞成使用mappingName元素, 而是引入了“便携式全局JNDI名称”的概念。

我们将很快看到如何以及何时使用此类元数据。

EJB参考

要建立对EJB的引用,可以使用@EJB批注或标准部署描述符(通过<ejb-ref />和<ejb-local-ref />)。 @EJB注释定义如下:

@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
public @interface EJB {String name() default "";Class beanInterface() default Object.class;String beanName() default "";String mappedName() default "";String description() default "";
}

名称

name元素在“应用程序环境”中定义注入的EJB 名称 。 因此,EJB 名称是注入的对象在私有名称空间java:comp / env中的位置 。 它的默认值是带注释的类字段或属性的全限定名称。 在类级别使用@EJB注释时, 名称元素是必需的。

name元素与部署描述符中的<ejb-ref-name />元素等效:

<ejb-ref><ejb-ref-name>bean name</ejb-ref-name>[...]
</ejb-ref>

bean接口

beanInterface是注入的组件的业务接口类型。 默认情况下,它是带注释的字段或属性的类型。 在类级别使用@EJB批注时, beanInterface元素是必需的。

beanInterface元素等同于部署描述符中的<remote />或<local />元素:

<ejb-ref><ejb-ref-name>bean name</ejb-ref-name><remote>bean interface</remote>[...]
</ejb-ref>

bean名称

beanName元素指定通过name元素在@Stateful@Stateless批注中声明的bean,或通过<ejb-name />元素在部署描述符中声明的bean。 当一个以上的EJB在应用程序中实现相同的业务接口时, beanName元素最有用:beanName使开发人员可以在特定模块中引用特定EJB。 在这种情况下使用的语法是:

<ejb module>#<ejb name>

如果只有一个EJB在应用程序中实现请求的业务接口,那么将自动解析Bean名称。

beanName元素等效于部署描述符中的<ejb-link />元素:

<ejb-ref><ejb-ref-name>bean name</ejb-ref-name><remote>bean interface</remote><ejb-link>linked ejb</ejb-link>[...]
</ejb-ref>

被映射的名字

@Stateless@Stateful批注的maptedName元素一样, mappedName是特定于产品的元数据,其使用不可移植。

mappingName元素与部署描述符中的<mapped-name />元素等效:

<ejb-ref><ejb-ref-name>bean name</ejb-ref-name><remote>bean interface</remote><ejb-link>linked ejb</ejb-link><mapped-name>mapped name</mapped-name>[...]
</ejb-ref>

那么其他应用程序中的Bean呢?

如果回顾到目前为止描述的机制,您应该注意到,没有(便携式)方法来声明对应用程序外部bean的依赖关系(EJB引用)。 EJB规范3.1版解决了这个问题,并定义了可移植的全局JNDI名称 。 无需为在兼容的EJB v。3.1容器中为兼容的EJB v。3.0分配可移植的全局JNDI名称而进行任何更改。

同时,要在应用程序外部连接对EJB的引用,您应该依赖于应用程序服务器提供的机制。

不要依靠不可移植的全局JNDI名称来查找EJB

如前几节所述,在EJB v。3.1之前,尚没有可移植的方式来查找具有全局JNDI名称的EJB,并且部署者必须依赖于应用程序服务器特定的工具和元数据来在EJB引用和EJB之间建立链接。全球JNDI名称。 此外,当在应用程序外部建立对Bean的引用时,这样的链接是必需的。

即使避免使用@EJB批注元素(或其对应的部署描述符元素)并使用全局JNDI名称很吸引人,您也应始终依赖EJB引用并在java:comp / env私有名称空间中进行查找。 您的私有名称空间和映射机制为您提供了将代码与配置更改隔离开的间接级别。

这也意味着,如果限于EJB v。3.0,则应始终使用beanName(<ejb-link />)机制并在私有java:comp / env名称空间中执行查找。 很多时候,我听说过一些开发人员检查应用程序服务器的全局JNDI树以推断出EJB的应用程序服务器全局JNDI命名方案,然后到处都遇到NamingException的故事。 出于这个原因,避免使用@EJB mappedName元素,依靠名称和beanName代替。

例如,某些应用程序服务器使用全局JNDI名称发布远程和本地EJB业务接口。 其他人根本没有。 Oracle WebLogic是后者之一。 在EJB 3.0版规范,事实上, 并不需要一个本地业务接口在全局JNDI树可用。

查找远程和本地业务接口

就调用者而言,获取对远程和本地业务接口的引用的过程应相同。 不幸的是,如果您不仅仅依赖于可移植的机制,情况并非总是如此。

始终可以使用beanName机制来解析对EJB本地接口的引用。 引用远程接口并非总是如此,因为这样的EJB可能位于应用程序外部。 那么,这就是不依赖代码中全局JNDI名称的另一个原因:不仅这样的代码不能移植,而且还需要您使用不同的策略来查找远程和本地业务接口(取决于应用程序服务器)。 )业务接口类型将不是透明的,并且业务接口类型的更改可能会破坏您的代码。

建立EJB引用的简单模式

尽管它们在某些情况下可能是必需的,但应避免EJB查找,并依赖@EJB引用“自动装配 ”。 尊重一些简单的模式可以确保以完全自动化的方式声明和满足您的EJB引用:

  • 尝试减少共享业务接口的EJB的数量 :如果只有一个EJB在应用程序中实现特定的业务接口,则可以自动声明EJB引用并使用默认的@EJB注释进行绑定
  • 如果共享业务接口改善了您的应用程序设计,请为应用程序的bean定义清晰的命名策略并避免重复 :如果只有一个具有特定名称的bean,则可以自动声明EJB引用并使用@EJB(beanName =” [name]”)注释。 如果有多个同名bean,则在声明引用时将被迫使用@EJB(beanName =” [ejb-module-path]#[ejb-name]”)语法。
  • 如果需要以编程方式查找EJB引用,请使用@EJB name元素(或<ejb-ref-name />元素)在本地名称空间中声明EJB的位置,然后使用@EJB beanName将其链接到目标EJB。元素(或<ejb-link />元素。)

参考: The Gray Blog上的JCG合作伙伴 Gray 介绍了EJB 3.0注入和查找简介 。

相关文章 :
  • 基本的EJB参考,注入和查找
  • EJB程序化查找
  • 使用Oracle WebLogic对应用程序外部的EJB的引用
  • EJB 3.1全局JNDI访问
  • GWT EJB3 Maven JBoss 5.1集成教程
  • Java泛型快速教程
  • JVM如何处理锁

翻译自: https://www.javacodegeeks.com/2011/08/introduction-to-ejb-30-injection-and.html

ejb 2.0 3.0

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

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

相关文章

python夹角余弦雷达图_雷达导论PART-II.1 无线电波与交变电流信号

今天开始进入第二篇-必要的准备知识&#xff0c;全部的篇章结构见我的第一篇文章“雷达导论 引言”。第二篇有3个章节&#xff0c;如下图所示&#xff0c;分别是第4章-无线电波与交变电流信号、第5章-用一种非数学的方法理解雷达、第6章-雷达的数学预备知识。今天先讲第4章&…

手机计算机数字显示在桌面上,手机计算器有哪些使用方法

智能手机中的计算器&#xff0c;平时买完菜就要仔细的看看有没有价格对错的地方&#xff0c;所以使用手机计算器十分的方便。下面学习啦小编就给大家分享手机计算器的使用方法。手机计算器的使用方法一、查找计算器在手机上&#xff0c;计算器无需另行安装&#xff0c;一般系统…

最大堆的Java实现

最大堆的解释见&#xff1a;http://www.java3z.com/cwbwebhome/article/article1/1362.html?id4745 这里是整理后的代码&#xff1a; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List;import com.dm.core.structur…

Oracle Java Mission Control:终极指南

“我们喜欢关注Mikhail Vorontsov的博客&#xff0c;并获得他对Java Performance相关问题的看法。 我们曾多次被问到Takipi的Java错误分析与Java Mission Control和Java Flight Recorder有何不同。 因此&#xff0c;尽管工具之间的差异很大&#xff08;主要是&#xff0c;JMC主…

福州大学计算机专业考研,2015年福州大学计算机考研经验贴

2015年福州大学计算机考研经验贴福州大学发布于2019年9月24日 02:18阅读数 3995一年的考研路过去了&#xff0c;从初试到复试&#xff0c;懵懵懂懂到略有所知。在此&#xff0c;不谈成绩&#xff0c;没有骄傲&#xff0c;讲点自己的经验&#xff0c;希望帮到各位。以下所有言论…

python购物车实现的功能是什么_Python3实现购物车功能

Python3实现购物车功能来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2018年9月2日【下载文档: Python3实现购物车功能.txt 】(友情提示:右键点上行txt文档名->目标另存为)Python3实现购物车功能 本文实例为大家分享了Python3实现购物车功能的具体…

杭电考研计算机专业课_杭州电子科技大学计算机考研专业课平均分76.03,国家线复试是这个原因!...

杭电计算机学院是计算机类报考热门&#xff0c;2019考研英语数学开始统一采用英语一数学一&#xff0c;不分学硕专硕还是非全日制&#xff1b;今年复试线已出&#xff0c;除计算机技术专硕复试线280分&#xff0c;高于国家线&#xff0c;其余专业均是国家线270分复试&#xff1…

网络工程属于计算机哪一类,网络工程专业属于什么门类

在高考志愿填报的时很多考生和家长都不知道网络工程专业属于什么门类&#xff0c;很是影响考生的志愿填报专业选择&#xff0c;下面有途网小编根据考生的要求整理出网络工程专业属于工学类提供给大家&#xff0c;希望能够帮助考试顺利的填报好自己的专业。网络工程专业介绍专业…

[003]容器和动态数组的使用

例&#xff1a; 编写程序读入一组 string 类型的数据&#xff0c;并将它们存储在vector 中。接着&#xff0c;把该 vector 对象复制给一个字符指 针数组。为 vector 中的每个元素创建一个新的字符数 组&#xff0c;并把该 vector 元素的数据复制到相应的字符数组 中&#xff0c…

linux 查看显卡信号_Linux下如何查看NVIDIA显卡信息

匿名用户1级2015-07-28 回答lspci | grep -i vga这样就可以显示机器上的显卡信息&#xff0c;比如[rootlocalhost conf]# lspci | grep -i vga01:00.0 VGA compatible controller: nVidia Corporation Device 1081 (rev a1)02:00.0 VGA compatible controller: nVidia Corpora…

用计算机演奏打上花火,米津玄师打上花火歌词中文谐音(最好要简单全面)

满意答案.Ador2020.03.19采纳率&#xff1a;60% 等级&#xff1a;14已帮助&#xff1a;2446人打上花火 - 《升起的烟花&#xff0c;从下面看&#xff1f;还是从侧面看&#xff1f;》主题曲 词&#xff1a;米津玄师 曲&#xff1a;米津玄师xDAOKO有些地方一些音不对请见谅哈 …

Hibernate自动提交命令强制MySQL在过多的磁盘I / O中运行

亲爱的大家&#xff0c; 我敢肯定&#xff0c;你们中的许多人都在使用Hibernate和MySQL&#xff0c;我自己在这里和那里都使用它。 通常&#xff0c;编程模型是不错的&#xff0c;但是普通的JDBC可以快得多已经不是什么秘密了。 在这篇文章中&#xff0c;我想引起您的注意Hibe…

两个向量之间的夹角公式_关于平面向量夹角求参数取值范围的两种基本解法介绍...

平面向量的夹角问题是考察高中向量知识掌握程度的常考内容&#xff0c;主要涉及到的知识点是平面向量的数量积公式。在这里介绍一道常见的平面向量题目&#xff0c;通过两种最基本的解法&#xff0c;来帮助同学们理解向量之间的夹角。填空题第15题&#xff1a;设平面向量a(-2&a…

一些基本概念的总结

web窗体页&#xff1a; 可以使用web窗体页来创建可编程的web页&#xff0c;这些web页用作web应用程序的用户界面。web窗体页在任何浏览器或客户端设备中像用户提供信息&#xff0c;并使用服务器代码来时间应用逻辑。web窗体页输出几乎可以包含任何支持http的语言。 HTML控件&am…

宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)

宿迁学院是几本 学生评价怎么样好不好(10条)考生之前的努力奋斗就是为了高考报志愿时有更多的底气和把握。而俗话说&#xff0c;三分考、七分报&#xff0c;有很多考生和家长都还不太了解大学的一本、二本、三本之分&#xff0c;本科高校只有一个层次和等级&#xff0c;就是(本…

Google Guava:您永远不会知道的5件事

每个开发人员都可以使用哪些鲜为人知的Google Guava功能&#xff1f; 它是那里最受欢迎的库之一&#xff0c;它是开源的&#xff0c;您可能已经知道了&#xff0c;它来自人们玩Quidditch作为一项真正的运动的地方&#xff08;至少在The Internship上 &#xff09;。 它不是哈利…

hql中获取前一天的数据_PostgreSql 怎么获取数据库中关键系统信息(一)

如何通过SQL 的方式获得数据库中的一些关键信息&#xff0c;是一个DB最正常的工作&#xff0c;如何通过一些SQL来获得PG的一些关键的参数和信息或者是数据库中的一些信息是需要知道的一件事情。以下是部分 1一般来说每种数据库中都有一个或几个系统的数据库&#xff0c;在PG中s…

计算机信息技术为教育带来的变化,信息技术对课堂教学带来的变化

信息技术对课堂教学带来的变化谈一谈信息技术对教育教学的影响以及给课堂教学带来的变化龙川县培英学校 骆俊武在信息技术迅速发展的今天&#xff0c;计算机的应用、网络技术应用&#xff0c;直接影响着学校的的教育教学系统、学校的教育模式、教第一文库网师的教学方法。与传统…

abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢

指定一个默认脚本解释器“#!” 是一个约定的标记&#xff0c;它告诉系统这个脚本需要什么解释器来执行&#xff0c;即使用哪一种Shell。他指明了当我们没有指定解释器的时候默认的解释器。为什么建议要在首行加上脚本默认解释器&#xff0c;因为有的操作系统的默认解释器不是sh…

html比赛项目,趣味运动会最新个人比赛项目

趣味运动会中也有很多个人能参加的趣味比赛项目。今天小编就与大家分享趣味运动会个人赛项目&#xff0c;仅供大家参考!趣味运动会个人赛项目一&#xff1a;《懒惰的自行车》在前面车筐上放标志规则&#xff1a;自行车在规定的跑道上(约50厘米宽&#xff0c;15米长的跑道)行驶&…