如何在TomEE中修改ActiveMQ KahaDB存储目录
TomEE 9 中 ActiveMQ KahaDB 存储目录配置问题
问题现象
- 控制台显示 KahaDB 默认存储目录为
C:\Windows\system32\activemq-data\localhost\KahaDB,相关日志如下:
Jun 29, 2023 10:00:01 AM org.apache.activemq.broker.BrokerService <clinit> INFO: Loaded the Bouncy Castle security provider at position: 14 Jun 29, 2023 10:00:02 AM org.apache.activemq.broker.BrokerService doStartPersistenceAdapter INFO: Using Persistence Adapter: KahaDBPersistenceAdapter[C:\Windows\system32\activemq-data\localhost\KahaDB] Jun 29, 2023 10:00:02 AM org.apache.activemq.store.SharedFileLocker doStart INFO: Database activemq-data\localhost\KahaDB\lock is locked by another server. This broker is now in slave mode waiting a lock to be acquired
- 由于
C:\Windows\system32是系统受保护目录,权限不足导致持续输出锁等待日志:
INFO: Database activemq-data\localhost\KahaDB\lock is locked by another server. This broker is now in slave mode waiting a lock to be acquired
- 已知 KahaDB 支持自定义配置,但修改
server.xml未生效。当前server.xml中已添加的配置如下:
<broker brokerName="broker"> <persistenceAdapter> <kahaDB directory="/var/apps/apache-tomee-plus-9.0/boss/usmo/Boss/resources/jmsQueues" journalMaxFileLength="32mb"/> </persistenceAdapter> </broker>
解决方案
TomEE 9 集成 ActiveMQ 时,不能直接在 server.xml 中配置 broker,正确的配置文件是 conf/tomee.xml(部分分发版可使用 conf/activemq.xml),具体操作如下:
方式1:直接在 tomee.xml 中配置
打开 TomEE 安装目录下的 conf/tomee.xml,在 <tomee> 标签内添加 ActiveMQ 资源适配器配置:
<tomee> <!-- 保留原有配置项 --> <Resource id="ActiveMQBroker" type="ActiveMQResourceAdapter"> <!-- 直接指定KahaDB存储目录 --> BrokerXmlConfig = broker:(tcp://localhost:61616)?persistent=true&kahaDB.directory=C:\your\custom\path\activemq-data\localhost\KahaDB ServerUrl = tcp://localhost:61616 </Resource> </tomee>
方式2:使用独立的 activemq.xml 配置文件
- 在
conf目录下创建activemq.xml,添加完整的 broker 配置:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="C:\your\custom\path\activemq-data"> <persistenceAdapter> <kahaDB directory="C:\your\custom\path\activemq-data\localhost\KahaDB" journalMaxFileLength="32mb"/> </persistenceAdapter> <!-- 配置运输连接器 --> <transportConnectors> <transportConnector name="tcp" uri="tcp://localhost:61616"/> </transportConnectors> </broker>
- 修改
conf/tomee.xml,指定加载该配置文件:
<tomee> <!-- 保留原有配置项 --> <Resource id="ActiveMQBroker" type="ActiveMQResourceAdapter"> BrokerXmlConfig = classpath:activemq.xml ServerUrl = tcp://localhost:61616 </Resource> </tomee>
关键说明
- TomEE 通过
ActiveMQResourceAdapter加载 ActiveMQ 配置,server.xml中的 broker 标签不会被识别,这是之前修改无效的核心原因。 - 确保自定义存储目录具备读写权限,避免再次出现锁文件异常。
内容的提问来源于stack exchange,提问作者HockChai Lim
相关产品推荐
相关产品推荐

