JMS 传输和 SOAP 消息处理程序

使用 JMS 传输作为连接协议

通常情况下,客户端应用程序在调用 WebLogic Web Service 时使用 HTTP/S 作为连接协议。但是,您可以对 WebLogic Web Service 进行配置,以便客户端应用程序可以改用 JMS 作为传输。请按照后面部分中的描述使用 JWS 批注或 jwsc Ant 任务的子元素配置传输。

将 WebLogic Web Service 配置为使用 JMS 进行连接传输时,为 Web Service 的已生成 WSDL 中的对应端口指定的端点地址在其 URL 中使用 jms:// 而不是 http://。下面是 JMS 端点地址的示例:

jms://myHost:7001/transports/JMSTransport?URI=JMSTransportQueue

URL 的 URI=JMSTransportQueue 部分指定已经为 JMS 传输功能配置的 JMS 队列。虽然无法使用 HTTP 调用 Web Service,但可以使用 HTTP 查看它的 WSDL,这就是 clientgen 为什么仍旧能够为 Web Service 生成 JAX-RPC 存根控件。

对于您指定的每个传输,WebLogic Server 都会在 WSDL 中生成一个附加端口。因此,如果要为客户端应用程序提供传输选项以供它们在调用 Web Service 时使用(JMS、HTTP 或 HTTPS),应使用适当的 JWS 批注或 jwsc 的子元素明确添加传输。

警告: 使用 JMS 传输是 WebLogic 功能的一项增值之处。非 WebLogic 客户端应用程序(如 a.NET 客户端)可能无法使用 JMS 端口调用 Web Service。

使用 JMS 传输:主要步骤

以下过程描述如何指定可使用 JMS 传输调用 Web Service。

它假设您已经创建了一个实现 Web Service 的基本 JWS 文件,并且您想要配置该 Web Service 以使用 JMS 对其进行调用。它还假设您设置了一个基于 Ant 的开发环境并且您有一个有效的 build.xml 文件,该文件包括用于运行 jwsc Ant 任务和部署服务的目标。有关详细信息,请参阅 WebLogic Web Service 的迭代开发 和 JWS 文件编程

  1. 为所需 JMS 组件配置 WebLogic Server 域。
  2. 您可以自己配置这些资源,也可以使用 Configuration Wizard 通过 Web Service 特定扩展模板来扩展 WebLogic Server 域。使用 Configuration Wizard 可以大大简化所需的配置步骤;有关详细信息,请参阅配置域的 Web Service 功能

    但是,如果您喜欢自己配置资源,请执行下列步骤:

    1. 在浏览器中调用管理控制台,如调用管理控制台中所述。
    2. 使用管理控制台创建并配置下列 JMS 组件(如果它们尚不存在):
      • JMS 服务器。请参阅创建 JMS 服务器
      • JMS 模块,定位到上一个 JMS 服务器。请参阅创建 JMS 模块
      • JMS 队列,包含在上一个 JMS 模块中。您可以指定 WebLogic Web Service 在默认情况下监听的 JMS 队列的 JNDI 名称 (weblogic.wsee.DefaultQueue),也可以指定其他名称。如果指定其他 JNDI 名称,则可以以后将该名称传递到 Web Service 本身。配置队列时,请确保您指定的此 JMS 队列为本地队列,通常通过设置本地 JNDI 名称进行指定。请参阅创建队列
      • 除了 JMS 队列的 JNDI 名称以外,还可以用任何所需的名称命名其他组件。

  3. 将 @WLJmsTransport 批注添加到 JWS 文件中。
  4. 请参阅使用 @WLJmsTransport JWS 批注

  5. 如果要替代在上一步指定的文件中的 JMS 端口,可以选择将 <WLJmsTransport> 子元素添加到 jwsc Ant 任务。
  6. 有关详细信息,请参阅使用 jwsc Ant 任务的 <WLJmsTransport> 子元素

  7. 通过在调用 jwsc 任务的 build.xml Ant 文件中重新运行目标来重新生成 Web Service。
  8. 例如,如果调用 jwsc Ant 任务的目标名为 build-service,则要运行:

    prompt> ant build-service
  9. 将 Web Service 重新部署到 WebLogic Server。

有关更新客户端应用程序以使用 JMS 传输调用 Web Service 的信息,请参阅使用 JMS 传输调用 WebLogic Web Service

使用 @WLJmsTransport JWS 批注

如果您在为 JWS 文件编程时知道您希望客户端应用程序使用 JMS 传输(而不是 HTTP/S)调用 Web Service,可以使用 @WLJmsTransport 指定调用的详细信息。以后在生成时,可以通过指定 jwsc Ant 任务的 <WLJmsTransport> 子元素(如使用 jwsc Ant 任务的 <WLJmsTransport> 子元素中所述)来替代 JWS 文件中的批注并添加其他 JMS 传输规范。

