JndiJmsConnectionFactoryProvider

文档中心 › 组件索引 › JndiJmsConnectionFactoryProvider

JndiJmsConnectionFactoryProvider Controller Service

类型全限定名:cn.org.acal.lynxus.jms.cf.JndiJmsConnectionFactoryProvider

所属 Bundle:cn.org.acal.lynxus:lynxus-jms-processors-nar:2.11.8

描述

提供使用 Java 命名和目录接口 (JNDI) 查找现有 JMS ConnectionFactory 的服务。

标签

jmsjndimessagingintegrationqueuetopicpublishsubscribe

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
JNDI Initial Context Factory ClassJNDI 初始上下文工厂类的完全限定类名 (java.naming.factory.initial)。
支持表达式语言:是(仅使用环境/系统变量求值)
JNDI Provider URL用作 java.naming.provider.url 值的 JNDI 提供程序 URL。有关允许的 URL 方案,请参阅附加详细信息文档。
支持表达式语言:是(仅使用环境/系统变量求值)
JNDI Name of the Connection Factory要查找连接工厂的 JNDI 对象的名称。
支持表达式语言:是(仅使用环境/系统变量求值)
JNDI / JMS Client Libraries指定要添加到 ClassPath 的 jar 文件和/或目录,以便加载 JNDI / JMS 客户端库。这应该是文件、目录和/或 URL 的逗号分隔列表。如果目录
支持表达式语言:是(仅使用环境/系统变量求值)
JNDI Principal使用 JNDI 进行身份验证时使用的主体 (java.naming.security.principal)。
支持表达式语言:是(仅使用环境/系统变量求值)
JNDI Credentials使用 JNDI 进行身份验证时使用的凭据 (java.naming.security.credentials)。
敏感属性:是

动态属性

动态属性允许用户自定义属性的名称与值。

名称值描述
JNDI Initial Context 环境变量的名称。JNDI Initial Context 环境变量的值。为了执行 JNDI 查找,必须建立初始上下文。完成后,可以为上下文建立环境。添加到此控制器服务的任何动态/用户定义属性都将作为环境配置/变量添加到此上下文。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

提供的 Service API

  • JMSConnectionFactoryProviderDefinition (cn.org.acal.lynxus-lynxus-jms-cf-service-nar-2.11.8)

详细说明

JndiJmsConnectionFactoryProvider

能力

该 Controller Service 允许用户引用一个已建立并通过 Java 命名与 目录接口(JNDI)服务器提供的 JMS Connection Factory。请查阅你的 JMS 厂商文档,了解该服务应配置的正确值。

Java 中的 Connection Factory 通常通过 JNDI 获取,代码如下。 注释说明了这些内容如何映射到 Controller Service 的配置。

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_INITIAL_CONTEXT_FACTORY); // 该值来自 "JNDI Initial Context Factory Class" 属性。
env.put(Context.PROVIDER_URL, JNDI_PROVIDER_URL); // 该值来自 "JNDI Provider URL" 属性。
env.put("My-Environment-Variable","Environment-Variable-Value"); // 这通过添加名为 "My-Environment-Variable"、值为 "Environment-Variable-Value" 的用户自定义属性实现

Context initialContext = new InitialContext(env);
ConnectionFactory connectionFactory = initialContext.lookup(JNDI_CONNECTION_FACTORY_NAME); // 该值来自 "JNDI Name of the Connection Factory" 属性

还需要注意,要使上述方式生效,"JNDI Initial Context Factory Class" 命名的类必须在 classpath 上。JMS 提供者特定的客户端类 (例如要从 JNDI 获取的 Connection Factory 对象的类)也必须 在 classpath 上。在 Lynxus 中,通过把 "JNDI / JMS Client Libraries" 属性指向一个或多个 .jar 文件或目录(逗号分隔的 值)来实现。

当 Controller Service 被禁用再重新启用时,它会再次执行 JNDI 查找。一旦获取到 Connection Factory,在该服务被禁用 之前不会再执行 JNDI 查找。

配置示例

例如,以下配置可用于通过 Active MQ 内嵌的 JNDI 服务器提供的 Connection Factory 连接其 JMS Broker:

属性名称 属性值
JNDI Initial Context Factory Class org.apache.activemq.jndi.ActiveMQInitialContextFactory
JNDI Provider URL tcp://jms-broker:61616
JNDI Name of the Connection Factory ConnectionFactory
JNDI / JMS Client Libraries /opt/apache-activemq-5.15.2/lib/

上述示例假设存在一个可以通过主机名 "jms-broker" 访问、并在 61616 端口运行 Apache ActiveMQ 的主机,并且包含 org.apache.activemq.jndi.ActiveMQInitialContextFactory 类和 其他 JMS 客户端类的 jar 文件可以在 /opt/apache-activemq-5.15.2/lib/ 目录中找到。

属性校验

以下组件属性包含额外的校验,以限制允许的值:

  • JNDI Provider URL

JNDI Provider URL 校验

JNDI Provider URL 的默认校验允许以下 URL scheme:

  • file
  • jgroups
  • ssl
  • t3
  • t3s
  • tcp
  • udp
  • vm

可以配置以下 Java 系统属性,覆盖默认允许的 URL scheme:

  • cn.org.acal.lynxus.jms.cf.jndi.provider.url.schemes.allowed

该系统属性必须包含空格分隔的 URL scheme 列表。可以在应用的 bootstrap.conf 中这样配置:

  • java.arg.jndiJmsUrlSchemesAllowed=-Dcn.org.acal.lynxus.jms.cf.jndi.provider.url.schemes.allowed=ssl tcp