You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 配置文件

  1. 在 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>
  1. 修改 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:09:54