第 4 章 Configuration

本章介绍将 AMQ OpenWire JMS 实施绑定到您的 JMS 应用并设置配置选项的流程。

JMS 使用 Java 命名目录接口(JNDI)来注册和查找 API 实施和其他资源。这可让您编写代码到 JMS API,而不将它与特定的实施关联。

配置选项作为连接 URI 上的查询参数公开。

有关配置 AMQ OpenWire JMS 的更多信息,请参阅 ActiveMQ 用户指南

4.1. 配置 JNDI 初始上下文

JMS 应用使用从 InitialContextFactory 获取的 JNDI InitialContext 对象来查找 JMS 对象,如连接工厂。AMQ OpenWire JMS 在 org.apache.activemq.jndi.ActiveMQInitialContextFactory 类中提供 InitialContextFactory 实施。

InitialContext 对象被实例化时,InitialContextFactory 实现会被发现:

javax.naming.Context context = new javax.naming.InitialContext();

要查找实施,必须在您的环境中配置 JNDI。实现这一目标的方法有三种:使用 jndi.properties 文件、使用系统属性或使用初始上下文 API。

使用 jndi.properties 文件

创建名为 jndi.properties 的文件,并将其放置在 Java 类路径中。使用键 java.naming.factory.initial 添加属性。

示例:使用 jndi.properties 文件设置 JNDI 初始上下文工厂

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

在基于 Maven 的项目中,jndi.properties 文件放置在 <project-dir>/src/main/resources 目录中。

使用系统属性

设置 java.naming.factory.initial 系统属性。

示例:使用系统属性设置 JNDI 初始上下文工厂

$ java -Djava.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory ...

使用初始上下文 API

使用 JNDI 初始上下文 API 以编程方式设置属性。

示例:以编程方式设置 JNDI 属性

Hashtable<Object, Object> env = new Hashtable<>();

env.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");

InitialContext context = new InitialContext(env);

请注意,您可以使用同一 API 为连接工厂、队列和主题设置 JNDI 属性。