一、EJB是什么?

  1. EJB是sun的JavaEE服务器端组件模型,是一种规范,设计目标与核心应用是部署分布式应用程序。
  2. EJB2.0过于复杂,EJB3.0的推出减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)回调方法的实现,并且降低了实体Bean及O/R映射模型的复杂性。
  3. EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力承诺的组件。

二、EJB3.0新特性

相比EJB3以前的版本而言,增加了两个新特性:元数据注解(Annotation) 和依赖注入(Injection),而元数据注解以最大限度的使部署描述符从冗余繁杂中脱离出来。

三、EJB体系结构

EnterpriseBean和Serializable接口一样,是一个标记性接口。用于标记一个类为一个Bean。它有三种实现:SessionBeanEntityBeanMessageDrivenBean

SessionBean:它是对业务逻辑的封装,类似于我们经常写的Service层。它可以以local, remote, webservice 服务的方式被client调用。

EntityBean:它是对数据库对象的封装,一个EntityBean,就是数据库的一条记录。

MessageDrivenBean:一个messageDrivenBean其实就是一个javax.jms.MessageListener。在JMS中有MessageConsumer,它支持两种接收消息的方式:同步接收采用MessageConsumer#receive()方法,异步接收则是为MessageConsumer设置一个MessageListener,一旦接收到消息,就调用listener#onMessage()。

四、SessionBean

1、SessionBean服务组件

SessionBean服务端有三大组件Home、EJbObject、SessionBean。

SessionBean是我们编写业务逻辑的地方。譬如数据库操作,进行计算等等。但是它对于客户端是不可见的,一个SessionBean实例的创建、销毁、激活、钝化等都是由EJB容器来管理的。

EJBObject:你可以将EJBObject看作是SessionBean对象的Proxy。需要将你的业务方法同样在EJBObject中复制一份。例如有一个HelloSessionBean#sayHello(str) 业务,如果要将该业务方法暴露出去给Client使用,与之对应的HelloEJBObject中必然得包含#sayHello(str)方法。也就是说Client需要使用EJBObject来达到与SessionBean交互的。

Home:这个名字起的怪异,我们可以将其理解为一个SessionBean的Factory。EJB容器通过Home对象来创建SessionBean对象,并装配出它的代理对象(EJBObject对象)。这是它的唯一用途。

2、Remote与Local

对于Home,和EJBObject,它们俩个都分为两类:Remote,Local。

Remote模式的,主要用于不在同一个JVM进程里,而在同一个进程里使用时,只需要使用Local模式的即可,这样选择自然是为了性能考虑。

3、Client访问处理流程(很容易看出Local性能好在哪里)

3.1 Remote模式下SessionBean 的访问流程

1、客户端通过JNDI获取到Home对象(EJBHome)的引用

2、客户端使用homeRef#create()方法来创建出EJBObject的Stub。

2.1)客户端底层使用Socket通信将次过程发给服务端Skeleton。

2.2)Skeleton调用服务端的Home对象的create方法,分配SessionBean对象(可能是新创建一个,也可能是从对象池中取一个,具体怎样依赖于是否是Stateful的),同时为该SessionBean对象生成一个代理对象(EJBObject实例),然后返回代理对象的引用。

2.3)客户端拿到EJBObject的引用就是Stub对象。

3、客户端访问业务

3.1) 客户端底层使用Socket通信将次过程发给服务端Skeleton。

3.2)Skeleton根据请求找到该EJBObject,调用与之关联的SessionBean的相应的业务。返回结果

3.3)客户端得到调用结果

3.2 Local模型下SessionBean的访问流程

1、客户端通过JNDI获取到Home对象(EJBLocalHome)的引用

2、客户端使用homeRef#create()方法来创建出EJBLocalObject(怎么创建也要依赖于是否的Stateful的)

3、客户端访问业务

五、常用注解

@Stateless:标记类把Java类声明为一个无状态会话bean

@EJB:表示注入实例,EJB注入和Resource注入相比,EJB注入只是针对于EJB而言,而Resource注入即是对所有的文件都可以进行注入。

@Remove:为会话 Bean 声明远程业务接口。用在接口上时,将该接口指定为远程业务接口。在这种情况下,不提供任何 value()。用在方法上,通过这个注解来说明在调用这个方法之后bean的实例将被清除掉。

@Local:用在 Bean 类上时,为会话 Bean 声明本地业务接口。用在接口上时,将该接口指定为本地业务接口。在这种情况下,不提供任何 value()。如:@Local(LawsuitService.class)

@Stateful:有状态会话 Bean 的组件定义注释。

@Timeout:指定无状态会话 Bean 类或消息驱动 Bean 类上接收该 Bean 的 EJB 计时器过期的方法。

