WSIFOperation - 异步交互作用引用
Web Services Invocation Framework (WSIF) 支持异步操作。 在这种操作方式下,客户机放入请求消息作为某个事务的一部分,并继续执行线程。 然后另一个不同的线程使用单独的事务处理响应消息。
异步操作受 SOAP over JMS 和本机 JMS 的 WSIF 提供程序支持。
WSIFPort 类使用 supportsAsync 方法来测试是否支持异步操作。
异步操作启动带有 WSIFOperation 接口 executeRequestResponseAsync 方法。 此方法让远程过程调用 (RPC) 异步调用。 此方法在操作完成之前返回,并且继续执行线程。
对异步请求的响应由 WSIFOperation 接口 fireAsyncResponse 或 processAsyncResponse 方法处理。
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input, WSIFResponseHandler handler)public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input)
- executeRequestResponseAsync(WSIFMessage input, WSIFResponseHandler handler)
此方法获取输入消息和 WSIFResponseHandler 处理程序。 当操作完成时,在另一个线程上调用处理程序。 使用此方法时,客户机侦听器调用 fireAsyncResponse 方法,然后,后者调用 WSIFResponseHandler 接口 executeAsyncResponse 方法。
- executeRequestResponseAsync(WSIFMessage input)
- 此方法仅获取输入消息并不使用响应处理程序。 客户机侦听器通过调用 WSIFOperation 接口 processAsyncResponse 方法来处理响应。 此过程将更新带有请求结果的 WSIFMessage 输出和故障消息。
WSIF 支持异步请求和响应之间的关联。 当已发送请求后,WSIFOperation 对象被序列化到 WSIFCorrelationService 对象。 ExecuteRequestResponseAsync 方法返回 WSIFCorrelationId 对象,标识序列化的 WSIFOperation 对象。 客户机侦听器可使用它来将某一响应与特殊请求相匹配。
使用 org.apache.wsif.utils 包中 WSIFCorrelationServiceLocator 类 getCorrelationService() 方法定位关联服务。
在托管容器中,默认关联服务在默认 Java™ 命名和目录接口 (JNDI) 命名空间中使用以下名称进行定义: java:comp/wsif/WSIFCorrelationService。 如果此关联服务不可用,那么 WSIF 将使用 WSIFDefaultCorrelationService。
有关 WSIFCorrelationService 接口的更多信息,请参阅 WSIF 随附的已生成的 API 文档。
以下是相关因子标识:
public interface WSIFCorrelator extends Serializable {
public String getCorrelationId();
}
客户机必须实现它们自己响应消息侦听器或消息数据库以便其可识别响应消息的到达。 此客户机实现管理响应消息到请求的相关性及其中一个异步响应处理方法的调用。 作为客户端监听器需求的一个示例,以下代码片段显示了onMessageJava 消息服务(JMS)监听器的方法:
public void onMessage(Message msg) {
WSIFCorrelationService cs = WSIFCorrelationServiceLocator.getCorrelationService();
WSIFCorrelationId cid = new JmsCorrelationId( msg.getJMSCorrelationID() );
WSIFOperation op = cs.get( cid );
op.fireAsyncResponse( msg );
}