EJB基础知识
- 格式:doc
- 大小:4.82 KB
- 文档页数:3
J3EE的组成J2EE的核心技术EJB — J2EE的基石:EJB服务器是:管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。
EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问。
一个EJB服务器必须提供支持对JNDI的名字服务和TS事务服务的可访问。
EJB分为两种:会话EJB和实体EJB,会话EJB向客户提供一定的服务,如:特定的商业逻辑、数据库查询等;而实体EJB则代表数据对象,通常代表的是数据表记录集的一行,一个实体EJB可以同时与多个客户进行交互。
CORBA技术:CORBA(Common Object Request Broker Architecture)是一个分布式对象体系结构,它独立于平台,也独立于语言。
在这个体系结构中,一个对象可以被本机上的客户或远程客户通过方法激活来存取。
客户(一个对象或应用)无须知道被调用对象(称为服务对象)的运行环境,也无须知道实现这个对象的编程语言,客户只要知道服务对象的逻辑地址和提供的接口。
这种互操作性的关键是IDL(Interface Definition Language、接口定义语言),IDL说明对象接口中的方法,这些方法可以被其它对象(或应用)激活。
RMI技术:RMI(Remote Method Invoke)是一种被EJB使用的更底层的协议,正如其名字所表示的那样,RMI协议调用远程对象上方法,使用序列化方式在客户端和服务器端的对象之间传递数据。
RMI和CORBA相比:两者的关键差别在于语言环境,Java RMI是一个分布式对象计算的纯Java解决方案(如,在Java RMI中,对象的接口用Java定义,而不是用IDL);其次,CORBA没有定义安全服务,而Java RMI继承了Java的安全性;再者,CORBA有不同的实现,不同的独立软件开发商的不同实现均有独特性,这使得在不同平台上的匹配比较困难,而且不是所有CORBA产品开发商都支持所有平台,而几乎所有平台都支持Java虚拟机,因此Java RMI具有更高的可移植性。
Ejb概念Ejb3.0定义了很多Annotation,覆盖了众多与持久化相关的概念,比如Bean的类型,依赖注入,事务管理,安全,回调,O-R映射,关系等等Ejb的几个特性依赖注入(DI)通过定义@Inject,@EJB,@Resource等annotation,这些依赖关系现在可以由容器来注入到EJB可选的回调机制开发者们现在可以仅仅实现他们感兴趣的那些回调方法了,通过定义@PostConstruct、@PreDestroy,@PrePersist或者PostPersist。
开发者们可以映射任何JavaBean或者回调类得方法,让他们接收这些文件简化的持久化模型和改良的查询可以脱离容器使用什么情况下需要企业Bean企业Bean运行在Ejb容器中,企业Bean实际上就是一个封装了业务逻辑的java类Why Ejb?最重要的理由:分布式!分布式对象之间互相协作,完成特定的业务功能,分布式对象之间应实现分布透明性(或者位置透明性),即在客户端代码中无需指定分布式对象的位置(通过配置来解决)应用程序需要支持不同客户端,只需要少量的代码,就可以让远程客户端访问到企业Bean,如果你的应用需要进行分布式部署,如果你的分布式对象需要支持事务,如果你的关键逻辑需要能够支持多种不同类型的客户端,那么Ejb将会是一个很好的选择.当在开发企业Bean之前,首先要做的第一个决定是:Ejb要支持什么样的客户端远程客户端:客户端和其调用的Ejb对象不在一个JVM进程中本地客户端:客户端和其调用的Ejb对象在一个JVM进程中WebService客户端远程方式:客户端与服务器之间通讯时,数据需要序列化之后用传值的方式传输本地方式:客户端与服务器之间通讯时,数据直接用传址的方式传输分布式对象之间的事务支持会话bean(Session Bean)即从客户端获得Ejb对象开始,然后调用Ejb方法(可以多次),直到客户端生命周期结束,或者客户端释放了Ejb对象为止,成为一次会话,随着会话的终止,Ejb对象也有可能被Ejb容器销毁什么叫有状态的会话Bean即Ejb能够为同一个客户端在多次请求之间保持状态信息新建Ejb项目过程下载jboss解压在D盘启用myeclipse8.0,加载jboss新建一个Ejb工程(服务端)新建一个java工程(客户端),然后引入D:\jboss-4.2.3.GA\client的所有jar包和Ejb工程的接口包,在src目录下新建jdni.properties文件,内容如下java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfacesjava.naming.provider.url=localhost案例1,有状态的会话Bean和无状态的会话Bean的区别有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。
EJBEJB(Enterprise Java Bean,企业Bean),是基于Java的服务器端组件架构技术。
借助于EJB,开发者能够轻松的构件企业级的、分布式组件应用。
与此同时,在不用自身开发复杂分布式组件框架的前提下,开发者能够开发架构灵活、运行可靠及安全的应用系统。
对于服务器端开发而言,EJB引入了快速应用开发(Rapid Application Development,RAD)模型。
因此,在Java应用服务器提供商提供的肯定不是基础框架(比如,J2EE应用服务器)的基础之上,开发者能够快速、轻松地构建服务器端组件。
EJB的重要设计初衷是保证应用能够在任意提供商开发的企业中间件服务上畅行无阻,而且其便携性、可重用性都是一流的【1】。
背景简单地讲,EJB就是组件,何谓组件?1966年,面向组件编程(ECOOP)的欧洲工作组提出了以下定义:“软件组件是一个具有契约式特定接口和显示语境从属的组成单元。
软件组件能被独立地部署并从属于第三方的组成。
”从定义中能看出三个很重要的特性:●特定接口●显示从属●部署能力软件组件:宿主于普林斯顿大学的在线服务(/perl/webwn)将组件(component)定义的非常简单:事物的抽象部分(an abstract part of something)。
软件组件是组件的具体化过程,它是事物的具体部分。
软件组件是由程序代码构成的,它将抽象概念的行为进行具体化。
通常,我们能够在现实生活中找到这些抽象概念对应的真实基础。
比如,MortgageDebt组件能够将现实生活中实际发生的抵押贷款过程展示清楚,而且它还会讲涉及到的人、公司等信息也描述出来。
当然,组件与对象是两种不同的事物,它们存活于独立空间。
下面给出他们间的差异性。
组件是非常独立的实体。
只要真正掌握了组件的具体语义,开发者才能够在类似应用或完全不同的应用中重用它们。
通常,组件本身都含有运行自身所需的各类文件,因此它们能够独立于具体应用,而且能够在不同场合重用它们。
EJB是什么Java使⽤EJB容器的详细概述博客分类:1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"?既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务集群"和"企业级开发"吧!这个问题其实挺关键的,因为J2EE 中并没有说明⽩,也没有具体的指标或者事例告诉⼴⼤程序员什么时候⽤EJB 什么时候不⽤。
于是⼤家都产⽣⼀些联想,认为EJB"分布式运算"指得是"负载均衡"提⾼系统的运⾏效率。
然⽽,估计很多⼈都搞错了,这个"服务群集"和"分布式运算"并没有根本解决运⾏负载的问题,尤其是针对的应⽤系统。
为什么?我们先把EJB 打回原形给⼤家来慢慢分析。
2. 把EJB 掰开了揉碎了我们把EJB 的概念好好的分析⼀下,看看能发现些什么蛛丝马迹。
3.1 EJB 概念的剖析我们先看⼀下,EJB 的官⽅解释:商务软件的核⼼部分是它的业务逻辑。
业务逻辑抽象了整个商务过程的流程,并使⽤计算机语⾔将他们实现。
……J2EE 对于这个问题的处理⽅法是将业务逻辑从客户端软件中抽取出来,封装在⼀个组件中。
这个组件运⾏在⼀个独⽴的服务器上,客户端软件通过⽹络调⽤组件提供的服务以实现业务逻辑,⽽客户端软件的功能单纯到只负责发送调⽤请求和显⽰处理结果。
在J2EE 中,这个运⾏在⼀个独⽴的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise Bean)组件。
这其中我们主要关注这么⼏点,我们来逐条剖析:剖析1:所谓:"业务逻辑"我们注意到在EJB 的概念中主要提到的就是"业务逻辑"的封装,⽽这个业务逻辑到底是什么?说的那么悬乎,其实这个所谓的"业务逻辑"我们完全可以理解成执⾏特定任务的"类"。
从零开始到您如何成为EJB专家一、Server方组件结构EJB是一种Server方的组件结构,它可以非常简单的开发基于Java的企业级的分布式对象应用。
使用EJB可以开发出易升级的、可靠的、安全的应用程序,而不用独立开发复杂的分布式对象框架;EJB可以迅速开发服务方应用程序,快速建立基于Java的服务方组件。
EJB被设计用来实现企业中间件服务的可移植和可重用性。
假如你对企业计算很生疏,这些概念对你很有用,EJB是个很复杂的主题,应该被充分的解释。
在这一章我们讨论有关EJB的主要概念。
首先,我们先讨论开发企业级软件是为了干什么?为什么说像EJB的预包装的分布式对象体系可以简化你的生活?在讨论中,你将会对服务端的组件结构有宏观的了解服务端组件结构的需要,我们必须首先了解开发者在建立和配置服务端环境下的组件时通常需要什么?同时,我们将解决围绕服务端开发所出现的问题,将看到建立一套像EJB 标准体系结构的必要性。
软件组件是一个软件组件是一段代码,它用来实现一系列定义好的接口。
组件不是完整的。
应用程序,它们不能被独立运行。
更贴切的说,它们是看作是许多大型问题分割成的小问题。
软件组件的思想非常有用。
公司可以买来定义好的可用来解决某一问题的模块,将它和其他组件一起编译用以解决大型问题。
组件结构是为了使组件开发过程更加轻易,需要为建立、治理、维持组件建立规范。
开发组件的开发工具,是在建立组件时,应该答应开发者集中精力在组件的背后开发核心逻辑,使开发者不需要考虑太多的标准细节问题,从而快速开发应用程序。
例如IDE:Symantec 的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,这些工具可以帮助你快速的建立和调试组件。
治理配置好的组件容器,组件容器为你的组件运行提供了一个运行时环境。
同时也提供了一套供大多数组件使用的通用服务。
配置和维持组件工具,从组件提供商购买了组件后,还需要有一套工具来帮助配置和维持这些组件。
精通ejb【一】总揽一、Server方组件结构EJB是一种Server方的组件结构,它可以非常简单的开发基于java的企业级的分布式对象应用。
使用EJB 可以开发出易升级的、可靠的、安全的应用程序,而不用独立开发复杂的分布式对象框架;EJB可以迅速开发服务方应用程序,快速建立基于java的服务方组件。
EJB被设计用来实现企业中间件服务的可移植和可重用性。
如果你对企业计算很陌生,这些概念对你很有用,EJB是个很复杂的主题,应该被充分的解释。
在这一章我们讨论有关EJB的主要概念。
首先,我们先讨论开发企业级软件是为了干什么?为什么说像EJB的预包装的分布式对象体系可以简化你的生活?在讨论中,你将会对服务端的组件结构有宏观的了解。
服务端组件结构的需要我们必须首先了解开发者在建立和配置服务端环境下的组件时通常需要什么?同时,我们将解决围绕服务端开发所出现的问题,将看到建立一套像EJB标准体系结构的必要性。
软件组件——一个软件组件是一段代码,它用来实现一系列定义好的接口。
组件不是完整的应用程序——它们不能被独立运行。
更贴切的说,它们是看作是许多大型问题分割成的小问题。
软件组件的思想非常有用。
公司可以买来定义好的可用来解决某一问题的模块,将它和其他组件一起编译用以解决大型问题。
组件结构——为了使组件开发过程更加容易,需要为建立、管理、维持组件建立规范。
开发组件的开发工具——建立组件时,应该允许开发者集中精力在组件的背后开发核心逻辑,使开发者不需要考虑太多的标准细节问题,从而快速开发应用程序。
例如IDE:Symantec的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,这些工具可以帮助你快速的建立和调试组件。
管理配置好的组件容器——组件容器为你的组件运行提供了一个运行时环境。
同时也提供了一套供大多数组件使用的通用服务。
配置和维持组件工具——从组件提供商购买了组件后,还需要有一套工具来帮助配置和维持这些组件。
Sun公司的Sun ONE(Open Net Environment,开放服务网络环境)和Microsoft公司的.NET 是两大Web服务技术体系。
Enterprise JavaBeans是J2EE体系结构的重要组成部分,是服务器端的可重用的组件模型。
EJB是运行于服务器端的Web层组件,也是EAI(企业
应用集成)的设计和实施中常用的事务性中间件。
会话Bean技术:
对于客户端,会话Bean被看作一种对象,该对象用于实现某些客户端需要的特殊的业务逻辑,这些业务逻辑
一般地与一些事务或状态管理需求联系在一起。
任何给定的会话对象只能为一个客户端所用。
如果会话对象
是无状态的,那么它可以再生和重用。
每一个会话Bean都需要提供一个Home接口,该接口可用于客户端编程,以调用基本的Bean生命周期方法。
每一个会话Bean的Home接口必须定义至少一个方法,即create<method>,它用于创建一个会话对象的实例,
其中的<method>可以是使用create作为前缀的任意方法名和任意参数组合。
对于有状态的会话Bean,我们可以用任意有效个数的参数组合来定义许许多多的create 方法,对于无状态会话
只有一种create方法,它只带有一个方法名,而不能带有任何参数。
每一个会话Bean还需要提供一个Remote接口,该接口用于客户端编程,以调用所有特定的业务方法,会话Bean
已被构建成支持这些方法。
这些方法可以使用任意方法名和参数。
实体Bean技术:
Home(本地)接口
每一种实体Bean都需要提供一个Home接口,客户端使用该接口调用基本的EJB生命周期方法。
在运行过程中,每部署一次实体Bean,EJB容器只创建该接口的单独一个副本,通过该接口,可以创建、查找、销毁EJB的所有实例。
实体Bean的Home接口支持4种不同类的方法:create(创建)、finder(查找)、remove(清除)、home(本地)
最后一种方法只适用于J2EE1.3
1.Create方法用于创建实体Bean的一个实例,可能存在0个或多个Create方法。
该方法的返回类型必须是实体Bean的Remote接口。
2.Finder方法用于通过Home接口查找实体Bean实例的位置,其名称为findByPrimaryKey(primarykey)
3.客户端使用Remove方法销毁它们对实体Bean的引用。
在基本的EJB接口中已经为实体Bean定义好了必要的remove方法,因而不需要重新设计。
4.Home方法用于确定未应用于任何特定的实体Bean实例的业务逻辑。
Remote(远程)接口
每一个实体Bean也需要提供一个Remote接口,客户端使用该接口调用针对特殊实体Bean实例的业务方法。
5.主键类
为了在基础数据库中查找实体Bean,需要使用一种被称为主键的独一无二的键标识每一个实体Bean。
每一个实体Bean都必须带有一个已标识好的主键类,以保存需要使用主键处理查找的方法。
6.实现类
实现类也叫实体Bean类,它是在Home和Remote接口中声明的方法及必需的生命周期方法的真实实现。
必须包含的方法:
setEntityContext/unsetEntityContext方法:由EJB容器调用。
setEntityContext方法允许实体Bean在局部实例变量中存储环境信息:而unsetEntityContext方法则在终止实体Bean的执行时被调用,它允许释放
任何必要的资源。
ejbCreate方法:同Home接口中的create方法匹配。
ejbPostCreate方法也必须匹配。
ejbRemove方法:该方法不能带有任何参数。
当调用接口的某个remove方法时,或当EJB 容器启动对其自身的
清除操作时,就会调用ejbRemove方法。
对于实体Bean,该方法也可等价称为ejbPassivate.
ejbPassivate/ejbActivate方法:这些方法只在实例钝化/激活过程中调用。
ejbLoad/ejbStore方法:这些方法必须存在,并在不同时刻由EJB容器调用,以保证实体Bean中的永久域与
数据库中的数据保持同步。
业务方法:所有在Remote接口中定义的业务方法,都必须与在Bean类中定义的业务方法在方法名和参数上精确匹配。
ejbSelect方法,不会通过任何接口对客户端公开,但它只存在于实现类中,这些方法一般从其他实体Bean
业务方法中调用,并且总是被声明成抽象方法,其功能是通过使用EJB QL语句实现的,这些语句是在部署时
解释执行的,它会为用户自动生成必要的代码。
实体Bean常用脚本
使用实体Bean的一个标准脚本是让客户端执行如下操作:
1.调用javax.rmi.PortableRemoteObject.narrow(...)方法以引用Home接口
2.此时可调用home或finder方法,如果您试图访问现有数据,finder方法将为您想要的EJB实例传递回一个Remote接口。
在这种情况下,应用服务器会自动为您创建想要的实例。
3.如果您需要的实例是用于您计划添加到数据库中的新数据的,可以使用Home接口引用为实体Bean调用想要的
create方法。
将会执行ejbCreate和ejbPostCreate这两种方法,并为实体返回对Remote 接口的引用。
4.使用Remote接口引用调用任意数量的业务方法。
5.在Home接口或Remote接口上调用remove方法。
显示上面介绍的脚本中包含的代码:
InitialContext initCtx = new InitialContext();
Object objRef = initCtx.lookup("java:comp/env/ejb/Profile");
ProfileHome profileHome = (ProfileHome)PortableRemoteObject.narrow(objRef,ProfileHome.class);
Profile profileRemote = profileHome.findByPrimaryKey(username);
消息驱动Bean技术
消息驱动Bean是一个组件,可以提供业务逻辑来处理任何发送给它的JMS消息。
实现类中包含的生存周期方法:
setMessageDrivenContext:这个方法必须存在,可以被EJB容器调用,它允许EJB存储本地实例变量中的环境
信息。
ejbCreate:应该只有一个具有这个名称的方法,没有参数也没有返回类型。
EJB容器用这个方法创建消息驱动
Bean的新实例。
ejbRemove:应该只有一个具有这个名称的方法,没有参数也没有返回类型。
EJB容器用这个方法删除消息驱动
Bean的实例。
onMessage:应该只有一个具有这个名称的方法,有一个单个参数,即JMS消息,没有返回类型。
JMS是一种J2EE应用程序编程接口(J2EE Application Programming Interface,即APIs)它给基于消息
的系统提供了一个API,J2EE1.3中的消息驱动Beans必须使用JMS进行通信。
JMS支持两种类型的通信:
点对点:
发送-预定:。