EJB笔记

本文详细介绍了EJB在企业级应用中的角色,包括事务管理、安全、持久化等功能,以及EJB容器的部署与职责。同时,深入探讨了会话Bean、实体Bean和消息驱动Bean的工作原理与生命周期,对比了EJB与Spring框架的特点,最后讲解了JMS消息服务及其在分布式系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EJB 实际上是用于编写业务层代码。
事务管理和安全管理
EJB为我们提供了很多企业开发中需要使用到的服务。如是事务管理、安全、持久化、分布式等。因为这些服务由容器提供。无需我们自行开发,这样大大减少开发成本。EJB设计初衷是有分布式管理的
EJB容器:推荐使用jboss weblogic 
其中jboss中集成了tomcat+hibernate(JTA)

Java 分布式架构
J2EE 5 ---EJB 3.0
J2EE 6 ---EJB 3.1
J2EE 7 ---EJB 3.2

Web Container web 容器
EJB Container EBJ 容器

EJB的组成
会话bean(session bean) ---》相当于biz层
	分为有状态的session bean 和无状态的session Bean
实体bean
	jpa的编程方式 进行数据持久化的实体bean
消息驱动bean
	作为JMS(java Message service java 消息服务)api的监听者,异步处理监听到的消息


EJB组成部分
Session Beans --->有状态sesion bean(stateful) 无状态session bean(stateless)
Message-Driven Beans --->容器管理实务(CMT)  Bean管理实务(BMT)
Entity Beans --->容器管理的持久化(CMP)  Bean 管理的持久化(BMP)

EJB 3.0新特性
1.元数据可通过annotation 注解方式开发
2.取消了home interfaces 在ejb3.0变成local interface
3.JNDI封装也采用annotation 方式
4.实体bean 进行了简化
5.对于checked exceptions检查异常进行简化
6.取消了callback interface 请求的的实现

EJB容器部署到app服务器中
EJB容器的职责:
	先部署到app服务器再通过app提供的服务和客户端进行交互
	对外提供的接口:持久化方面的接口(persistence)
		EJB容器对所有EJB的生命期的管理
		状态管理
		安全机制
		远程接口的调用
		事务管理

Session Bean
	客户端调用session bean --->通过实体bean 访问数据源
	Client --- session bean ---X-Data store
	如果不使用实体bean (entity bean) 用别的方式访问数据库也是可以的
	实体bean 开发偏向复杂了 ---》开发实体bean 是hibernate的架构师
	所以EJB3包括EJB2口碑不是特别好 就是由于实体bean

	有状态的session bean  在有状态的属性部分存储信息
		不需要数据库维护永久的状态信息
		生命周期:
		客户端第一次请求,sessionbean 里面是没有数据,通过相应接口创建session
		准备好session bean ,给他进行相应的对话,并存放到对话中
		过一段时间,如果再启用,客户端继续访问,访问的时候,先从对话里面看一下里面有没有
		如果有的话给他进行激活session bean,就可以进行调用
		如果调用的信息不需要要了,可以通过相应的移除接口,移除掉信息。

		通过创建有状态的sessionbean -->添加相应属性到session 中---》使用的时候会话激活
		隔了一段时间 如果session bean 有进行激活
		当不需要session 时,移除掉ejb 就可以了

	无状态的session bean 
		相当于在web 开发里的servlet,而servlet里面最好是不要存在状态信息的
		基本上大部分的servlet 开发都是采用单例模式,里面也是没有转态信息的,从性能上来讲可以更好的满足用户的需求
		生命周期:
		请求如果没有无状态的session bean ,通过相应接口创建session bean
		访问结束之后,把他移除掉就可以
		大量的访问,如果一段时间没有访问,就通过容器把他移除掉

		更详细的描述
		客户端通过业务接口调用session bean 里面的信息,
		这里面有一个session bean的实例池,池化的一个过程
		通过bean实例池查看,这个session bean 是否存在,
		不存在直接创建出来存放到bean 实例池中
		存在直接进行调用
		 不需要 直接移除
	有转态的session bean 和无状态的session bean 主要是对业务逻辑的封装

