使用 SOAP over JMS 为 Web Service 配置永久应答队列
如果使用的双向 Web service 通信使用业界标准的 SOAP over JMS 协议,那么在 Java™ API for XML Web Services (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");
- 对于 JAX-WS Web Service 客户机,在客户机 JAX-WS RequestContext 对象上设置 com.ibm.wsspi.webservices.Constants.JMS_REPLY_QUEUE_JNDI_NAME 属性;例如:
- 将应答队列的 JNDI 名称设置为 JVM 系统属性。
- 对于 Java 客户机调用,在命令提示符上输入以下代码:
java -Dcom.ibm.websphere.webservices.JMSReplyQueueJndiName=jms/MyReplyQueue
- 对于在应用程序服务器上运行的 JVM,请执行以下操作:
使用管理控制台为运行 Web Service 客户机应用程序的应用程序服务器设置 JVM 系统属性。
要设置定制属性,请登录到管理控制台,并浏览到Java 虚拟机定制属性面板。
- 单击
- 将名称属性设置为:com.ibm.websphere.webservices.JMSReplyQueueJndiName
- 将值属性设置为:jms/Permanent_Q
- 单击“确定”以保存更改。
- 单击与节点同步更改并单击保存。
- 重新启动应用程序服务器。
- 对于 Java 客户机调用,在命令提示符上输入以下代码:
结果
Web Service 客户机现在可以接收来自永久应答队列的 SOAP over JMS 消息。