@TransactionAttribute:在 TYPE-level 应用时,为会话或消息驱动 Bean 的所有业务方法指定默认事务属性。在方法级应用时,仅为该方法指定事务属性。

如:@TransactionAttribute(TransactionAttributeType.SUPPORTS)、

@TransactionAttribute(TransactionAttributeType.REQUIRED)。

@Interceptors:声明类或方法的拦截器的有序列表。

@Lock:方法声明一个并发锁的单例bean具有容器管理的并发。

@Schedule(排程器):计划时间为自动建立一个超时计划基于一个时间表达式。

@Startup:标记一个单例在应用初始化期间。

@ConcurrencyManagement:声明单例或有状态bean的并发管理类型

六、EJB的使用

1.依赖导入:

pom.xml

     <dependencies>  <dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency></dependencies>

2.代码示例:

@Stateless
//不写默认本地@Localpublic class ProdMgr {@EJB//注入prodService,如果出现多个ProdService接口的实现类可以使用name属性区分private ProdService service;public String getName() {String name = service.prod.getName();return name;}

EJB框架 详细介绍和注解的使用相关推荐

  1. rocketmq框架详细介绍

    文章目录 消息队列 应用场景 rocketmq 为什么选择RocketMQ消息队列 RocketMQ所拥有的功能 rocketmq应用场景 应用解耦 流量削峰 数据分发 异步处理 日志处理 顺序消息 ...

  2. Mybatis框架详细介绍

    一.Mybatis概述 1. 框架简介 目标 了解什么是框架 理解框架解决的问题 讲解 1.1 什么是框架 框架是整个或部分应用的可重用设计,是可定制化的应用骨架.它可以帮开发人员简化开发过程,提高开 ...

  3. Django框架详细介绍---cookie、session、自定义分页

    1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...

  4. Amaple.js框架详细介绍

    Amaple · 体验优先的JavaScript单页框架 Amaple (点此查看Github仓库)是专为单页web应用而设计的基于页面模块化的JavaScript框架,它可使开发者快速开发单页web ...

  5. java的annotation_Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  6. Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  7. Spring常用注解的详细介绍(包你学明白)

    目录 1. 为什么要使用注解? 2. 什么是注解? 3. 在Spring中使用注解的前期准备 4. @Component注解的详细介绍  5. @Value注解的详解介绍  6. @Autowired ...

  8. 通过爬取美剧天堂详细介绍Scrapy 框架入门

    通过爬取美剧天堂并详细介绍Scrapy 框架 前言(了解) 全文写了很多注释在标题处,时间充裕的可以详细看,需要找主要知识点的我已经标注明白了,直接翻到具体位置就行. Scrapy是用纯Python实 ...

  9. 全网详细介绍百度低代码框架amis及实例讲解

    文章目录 1. 文章引言 2. amis官网 3. amis介绍 3.1 amis的简述 3.2 amis的初衷 3.3 amis的其他亮点 3.4 amis不适之处 4. amis使用 4.1 am ...

最新文章

  1. zabbix linux网卡流量,如何使用zabbix3.2监控Windows网卡流量
  2. docker-3-常用命令(上)
  3. 爬虫基于ADSL动态获取ip
  4. intellij运行flink的wordcount实验-Java版本
  5. linux 内核协助的探测
  6. 用maven profile实现环境配置切换
  7. [Ext JS 4] 实战之Chart, Column Chart 定制颜色
  8. Javascript ES6 Promise同步读取文件(使用async、await)
  9. pattern recognition letter 投稿时word 模板的说明乱码
  10. python识别验证码登陆学校网站
  11. freeCodeCamp 221题
  12. Leetcode之整数反转
  13. (转)来自瑞士的七个葫芦娃:各怀绝技的Wealthtech解决方案商
  14. 可视化任务编排拖拉拽的数据集成工具
  15. 红烧鸡翅(简单又好吃)
  16. 在Windows系统上部署DHCP服务器
  17. DB数据库密码怎么破啊~~~求高手帮忙解决下~
  18. 数据分析统计学原理第十二章:多个比例的比较、独立性及拟合优度检验 | 我的统计学原理复习日记
  19. 使用apktool解包和打包apk
  20. 构建风控评分卡模型介绍(WOE/KS/ROC)

热门文章

  1. 了解Netsparker扫描器
  2. (五)以太坊——委托投票智能合约
  3. 完美型性格的优势和不足,完美型人格的职业发展
  4. python图形化界面开发工具,python如何做图形化界面
  5. 不管怎样,苹果公司仍然是全球最有价值的公司
  6. Newtonsoft.Json Sample文档
  7. Gradle 的Dependencies
  8. 2023编程必会的100个代码大全,建议立刻收藏
  9. 易语言报错:无法定位链接器!请检查 tools\link.ini 中的配置是否正确。 静态连接失败...
  10. lazyLoadingEnabled和aggressiveLazyLoading作用