版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
经典JavaEE课程段鹏松编辑ppt第8章会话EJB了解EJB的基本概念掌握无状态SessionBean的开发技能掌握有状态SessionBean的开发技能掌握SessionBean的生命周期了解EJB的事务管理了解EJB的拦截器和依赖注入课程目标目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度概述在J2EE到JavaEE的发展过程中,EJB规范一直都是其中的核心规范。EJB2由于太复杂使其饱受诟病。EJB3简单易用,功能强大。EJB的概念和意义1998年,Sun公司发布了EJB1.0,它是建立在各种分布式软件开发技术之前的新规范。Sun公司对EJB的定义:EJB架构是开发和配置基于组件的分布式商务应用程序的一种组件架构,用EJB架构开发的应用程序是可伸缩的、事务性的、多用户安全的。这些程序只要编写一次,就可以在EJB规范的任何服务器上部署。EJB的概念和意义EJB2的复杂性间接催生了DotNet平台的出现;DotNet的优点又催生了轻量级JavaEE的出现,如SSH框架等。再后来,Sun发布了EJB3。EJB3直接抛弃了EJB2中备受诟病的EntityBean,而且改为使用JPA规范作为持久层的解决方案。EJB3全完支持基于Annotation的依赖注入,也支持拦截器机制。EJB的发展历史辉煌衰败再次辉煌EJB1.0EJB1.1EJB2.0EJB2.1EJB3.0EJB3.1目前主流的JavaEE应用架构以EJB为核心,前端以JSF为MVC框架Sun官方提倡的方式经典JavaEEStruts+Hibernate为核心,前端使用Struts为MVC框架以主流的开源框架为主轻量级JavaEE技术无所谓好坏,适用才是硬道理EJB的优势以EJB为核心的应用程序结构封装是为了更好的重用性EJB的优势业务逻辑相关的实现集中在EJB中完成,而EJB容器则负责提供带有重复性质的、系统级的功能,这样EJB组件就可以对外提供完整的业务服务。EJB的使用场景对于规模较小、伸缩性要求不大的企业级应用,建议使用Struts+Hibernate为核心的轻量级JavaEE技术框架。对于应用规模较大、增长速度较快、伸缩性要求很高、前台可能需要使用除了JSP页面之外的其他客户端的企业级应用,建议使用以EJB为核心的经典JavaEE技术框架。目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度概述EJB3中的EJB分类SessionBean(会话Bean)通常代表一个允许客户端调用的门面,客户端从获取会话Bean,到调用它的方法完成MessageDrivenBean(消息驱动Bean)本质上还是一个异步的JMS消息消费者SessionBean的概念和作用SessionBean比Spring中的POJOBean的增强之处:并发和线程安全方便的WebService支持事务和安全管理SessionBean的概念和作用EJB3中SessionBean的分类StatefulSesisonBean只要客户端一直保持着该SessionBean的引用,那么该SessionBean就可以在多次调用之间维护这种会话状态。StatelessSessionBean无须维护和客户端之间的会话状态,因此通常不需要定义实例变量。只有无状态的SessionBean才可对外提供WebService,其他EJB不具备这种功能。MessageDrivenBean的概念和作用MessageDrivenBean简称MDB,它不允许客户端调用它,它只是JMS消息的异步消费者。消息驱动Bean的特征MDB不会保留任何客户端状态,对所有客户端等同MDB可以处理来自多个客户端的消息MDB与SessionBean的最大区别客户端不能直接调用MDB,只能通过发消息来驱动MDB实体和JPA主要使用Annotation来管理映射关系。需要使用以EntityManager为核心的一系列API来操作实体,来完成对数据库的持久化访问。EAO的概念:EntityAccessObject其本质和DAO类似目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度SessionBean的设计规范SessionBean必须至少具有一个业务接口SessionBean必须是具体的。它不能定义为final或abstractSessionBean中必须提供无参构造(没有写任何构造方法也可以)SessionBean可以继承任何POJO(还可以继承于其它的SessionBean)可以在SessionBean类或父类中定义业务方法和生命周期回调方法业务方法名称不能以“ejb”开头业务方法都必须是public的,且不能使用final或static修饰
无状态SessionBean分类允许远程调用的无状态SessionBean使用@Remote标注远程调用的接口本地调用的无状态SessionBean使用@Local标注本地调用的接口远程客户端的条件 EJB对远程客户端完全透明,远程客户端通过JNDI查找获得EJB之后,面向EJB业务接口编程即可。远程客户端无须和EJB运行于同一个JVM之内,远程客户端既可以是普通Web组件,也可以是其他客户端程序。本地客户端的条件 本地客户端必须和EJB运行于同一个JVM之内。本地客户端通常与EJB位于同一个JavaEE应用之内,本地客户端往往是该应用内的Web组件或其他EJB组件。开发远程调用的无状态SessionBean步骤定义远程调用的接口使用@Remote标注定义上述接口的实现类使用@Stateless标注把编译后的文件打成Jar包,部署到服务器中可以部署到Weblogic、JBoss中注意:在命令行下编译时,必须要有相应jar支持
(可以使用sdk下的javaee.jar或Web服务器下相应的jar包)实际操作演示Weblogic中部署EJBJBoss中部署EJBEJB业务方法说明业务方法名尽量不要以ejb开头。对于远程调用的EJB方法,其形参和返回类型必须是可以序列化的。业务方法不能使用staticfinal修饰。关于Remote的规则如果EJB的业务接口、实现类都没有使用@Remote和@Local,且EJB的实现类只实现了一个接口,则该接口会被当成只允许本地访问的业务接口。如果EJB的Bean实现类需要实现多个接口,那就必须使用@Remote和@Local进行修饰。如何调用EJB服务步骤通过JNDI查找获取EJB的引用,并面向接口编程,将该引用强制类型转换为EJB的业务类型接口调用相应的方法实际操作演示实际操作演示可能存在的问题不同服务器对JNDI名处理方式不同JBoss5的改变问题Weblogic客户端问题Jar包的添加问题客户端调用Weblogic上部署的EJB,需要添加如下jar包:wlclient.jarWebservice.jar客户端调用JBoss5上部署的EJB,需要添加如下jar包:Jboss安装目录下的client包下面所有的jar包调用执行结果开发本地调用的无状态SessionBean开发步骤定义使用@Local修饰的接口定义上述接口的实现类打成Jar包,部署到服务器中调用步骤在本地通过JNDI查找调用相应的方法实际操作演示Jar的制作用法:jar{ctxui}[vfm0Me][jar-file][manifest-file][entry-point][-Cdir]files...选项包括:
-c创建新的归档文件
-t列出归档目录
-x解压缩已归档的指定(或所有)文件
-u更新现有的归档文件
-v在标准输出中生成详细输出
-f指定归档文件名
-m包含指定清单文件中的清单信息
-e为捆绑到可执行jar文件的独立应用程序指定应用程序入口点
-0仅存储;不使用任何ZIP压缩
-M不创建条目的清单文件Jar的制作示例jarcvfmmyjar.jarmyManiFest.mf*.*java-jarmyjar.jar注意在WindowsXP下,命令行的程序不能执行,GUI的程序可以执行实际操作演示实现鼠标双击执行jar包修改jar包下面的MANIFEST.MF文件Manifest-Version:1.0Created-By:1.6.0_21(SunMicrosystemsInc.)Main-Class:主类名注意:主类名之前有一个空格演示结果本地调用的无状态SessionBean部署EJB部署Web应用本地调用的无状态SessionBean调用LocalSessionBean的功能目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度EJB3的一些主要简化EJB3的业务接口其实就是一个普通接口,不再需要继承EJBObject接口。EJB3的业务方法不再需要声明抛出RemoteException异常。EJB3可以不使用任何XML部署描述文件。打包EJB-JAR打包EJB时,Jar命令自动在该Jar包的根路径下生成META-INF文件夹,这个文件夹对EJB组件具有特殊意义。EJB组件中所有的部署描述文件、容器相关的部署描述文件都位于该目录下。EJBBean类主要的Annotation@Remote@Local@Stateful@Stateless@MessageDriven@ActivationConfigProperty关于配置文件可以用XML文件代替Annotation。不管是使用XML配置文件,还是使用Annotation修饰,其实所配置的信息本质上没有改变,只是承载的形式不同而已。根据实际需求选择使用即可。目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度开发有状态的SessionBean和开发无状态SessionBean的区别:如果使用Annotation,则将@Stateless改为@Stateful。如果使用XML配置文件,则将<session-type…/>元素的值由Stateless改为Stateful。有状态的SessionBean可以自己维护它与客户端之间的会话状态,甚至不再需要使用HTTPSession来跟踪会话状态。无状态SessionBean的系统开销小,有状态SessionBean的系统开销大。开发有状态的SessionBean实际操作演示有状态SessionBean的使用场景客户端的数量比较有限。客户端与服务器端之间的会话状态信息比较多。B/S程序尽量采用无状态SessionBean。目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度概述所谓EJB的生命周期,就是指EJB运行过程中会经历的系列状态,也就是EJB运行过程中所要经历的一个一个的阶段和状态。有状态SessionBean和无状态SessionBean的生命周期有少许差异。无状态SessionBean的生命周期无状态SessionBean的生命周期过程EJB容器开始创建无状态SessionBean的实例EJB容器对EJB实例执行依赖注入EJB容器调用EJB内以@PostConstruct修饰的生命周期方法EJB进入待命状态EJB容器调用EJB内以@PreDestory修饰的生命周期方法EJB实例被垃圾回收无状态SessionBean的生命周期无状态SessionBean的三个状态不存在状态待命状态被销毁状态有状态SessionBean的生命周期有状态SessionBean的四个状态不存在状态待命状态去活状态被销毁状态定制SessionBean的生命周期行为与无状态SessionBean的生命周期相关的Annotation:@PostConstruct@PreDestroy与有状态SessionBean的生命周期相关的Annotation:@PostActivate@PrePassivate@Remove的调用场景SessionBean生命周期方法的要求方法名可以任意不能定义任何形参返回值必须是void不能声明抛出checked异常相同类型的生命周期方法只能定义一个实际操作演示演示结果演示结果客户端调用remove方法注意事项运行客户端代码的时候,一定要把相应sessionbean的class文件加载上一般是在\WEB-INF\classes目录下面。只需要把sessionbean的接口的class文件复制进来即可(否则可能会出现类型转换的错误)。目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度概述在EJB3中,SessionBean从功能上大致可分为两类:用于封装底层的实体和JPA,访问底层的实体,其功能本质上相当于DAO。用于充当业务逻辑组件,是底层EAO对象的门面,系统控制器将调用它们的业务方法来处理用户请求。概述EJB的事务管理是建立在JTA事务基础之上的,因此应用服务器会负责处理事务管理的底层细节,而EJB开发者只要决定事务边界即可。事务边界的概念事务开始的位置和结束的位置事务管理分类CMT:容器管理事务BMT:程序管理事务概述Session
Bean的事务管理是通过在Bean实现类上使用@TransactionManagement和@TransactionAttribute这两个Annotation来实现的,也可以通过XML配置文件来实现。@TransactionManagement的value属性值BEAN:指定使用BMT事务管理CONTAINER:指定使用CMT事务管理容器管理事务实际操作演示注意系统异常,CMT会让事务回滚自定义异常,CMT不会让事务回滚因为容器已经接管事务,所以开发者不能再调用事务的相关执行操作MySql不支持CMT数据源配置异常执行结果正常执行结果Bean管理事务BMT事务管理则完全由程序员来控制事务代码,包括开始、结束和回滚事务,也就是由程序员通过编码来控制事务,主要是通过UserTransaction来控制事务开始、结束。本质上是JTA的使用。在EJB的Bean类中获得UserTransaction对象的方法:使用@Resource执行依赖注入通过JNDI查找使用EJBContext的getUserTransaction()方法获取Bean管理事务UserTransaction所包含的方法begin()commit()getStatus()rollback()setRollbackOnly()setTransactionTimeout(intseconds)实际操作演示目录EJB概述EJB的分类开发无状态的SessionBean发布SessionBean开发有状态的SessionBeanSessionBean的生命周期在SessionBean中使用事务拦截器和依赖注入配置EJB的引用使用计时器进行任务调度EJB3的拦截器EJB3没有提供AOP支持,所以在处理横切方法时不太方便,主要是使用拦截器来实现该功能。拦截器的本质是轻量级的AOP实现,它可以将多个业务方法中的通用逻辑抽离出来。EJB3中使用@AroundInvoke来修饰拦截器方法。EJB3的拦截器@AroundInvoke修饰方法的签名publicObject方法名(InvocationContextctx)throwsExceptionInvocationContext对象包含的方法getContextData();获取上下文getMethod();获取被拦截的方法getParameters();获取被拦截方法的参数getTarget();获取被拦截的SessionBean实例proceed();执行被拦截方法setParameters();修改被拦截方法的参数EJB3的拦截器开发及使用EJB拦截器的步骤定义拦截器类在EJB的类或方法上使用@Interceptors修饰在不想被拦截的方法之前使用@ExcludeClassInterceptors修改实际操作演示执行结果EJB3的拦截器也可以直接在EJB的实现类中写入拦截器的方法。方法定义及修饰和拦截器类中定义的一样。这样可以不必定义拦截器类。缺点:代码不好重用依赖注入概述依赖注入是在工厂模式的基础上进化而来的JavaEE5依赖注入的分类。资源依赖数据源、JMS消息源等的依赖使用@Resource、@Resources修饰EJB依赖EJB实例之间的依赖(即调用)使用@EJB、@EJBs修饰EJB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度特种车辆安装与安全培训合同3篇
- 西安医学高等专科学校《商业影片综合案例制作》2023-2024学年第一学期期末试卷
- 二零二五版1209两人合伙经营宠物美容与寄养中心协议3篇
- 二零二五年度珠宝首饰交易居间代理协议3篇
- 新疆机电职业技术学院《影视剧美术》2023-2024学年第一学期期末试卷
- 个体经销商专属销售授权协议(2024年度)版B版
- 通化师范学院《二维动画技术》2023-2024学年第一学期期末试卷
- 2024离婚债务分割详细合同书版B版
- 二零二五版厨具设备售后服务与技术培训合同3篇
- 2024版电源租赁协议
- 银行会计主管年度工作总结2024(30篇)
- 教师招聘(教育理论基础)考试题库(含答案)
- 2024年秋季学期学校办公室工作总结
- 上海市12校2025届高三第一次模拟考试英语试卷含解析
- 三年级数学(上)计算题专项练习附答案集锦
- 长亭送别完整版本
- 《铁路轨道维护》课件-更换道岔尖轨作业
- 股份代持协议书简版wps
- 职业学校视频监控存储系统解决方案
- 《销售心理学培训》课件
- 2024年安徽省公务员录用考试《行测》真题及解析
评论
0/150
提交评论