本主题介绍如何在 SOAtest 中使用 JMS 传输,以及 Virtualize 中的支持工具和服务提供操作工具。 其包括以下部分: 如果要使用 SOAtest 或 Virtualize 工具作为 JMS 客户端,我们建议 SOAtest 或 Virtualize 咨询 JNDI 提供者来连接 JMS 中间件。为此,需要设置 JNDI 提供者,并将所有必要的 jar 文件(即包含初始化环境的文件)添加到 SOAtest 或 Virtualize 的 classpath 中(有关如何将 jar 文件添加到 classpath 的详情,请参阅系统属性设置)。还需要提供 JNDI 提供者将查阅的连接工厂、目的地和应答队列的名称。 如果 JMS 配置没有 SOAtest 或 Virtualize 可以查询 ConnectionFactory 实例的 JNDI 提供者,请遵循没有 JNDI 的 JMS 消息传递中的指导说明。或者,您可以设置简单的文件系统 JNDI 提供者。此类提供者的 .jar 和文档可从 Oracle Java 站点获得。设置文件系统提供者非常简单,下载部分包含了文档。 提供者准备就绪后,使用主流 JMS 提供者配置中描述的简单 Java 代码创建 ConnectionFactory 实例,使用主机和端口作为参数连接到 JMS 服务器。对于本产品使用的主题和队列也应采取同样的操作。 从相应工具传输选项卡内的传输菜单选择 JMS,将在左窗格显示以下选项: 连接设置包括 JNDI 初始化环境的设置和属性选项卡。 属性选项卡是可选项,它允许执行传递给 JNDI javax.naming.InitalContext 构造器的其他属性(除了在设置选项卡中指定的提供者 URL 和初始化环境工厂属性)。属性值(可通过点击添加并完成添加 JMS 属性对话框来添加)可设置为固定值、参数化值、脚本化值或唯一值(自动生成的随机唯一值;不会有两次工具调用使用相同的值)。 设置选项卡包含以下内容: 除了设置选项卡,连接设置还包括: 队列/主题设置包括以下选项: 指定如何在应用程序之间发送消息。选择点对点或发布与订阅。 消息过期选项指定消息有效期时间(以毫秒为单位)。 指定是 SOAtest 接收响应还是 Virtualize 接收响应。如果选择 Get 响应,SOAtest 或 Virtualize 发送消息并接收响应。如果不选择 Get 响应,SOAtest 或 Virtualize 只发送消息不接收响应。 如果选择 Get 相应,则还可以启用发送消息前在 JMSReplyTo 接收站创建消息使用方。如果预期 JMSReplyTo 主题上的回复很快就会出现,则应启用此选项,以确保 SOAtest 或 Virtualize 在发布回复消息前已订阅响应主题。 此选项不可与使用请求 JMSCorrelationID 匹配响应 JMSCorrelationID 混合使用,因为 JMS 规范要求供应商在消息发送后生成 JMSMessageID。因此,没有办法使用该关联(选择器)在响应目的地上创建使用者,直到消息设置好并且 JMSMessageID 可用之后。 允许从下拉菜单中选择消息类型。JMS 消息是一个 Java 对象,它包含在 JMS 客户端之间传输的数据。可使用以下消息类型: 可选项。它允许要设置到 javax.jms.Message 对象的任何其他属性值,然后将其发送到队列或发布到主题。这些包括预定义属性,这些属性被设置为使用一个与 javax.jms.Message 或自定义属性(例如,使用 setStringProperty、setBooleanProperty、setByteProperty 设置的属性)中相对应的“set”方法 属性值(可通过点击添加并完成添加 JMS 属性对话框来添加)可设置为固定值、参数化值、脚本化值或唯一值(自动生成的随机唯一值;不会有两次工具调用使用相同的值)。确保为每个添加值指定类型。 响应消息关联性设置包括以下选项: 请参阅 JMS 提供者配置 在各种工具中,可以指定一个值作为消息过滤器。指定在标记为消息选择器或附加的选择器表达式术语的字段中。 例如,通过输入 这是用来处理消息选择器过滤器的一些提示: 可以根据变量、环境变量和数据源值参数化其他选择器表达术语值。引用变量和环境变量的语法为 ${myVariableName}。引用 XML 数据库值和数据源值的语法为:${myColumnName}.例如,可以使用 JMSCorrelationID ='${myColumnName}。 表达式语法是 SQL92 的子集。例如,如果表达式为 从体系结构的角度强烈建议使用 JNDI 来获取 JMS 连接工厂和目标实例。在测试或阶段环境中,JMS 系统偶尔仍未配置 JNDI,或者 JNDI 仍然没有包括所需连接工厂。此外,在测试期间绕过 JNDI,以便调试问题或隔离具有和不具有 JNDI 的系统性能特征,这一点可能很有帮助。 有了这些原因,只要 JMS 提供者允许,SOAtest 或 Virtualize 支持 JMS 的工具将允许直接使用供应商连接工厂发送并接收 JMS 消息,而不需通过 JNDI。 该性能支持某些 JMS 实现,该实现指定来允许首先在没有 JNDI 的情况下建立 JMS 连接,并为连接工厂类提供以单个字符串参数作为连接 URL 的构造函数。 由于这种对没有 JNDI 的 JMS 消息传递的支持并不基于标准 JMS API,因此不能保证它可以跨不同的 JMS 实现移植。 该功能已经通过 Sonic 和 TIBCO JMS 进行了测试。它还支持 WebSphere MQ,其配置如 IBM WebSphere MQ (MQ Series)中所述。 编写时,SOAtest 或 Virtualize 不支持为 Oracle/BEA WebLogic、JBoss 或 WebSphere 默认 JMS 提供者直接创建连接工厂,并且在大多数情况下,这些供应商不提供文档说明,也不鼓励这样做。 若要在 SOAtest 或 Virtualize 中配置一个 JMS 消息传递工具以发送/接收没有 JNDI 的消息: 空的初始化环境字段被解释为在没有 JDNI 的情况下直接实例化连接工厂对象的信号。它将尝试使用带单个字符串参数的构造函数来实现这一点,该参数传递在生产者 URL 字段中指定的连接 URL。连接身份验证设置仍然像往常一样使用。如果在提供者的连接工厂 API 中没有存在这样的构造函数,则需要 JNDI,以便实例化连接工厂类。 例如,在 Sonic JMS 的案例中,提供的连接工厂类名将是 如果 JNDI 存在并且如何目录中存在名称,则不管如何配置 JNDI 设置,SOAtest 和 Virtualize 将总是尝试从 JNDI 解析目标名称(队列或主题)。如果无法通过 JNDI 找到它,则它将尝试从 JMS 会话实例直接创建目标,假设用户提供的名称是物理目标名称,而不是 JNDI 名称。 注意,也可以使用 Sun 的 JNDI 实例。详情请参阅 Sun JMS。 队列浏览器允许查看在 Websphere MQ, Websphere Application Server, Tibco EMS, Sonic MQ, ActiveMQ 和任何其他 JMS 提供者上部署的队列内容。请参阅 浏览队列 了解更多。JMS 前提条件
配置 JMS 选项
连接设置
队列/主题
消息传送模板
消息过期
消息交换模式
消息类型
请求消息属性
响应消息关联性
username==John
,只有包含 "John" 作为用户名的消息才会被发送。如果该字段保留为空,则可以从队列接收任何消息。
将该表达式传递给在点到点消息传递中 javax.jms.QueueSession 类的 createReceiver() 方法,或者在发布并订阅消息传递中 javax.jms.TopicSession 类的 createSubscriber() 方法。有关指定选择器的提示,请参阅使用消息选择器过滤器。主流 JMS 提供者配置
使用消息选择器过滤器
username==John
,只有包含 "John" 作为用户名的消息才会被发送。如果字段保留为空,则可以接收任何消息。fruit = 'apple'
或 JMSCorrelationID = '123456
',
则只有具有属性 fruit
值定义为 apple
或 JMS 头 JMSCorrelationID 值设置为 123456
才会被获取。没有 JNDI 的 JMS 消息传递
支持的 JMS 实现
配置
progress.message.jclient.ConnectionFactory
。对于 TIBCO JMS,其类名将是 com.tibco.tibjms.TibjmsConnectionFactory
。另一方面,JBoss 和 OpenJMS 没有带单个连接 URL 参数的连接工厂。在这些情况下,必须要有 JNDI,以便使用 SOAtest 或 Virtualize 与这些系统交换 JMS 消息。浏览队列内容
Overview
Content Tools