chapter_16-EJB

上传人:xia****ai 文档编号:243143981 上传时间:2024-09-16 格式:PPT 页数:41 大小:447.50KB
返回 下载 相关 举报
chapter_16-EJB_第1页
第1页 / 共41页
chapter_16-EJB_第2页
第2页 / 共41页
chapter_16-EJB_第3页
第3页 / 共41页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,EJB,什么是EJB,Enterprice JavaBeans是一个用于,分布式业务应用,的标准服务端组件模型。,采用Enterprice JavaBeans架构编写的应用是,可伸缩的、事务性的、多用户安全,的。采用ejb编写的这些应用,可以部署在任何支持Enterprice JavaBeans规范的服务器平台,如jboss、weblogic等。,EJB用来干什么?,EJB实际上是用于编写业务层代码。如果大家对于MVC (model-view-controller)结构的应用有所了解的话,我们知道一个基于MVC结构的应用应包含显示层、控制层和业务层, 假设我们采用ejb开发基于MVC结构的应用,那么ejb就是用于开发应用的业务层.,EJB目标,分布式应用标准组件,面向对象标准组件,满足Java的核心特性:一次编译,到处运行,减少重复开发,与其他Java API兼容,EJB3的分布式特点,EJB3的分布式特点,EJB的应用对象,应用的规模较大、而且增长速度快速,应用的伸缩性要求很高,应用可能需要除JSP以外的客户端访问,EJB3的运行环境,EJB3.0应用需要运行在,JDK1.6,以上版本。,EJB3.0应用需要运行在EJB容器里,下面是一些JavaEE应用服务器,JavaEE应用服务器包含Web容器和EJB容器。,JBoss,Glassfish,Weblogic,Websphere,EJB的发展历程,EJB1.0 (1998-03-24):,有状态会话Bean和无状态会话Bean。对于实体对象(称为实体Bean)的支持是可选的;,EJB1.0规范试图简化RMI的远程访问编程,但EJB1.0却引入了新的繁琐,开发编写一个EJB更难了,甚至比RMI更,复杂,;,EJB1.0强调客户机组件总是以远程方式来调用EJB。,EJB1.1 (1999-12-17):,要求厂商支持实体Bean,并且引入XML部署描述文件来描述EJB相关文件以及各文件之间的关系。,EJB的发展历程,EJB2.0 (2001-08-22):,引入了消息驱动Bean(即无远程接口的无状态会话Bean);,增加了容器管理持久性地实体Bean;,为会话Bean和实体Bean定义了本地接口和本地home接口;,定义了基于CORBA/IIOP的互操作协议来对会话/实体bean的远程调用。,EJB的发展历程,EJB2.1 (2003-11-24):,增加了对Web Service的支持;,增加了容器管理的定时服务,非常方便地提供任务调度支持;,对消息驱动Bean进行增强,使他能够支持除JMS之外的消息类型;,对EJB QL进行了增强,使他能够支持聚集函数、排序、纯量函数;,增加了部署描述符元素来支持消息从生产者到消费者之间的传递,消息生产者和消费者使用了共同的消息目的;,引入XML schema来替换定义了ejb-jar.xml部署描述文件的DTD。,EJB的发展历程,EJB3 (2009-12-10):,完全抛弃了EJB2.x中实体Bean的设计思想,仅保留原有的会话Bean和消息驱动Bean;,引进了全新的JPA规范作为持久化解决方案;,再次简化了EJB2.x中会话Bean的开发,会话Bean不再需要Home接口,只需提供远程或者本地的业务接口即可;,不再使用XML文件作为部署描述文件,而改为使用annotation(注解)来设置部署描述信息,进一步简化了EJB组件开发过程。,EJB的新生,简化的程序设计模型,用注解而不是描述文件,依赖注入与JNDI查找,标准、独立、OO的JPA,可单元测试的POJO组件,EJB3与Spring整合潜力,EJB的分类,在EJB2.X中分4种类型的EJB:,会话Bean(有状态会话Bean和无状态会话Bean);,实体Bean;,消息驱动Bean。,EJB3中:,取消了实体Bean,另外单独提出了JPA;,会话Bean(有状态会话Bean和无状态会话Bean);,消息驱动Bean。,EJB3中的Java EE容器,会话Bean(Session Bean),负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean(JPA)来完成对数据库的操作。,Session Bean的特性,并发与线程安全,方便的Web Service支持:支持基于SOAP的Web Service访问,事务和安全管理,会话Bean,分为:无状态和有状态的Session Bean。,无状态会话bean,一般使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用;那么,前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。,会话Bean,有状态会话bean,自动保存客户端调用之间的状态,无需添加额外的代码。从底层来看,使用一个或者多个实例变量记录客户端的状态。有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大。正因为它的实例只被一个用户使用, 用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的。,消息驱动bean(message Driven bean),本质上是由无状态会话Bean发展而来。两者的区别:,无状态会话bean:可以被本地或远程的客户端调用;,MDB:不允许被客户端调用,只是JMS消息的异步消费者。,相当于一个事件机制中的事件监听器。区别在于:,事件监听器监听的是来自于事件源的事件的发生;,消息驱动Bean则是监听JMS消息的到来。,特点:,不保存任何客户端的状态,对所有客户端都是等同的;,可以处理来自多个/种客户端的消息;,支持两种消息传递模式:点对点 (point-to-point) 和 发布与订阅 (publish-subscribe)。,如:POS系统向SCM系统发送的关于库存进货的消息处理过程。,实体和JPA,EJB3.0实际上完全抛弃了实体Bean。,实体不是旧版中的实体Bean,而是一种轻量级的持久化对象:,实体不具备持久化能力;,需JPA 来操作实体,完成对数据库的访问。,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束当前诸如Hibernate、TopLink等ORM框架(持久化器)各自为营的局面。,JPA定义的主要标准:,ORM元数据配置,:将实体映射到数据表;,EntityManager API,:对实体执行CRUD的标准API;,Java持久化查询语言 (JPQL),:用于操作持久化应用程序数据,。,EJB3中组件的整体组织,EJB3的新特性 简化EJB,使用注解替换部署描述文件:,Java元数据注解,部署描述文件 ejb-jar.xml,混合注解和部署描述文件,通用元数据注解,依赖注入:,使组件之间、组件与资源之间的依赖呈现为松散耦合。,Remote, Local, Stateless, Stateful等。,开发无状态会话Bean,会话Bean包括两类文件:,Bean类和业务接口,。,Bean类用于实现会话Bean的核心功能,会话Bean要实现哪些功能,需要在Bean类中实现这些方法。,业务接口用于声明哪些方法可以供客户端访问,,客户端对EJB的访问是通过接口进行的,与Bean类无关。,开发会话Bean,EJB3中,开发一个Session Bean必须遵循以下设计规范:,Session Bean应该至少有一个业务接口,该接口可以是本地(,Local,)接口,也可以是远程(,Remote,)接口,也可以两个都是。,Session Bean的实现类不能是抽象类,也不能用final进行修饰。,Session Bean必须提供一个无参的构造器。,开发会话Bean,远程调用,远程客户端应满足一下条件,EJB对远程客户端完全透明,客户端通过JNDI查询到EIB后,编写EJB的业务接口编程即可。,远程客户端无须与EJB运行在同一个JVM中,远程客户端可以是普通的Web组件,也可以是其他客户端。,本地调用,客户端必须与EJB运行在同一个JVM中,开发无状态会话Bean,业务接口业务方法,package EJBDemo,import javax.ejb.Remote;,Remote,public interface Greeter ,public String sayHi(String name);,远程接口,开发无状态会话Bean,业务方法应遵循的规则,若是一个允许远程调用的EJB,则所有业务方法中的形参、返回值的数据类型必须是可序列化的。,业务方法不应用final static进行修饰,同一个业务接口不能既作为Bean的本地业务接口又作为Bean的远程业务接口。,如果在业务接口上不使用Remote和Local,接口的类型可以在Bean类上指定:,例如有一个远程接口Calculator没有使用 Remote 可以在Bean类上通过remote(Calculator.class)来标注Calculator是远程接口。,开发无状态会话Bean,实现类,package EJBDemo,import javax.ejb.Stateless;,Stateless,public class GreeterBean implements Greeter ,Override,public String sayHi(String name) ,return name + Welcome!;,无状态Bean,开发无状态会话Bean,Stateless,专用于修饰无状态Session Bean。,在Stateless之后可以指定mappedName属性,Stateless(mappedName=string),用于指示EJB容器来生成给EJB的JNDI绑定名若接口方法使用Local修饰(本地方法),则mappedName将不起任何效用。,开发无状态会话Bean,部署到JBoss,JNDI绑定名:不指定mappedName,生成的JNDI绑定名为,“Bean类名/remote”,若指定了mappedName,则JBoss将会生成两个JNDI绑定名:,mappedName和Bean类名/remote,开发EJB客户端,通过JNDI查找获取EJB的引用,并面向接口编程,将该引用强制转换为给EJB的业务接口类型。,调用业务方法。,开发EJB客户端,创建客户端工程,复制JBoss安装目录中Client中的所有JAR文件到工程的CLASSPath上,复制EJB中的业务接口(包括整个包),开发EJB客户端,客户端代码,Hashtable ht=new Hashtable();,ht.put(java.naming.factory.initial,org.jnp.interfaces.NamingContextFactory);,ht.put(java.naming.provider.url,localhost:1099);,Context ctx;,try,/创建上下文环境,ctx = new InitialContext(ht);,Greeter s =(Greeter) ctx.lookup(GreeterBean/remote);,System.out.println(s.sayHi(Tome);,catch(Exception e),e.printStackTrace();,开发具有local接口session bean,Stateless,Local,public class HelloBean implements Hello ,public String say (String name) ,return name +说:你好!世界,这是我的第一个EJB3哦.;,通过local接口访问session bean,Local与Remote,Local,Remote,进程空间,同一进程,不同进程,性能,高,低,参数传递,传引用,传值,参数要求,不需要实现序列化,实现序列化接口,Jboss客户端Jar,不需要导入,需要导入,使用场合,JBoss中JSP,EJB,任何Java客户端,开发有状态EJB,开发规则同无状态EJB一样,只是将实现类的修饰符,Stateless,更换为,Stateful,即可。,有状态EJB和无状态EJB的区别。,无状态EJB由于不需要维护状态,因此系统开销很小:,EJB容器无需为每个客户分配一个实例。,容器无需为实例维护内部状态。,客户端也无需维护对EJB实例的引用。,在使用有状态EJB是,只应该lookup一次,然后一直要维护这个引用,否则就会产生多个实例。,开发有状态EJB,因此有状态EJB应满足一下条件时,再使用,客户数量很少,客户端与服务器之间的会话状态信息很多。,会话Bean的生命周期,无状态Session Bean的生命周期,由于它不需要维护状态,因此生命周期较短,不存在状态,待命状态,销毁状态,1.容器通过构造器创建EJB实例,2.执行依赖注入,3.执行PostConstruct回调方法,调用PreDestory回调方法,会话Bean的生命周期,有状态Session Bean的生命周期,不存在状态,待命状态,销毁状态,1.容器通过构造器创建EJB实例,2.执行依赖注入,3.执行PostConstruct回调方法,1.客户端调用remove方法,2.调用PreDestory回调方法,去活状态,超时,调用PrePassivate方法,调用PreActivate方法,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!