JndiJmsConnectionFactoryProvider Controller Service
描述
提供使用 Java 命名和目录接口 (JNDI) 查找现有 JMS ConnectionFactory 的服务。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| JNDI Initial Context Factory Class | | JNDI 初始上下文工厂类的完全限定类名 (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
详细说明
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