实体bean
Entity Bean
 MVC 里面的entity object 还有一种是dao
 这个实体bean 和数据库里的表里数据是实时对应的,而且这个机制是很复杂的
	
	分类 BMP(Bean 管理的持久化Bean)和 CMP(容器管理的持久化bean)
	jpa的编程机制,解释实体Bean 和数据库之间的交互

	他的生命周期:中间是一个池化的过程和上面有所不同

Message-Driven Bean
	消息驱动Bean

	MDB--消息驱动bean 缩写

	客户端发来请求消息--》请求消息放在消息队列里面
	MDB-->通过队列一个个把相应消息取出来
	再通过异步方式返回给客户是否成功

EJB本地视图和EJB 远程视图2个概念

事物容器管理事物 和bean管理事物
如果是jta(java transaction api)编程,使用userTransaction zh
这是一个bean的模式(BMT)

JNDI访问EJB

利用JNDI管理资源
JNDI 是一组处理多个命名和目录服务接口的api
jndi server--》EJB JMS 数据连接池

网络环境下,通过jndi管理资源
解决网络环境下的资源

jndi 通过名字进行查找网络资源
方法list() lookup() bind() unbind()

Context ctx = new InitialContext(env);
Object obj = ctx.lookup(name);

实例1:
fscontext.jar providreutil.jar引入对于的jar包
jndi读取目录资源
ctx.list();

