加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 阅读中心 > 软件学习

J2EE1.4新特性之EJB2.1的新特性

时间:2014-05-04 10:04:32  来源:不详  作者:佚名
 
  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编程模型和


  (一) 对于Web服务的支持


  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。

  1、JAX-RPC和EJB


  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来调


  

  

  图1 JAX-RPC 和 EJB                                              
  


  JAX-RPC同样也是一种
允许一个无状态的会话bean
并遵循JAX-RPC的协议标准
是很复杂,开发人员只需要
一旦Web服务的组件部署成
件是基于何种开发语言或开

新的组件接口的开发基础,这种
作用为一个Web服务组件。终点
。其中,将一个无状态的会话be
定义bean的类文件及远程接口,
功后,其方法可以被任何一个遵
发平台的,如.NET,PERL,Apac

接口称为终点(endpoint)接口,它
接口实现了javax.rmi.Remote接口
an作为Web组件来部署的过程并不
并将其部署至相关的应用程序中。
循SOAP协议的组件调用,而无论组
he Axis,C,C++及其他(见下图2)


  

  

  图2 通过SOAP和其他Web服务器通信                                      
  


  2、JAXM和EJB


  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服务,并利用无状态的
应用程序接口是相对灵活的,适合


  

  

  图3 JAXM-MDB                                                        
  


  (二)扩展消息驱动bean


  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标准的服务器上移植


  

  

  图4 JCA 1.5                                                          
  


  1、目标链接(destination linking)                       

  EJB 2.1另外一个新特
传送至另一个消息驱动bean
性就是目标链接。简单地说,EJ
的输入,即新目标。
B容器可以将一个消息服务的输出


  比如说,一个无状态的会话bean可以
应用系统的时候,开发人员可以将该目标
也就是说,开发人员可以使用目标链接技
整的工作流。
使用JMS发送一条异步消息到相应的目标,而在部署
连接到一个部署在同一个EJB容器的消息驱动bean。
术在部署期间定义消息流动,从而在商业平台描述完


  2、定时器服务机制                                                           

  定时器服务机制是一个
以在相应的定时器中登记,
在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,
    long intervalDuration,                              
    java.io.Serializable info);                    
    public Collection getTimers();              
    }                                                                        
    ……                                                                      
                                                                               
  在一些情况下,开发人员只需要定时
需要定时器间隔一定时间持续响应。比方
就是每隔60天的时间间隔就会响应一次。
器在特定的时间响应一次,而在其他一些情况下,则
说,上面我们提到的ejb就会每隔60天提醒用户,也


  一个无状态的会话bean
的ejbTimeout方法管理的。
或是实体bean可以设定多个定时
这种方法也可以使用可序列化的
器,但是一般来说它们都是由相同
对象来区分不同的定时器。

  (三)EJBQL的提高


  EJB 2.1也包括两项对
于EJBQL的提高,即order by语
句的加入和一些新函数。

  1、order by语句                                                     

  以前的EJB规格描述中
order by语句的应用了。比
照用户的系统ID排序:
并没有包含order by语句,而在
如说开发人员可以设计一个数据

EJB 2.1中,EJBQL已经开始支持
库用户信息查询,并将查询结果按


  SELECT OBJECT(I)                                              
   FROM Users as I                                              
   ORDER BY UID                                                    
                                                                               
  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                
  FROM Customer as I                                          
    WHERE I.city=NanJing                                  
    ORDER BY I.customer.name                          
                                                                               
  当一个EJBQL查询选出持续性变量时
续性变量。比如说,在上例中,开发人员
序。
,order by值应用于在该选出语句(select)出现的持
无法先选出用户的姓名,而是使用用户的年龄进行排


  2.新功能                                                                   

  新的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 COUNT(C)                                                
    FROM Customer as C                                      
    WHERE C.city=NanJing                                  
    下面的例子中,我们可以得到用户工资的总和:                                
    SELECT SUM(C.totalsalary)                        
    FROM Customer as C                                      
    WHERE C.city=NanJing                                  

  以上我们简要地介绍了
的提高,有兴趣的读者也可
EJB 2.1中的新特性,包括Web服
以参照最新的EJB规范描述来进
务、消息驱动bean和 EJBQL等方面
一步研究和实践。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
后牧工业区厂房1500平出租
后牧工业区厂房1500平
现实的童话公主艾米·罗森
现实的童话公主艾米·
科比专为大场面而生
科比专为大场面而生
“最美清洁工”原是《赤壁》宫女
“最美清洁工”原是《
相关文章
    无相关信息
栏目更新
栏目热门