使用 SOAP over JMS 为 Web Service 配置永久应答队列

使用使用业界标准 SOAP over JMS 协议的双向 Web Service 通信时,您可以从在 Java™ API for XML Web Service (JAX-WS) 或 Java API for XML-based RPC (JAX-RPC) Web Service 客户机上配置永久应答队列中获益。 使用永久应答队列可改进性能,因为此应答队列阻止客户机在每次调用 Web Service 请求时都必须创建临时应答队列。

有关此任务

通过以下某种方式在 Web Service 客户机上配置永久应答队列:
  • 在 JMS 端点 URL 中指定可选的 replyToName 属性。
  • 程序化地设置应答队列。
    • 对于 JAX-WS Web Service 客户机,请在客户机 RequestContext 对象上程序化地设置应答队列的 JNDI 名称。 在 RequestContext 对象上设置应答队列 JNDI 名称将影响使用该 RequestContext 对象调用的所有后续请求。
    • 对于 JAX-RPC Web Service 客户机,在客户机 Stub 或 Call 对象上程序化地设置应答队列的 JNDI 名称。 将应答队列 JNDI 名称设置为 Stub 或 Call 属性,将影响使用该 Stub 或 Call 对象调用的所有后续请求。
  • 将应答队列设置为 Java 虚拟机 (JVM) 系统属性。 将应答队列设置为 JVM 系统属性将影响在特定 JVM 中运行的所有 Web Service 客户机。 如果在同一个 JVM 中运行的多个客户机需要使用不同的应答队列,那么此选项无效。 请改为使用另外两个选项中的其中一个。

要使用这些选项中的任何一个设置永久应答队列,只有客户机端配置是必需的。 Web Service 提供程序没有必需的配置。

使用 Web Service 客户机配置应答队列之前,使用 JMS 消息传递提供程序的典型管理功能来创建永久应答队列。

过程

使用以下某种方式配置永久应答队列的 JNDI 名称:
  • 在 JMS 端点 URL 中指定可选的 replyToName 属性;例如:
    jms:jndi:jms/MyRequestQueue&jndiConnectionFactoryName=jms/MyCF&replyToName=jms/MyReplyQueue
  • 在客户机上程序化地设置应答队列。
    属性的值是字符串,它代表应答队列的 JNDI 名称。
    • 对于 JAX-WS Web Service 客户机,在客户机 JAX-WS RequestContext 对象上设置 com.ibm.wsspi.webservices.Constants.JMS_REPLY_QUEUE_JNDI_NAME 属性;例如:
      ((BindingProvider) port).getRequestContext().put
      (com.ibm.wsspi.webservices.Constants.JMS_REPLY_QUEUE_JNDI_NAME, "jms/MyReplyQueue");
    • 对于 JAX-RPC Web Service 客户机,在客户机 JAX-RPC Stub 或 Call 对象上设置 com.ibm.wsspi.webservices.Constants.JMS_REPLY_QUEUE_JNDI_NAME 属性;例如:
      ((javax.xml.rpc.Stub) stub)._setProperty(com.ibm.wsspi.webservices.Constants.JMS_REPLY_QUEUE_JNDI_NAME, 
      "jms/MyReplyQueue"); 
  • 将应答队列的 JNDI 名称设置为 JVM 系统属性。
    • 对于 Java 客户机调用,请在命令提示符处输入以下代码:
      java -Dcom.ibm.websphere.webservices.JMSReplyQueueJndiName=jms/MyReplyQueue
    • 对于在应用程序服务器上运行的 JVM,请执行以下操作:
      • 使用管理控制台为运行 Web Service 客户机应用程序的应用程序服务器设置 JVM 系统属性。

        要设置定制属性,请登录到管理控制台,然后浏览至 Java 虚拟机定制属性面板。

        1. 单击 服务器> 服务器类型> WebSphere 应用程序服务器> server_name> Java 和进程管理> 进程定义> Java 虚拟机> 定制属性> 新建
        2. 名称属性设置为:com.ibm.websphere.webservices.JMSReplyQueueJndiName
        3. 属性设置为:jms/Permanent_Q
        4. 单击“确定”以保存更改。
        5. 重新启动应用程序服务器。

结果

Web Service 客户机现在可以接收来自永久应答队列的 SOAP over JMS 消息。