开发服务组件

开发服务组件以便为服务器中的多个应用程序提供可复用的逻辑。

开始之前

本任务假定您已开发并标识了可用于多个模块的处理。

执行本任务的原因和时间

一个服务组件可以由多个模块使用。如果导出服务组件,则其他模块就可通过接口引用该服务组件。本任务描述了如何构建服务组件以供其他模块使用。
注: 一个服务组件可以包含多个接口。

本任务的步骤

  1. 定义数据对象以便在调用者与该服务组件之间移动数据。

    数据对象及其类型是调用者与服务组件之间的接口的组成部分。

  2. 定义调用者在引用该服务组件时要使用的接口。

    此接口定义指定了服务组件并列示了该服务组件中的任何可用方法。

  3. 开发用于定义实现的类。
    • 如果该组件的运行时间较长(或者是异步组件),则转到步骤 4
    • 如果该组件的运行时间不长(或者是同步组件),则转到步骤 5
  4. 开发异步实现。
    要点: 不能将异步组件接口的 joinsTransaction 属性设置为 true
    1. 定义代表该同步服务组件的接口。
    2. 定义服务组件的实现。
    3. 转到步骤 6
  5. 开发同步实现。
    1. 定义代表该同步服务组件的接口。
    2. 定义服务组件的实现。
  6. 将组件接口和实现保存到扩展名为 .java 的文件中。
  7. 将该服务模块以及必需的资源打包成 JAR 文件。

    请参阅本信息中心中的“将模块部署到生产服务器”以获取步骤 79 的描述。

  8. 运行 serviceDeploy 命令以创建包含该应用程序的可安装 EAR 文件。
  9. 在服务器节点上安装该应用程序。
  10. 可选: 如果调用另一服务模块中的服务组件,则请配置调用者与相应服务组件之间的连线。

    本信息中心的“管理”部分描述了连线的配置方法。

组件开发示例

本示例说明实现了单个方法 CustomerInfo 的同步服务组件。第一部分定义该服务组件的接口,该接口实现了名为 getCustomerInfo 的方法。
public interface CustomerInfo {
	public Customer getCustomerInfo(String customerID);
}
以下代码块实现了该服务组件。
public class CustomerInfoImpl implements CustomerInfo {
	public Customer getCustomerInfo(String customerID) {
		Customer cust = new Customer();

		cust.setCustNo(customerID);
		cust.setFirstName("Victor");
		cust.setLastName("Hugo");
		cust.setSymbol("IBM");
		cust.setNumShares(100);
		cust.setPostalCode(10589);
		cust.setErrorMsg("");

		return cust;
	}
}
本示例开发异步服务组件。第一部分的代码定义该服务组件的接口,该接口实现了名为 getQuote 的方法。
public interface StockQuote {

	public float getQuote(String symbol);
}
以下代码段是与 StockQuote 相关联的类的实现。
public class StockQuoteImpl implements StockQuote {
	
	public float getQuote(String symbol) {


	    return 100.0f;
	}
}
以下代码段实现了异步接口 StockQuoteAsync。
public interface StockQuoteAsync {
	
	// deferred response
	public Ticket getQuoteAsync(String symbol);
	public float getQuoteResponse(Ticket ticket, long timeout);

	// callback
	public Ticket getQuoteAsync(String symbol, StockQuoteCallback callback);
}
以下代码段是 StockQuoteCallback 接口,它定义了 onGetQuoteResponse 方法。
public interface StockQuoteCallback {

	public void onGetQuoteResponse(Ticket ticket, float quote);
}

下一步

调用该服务。

使用条款 |


(c) Copyright IBM Corporation 2005, 2006.
本信息中心基于 Eclipse 技术(http://www.eclipse.org)。