|
J2EE1.4新特性之EJB2.1的新特性 |
作者:佚名 发布时间:2005-04-02 来源:不详
|
EJB 2.1中的新特性主 应用程序接口(JAX-RPC和JA 中运用无状态的bean和消息 发平台。
|
要集中于有关SOAP和WSDL的Web XM)。它们可以用来与其他Web服 驱动bean。也就是说,基于新的
|
服务,包括两种新推出的Web服务 务模块通信,并适当地在Web模块 标准,EJB将逐渐成为Web服务的开
|
在支持Web服务的同时 该编程模型目前已经扩展至 了一种新的计时器服务,使 员在组件之间控制消息的流
|
,EJB 2.1也改进了EJB-QL以及 Java消息服务之上以支持任何一 得开发人员可以设计计时事件, 动之用。
|
消息驱动bean(MDB)的编程模型。 种消息系统。另外,新标准也推出 并提供消息联接的接口,供开发人
|
这里我们并不讨论每个 如果读者有兴趣,可以参阅 EJBQL三个方面分别加以说
|
特性的太多细节,只是想做一简 EJB 2.1的相关规格说明。下面 明如下:
|
单的介绍,起到抛砖引玉的作用。 我们就Web服务、MDB编程模型和
|
EJB 2.1新标准推出的最大原动力就 状态的会话bean和消息驱动bean来开发基 使用相关的服务。
|
是对于Web服务的支持。EJB 2.1允许编程人员利用无 于SOAP的Web服务,并使得基于SOAP 1.1的用户可以
|
应该说明的是,基于其他Web服务平 法,例如MS.NET,PERL,Apache Axis。 的跨平台兼容性。
|
台的SOAP客户通常无法激活无状态的会话 bean的方 而在EJB 2.1中的Web服务接口则提供了一个前所未有
|
EJB 2.1中Web服务接口
|
是基于两个新推出的J2EE SOAP
|
技术的,即JAX-RPC和JAXM。
|
JAX-RPC,即Java API for XML-RPC RMI技术和Java-RMI IIOP技术类似,不同
|
,是基于SOAP的Java RMI技术的。它与以前的 Java 之处是使用了SOAP作为底层协议。
|
实现JAX-RPC的系统必 、消息格式和互联网协议。 JAX-RPC技术来激活Web服务 用.NET Web服务的方法(见
|
须支持HTTP之上的RPC编码机制 各种EJB,包括会话bean、实体b 的操作。比如说,一个无状态的 下图1)。
|
,另外也应该支持其他的编码机制 ean和消息驱动bean都可以使用 会话bean就可以利用JAX-RPC来调
|
JAX-RPC同样也是一种 允许一个无状态的会话bean 并遵循JAX-RPC的协议标准 是很复杂,开发人员只需要 一旦Web服务的组件部署成 件是基于何种开发语言或开 。
|
新的组件接口的开发基础,这种 作用为一个Web服务组件。终点 。其中,将一个无状态的会话be 定义bean的类文件及远程接口, 功后,其方法可以被任何一个遵 发平台的,如.NET,PERL,Apac
|
接口称为终点(endpoint)接口,它 接口实现了javax.rmi.Remote接口 an作为Web组件来部署的过程并不 并将其部署至相关的应用程序中。 循SOAP协议的组件调用,而无论组 he Axis,C,C++及其他(见下图2)
|
JAXM(Java API for XM 服务)的消息通信的应用程 的应用程序接口,而JAXM则 XML文件的SOAP消息为主, Attachments API forJava) 的XML结构。
|
L Messaging)是一种类似于JMS( 序接口。JMS是一种用于在面向 是在Web服务中传递消息的应用 所以可以说JAXM是面向文档的。 集成,接收和管理SOAP消息,其
|
Java Message Service,Java消息 消息的中间件之上发送和接收消息 程序接口。因为它主要以传输基于 JAXM用户利用SAAJ(SOAP with 中SAAJ主要是用来管理SOAP消息中
|
JAXM技术与上面所说的JAX-RPC存在 Java RMI代理(proxy)之间隐藏SOAP消息 即方法、参数和返回值。而在JAXM的作用 SOAP消息。类似于JAX-RPC,JAXM可以用 。比如说,一个enterprise bean可以利
|
很大的不同,后者主要使用方法调用的机制,并在 。基于JAX-RPC技术,开发人员只会看见远程接口, 下,开发人员将直接处理SOAP协议并开发自己专用的 来与任何遵循SOAP开发的Web服务组件交换SOAP消息 用JAXM来与用PERL开发的Web服务交换SOAP消息。
|
现在一些EJB 2.1开发人员推荐使用J 的消息驱动bean(JAXM-based message-dr 并作用为Web服务的组件。基于JAXM-MDB 即可接收可发送的消息传输接口(见下图3 到任意类型的消息系统,这种想法应该是
|
AXM作为开发新的消息驱动bean的基础,即基于JAXM iven bean,JAXM-MDB)。JAXM-MDB可以传输SOAP消息 ,开发人员可以实现单工的消息传输接口,或双工, )。就目前来说,因为消息驱动bean组件可以广泛用 可行的。
|
JAX-RPC和JAXM可以允 会话bean和消息驱动bean来 于将EJB模块扩展为Web服务
|
许enterprise bean来访问其他 开发相应的Web服务模块。这些 框架。
|
平台的Web服务,并利用无状态的 应用程序接口是相对灵活的,适合
|
EJB 2.0引进了消息驱 J2EE平台可以利用异步消息
|
动bean,可以处理遵循JMS多方 机制,并改变了服务器编程的体
|
的异步消息。基于消息驱动bean, 系结构。
|
EJB 2.1将基于JMS的消息驱动bean编 系统仍必须支持基于JMS的消息驱动bean( ,一个Web服务模块可以支持基于JAXM的 SNMP的设备控制、peer对peer的协议。另 CICS,IMS,openUTM的桥梁。
|
程模型扩展为其他消息系统。基于EJB2.1开发的应用 JMS-MDB),当然也支持其他类型的消息系统。比如说 消息驱动bean,该模块也可以支持SMTP信件协议、 外,消息驱动bean也可以作为连接相关OLTP系统如
|
另外还要说明一点,由 Connector Architecture, 1.5通常是用于定义商业信 定义一个基于SMTP的消息驱 的(如下图4)。
|
于新推出的消息驱动bean组件是 JCA1.5),所以该组件具有在消 息系统中的可移植程序模型。比 动bean,而该bean是可以在所有
|
基于J2EE连接器体系结构的(Java 息系统之间良好的移植性。JCA 如说,开发人员可以利用JCA 1.5 遵循EJB 2.1标准的服务器上移植
|
| 1、目标链接(destination linking) |
EJB 2.1另外一个新特 传送至另一个消息驱动bean
|
性就是目标链接。简单地说,EJ 的输入,即新目标。
|
B容器可以将一个消息服务的输出
|
比如说,一个无状态的会话bean可以 应用系统的时候,开发人员可以将该目标 也就是说,开发人员可以使用目标链接技 整的工作流。
|
使用JMS发送一条异步消息到相应的目标,而在部署 连接到一个部署在同一个EJB容器的消息驱动bean。 术在部署期间定义消息流动,从而在商业平台描述完
|
定时器服务机制是一个 以在相应的定时器中登记,
|
在EJB容器开发的调度系统。一 从而在未来一定的时间点被定时
|
个无状态的会话bean或实体bean可 器通知。
|
定时器服务机制使用的是一个简单的 bean必须实现 TimedObject接口:
|
程序框架。作为其基础的无状态的会话bean 或实体
|
public interface
|
javax.ejb.TimedObject{
|
| public void ejbTimeout(Timer timer); |
当一个bean的相关时间 法中,开发人员将根据需求 个每隔60天触发的定时器, 会调用该定时器的ejbTimeo 消息,后者将会向用户的电 ,比如可以取消一个已定的 将一个定时器对象联系到一 当定时器响应的时候,开发
|
点到达的时候,容器将会调用定 定义其应用逻辑。 比如说,一 以用来提醒用户应该修改密码。 ut()方法,而这个实体bean就会 子信箱发送要求修改密码的emai 定时器,查询在触发之前还有多 个可序列化的对象,从而在定时 人员可以访问一定的应用信息并
|
时器的ejbTimeout()方法在这个方 个关于用户信息的实体bean具有一 这样的话,每隔60天,EJB容器就 向相关的mailer模块发送一条JMS l。Timer对象还具有一些其他特性 少时间等。另外,开发人员还可以 器中存储一些与应用相关的信息。 决定如何处理相关的时间。
|
EJB可以通过TimerService接口来访 bean必须使用该接口来设定它们自己的定 EJBContext.getTimerService()方法的程
|
问EJB容器的定时器服务,也就是说实体bean和会话 时器。为了达到这一目的,bean必须首先调用 序示例如下:
|
public interface
|
javax.ejb.TimerService{
|
public Timer createTimer(jav
|
a.util.Date expiration,
|
| java.iO.Serializable info); |
public Timer createTimer(jav
|
a.util.Date initialExpiration,
|
long intervalDur
|
ation,java.io.Serializable i
|
nfo);
|
public Timer cre
|
ateTimer(long duration,
|
| java.io.Serializable info); |
public Timer createTimer(lon
|
g initialDuration,
|
| java.io.Serializable info); |
| public Collection getTimers(); |
在一些情况下,开发人员只需要定时 需要定时器间隔一定时间持续响应。比方 就是每隔60天的时间间隔就会响应一次。
|
器在特定的时间响应一次,而在其他一些情况下,则 说,上面我们提到的ejb就会每隔60天提醒用户,也
|
一个无状态的会话bean 的ejbTimeout方法管理的。
|
或是实体bean可以设定多个定时 这种方法也可以使用可序列化的
|
器,但是一般来说它们都是由相同 对象来区分不同的定时器。
|
EJB 2.1也包括两项对
|
于EJBQL的提高,即order by语
|
句的加入和一些新函数。
|
以前的EJB规格描述中 order by语句的应用了。比 照用户的系统ID排序:
|
并没有包含order by语句,而在 如说开发人员可以设计一个数据
|
EJB 2.1中,EJBQL已经开始支持 库用户信息查询,并将查询结果按
|
order by语句通常会写 常来说在order by语句的标 管理的持久性变量结束。这 持久性变量。在order by语 升的次序,其中上升次序是
|
在EJB远程或本地接口的查找(fi 识符(identifier)都是路径表达 里需要说明的是,order by语句 句中,开发人员也可以使用DESC 缺省值。
|
nder)或选择(select)语句中。通 式(path expression),并以容器 只能应用于相关ejb的容器管理的 或ASC来指定排列结果时下降或上
|
开发人员也可以在sele 中,该查询选出了具有特定
|
ct方法中,即选出持久性变量时 住址的用户,并按照姓名排序:
|
使用order by语句。在下面的例子
|
| SELECT DISTINCT I.customer.name |
当一个EJBQL查询选出持续性变量时 续性变量。比如说,在上例中,开发人员 序。
|
,order by值应用于在该选出语句(select)出现的持 无法先选出用户的姓名,而是使用用户的年龄进行排
|
新的EJBQL对于where语 有的concat,substring,l
|
句和select语句都加入了一些新 ocate,length,abs和sqrt函数
|
的函数。 在where语句中,除了已 ,EJB2.1加入了mod函数。
|
EJB 2.1也同时向selec ,这些函数的功能都和SQL- COUNT,MAX和MIN函数则作 。Count则可以应用于一个
|
t语句中加入了5个新的集合类函 92中相应的定义类似。不同的是 用于任意一个容器管理的持久性 容器管理的持久性变量或是EJB
|
数:AVG,COUNT,MAX,MIN和SUM ,AVG和SUM只作用于数字类型,而 变量,包括日期类型和字符串类型 标识符。
|
比方说,我们可以定义一个查询,以 用在标识符上,而无需OBJECT()操作:
|
得到所有住在南京的用户。这里COUNT函数直接地作
|
| SELECT SUM(C.totalsalary) |
以上我们简要地介绍了 的提高,有兴趣的读者也可
|
EJB 2.1中的新特性,包括Web服 以参照最新的EJB规范描述来进
|
务、消息驱动bean和 EJBQL等方面 一步研究和实践。
|
|
| |
|
|
|