实例2
读取文件信息
File file = (File)ctx.lookup(env);
BuffererReader bf = new BufferedReader(new File(file);
String line = null;
while((line=bf.readLine)!=null){
	SYSO(line);
}
	
JNDI 类比资源数
JNDI树中的每一个节点,称为资源
JNDI会为每一个绑定到JNDI树中的资源分配一个别名。
只能通过别名取到JNDI树中的资源

JNDI 数据库访问
数据库驱动包放到tomcat lib下
eclipse--META-INF-->context.xml配置文件创建

JNDI配置 
容器管理事物 bean管理事物 都是JTA事物的一部分,也就是分布式事物管理
作为JTA事物需要使用JNDI

开发步骤:
1.class12.jar 和oracle.jar-->放到jboss/server/lib
2.oracle-ds.xml 配置文件 --》放到jboss/server/default/deploy
3.格式的变化
	普通模式:DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/BookStoreOracle");
	ejb模式:DataSource ds = (DataSource)ctx.lookup("java:jdbc/BookStoreOracle");
4.CMT和BMT都是基于EJB服务器的,所以必须使用JNDI
获取Connection 方式一: Class.forName();
方式二:通过JNDI 方式获取connection
class BaseDao{
	protected Connection conn;
	protected static final String ORA_JNDI="java:jdbc/BookStoreOracle";
	
	protected void OpenConnection(String strJNDIName) throws Exception{
		if(conn == null || conn.isCLosed()){
			InitialContext context = new InitialContext();
			DataSource ds = (DataSource)ctx.lookup(strJNDIName);
			conn = ds.getConnection(); //通过JNDI获取到数据库信息
		}
	}
}

本地事物 
	
	void beginTransaction(){
	this.openConnection(); //获取连接
	if(conn !=null){conn.setAutoCommit(false);} //打开事物
	}
	void commit(){ if(conn != null){conn.commit();}} //事物提交
	void rollback(){ if(conn != null{conn.rollback();}}//事物回滚

	try{
	dao.beginTransaction();
	...
	dao.commit(); //如果出现错误进行回滚 

	}catch(Exception e){dao.rollback();} //这些都是手动控制事物的打开 事物的回滚 事物的提交

JTA的Bean 管理事物---》他是一种XA协议 不允许使用上面的Connection
	现在的事物不允许使用Connection 方式获取事物的管理 打开 提交 回滚
	采用另外一种形式UserTransaction

@TransactinManagement(TransactionManagerType.BEAN)
@Stateless
public class UserBiz implements UserLocal,UserRemote{
	@Resource
	UserTransaction uts;   //Bean 事物管理,JTA事物管理的一种

	void buyBooks(){
		try{
		uts.begin();
		...
		uts.commit();
		}catch(Exception e){
		uts.rollback();
		}
		
	}
}
	
容器管理事物CMT
和spring 管理事物很相像 
spring管理事物是使用声明式事物通过注解的方式进行事物管理,
中间方法里面不需要手动开启事物 提交事物 回滚事物

@TransaxtionManagement(TransactionManagementType.CONTAINER)
@Stateless
class UserBiz implements UserLocal,UserRemote{

	@Resource
	SessionContex sctx;// 容器管理事物需要的类

	@TransactionAttribute(TransactionAttributeType.REQUIRED)//这段注解可写可不写
	void buyBooks()throws Exception{
		try{... ...}
		catch(Exception e){
		sctx.setRollbackOnly();//通知容器,发生了异常,需要回滚
		//设置了他容器就会回滚异常 ,如果不设置容器就不会回滚异常
		}
	}
	//容器管理事物使用的是声明式事物管理,推荐使用容器管理事物
	//可以管理多个资源的容器管理事物
}

spring框架和EJB框架对比
Spring框架:轻量级框架 ---》声明式事物
EJB框架:重量级框架 ---》事物处理

Spring --- SSH SSI整合 ---大量减少了重复性的代码
	---编程复杂度大大减少了(针对EJB1 ~ 2)

Spirng	1.使用了事物配置文件 控制了在规定范围内的事物的控制
	2.使用annotation方式进行事物的控制 注解的方式更加精确的控制那些方法受事物的处理,对性能提高的更好
		@Transactional(rollbackFor=Throwable.class)

Spring3.0 和 Spring 4.0 于EJB3.0 对比
1.EJB的CMT和BMT代码更简单,开发更容易

2.引入Hibernate和iBatis后 ---JPA(Entity Bean)
Spring 与orm框架整合后,代码更简洁 ---比JPA编程容易

3.项目伸缩性和扩展性对比:
Spring框架是无法满足分布式事物(N-TIER),声明式事物只能完成本地事物
Spirng整合JTA事物需要引入第三方jar包并且不兼容会出现,这样不如使用EJB的CMT 容器管理事物 进行分布式事物控制
EJB框架在用户变化可能较大时,有明显的优势

总结:
	中小型项目,用户的变化不会很大时,我们首选SSI(spring+ibatis)
	重大型项目,应该首选EJB---CMT模式



======================================================
JMS及消息驱动Bean

RPC中间件技术的局限性
MOM系统 消息中间件系统
JMS(JAVA消息服务)
消息模型
消息驱动EJB

消息队列:
12306 春节订票

RPC中间件技术局限性
早期:CORBA,dcom,RMI等RPC中间件技术广泛应用于各个领域,但是面对规模和复杂度都越来越高的分布式系统,这些系统技术也显示出其局限性
1.同步通信:阻塞模式必须要有回应才能打开通信
2.客户和服务对象的生命周期紧密耦合
3.点对点通信:客户的一次调用只能发送给某个单独的目标对象

解决方案
面向消息中间件技术(MessageOrientedMiddleware,MOM)
较好的解决了以上的问题,发送者将消息发送给消息服务器,
消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收着,这种模式下
1.发送者和接收者是异步的,发送者无需等待
2.二者的生命周期未必相同,发送消息的时候接收者不一定运行,接收消息时发送者也不一定运行
例如:qq消息
3.一对多通信:对于一个消息可以有多个接收者 例如:微信群内的消息


MOM系统 消息中间件系统
已有的MOM系统包括:
IBM的MQServies
Microsoft的MSMQ
BEA的MessageQ

由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。java message Service(JMS)
是由SUN提出的旨在统一各种MOM系统接口的规范

包含点对点(point to point ,ptp) 和发布/订阅(Publish/Subscribt,pub/sub)
两种消息模型,提供可靠消息传输,事物和消息过滤等机制

JMS(JAVA 消息服务)
JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为JMS provide

消息的组成
分为三个部分 header properties body
消息头 属性 消息体

消息的类型:
ObjectMessage
MapMessage
StreamMessage
TextMessage---XMLMessage
ByteMessage

消息的同步和异步接收



	

 

内容概要:本文详细分析了全球及中国财富管理市场的发展现状与未来趋势。全球财富管理市场起源于欧洲、发展于美国,美国财富管理市场经过百年发展,形成了以商业银行、综合财富管理平台和投资服务平台为代表的三类财富管理体系。中国财富管理市场正处于快速发展期,居民财富快速增长并向金融资产倾斜,资管新规引导市场健康发展。文中还探讨了中国财富管理市场的竞争格局,包括私人银行、银行理财、公募基金、券商资管、信托、第三方财富管理机构和互联网财富管理平台的发展情况。此外,公募基金投顾试点成为财富管理市场转型的重要探索,买方投顾模式逐步取代卖方投顾模式,AI赋能投顾业务,为行业发展带来新机遇。 适合人群:对财富管理行业感兴趣的投资者、金融从业者及研究机构。 使用场景及目标:①了解全球及中国财富管理市场的发展历程与现状;②掌握中国财富管理市场竞争格局及各机构的发展特点;③探索公募基金投顾试点对财富管理市场的转型意义及AI赋能投顾业务的应用前景。 阅读建议:本文内容详实,涵盖了财富管理市场的多个方面,建议读者重点关注中国财富管理市场的现状与发展趋势,特别是私人银行、银行理财、公募基金、券商资管等机构的具体发展情况,以及公募基金投顾试点和AI赋能投顾业务的创新模式。
6.0版更新说明: 1.根据2024年鉴整理,数据更新至2023年 2.新增指标,当前214个指标 5.0版更新说明: 数据更新至2022年 4.2版更新说明: 1.更新2021年部分指标数据 4.0版更新说明: 1.数据更新至2021年 2.调整部分旧指标 3.新增指标,当前190个指标 3.0版更新说明: 1.数据更新至2020年 2.调整部分指标,当前174个指标 2.4版更新说明: 1.更新部分缺失值 2.将数据转为平衡面板 3.填补升级。内含原始版本、线性插值、ARIMA填补三个版本数据 一、数据介绍 数据名称:中国城市数据库 数据来源:中国城市统计年鉴1991-2024年、地方统计局 数据年份:1990-2023年 数据范围:300个地级市(包括直辖市) 样本数量:平衡面板10200条(300*34=10200) 更新时间:2025年2月,当前最新6.0版 二、整理方法 第一,识别年鉴。利用NLP算法识别《中国城市统计年鉴》,并转为面板数据 第二,完善数据。对比主流数据库、地方统计局,进一步完善城市数据 第三,统一地区。匹配民政部编码,统一使用2019年编码和地区名称 第四,统一单位。对不同单位的情况,进行单位换算 第五,人工验证。得到所有指标的面板数据,并人工抽样验证 第六,平衡面板。将非平衡面板转为平衡面板数据 第七,线性插值。利用线性趋势对中间缺失进行填充,得到线性插值版 第八,ARIMA填补。利用时间趋势,对剩余缺失进行预测,得到ARIMA填补版 最终,保留原始版本、线性插值版、ARIMA填补版
内容概要:本文详细介绍了如何在HarmonyOS开发中使用Tabs组件构建底部页签。首先,文章强调了底部页签在提升用户体验和操作便捷性方面的重要性,随后介绍了Tabs组件的基本结构,包括TabBar和TabContent。接着,文章逐步引导读者搭建开发环境,包括安装DevEco Studio和配置项目。在此基础上,文章展示了Tabs组件的基础用法,如简单示例和组件结构解析。接下来,文章深入探讨了属性设置,如导航位置、滑动功能、动画时长等,以实现个性化定制。此外,文章还介绍了高级技巧,如滚动导航栏和自定义导航栏的实现方法。最后,通过一个电商应用的实际案例,展示了如何在实际项目中应用Tabs组件,以及开发过程中需要注意的事项和常见问题的解决方法。 适合人群:具有一定HarmonyOS开发基础的研发人员,尤其是希望提升用户交互体验的应用开发者。 使用场景及目标:①了解如何使用Tabs组件构建美观且实用的底部页签;②掌握底部页签的属性设置和高级技巧,如滚动导航栏和自定义导航栏;③解决开发过程中遇到的兼容性、布局适配和内存优化等问题。 其他说明:本文不仅提供了详细的代码示例和技术指导,还鼓励读者在实际项目中应用所学知识,不断探索HarmonyOS开发的更多可能性。通过学习本文,开发者可以更好地理解HarmonyOS开发的特点和优势,为用户打造更加出色的交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值