ejbnote(培训笔记).pdf
《ejbnote(培训笔记).pdf》由会员分享,可在线阅读,更多相关《ejbnote(培训笔记).pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章第一章EJBEJBEJBEJB(Enterprise(Enterprise(Enterprise(EnterpriseJavaJavaJavaJavaBean)Bean)Bean)Bean)-一一,什么是什么是EJBEJBEJBEJB?定义:它是一个标准,用于开发部署服务器端的分布式应用的组件框架.企业应用的三个发展阶段:1.Host/Terminal主机/终端(只接受请求和显示结果)优点:安全,性能高缺点:昂贵,维护困难(一般在 3000 万美元左右)2.Client/Server客户机/服务器客户机分为胖客户机和瘦客户机两种胖客户机C/S 结构瘦客户机B/S 结构(Browser/W
2、EB 服务器)3.Multi-layered多层布局结构客户层中间层数据库表示层+业务层+数据持久层2,3 优点:开方平台,价格便宜,维护方便,扩展性强缺点:存在一些安全隐患二二,什么是组件架构什么是组件架构?企业级程序:基础服务+应用逻辑企业级程序概念:1.围绕商业目的 2.表示层,基于网络连接在一起,分层,分布应用逻辑:业务流程基础服务:事务,安全,并发,缓存,持久化,公用的服务基础服务+应用逻辑|容器(服务器开发商)组件(开发人员)组件架构:协议,接口(Sun 提供),实现容器和组件接合到一起容器提供基础服务,组件负责业务逻辑处理,组件在容器中运行,容器依照相关配置文件或标准来调用组件,
3、并为组件提供中间件服务.三三,为什么要用为什么要用EJBEJBEJBEJB?EJB 能为我们提供中间件服务Remote Method Invocations(RMI)远程方法调用(跨越 JVM,网络,实现一个对象调用另一个对象的方法)Load Balancing 负载均衡(如多个 Tomcat 组成一个 Server 集群)第三章第三章 EnterpriseEnterpriseEnterpriseEnterpriseSessionSessionSessionSessionBeanBeanBeanBean-一一,什么是会话什么是会话BeanBeanBeanBean?1.用来建模业务流程的 EJB
4、 中的一种类型.2.会话 Bean 的生命周期很短(存在时间),主要取决于客户端与会话 Bean 的调用的时间长度.二二,会话会话BeanBeanBeanBean的类型的类型1.无状态会话 Bean.1).一次方法(单方法)完成一个相对完整的业务处理.2).不保存客户端的状态.(可以有属性,但属性不保存(维护)客户端的状态)3).无状态会话 Bean 可以非常方便的构造 pooling(池)4).无状态会话 Bean 的生命周期分两个阶段:不存在状态和就绪状态.1.调用缺省的构造器构造一个实例2.如果有一来流入则注入相应的资源3.如果有PostConstruct标注的方法,则完成初始化.4.E
5、JB实例处于就绪状态可以接收调用.5.当容器删除实例之前如果有PreDestroy 标注的方法则执行.(完成资源的释放)2.有状态会话 Bean.1).多次方法调用完成一个相对完整的业务处理过程.2).必需保存客户端的状态.例:ShoppingCart Bean3).有状态会话 Bean 不方便构造 Pooling,需要处理状态的钝化和激活.3.什么是 Session 的 Pooling?EJB容器会在容器起动的时候先实例化多个会话Bean的实例,构造一个Pooling(池).需要配置当客户端调用会话 Bean的时候 EJB容器会从 Pooing 中挑选一 隹障械氖道 突说饔4.会话 Bean
6、 以及其他的任何类型的 EJB Bean 类型,一个实例只会服务于一个客户(单线程),不要在 Bean 类中编写多线程序.-EJB 容器负责提供会话 Bean 的运行环境并且创建 Bean 的实例(调用 Bean 的缺省构造器).初始化及销毁 Bean 的实例.EJB 容器还要在相应的生命周期阶段回调相应的回调方法.注意:对于无状态会话 Bean 必需提供一个缺省的构造器-PostConstruct标注:1.用在方法之前2.标注 的方 法 可 定 义在 Bean 类里 面,也可 以定 义 在 单 独的 类 里(方法 需加 参 数InvocationContext).EJB Bean 类使用in
7、terceptors(回调方法名.class)3.标注的方法名称不作要求.4.标注的方法不能运行事物环境.怎样删除一个 Bean?1.容器可以自动删除.2.客户端主动删除.客户端调用一个方法:Remove即使客户端调用了这个方法 EJB容器也不真正的删除该实例.钝化(Swap out):有状态会话 Bean 的实例保存有客户端状态,当容器需要使用该实例为其他客户服务时,需要将客户端状态保存到持久化设备(硬盘).容器按照 LRU(最近最少被使用)算法将 Bean 以前的状态钝化,PrePassivate 标注:当 EJB容器钝化 EJB 实例状态之前被执行,主要是用于默认的钝化规则不起作用的情况
8、.默认情况下 EJB 容器会自动保存状态(钝化)的情况,需要满足以下条件(规则和 JAVA序列化一样):*类型为八大基本类型,非持久化*非持久化对象*业务接口的引用被自动保存*会话 Bean的上下文,事务处理对象,实体管理器,实体管理器工厂,定时对象,JNDI 的命名上下文.对于一些不能自动钝化或保存的对象,如数据库连接,Socket 套接字等,此时用PrePassivate来作钝化(释放连接)激活(Swap in):EJB 容器需要恢复实例之前的状态,需要从持久化设备(硬盘)读取钝化时保存的状态并将状态设置到实例上.PostActivate 标注:用来重新获得资源(默认的钝化规则不支持的资源
9、)+有状态会话 Bean 的生命周期-Lifecycleof Stateful Session Bean v3.01.不存在状态2.就绪状态1.方法不在事务上下文环境下运行,默认情况下运行在EJB容器中的EJB实例其业务方法都会有事务的支持.2.支持事务(如果方法需要事务支持,就处于这种状态,此时 Session Bean 需要实现同步接口,用来保证当事务失败时可以恢复原来状态)afterBegin():在事务刚刚起用时,容器调用该方法,用来保存现场.beforeCompletion()afterCompletion(true):在事务提交时被容器调用,如果参数值为false表示事务提交失败,
10、此时要处理状态的恢复.3.钝化状态=|钝化只有可能在无事务上下文的条件下运行|=第四章第四章 SessionSessionSessionSessionBeanBeanBeanBeanWebWebWebWebServicesServicesServicesServices-将会话将会话BeanBeanBeanBean发布为发布为WebWebWebWeb服务服务-一一.WEB.WEB.WEB.WEB服务的基本知识服务的基本知识(理解理解)1.什么是 WEB 服务?.程序间以一种标准的方式进行通讯(与程序的开发语言,运行的操作系统,硬件平台,网络关系无关).用 SOAP,WSDL 等协议通讯,以 X
11、ML文档方式进行数据交换的网络应用程序.2.WEB 服务的基本原理.三个角色+服务提供者:1实现服务,将服务用 WSDL 语言进行描述,并且可以将这个描述发布到服务注册器上.(需要使用 UDDI 的协议和 API).将服务打包并部署到 WEB服务器上.3接收请求处理结果,通过 SOAP 将结果返回给请求者.+服务注册器:提供服务的注册,使服务请求者可以查询并获取服务的描述文件(WSDL)+服务请求者:2使用服务提供者提供的服务.通过服务注册器(UDDI 服务器)来获得 WSDL文档.再使用 WSDL 文档将请求绑定到 SOAP,调用服务提供者的服务.-服务注册器/WSDL+UDDI/WSDL+
12、UDDI/SOAP服务请求者-服务提供者-+UDDI 服务器:统一描述发现集成服务器WSDL 语言(本质上是 XML 文档)WEB 服务描述语言(WebServices Describtion Language):1).指定服务的内容(方法,参数,返回值,数据类型)2).描述如何绑定3).提供访问服务的地址.+XXXX.wsdl 主要标签:type,message,operation,portType 来描述服务的内容.binding 描述服务如何绑定.service描述服务调用的地址.+SOAP 简单对象询问协议定义:WEB 服务的底层传输协议,服务的请求者,将请求绑定到该协议之上.服务的提
13、供者返回的数据也通过该协议进行传输.它是借助于 HTTP 协议来传输数据.能穿透防火墙.结构:也是一个 XML文档信封:|-|-|Head(可选)|-|Body(必需)|-|-|+如何将无状态会话 Bean 发布为 WEB 服务,只有无状态会话 Bean 可以发布为 WEB服务?1.两种方式编程(1).先写 Java 类,让容器生成 WSDL.(2).先写 WSDL,再用 WSDL 生成 Java类.2.编程步骤WebService标注该会话 Bean 发布为 Web 服务.serviceName:标注服务的名称.WebMethod标注该方法应该发布到 Web 服务描述文件之中.如果所有方法都
14、没加该标注,则所有的方法都会发布到 Web服务描述文件中.*发布 WEB 服务一般步骤:1.编写 EJB(无状态会话 Bean)2.给 EJB 添加 WEB 服务相关的标注(WebService,WebMethod)3.部署(容器生成 WSDL)4.测试 WEB 服务(利用工具,如终端管理工具)编写 WEB 服务客户端1.利用 WSDL 文档生成本地代理2.利用本地代理调用 WEB 服务*+WEB服务的特点:1.与平台无关(服务请求者,服务提供者,开发的语言,运行的平台,以及网络无关)TAG:-分布式应用三大框架:缺点1.DCOM(微软)平台限止2.CORBA(OMG,对象管理组织)太复杂,运
15、行的平台必需提供 CORBA 的基础架构3.EJB定义了实现,不能脱离 EJB 容器运行other.Web Service标准不够完善,性能低下(SOAP 协议较慢),soap 协议不支持事务,上下文传递-2.松藕合,易维护3.主要用于企业内部各种应用的集成,以及企业间应用的集成.二.EJBEJBEJBEJB发布为发布为WEBWEBWEBWEB服务服务(编程编程)第五章第五章 EentitiesEentitiesEentitiesEentities-实体实体-一一,实体的概念实体的概念实体是 JPA中用来做持久化操作的 Java类.TAG:-/序列化对象的持久化操作JDBC Hibernate
16、,O/Rmapping最新持久化方案:JPA(Java PersistenceAPI)EJB3.0 中新推出的 Java 持久化方案推出 JPA原因:(1).EJB2.0/2.1:实体 Bean,是一种 EJB,作用是负责持久化操作.缺点:性能低,开发复杂度大,对 O/R mapping 支持不够高,不能脱离 EJB 容器运行.(2).O/R mapping 产品:Hibernate,JDO,持久化 API.操作起来各不相同,不利于维护JPA 特点:A.JPA提供了一套标准的持久化 API 和查询语言,O/R mapping 产品作为持久化提供者在底层支持 JPA.B.JPA可以在容器中运行,
17、也可以脱离容器运行.C.JPA的持久化不倚赖于具体的持久化提供者.-二二,实体的特点实体的特点1.实体不能够被远程客户访问.(它不是 EJB)我们可以通过会话 Bean 操作它.2.实体的生命周期很长,只要数据库里的记录还在,实体就存在.3.实体主要是 糜诔志没三三,实体的编程实体的编程Entity(name=XXX)(必需提供)标注该类为一个实体类,name属性设定实体的名称,用于EQL查询.name属性不写代表和类名相同.Table标注表名Id(必需提供)标注主健GeneratedValue标注主健生成策略.不加代表自己提供主健.Column(name=xxxx)标注表中字段Hiberna
18、te 中:Session-MapJPA 中:EntityManager-PersistenceContext+EntityManager 实体管理器一个接口,用来对持久化上下文中的实体进行管理,实体的增,删,查,改,实体的生命周期管理,刷新机制.+如何获得 EntityManager?1.在容器内部使用,使用 PersistenceContext 来注入.PersistenceContextprivate EntityManager em;TAG=注入:让容器来负责构建一个实体管理器,并且将该实体管理器注入到 Bean 中.=2.在容器外部使用Persistence 构造一个 EntityMa
19、nagerFactory,然后再构造 EntityManager.Code:-EntityManagerFactory emf=Persistence.createEntityManagerFactory();EntityManager em=emf.createEntityManager();写 persistence.xml持久化单元名,在一个 persistence.xml 中可以有多个持久化单元,用名字来区分.如果只有一个就可以省略不写.:告诉容器持久化提供者是哪一个:数据源的位置(JNDI 名称):表的生成策略-TAG*EntityManager 中的一些方法persist(Obje
20、ct obj)相当于 Session 的 save()refresh(Object entity)相当于 Session 的 flush()remove(Object entity)相当于 Session 的 update()find(Class entityClass,Object primaryKey)例:find(Acount.class,aid)contains()判断受管对象是否存在setFlushMode()/getFlushMode()设置/获得刷新模式*+Persistence Context 持久化上下文一系列受管的实体的集合.分为两种:1.事务范围的持久化上下文(Trans
21、action-scoped)(默认)1.在默认情况下,EJB 中的每一个业务方法都会有事务的支持.2.当方法调用结束,事务也会结束,此时事务范围持久化上下文会关闭.(TS-PC 中的受管对象进入脱管状态(游离状态)2.扩展的持久化上下文(Extended)1.一般用于有状态的会话 Bean2.当会话 Bean 生命周期结束,E-PC 才会关闭.四四,实体的生命周期实体的生命周期1.暂态(瞬态)没有纳入持久化上下文,无主健值,数据库中无对应的记录.2.受管状态(持久化状态)纳入了持久化上下文,有主健值,数据库中有对应的记录.3.游离态没纳入持久化上下文,有主健值,有无记录不确定.4.删除状态调用
22、 EntityManager.remove()方法时,实体并没被删除,而是处于这种状态.纳入了持久化上下文,数据库中会删除记录,当调用 persist()方法可以重新恢复受管状态.persist()或 find()或 remove()clear()或 close()暂态-受管状态-游离态merge()remove()游离态-受管状态-删除状态refresh()将受管状态的对象同步到数据库flush()将数据库里同步的记录更新受管状态的对象实体的生命周期回调方法回调方法可以定义在一个单独的类中,方法的签名必 璐 舷嘤氖堤宓牟问1.回调:实体管理器对实体进行相关持久化操作时会产生相关的事件,持久化
23、提供者会查看实体是否有相应的回调方法,若有则调用.2.作用:在持久化操作时,我们可以做一些额外处理.PrePersist持久化前PostPersist 持久化后Version标注该属性为一个版本控制字段,该字段的值由持久化提供者维护.版本字段合法类型:int,java.lang.Integer,short,java.long.Short,long,java.lang.Long,java.util.TimestampEntityManager.createNamedQuery()命名查询(标准的 EQL 查询)一般用于结构固定的查询语句NamedQuery(name=findAll,query=
24、select object(a)from Account a)在实体类中加入标注,设置命名查询第六章第六章Message-DrivenMessage-DrivenMessage-DrivenMessage-DrivenBeanBeanBeanBean-消息驱动消息驱动BeanBeanBeanBean-定义:消息的接收和处理,是一个消息的消费者.一一,消息的背景知识消息的背景知识.消息:程序之间传递的数据.1.同步传递消息A 发送消息给 B,必须等待 B 处理完后才能继续运行.2.异步传递消息与同步相反.异步传递消息系统的作用是什么?异步编程,客户端发送请求给消息的接收方,不用等待接收方的反馈,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ejbnote 培训 笔记
限制150内