本主题提供针对主流 JMS 提供者配置 SOAtest 的参考内容。
章节目录:
添加所需 jar 文件
若要将所需 jar 文件(下面表中所列)添加到SOAtest classpath,请完成以下内容:
- 选择 Parasoft> 首选项。
- 打开 Parasoft> 系统属性页面。
- 点击添加 JARs 按钮,选择需要添加的 JAR 文件。
JNDI 身份验证
任何时候,如果需要用户名和密码来连接 JMS 系统,而 JMS 系统配置为需要对 JNDI 访问进行身份验证,则必须配置以下 JNDI 属性:
- java.naming.security.principal=<username>
- java.naming.security.credentials=<password>
Amazon Simple Queue Service (SQS)
针对 | Amazon Simple Queue Service (SQS) 与其他通过 JNDI 查找建立 JMS ConnectionFactory 较为困难的 JMS 提供者。 |
---|---|
JAR 最低要求 | Amazon SQS java 客户端 JAR(可在 https://repo1.maven.org/maven2/com/amazonaws/ 的 Maven Central 获取):
WSO2 carbon-jndi JAR(可从 https://maven.wso2.org/nexus/content/repositories/releases/org/wso2/carbon/jndi/org.wso2.carbon.jndi/ 的 WSO2 Maven 资源库中获取): org.wso2.carbon.jndi-<version>.jar |
工厂类 | 来自 WSO2 carbon-jndi 项目的 InMemoryInitialContextFactory。请参阅Creating the JMS ConnectionFactory Object。 |
连接 AWS | 使用 I AM 用户角色连接 AWS。详情请参考以下 Amazon 文档: |
了解更多 | https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/getting-started.html |
创建 JMS ConnectionFactory 对象
以下 Groovy 脚本可帮助您创建 JMS ConnectionFactory 对象,并将其绑定到内存中 InitialContext(bindConnectionFactory
方法)。每次启动 SOAtest 或 Virtualize 时运行一次该脚本。您可以使用扩展工具(如 SOAtest .tst 或 Virtualize .pvn 中的 Set-Up 测试)为每个需要该对象的 .tst 运行脚本,或者实现一个更精密的流程,以适应您环境的方式自动执行脚本。
该脚本支持两种进行 AWS 身份验证的方法。如果您的 SOAtest/Virtualize 服务器部署在 AWS 环境中,那么 AWS 会建议您使用实例提供者流程进行身份验证。另外,您也可以通过静态模式进行 AWS 身份验证,这种方式需要 region、accessKey 和 secretKey 信息。有关该脚本中定义的身份验证变量的信息,请参阅Script Variables。
import java.util.* import javax.jms.* import javax.naming.* import com.amazon.sqs.javamessaging.* import com.amazonaws.auth.* import com.amazonaws.regions.* import com.amazonaws.services.securitytoken.* import com.amazonaws.services.securitytoken.model.* import com.amazonaws.services.sqs.* // Specify how you want to connect to AWS ("instance" or "static") provider = "instance" // Access keys for CLI, SDK, & API access // see https://console.aws.amazon.com/iam/home#/security_credentials accessKey = "" secretKey = "" region = Regions.US_WEST_1 // Multi-factor authentication // set serialNumber to null if MFA not enabled serialNumber = null tokenCode = "" // code from Google Authenticator (for example) durationSeconds = 3600 void bindConnectionFactory() { Properties env = new Properties() env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wso2.carbon.jndi.internal.InMemoryInitialContextFactory") Context ctx = new InitialContext(env) SQSConnectionFactory sqsConnectionFactory = createSQSConnectionFactory() ctx.rebind("SQSConnectionFactory", sqsConnectionFactory) } SQSConnectionFactory createSQSConnectionFactory() { AWSCredentialsProvider credentialsProvider = null if (provider.equals("instance")) { credentialsProvider = new InstanceProfileCredentialsProvider(false) } else { credentialsProvider = new AWSStaticCredentialsProvider( new BasicAWSCredentials(accessKey, secretKey)) if (serialNumber != null) { credentialsProvider = getTemporaryCredentials(credentialsProvider) } } return new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(region) .withCredentials(credentialsProvider).build()) } AWSStaticCredentialsProvider getTemporaryCredentials(AWSCredentialsProvider credentialsProvider) { AWSSecurityTokenService sts_client = null try { sts_client = AWSSecurityTokenServiceClientBuilder.standard() .withRegion(region) .withCredentials(credentialsProvider).build() Credentials creds = sts_client.getSessionToken(new GetSessionTokenRequest() .withDurationSeconds(durationSeconds) .withSerialNumber(serialNumber) .withTokenCode(tokenCode)).getCredentials() return new AWSStaticCredentialsProvider( new BasicSessionCredentials( creds.getAccessKeyId(), creds.getSecretAccessKey(), creds.getSessionToken())) } finally { if (sts_client != null) { sts_client.shutdown() } } }
将创建一个 SQSConnectionFactory 并绑定 SQSConnectionFactory 名称。在任何用于查找 JMS ConnectionFactory 的 JNDI 属性中,将初始化环境设置为 org.wso2.carbon.jndi.internal.InMemoryInitialContextFactory
,将连接工厂设置为 SQSConnectionFactory
.
提供者 URL 未使用是因为 JMS ConnectionFactory 以编程方式创建,而不是基于 URL 动态创建。对于某些 SOAtest 和 Virtualize 接口(如 Virtualize 消息代理),则必须填写提供者 URL 字段。在这类情况下,输入任何非空字符串,对话框就会接受您的配置设置。
您可以创建一个消息传送客户端,并为其中一个已定义的队列发送/接收消息。您还可以看到所有预期 JMS 头的属性,包括消息 ID。
脚本变量
下表描述了脚本中使用的变量:
| 用于 CLI、SDK 和 API 访问的访问密钥凭据。 |
---|---|
serialNumber | 启用多重身份验证(MFA)时唯一标识设备的编号。对于虚拟 MFA 设备,该序列号则为 AWS 安全凭据页面所示的设备的亚马逊资源名称 (ARN)。 |
tokenCode | 您的 MFA 设备(如 Google Authenticator)返回的值。 |
durationSeconds | 指定临时 MFA 凭据有效期的值。 |
Apache ActiveMQ
针对 | 针对 Apache Active MQ |
---|---|
JAR 最低要求 | 可在 ActiveMQ 安装目录 - activemq-all-[version].jar 下找到 |
典型提供者 URL 模式 | tcp://hostname:61616 |
工厂类 | JNDI 初始化环境工厂类 默认的连接工厂 JNDI 名称 |
了解更多 | http://activemq.apache.org/jndi-support.html |
Apache Qpid
针对 | 针对 Apache Qpid |
---|---|
JAR 最低要求 | 可在 http://qpid.apache.org/download.html的 qpid-java-client-{ver}.tar.gz 中找到。 jar 的数量根据 Qpid 版本的变化而变化。Qpid 0.8 版本下的 jar 包括以下:
|
连接 URL JNDI 属性 | connectionfactory.<jndiname> 例如: connectionfactory.local = amqp://user:password@clientid/testpath?brokerlist='tcp://localhost:5672' |
工厂类 | JNDI 初始化环境工厂类 |
了解更多 | https://cwiki.apache.org/qpid/how-to-use-jndi.html |
GlassFish MQ
针对 | 针对 GlassFish |
---|---|
JAR 最低要求 | GlassFish 3 - 可在 [GlassFish install directory]/glassfish/lib 下找到:- gf-client.jar 注意,gf-client.jar 引用了 GlassFish 3 安装的其他几十个 jar 文件。必须引用 GlassFish 安装目录中的 gf-client.jar,以便能够找到并加载引用的 jar 文件。GlassFish 可以从 http://glassfish.java.net/加载。 GlassFish 2 - 可在 [GlassFish install directory]/lib 下找到: - appserv-admin.jar |
典型提供者 URL 模式 | iiop://yourhostname:3700 |
工厂类 | JNDI 初始化环境工厂类 注意,GlassFish 拥有另一个 JNDI 初始化环境工厂类,其名为 "com.sun.appserv.naming.S1ASCtxFactory"。这个类的性能很差,不应该使用。相反地,使用所提及的 SerialInitContextFactory 类,该类即既适用于 GlassFish 2 也适用于 GlassFish 3。 |
注意 | GlassFish 客户端和 GlassFish 服务端相互执行反向 DNS 查找。如果服务端没有识别到客户端的主机名,则可以向服务端的主机文件添加客户端的主机名和 IP 地址。如果客户端没有识别到服务端的主机名,则可以向客户端的主机文件添加服务端的主机名和 IP 地址。通常情况下,主机文件在 Unix 上是 /etc/hosts,在 Windows 上是 %SystemRoot%\system32\drivers\etc\hosts。 |
了解更多 | http://glassfish.java.net/ |
IBM WebSphere 应用程序服务器 (WAS)
针对 | 针对 WAS 默认的 JMS 提供者。Parasoft 推荐使用 IBM 的 JMS 瘦客户端,它由 WAS 7.0 或更高版本提供,并且可以与 WAS 6.0.2 及更高版本相互作用。 |
---|---|
JAR 最低要求 | 可在 [WAS installation dir]/runtimes |
典型提供者 URL 模式 | iiop://yourhostname:2809/ |
工厂类 | JNDI 初始化环境工厂类 |
了解更多 | WebSphere 应用程序服务器网络部署,版本 7.0 文档 |
如果没有 WAS 7.0 或更高版本该怎么办?
如果没有使用(或没有访问)WAS 7 安装,则下载并安装可以与 WAS 6.0.2 及更高版本相互作用的 JMS 的 IBM 客户端:
- 从 http://www-01.ibm.com/support/docview.wss?uid=swg24012804下载 JMS 客户端安装程序 jar
- 按照下载页面上的说明为 SUN JRE 安装 JMS 和 JNDI jar。安装客户端 jars 的命令类似于:
"java -jar sibc_oeminst-o0902.06.jar jms_jndi_sun C:\ibmjms"
客户端 jars 将安装在lib
文件夹下。 - 添加 JNDI 属性
com.ibm.CORBA.ORBInit=com.ibm.ws.sib.client.ORB
- 为了简单起见,可以在 JRE 的 lib 文件夹中 jndi.properties 文件中对这个 jndi 属性进行全局设置。
- 针对此产品的独立构建,JRE lib 文件夹位于 <INSTALL>/plugins/com.parasoft.ptest.jdk.eclipse.core.web.<OS>.<ARCH>_<VERSION>/jdk/jre/lib。
- 当使用 WAS 7 试运行文件夹中的 jar 时,不需要此 JNDI 属性。
IBM WebSphere MQ (MQ Series)
针对 | 针对 WebSphere MQ JMS 提供者 |
---|---|
JAR 最低要求 | 针对 MQ 9可在 [WebSphere MQ installation directory]/java/lib 下找到这些 jar 文件:
针对 MQ 8可在 [WebSphere MQ installation directory]/java/lib 下找到这些 jar 文件:
针对 MQ 7.0可在 [WebSphere MQ installation directory]/java/lib 下找到这些 jar 文件:
还需要下载以下 jar 文件:
针对 MQ 6.0可在 [WebSphere MQ installation directory]/java/lib 下找到这些 jar 文件:
还需要下载以下 jar 文件:
MQ 客户端下载MQ 客户端中还包含 [WebSphere MQ installation directory]/java/lib 下的这些 jar 文件。IBM 不再提供 MQ 6 客户端。MQ 7 客户端再 http://www-01.ibm.com/support/docview.wss?uid=swg24019253上可用 |
典型提供者 URL 模式 | yourhostname:1414/SYSTEM.DEF.SVRCONN |
工厂类 | WebSphere MQ JNDI 初始化上下文工厂类 - com.ibm.mq.jms.context.WMQInitialContextFactory |
SSL 配置 | WebSphere JMS 客户端可以通过在初始化环境中设置合适的属性来实现 SSL 连接。WebSphere MQ 和 WebSphere JMS 客户端都将为 SSL 连接设置相同的属性。 |
没有 JNDI 的 JMS 消息传递 | 在属性选项卡下,定义以下属性: import com.ibm.mq.jms.*; ... MQConnectionFactory cf = new MQConnectionFactory(); cf.setHostName(hostname); cf.setPort(port); cf.setQueueManager(queuemanager); cf.setChannel(channel); cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); cf.setFailIfQuiesce(JMSC.MQJMS_FIQ_YES); cf.setUseConnectionPooling(true); |
其他信息 | IBM 的 JNDI 通过发送用户的登录名来使用 Websphere MQ 服务器对自己进行身份验证。通常情况下,用户名是在启用 SOAtest/Virtualize 之前登录到工作空间时所提供的。 如果 MQ 服务器没有识别到用户名,则工具将失败,附带错误信息 "javax.jms.JMSSecurityException:MQJMS2013:为 MQQueueManager 提供的身份验证无效"。 该错误可以通过在 Websphere MQ 服务端机器上添加 Windows 用户账户解决。此账户应 1)与正在运行SOAtest的本地机器的账户具有相同的用户名,并且 2)是 "mqm" IBM WebSphere MQ 管理组的成员。 作为一种选择,可以通过更改 user.name Java 系统属性值来使用不同的用户名。该系统属性可以通过启动SOAtest进行配置,启动方法是使用 还可以在测试套件执行期间更改 Java 系统属性,通过使用扩展工具调用 SUN 的 Java API 中的 java.lang.System.setProperty() 方法。 有关该错误的详情,请参阅 http://www.mqseries.net/phpBB/view-topic.php?t=40640。 |
了解更多 | http://www-01.ibm.com/software/integration/wmq/library/ http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm10320_.htm |
JBoss JMS
针对 | 针对 JBoss JMS,以下 jar 列表基于 JBoss 5.0 |
---|---|
JAR 最低要求 | 基于 [JBoss install dir]/client |
典型提供者 URL 模式 | yourhostname |
工厂类 | JNDI 初始化环境工厂类 |
打开消息队列(OpenMQ)
注意,OpenMQ 可以通过独立运行,也可以作为 Glassfis App 服务端的一部分运行,在这里它被称为“Glassfish MQ”。如果正在使用 Glassfish 中的 OpenMQ,请参阅 GlassFish 部分。
针对 | 针对 OpenMQ 服务器 |
---|---|
JAR 最低要求 | 可在 [OpenMQ install dir]/mq/lib |
典型提供者 URL 模式 | yourhostname |
工厂类 | JNDI 初始化环境工厂类 |
了解更多 | http://mq.java.net |
Oracle 高级队列(AQ)
针对 | 针对 Oracle 高级队列(AQ) |
---|---|
JAR 最低要求 | 可从 Oracle 数据库安装中找到: 或 从 Oracle Weblogic 服务器安装中找到: |
提供者 URL | 保留此字段为空。 |
JNDI 初始化环境工厂类 | oracle.jms.AQjmsInitialContextFactory |
连接工厂 JNDI 名称 | 其中一个以下项: |
所需的 JNDI 属性 | java.naming.security.principal=<username> |
队列名/主题名 | 队列名以 |
其他信息 | Oracle 数据源老版本中的 aqapi.jar(如 10g)可能缺少初始化环境工厂类。使用 Oracle 数据库 11g 及更高版本的 jar 文件。最新版本的 Oracle 数据库 Express 版本(XE)可以在 oracle.com中下载: Oracle 数据库 Express 版本 11g 发行版 2 |
了解更多 | 与 Oracle AQ JMS 相互作用 |
Oracle BEA WebLogic
针对 | 针对 Oracle BEA WebLogic |
---|---|
JAR 最低要求(瘦客户端)* | 可在 [weblogic home]/wlserver_x/server/lib 注意,可能需要其他 jar 文件。我们推荐使用完整客户端;这一点使您不必寻找和添加许多 jar。 |
JAR 最低要求(完整客户端)* | 按照说明中所描述那样为“Creating a wlfullclient5.jar for JDK 1.5 client applications.”构建单个 wlfullclient5.jar。 |
典型提供者 URL 模式 | Thin Client: Full Client: |
工厂类 | JNDI 初始化环境工厂类: |
了解更多 | http://docs.oracle.com/cd/E12840_01/wls/docs103/client/jarbuilder.html |
Progress Sonic MQ/ESB
针对 | 针对 Progress Sonic MQ/ESB |
---|---|
JAR 最低要求 | 可在 [sonic install dir]/MQ7.x/lib 注意,不能一起使用 SonicMQ 的 broker.jar 和 TIBCO 的 tibcojms.jar。 |
典型提供者 URL 模式 | tcp://yourhostname:2506 |
工厂类 | JNDI 初始化环境工厂类 |
了解更多 | 请参考 SonicMQ 应用程序项目指南、Appendix A (使用 Sonic JNDI SPI),也可以参考其他相关部分。 |
RabbitMQ
针对 | 针对 RabbitMQ |
---|---|
JAR 最低要求 | 从 Maven's Central Repository 下载客户端库。 rabbitmq-jms-<version>.jar |
.bindings 文件示例 | #此文件由 JNDI FSContext 使用。 #Wed Jan 31 15:36:15 PST 2018 ConnectionFactory/FactoryName=com.rabbitmq.jms.admin.RMQObjectFactory ConnectionFactory/ClassName=javax.jms.ConnectionFactory ConnectionFactory/RefAddr/0/Type=name ConnectionFactory/RefAddr/0/Encoding=String ConnectionFactory/RefAddr/0/Content=jms/ConnectionFactory ConnectionFactory/RefAddr/1/Type=type ConnectionFactory/RefAddr/1/Encoding=String ConnectionFactory/RefAddr/1/Content=javax.jms.ConnectionFactory ConnectionFactory/RefAddr/2/Type=factory ConnectionFactory/RefAddr/2/Encoding=String ConnectionFactory/RefAddr/2/Content=com.rabbitmq.jms.admin.RMQObjectFactory ConnectionFactory/RefAddr/3/Type=host ConnectionFactory/RefAddr/3/Encoding=String ConnectionFactory/RefAddr/3/Content=host.company.com ConnectionFactory/RefAddr/4/Type=port ConnectionFactory/RefAddr/4/Encoding=String ConnectionFactory/RefAddr/4/Content=5672 |
典型提供者 URL 模式 | 包含 .bindings 文件的目录路径 file://C:/JNDI/rabbitMQ/ |
初始化环境 | com.sun.jndi.fscontext.RefFSContextFactory |
连接工厂 | JNDI 初始化环境工厂类 |
Solace JMS
针对 | 针对 Solace JMS |
---|---|
JAR 最低要求 | commons-lang-<version>.jar sol-common-<version>.jar sol-jcsmp-<version>.jar sol-jms-<version>.jar |
典型提供者 URL 模式 | smf://<host>:<port> |
工厂类 | JNDI 初始化环境工厂类 必须设置其他 JNDI 属性 |
Sun Java 系统消息队列(Sun MQ)
针对 | 针对 Sun MQ 服务器 |
---|---|
JAR 最低要求 | 可在 [Sun MQ install dir]Sun/MessageQueue/mq/lib |
典型提供者 URL 模式 | yourhostname |
工厂类 | JNDI 初始化环境工厂类 |
了解更多 | 请参阅 Sun Java System Message Queue Administration 3.x/4.x Guide, Section Quick-Start Tutorial。此文档可从 http://docs.sun.com/app/docs/prod/message?l=en#hic 下载。在该文档中,导航到 Software> Application & Integration Services> Message Queue。 |
TIBCO EMS
针对 | 针对 TIBCO EMS |
---|---|
JAR 最低要求 | 可在 [TIBCO install dir]/ems/clients/java 注意,不能一起使用 SonicMQ 的 broker.jar 和 TIBCO 的 tibcojms.jar。 |
典型提供者 URL 模式 | tcp://yourhostname:7222 yourhostname (if using default port numbers) |
工厂类 | JNDI 初始化环境工厂类 |
SSL 配置 | 必须配置以下 JNDI 属性: 对于双向 SSL,还需配置以下其他属性: |
其他信息 | 任何时候,连接到 Tibco EMS 需要用户名和密码,都必须配置以下 JNDI 属性: |
了解更多 | 请参考 TIBCO 企业版消息服务用户指南,第 9 章:开发 EMS 客户端应用程序> 程序员检查表 |
Sun JMS
SOAtest 和 Virtualize 绑定一个 Sun JNDI 实现,使用 com.sun.jndi.fscontext.RefFSContextFactory 作为“C:\JNDIRoot
”或类似内容的初始化环境和用户定义的提供者(目录),存储目录中的 JNDI 绑定以及本地硬盘上的文件。
在使用 Sun 实现时,必须使用 .binding 文件填充“C:\JNDIRoot
”目录,以便 fscontext
可以成功查找 ConnectionFactory 和队列或主题对象。Parasoft 将 SOAtest/Virtualize 安装目录(/examples/jms/JndiFileProviderTest.java)中找到的示例放在一起,该目录创建了 .bings 文件。
其他 JMS 提供者
针对其他 JMS 提供者,请参阅有关如何配置 JMS 客户端以与系统通信的供应商指南。