开发者关于 JAX-RPC 的介绍,第 2 部分: 研究 JAX-RPC 的规范提高 Web 服务互操作性
2009-11-07 00:00:00 来源:WEB开发网也要注意,基于 SOAP 的分布式系统和基于其他协议(如 RMI)的分布式系统的主要的实现上的区别是,前者不支持通过引用传递和返回对象。因此您应该避免去创建一个使用远程引用作为参数或返回值的服务端点。另外 JAVA 值的类型和数组不应该存有远程引用。
一些服务提供商(如 WASP)有支持远程对象引用的实现。可是为这些实现写的代码可能在运行时系统之间缺少可移植性。例如,可能不是所有的 JAX-RPC 系统都支持 清单 2 中的代码,因为 BookSearchBroker 对象是通过引用返回的。
清单 2. 潜在的无可移植性的代码
Public interface BookSearchBroker extends java.rmi.Remote{
Public Books[] searchForAuthor(String tickerSymbol) throws java.rmi.RemoteException;
}
public interface StockQuote extends java.rmi.Remote{
public BookSearchBroker getBooksSearchBroker() throws java.rmi.RemoteException;
}
服务端点实现类型
服务端点实现类型是由服务端点接口派生出来的。作为对这个接口的补充,这个服务端点实现类可能实现 ServiceLifecycle 接口来管理服务的生命周期(请参阅 图 1)。这个接口的声明在 清单 3中给出。
清单 3. 服务生命周期声明
Public interface ServiceLifecycle{
void init (Object context) throws ServiceException;
void destroy();
}
这个接口使得 JAX-RPC 运行时系统能管理 Web 服务示例的生命周期。(如果这个服务实现是一个 servlet,那么这个运行时系统就是一个 servlet 容器。)这个运行时系统负责装载服务端点类以及服务端点类的实例化。实例化之后,它将调用 ServiceLifecycle.init() 方法来初始化服务示例。 ServiceLifecycle.init() 认为运行时上下文 ServiceContext 是一个参数。我将在后面的题名为 服务上下文的部分里更加的在细节上讨论运行时上下文这个问题。
赞助商链接