background image

Java 组件:EJB 组件改进远程对象设计

 

如果您开发过许多 EJB 

 

组件,那么您很清楚远程对象设计的难点。分布 EJB 组件的核心

 

是能够将 bean 的实现(  

由 Bean 类表示)与其接口(由远程或本地接口表示)分开。接口是

 

公开给客户机的,并且通常用在与实际的实现类不同的 JVM 中。这意味着在代码这一级
它们彼此之间很少有依赖关系;又意味着,接口中可能有一些不在实现中的方法,反之亦
然。例如,实现类的实用程序方法不必放在远程接口上。
  到目前为止,没有什么是听起来不可管理的,但您要认识到有时方法中的不匹配是  

 

无意的,这时情况就会有所变化。在部署 bean 时,您会认识到需要一个新方法,此时,

 

很自然地就会发生这种情况。将方法添加到了 bean 实现类中,但随后忘记将它添加到远
程接口。现在您已经添加了所必需的功能,但还没有办法让远程用户真正访问它。这时就

 

需引入 业务接口(Business Interface)模式。
  业务接口模式

 

  首先,需要编写一个定义所有业务方法的接口。这非常象远程接口,但不具备 EJB 

 

语义。清单 1 

 

显示了 Library 对象的一个简单的业务接口。

 

  清单 1. Library 业务接口
1 package com.ibm.library;

3 import com.ibm.library.exceptions.NoSuchBookException;

5 import java.util.List;

7 public interface ILibrary {

9      public List getBooks();
10      public List getBooks(String category);
11 
12      public Book getBook(String isbn)
13          throws NoSuchBookException;
14 
15      public boolean checkout(Book book);
16      public boolean checkout(List books);
17 
18      // And so on...
19 }
20

 

  很明显,该示例很简单,但您可领略其中的思想。这个业务接口明确地定义 Library 

 

对象的业务用法。为了使接口与 EJB 

 

规范兼容,您只需做一次特定于 EJB 的让步:必须

 

确保每个方法都可以抛出 java.rmi.RemoteException 

 

。清单 2 显示了完整的业务接口。