配置 IBM MQ classes for JMS 以使用通道出口

IBM® MQ classes for JMS 应用程序可以在应用程序连接到队列管理器时启动的 MQI 通道上使用通道安全性,发送和接收出口。 应用程序可以使用以 Java、C 或 C++ 编写的出口。应用程序还可以使用连续运行的发送或接收出口序列。

以下属性用于指定 JMS 连接所使用的发送出口或发送出口序列:
  • MQConnectionFactory 对象的 SENDEXIT 属性。
  • IBM MQ 资源适配器用于入站通信的激活规范上的 sendexit 属性。
  • IBM MQ 资源适配器用于输出通信的 ConnectionFactory 对象上的 sendexit 属性。
属性的值是包含以逗号分隔的一个或多个项的字符串。 每个项都通过以下一种方式标识发送出口:
  • 用于实现以 Java编写的发送出口的 WMQSendExit 接口的类的名称。
  • 用于以 C 或 C++ 编写的发送出口的字符串,格式为 libraryName (entryPointName)。
类似地,以下属性指定供连接使用的一个接收出口或一系列接收出口:
  • MQConnectionFactory 对象的 RECEXIT 属性。
  • IBM MQ 资源适配器用于入站通信的激活规范上的 receiveexit 属性。
  • IBM MQ 资源适配器用于输出通信的 ConnectionFactory 对象上的 receiveexit 属性。
以下属性指定供连接使用的安全出口:
  • MQConnectionFactory 对象的 SECEXIT 属性。
  • IBM MQ 资源适配器用于入站通信的激活规范上的 securityexit 属性。
  • IBM MQ 资源适配器用于输出通信的 ConnectionFactory 对象上的 securityexit 属性。

对于 MQConnectionFactories, ,您可以使用 IBM MQ JMS 管理工具或 IBM MQ Explorer 设置 SENDEXITRECEXITSECEXIT 属性。 或者,应用程序可通过调用 setSendExit()setReceiveExit()setSecurityExit() 方法来设置属性。

通道出口通过各自的类装入器来装入。 为找到通道出口,类装入器会以指定顺序搜索以下位置。
  1. 由属性 com.ibm.mq.cfg.ClientExitPath.JavaExitsClasspathIBM MQ 客户机配置文件的 Channels 节中的 JavaExitsClassPath 属性指定的类路径。
  2. [不推荐]Java 系统属性 com.ibm.mq.exitClasspath指定的类路径。 请注意,现在已不推荐使用此属性。
  3. IBM MQ 出口目录,如 表 1中所示。 类装入器首先在目录中搜索未打包在 Java 归档 (JAR) 文件中的类文件。 如果找不到通道出口,那么类装入器会在目录中搜索 JAR 文件。
    表 1. IBM MQ 出口目录
    平台 目录
    [AIX][Linux]AIX® and Linux®
    /var/mqm/exits (32 位通道出口)
    /var/mqm/exits64
    (64 位通道出口)
    [Windows]Windows install_data_dir\exit

    其中 install_data_dir 是您在安装期间为 IBM MQ 数据文件选择的目录。 默认目录为 C:\ProgramData\IBM\MQ

注: 如果通道出口存在于多个位置,那么 IBM MQ classes for JMS 将装入它找到的第一个实例。

类装入器的父代是用于装入 IBM MQ classes for JMS的类装入器。 因此,如果在以上所有位置中都找不到通道出口,那么父类装入器可能会装入通道出口。 但是,在诸如 JEE 应用程序服务器之类的环境中使用 IBM MQ classes for JMS 时,您可能无法影响父类装入器的选择,因此应通过在应用程序服务器上设置 Java 系统属性 com.ibm.mq.cfg.ClientExitPath.JavaExitsClasspath 来配置类装入器。

如果应用程序正在启用 Java security manager 的情况下运行,那么运行应用程序的 Java 运行时环境所使用的策略配置文件必须具有装入通道出口类的许可权。 有关如何执行此操作的信息,请参阅 Java Security Manager 下运行 JMS 应用程序的 IBM MQ 类

版本低于 IBM WebSphere® MQ 7.0MQSendExitMQReceiveExitMQSecurityExit 接口仍受支持。 如果使用用于实现这些接口的通道出口,那么 com.ibm.mq.jar 必须存在于类路径中。

有关如何在 C 中编写通道出口的信息,请参阅 消息传递通道的通道出口程序。 必须将以 C 或 C++ 编写的通道出口程序存储在 表 1中显示的目录中。

如果应用程序使用客户机通道定义表 (CCDT) 来连接到队列管理器,请参阅 将客户机通道定义表与 IBM MQ classes for JMS 配合使用