使用 @WLJmsTranport 批注时,请遵循下列原则:

  • 只能在 JWS 文件中包括一个 @WLJmsTransport 批注。
  • 如果指定 @WLJmsTransport 批注,则不能同时指定 @WLHttpTransport
  • 使用 queue 特性指定之前在本部分中配置的 JMS 队列的 JNDI 名称。如果要使用默认的 Web Service 队列 (weblogic.wsee.DefaultQueue),则不必指定 queue 特性。

以下示例显示了一个使用 @WLJmsTransport 批注的简单 JWS 文件,相关代码以粗体显示:

package examples.webservices.jmstransport;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import weblogic.jws.WLJmsTransport;
@WebService(name="JMSTransportPortType",
serviceName="JMSTransportService",
targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
// WebLogic 特定的 JWS 批注,用于指定生成 Web Service 
// 的 URI 所使用的上下文路径和服务 URI 为
// “transports/JMSTransport”
@WLJmsTransport(contextPath="transports", serviceUri="JMSTransport",
queue="JMSTransportQueue", portName="JMSTransportServicePort")
/**
* 此 JWS 文件形成了带有下列单个操作的简单 Java 类实现的 WebLogic
* Web Service 的基础:sayHello
*
* @作者版权所有 (c) 2005,BEA Systems。保留所有权利。
*/
public class JMSTransportImpl {
  
  @WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}

使用 jwsc Ant 任务的 <WLJmsTransport> 子元素

您也可以在生成时使用 jwsc Ant 任务的 <jws> 元素的 <WLJmsTransport> 子元素指定 JMS 传输。在生成时指定传输的原因包括:

  • 需要替代在 JWS 文件中指定的特性值。
  • JWS 文件指定不同的传输,并且在生成时决定该传输应该是 JMS。
  • JWS 文件不包括 @WLXXXTransport 批注;因此,默认情况下会使用 HTTP 传输,但您在生成时确定希望客户端使用 JMS 传输调用 Web Service。

如果为 jwsc Ant 任务指定一种传输,则该传输优先于 JWS 文件中的任何传输批注。

以下示例说明如何为 jwsc Ant 任务指定传输:

  <target name="build-service">
    <jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/jmstransport/JMSTransportImpl.java">
        <WLJmsTransport
contextPath="transports"
serviceUri="JMSTransport"
portName="JMSTransportServicePort"
queue="JMSTransportQueue"/>
      </jws>
    </jwsc>
  </target>

上面的示例说明如何将在使用 @WLJmsTransport JWS 批注中显示的 JWS 文件中指定的值指定给 URL 和 JMS 队列。

有关使用 jwsc Ant 任务的详细信息,请参阅 jwsc

使用 JMS 传输调用 WebLogic Web Service

可编写客户端应用程序以使用 JMS 传输调用 Web Service,方式与编写使用 HTTP 传输的客户端应用程序一样。唯一区别是:必须确保已经创建了 JMS 队列(由 @WLJmsTransport 批注或 jwsc 任务的<WLJmsTransport> 子元素指定)和其他 JMS 对象。有关详细信息,请参阅使用 JMS 传输:主要步骤

虽然无法使用 HTTP 调用 JMS 传输配置的 Web Service,但可以使用 HTTP 查看它的 WSDL,因此 clientgen Ant 任务仍旧能够为 Web Service 创建 JAX-RPC 存根控件。例如,此部分中显示的 Web Service 的 WSDL 的 URL 将会是:

http://host:port/transports/JMSTransport?WSDL

但是,因为已部署的 Web Service 的 WSDL 中的端点地址使用 jms:// 而不是 http://,并且该地址包括限定符 ?URI=JMS_QUEUE,所以 clientgen Ant 任务会在调用 Web Service 时自动创建使用 JMS 传输所需的存根控件,并且客户端应用程序不需要执行不同于平常的操作。下面是 JMS 端点地址的示例:

jms://host:port/transports/JMSTransport?URI=JMSTransportQueue
警告: 如果您已经指定使用 JMS 传输调用的 Web Service 还在事务上下文中运行(也就是说,JWS 文件包括 @weblogic.jws.Transactional 批注),必须在调用该服务时使用异步请求响应。如果不这样,将会发生死锁,并且调用将会失败。

有关调用 Web Service 的常规信息,请参阅调用 Web Service

替代默认服务地址 URL

如果编写的客户端应用程序使用 clientgen 生成的 JAX-RPC 存根控件调用 Web Service,则 Web Service 的默认服务地址 URL 是在 Service 构造方法的 WSDL 文件参数的 <address> 元素中指定的 URL。

但是,有时可能需要替代该地址,尤其是在调用的 WebLogic Web Service 部署到某个群集并且您想要指定群集地址或群集中受管服务器的地址列表时。可能还需要使用 t3 协议调用 Web Service。要在使用 JMS 传输时替代此服务端点 URL,请使用 weblogic.wsee.jaxrpc.WLStub.JMS_TRANSPORT_JNDI_URL 存根控件属性,如以下示例所示:

package examples.webservices.jmstransport.client;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值