日志已由此应用程序打开
常见问题解答 > 错误 > 异常 > 日志已由此应用程序打开
错误
您会看到类似这样的内容
java.io.IOException: Journal is already opened by this application.
at org.apache.activeio.journal.active.ControlFile.lock(ControlFile.java:71)
at org.apache.activeio.journal.active.LogFileManager.initialize(LogFileManager.java:120)
at org.apache.activeio.journal.active.LogFileManager.<init>(LogFileManager.java:101)
at org.apache.activeio.journal.active.JournalImpl.<init>(JournalImpl.java:99)
at org.apache.activemq.store.DefaultPersistenceAdapterFactory.createJournal(DefaultPersistenceAdapterFactory.java:198)
at org.apache.activemq.store.DefaultPersistenceAdapterFactory.getJournal(DefaultPersistenceAdapterFactory.java:134)
描述
每个代理都需要拥有自己的目录来存储其日志文件等。此错误表示您有两个代理共享相同的文件。
此异常的常见原因是在一台机器上运行两个代理,并使用指向同一目录的相同配置文件。因此,一种解决方法是通过 Spring 的属性语法对目录名进行参数化 - 或者只需创建另一个配置文件,以便第二个代理使用不同的目录。
另一个导致此问题的原因是,如果您在 JMS 客户端中使用 vm://127.0.0.1 样式的传输,并且 JMS 连接在初始化代理之前启动。如果您创建 vm 传输连接,它将在没有运行的代理的情况下自动创建代理;因此,您可能会意外地创建两个代理。解决方法是确保您使用的 JMS 连接工厂依赖于您正在配置的代理(例如,在 Spring 中,在连接工厂上使用 **depends-on** 属性使其依赖于代理)。这将确保在连接工厂之前先初始化代理。
注意代理名称和 URI
请确保您在代理名称中不使用任何奇怪的字符,因为它们会转换为 URI,而 URI 不允许使用下划线等。
此问题也可能是由 错误的操作系统和 JVM 组合 引起的