EJB框架 详细介绍和注解的使用

article/2025/9/12 11:18:26

一、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;}

 

 

 


http://chatgpt.dhexx.cn/article/5ewMXM6v.shtml

相关文章

EJB到底是什么?(通俗易懂白话文)

1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&#xff0c;那么&#xff0c;总得说说什么是所谓的"服务 集群"和"企业级开发…

Http协议的组成

1、Http是什么 http是超文本传输协议&#xff0c;是互联网上应用最为广泛的一种网络协议。 2、Http协议的组成 Http协议是由Http请求和响应组成。当在浏览器中输入网址访问某个网站时&#xff0c;浏览器会将你的请求封装乘一个Http请求发送给服务器点&#xff0c;服务器接收到…

Http 协议, 前后端交互理解

目录 HTTP协议引入 HTTP的特征 http协议&#xff0c;以及从前后端交互角度去理解 无状态 无连接 客户端请求消息 服务器响应消息 HTTP 请求方法(常用款) HTTP 响应头信息 (常用款) HTTP 状态码 (常用款) 简单的写一个minihttp HTTP协议引入 http超文本传输协议, 是基…

HTTP协议版本检测

HTTP/2.0在2015年就已经正式发布了&#xff0c;但是现在大部分网站还在使用HTTP/1.1协议。具体怎么查看网站采用的是HTTP/1.1&#xff0c;还是HTTP/2.0呢&#xff0c;本篇就介绍几种检测HTTP协议版本的方法。 所有的操作都是基于Chrome浏览器&#xff0c;以本站 tiven.cn 为例。…

C++中的HTTP协议

1、HTTP Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;。是一种通信协议&#xff0c;它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外…

HTTP协议简单概述

学习目标 HTTP 协议概述 HTTP 请求响应 HTTP 请求方法 HTTP 响应方法 HTTP 消息报文之请求报文 HTTP 消息报文之响应报文 HTTP 消息报文之通用报文 URL ​ 我们更熟悉 URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;。URL 正是使用 …

HTTP协议笔记

1、HTTP协议简介 1.1、什么是通信协议 官方理解&#xff1a;通信协议是指通信双方完成通信所必须遵守的规则和约定 通俗理解&#xff1a;通信双方采用约定好的格式来发送和接收消息&#xff0c;这种实现约定好的通信格式&#xff0c;就叫通信协议 例子&#xff1a;张三与李…

HTTP协议解析

文章目录 一、HTTP协议基础1、定义2、工作原理3、特点4、与Https的区别&#x1f435;HTTPS简介&#xff1a;两者区别&#xff1a; 二、HTTP请求协议1、HTTP请求结构&#xff1a;2、请求方法3、举例4、Post和Get的区别&#x1f308; 三、HTTP响应协议1、组成2、响应头3、状态码常…

http协议格式

文章目录 HTTP协议格式请求行首行:请求方法&#xff1a; 空行 \r\n&#xff1a;响应行首行头部&#xff1a; http协议介绍&#xff1a; HTTP 协议一般指 HTTP&#xff08;超文本传输协议&#xff09;。超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&…

HTTP协议简单解释

简单的HTTP协议主要特点HTTP之URLURI和URL的区别HTTP之请求消息Request请求方法GET和POST的区别 HTTP之响应消息ResponseHTTP之状态码COOKIE和SESSION有什么区别CookieSession HTTP1.1HTTPS浏览器中输入一个URL发生什么?参考 简单的HTTP协议 HTTP协议是Hyper Text Transfer P…

HTTP协议详细讲解(完整版)

HTTP协议 1. HTTP协议的定义 HTTP协议&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一个客户端请求和回应的标准协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可…

JavaWeb——HTTP详解

文章目录 什么是HTTPHTTP发展阶段HTTP请求1.请求行请求方式 2.消息头 HTTP响应1.响应体2.响应状态码常见状态码HTTP状态码分类HTTP状态码列表: 什么是HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#…

HTTP协议(详解)

HTTP协议&#xff08;详解&#xff09; HTTP协议&#xff1a;全称为Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;。HTTP协议是用于从&#xff08;WWW&#xff1a;World Wide Web&#xff0c;简称万维网&#xff09;服务器传输超文本到本地浏览器的传输…

HTTP协议的详细介绍

目录 一、何为HTTP协议 1.HTTP协议详细信息 2.HTTPS协议&#xff1a; 3.HTTP协议的特点 二、HTTP协议 请求方式 HTTP1. 0定义了三种请求方法&#xff1a; 1.GET 2.POST 3.HEAD HTTP1. 1 新增了五种请求方法&#xff1a; 1.OPTIONS 2.PUT 3.DELETE 4.TRACE 5.CONN…

看完这篇HTTP,跟面试官扯皮就没问题了

我是一名程序员&#xff0c;我的主要编程语言是 Java&#xff0c;我更是一名 Web 开发人员&#xff0c;所以我必须要了解 HTTP&#xff0c;所以本篇文章就来带你从 HTTP 入门到进阶&#xff0c;看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前&#xff0c;我们的电…

Python挑战游戏( PythonChallenge)闯关之路Level- 5

时隔两个月&#xff0c; 又重新回来写博客了 今天重新来做这个挑战题目 首先入口地址&#xff1a;http://www.pythonchallenge.com/pc/def/peak.html 打开来看&#xff0c; 没错&#xff0c;你没有看错&#xff0c;只有一副画 然后画的下面 有一句话 "pronounce it&quo…

pythonchallenge第0关

pythonchallenge第0关 点击打开链接 仔细观察第0关的图片&#xff1a;数字以英语提示&#xff08;Hint:try to change the URL address 尝试改变 统一资源定位符的地址&#xff09; 这就很简单了。 >>> 2 ** 38 274877906944L >>> 也即&#xff1a;http…

Python挑战游戏( PythonChallenge)闯关之路Level- 6

来来来&#xff0c;难得今天有点时间&#xff0c;闯关继续 照旧&#xff0c;先进入闯关入口&#xff0c;看一看这一关是怎么回事&#xff1a;http://www.pythonchallenge.com/pc/def/channel.html 单纯的从网页页面上来看&#xff0c; 一个有拉锁的图片&#xff0c; 下面一个写…

Python菜鸟快乐游戏编程_pygame

曾经我也沉迷游戏&#xff0c;连续玩十几个小时竞技游戏可以不吃饭。游戏只是别人写好程序&#xff0c;与其沉迷于他人设计好程序&#xff0c;为何不自己设计游戏&#xff0c;至少学会编程后&#xff0c;我们的月收入上万不是问题。于是便有了录制这部pygame菜鸟游戏编程教程动…

【pythonchallenge】【问题1】

网页标题&#xff1a;What about making trans?问题网址&#xff1a;http://www.pythonchallenge.com/pc/def/map.html问题描述&#xff1a;问题给了个图片&#xff0c;是map的对应关系&#xff0c; everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc…