全面研读 EJB 2.0EJB QL 也用于一种称为 ejbSelect 方法的新查询方法中,该方法类似于查找方法,只是它仅供 bean 类使用。该方法不在本地接口中声明,所以也不显露给客户机。此外,ejbSelect 方法可返回范围更大的各种值,而不仅限于 bean 本身的远程接口类型。 存在两种选择方法:ejbSelect<METHOD> 和 ejbSelect<METHOD>InEntity。ejbSelect<METHOD> 方法是全局执行的,这是指这种方法并非专用于执行该方法的 bean实例。ejbSelect<METHOD>InEntity 方法则专用于执行该方法的实体实例。这些选择方法在 bean 类中被声明为抽象方法,并在这些类的业务方法中使用。下面是ejbSelect<METHOD> 方法和 ejbSelect<METHOD>InEntity方法的示例,同时说明了可以如何在业务方法中使用它们。
在上面的声明中,两种选择方法运行于不同的范围。ejbSelectInvestmentsInEntity()仅在当前的 Employee bean 实例上执行,所以它只返回雇员的风险投资。
另一方面,ejbSelect<METHOD> 方法的范围则是全局性的,所以同一个查询将返回整个企业内所有雇员的全部风险投资。ejbSelect<METHOD>InEntity 选择方法可以返回 bean的远程类型(如在上面的查询中那样)、从属对象或任何其它 Java 类型。另一方面,全局选择方法则不能返回bean 的从属对象类型。 选择方法的 EJB QL 语句要求使用 SELECT 子句,因为它们能够返回范围更广的各种值。 新的 ejbHome 方法 在 EJB 2.0 中,实体 bean 可以声明一些 ejbHome 方法,用来执行与 EJB 组件相关的操作,但并不专用于某个 bean 实例。在 bean 类中定义的 ejbHome方法在本地接口中必须有一个与其相匹配的本地方法。下面的代码说明了一个本地方法,它正是作为Employee bean 的本地接口定义的。applyCola() 方法用来根据最近COLA(生活费用调整)的增长来更新所有雇员的薪水。
applyCola() 方法在 bean 类中必须有匹配的 ejbHome 方法,它被声明为ejbHomeApplyCola()。ejbHomeApplyCola() 方法并非专用于一个 bean实例,它的范围是全局的,所以它将对所有雇员的薪水使用同一个 COLA。
bean 的开发人员需要为 BMP 和 CMP 实体 bean 都实现 ejbHome 方法。CMP实现可能在很大程度上要依赖于全局的选择语句(如上面所说明的那样)和 finder 方法,而ejbHome 的 BMP 实现则将使用直接数据库访问和 bean 的 finder方法,来查询数据和进行更改。
在 EJB 2.0 中,对规范的一个基础性更改是添加了一种全新的企业级 bean类型,即 MessageDrivenBean。MessageDrivenBean 专门设计来处理入网的 JMS消息。对于许多开发人员来说,JMS 是一种新的范例,所以本文将花一些时间逐步说明对 JMS的理解,以及它们在 EJB 2.0 中的用法。 什么是 JMS? JMS 是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC (Java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的API,而JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持JMS,包括 IBM 的 MQSeries、BEA 的 Weblogic JMS service 和 Progress 的SonicMQ,这只是几个例子。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS客户机向另一个 JML 客户机发送消息。消息是 JMS中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本 (TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。 消息收发系统是异步的,也就是说,JMS 客户机可以发送消息而不必等待回应。比较可知,这完全不同于基于 RPC 的(基于远程过程的)系统,如 EJB 1.1、CORBA 和Java RMI 的引用实现。在 RPC 中,客户机调用服务器上某个分布式对象的一个方。在法调用返回之前,该客户机被阻塞;该客户机在可以执行下一条指令之前,必须等待方法调用结束。在 JMS 中,客户机将消息发送给一个虚拟通道(主题或队列),而其它JMS 客户机则预订或监听这个虚拟通道。当 JMS 客户机发送消息时,它并不等待回应。它执行发送操作,然后继续执行下一条指令。消息可能最终转发到一个或许多个客户机,这些客户机都不需要作出回应。 上一篇:Enterprise JavaBeans简介 下一篇:Java 2 EE开发指南(二) 更多相关文章
|
推荐文章
精彩文章
|