Java 奇怪的Atomikos异常-init()中出错:日志已在使用中?

Java 奇怪的Atomikos异常-init()中出错:日志已在使用中?,java,tomcat,jta,atomikos,Java,Tomcat,Jta,Atomikos,我们正在尝试在几个本地环境上运行使用Atomikos作为事务管理器的相同web应用程序(每个本地环境都使用相同配置文件的相同版本的spring、Atomikos、tomact等)。其中一些工作正常,但在其中一个中,当我们尝试启动tomcat时,会出现以下异常: Caused by: java.lang.IllegalStateException: Can't overwrite cause with java.lang.RuntimeException: Log already in use?

我们正在尝试在几个本地环境上运行使用Atomikos作为事务管理器的相同web应用程序(每个本地环境都使用相同配置文件的相同版本的spring、Atomikos、tomact等)。其中一些工作正常,但在其中一个中,当我们尝试启动tomcat时,会出现以下异常:

Caused by: java.lang.IllegalStateException: Can't overwrite cause with java.lang.RuntimeException: Log already in use?
at java.lang.Throwable.initCause(Throwable.java:456)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:326)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:405)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:569)
at com.atomikos.icatch.jta.UserTransactionManager.startupTransactionService(UserTransactionManager.java:89)
at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:77)
at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:142)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1638)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1579)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
... 41 more
Caused by: com.atomikos.icatch.SysException: Error in init(): Log already in use?
... 54 more
Caused by: java.lang.RuntimeException: Log already in use?
at com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault(UserTransactionServiceImp.java:203)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:258)
我们无法找出有问题的日志是什么,谷歌也帮不了什么忙……有人知道这个奇怪问题的原因吗?同样,我们的环境具有完全相同的配置,工作正常,另一个环境具有另一个奇怪的警告:


谢谢!:)

转到生成atomikos日志的目标。在那里,您将看到各种需要删除的0字节锁文件。上次运行应用程序时发现此问题,但应用程序未正确关闭。一旦删除lck文件,然后尝试部署应用程序,问题就会得到解决。

事实证明,这是一个权限问题。Atomikos试图在eclipse文件夹中创建lck文件,一旦我们将eclipse移动到另一个位置,一切正常。

当您部署了多个项目(使用Atomikos)时,由于同时写入Atomikos的日志文件(错误消息:“日志已在使用”)

要解决此问题,必须自定义日志文件名,在atomikos配置中设置属性'com.atomikos.icatch.log\u base\u name',如下所示:

<bean id="atomikosUserTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp"
      init-method="init" destroy-method="shutdownForce">
    <constructor-arg>
        <props>
            <prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
            <prop key="com.atomikos.icatch.log_base_name">your_project_name_log</prop>
            <prop key="com.atomikos.icatch.output_dir">../standalone/log/</prop>
            <prop key="com.atomikos.icatch.log_base_dir">../standalone/log/</prop>
        </props>
    </constructor-arg>
</bean>

com.atomikos.icatch.standalone.UserTransactionServiceFactory
您的项目名称日志
../standalone/log/
../standalone/log/

注意:我更改了属性“com.atomikos.icatch.output_dir”和“com.atomikos.icatch.log_base_dir”,只是为了保持事情的有序性,在JBoss日志文件的同一目录中创建了atomikos日志文件。

在我的例子中,问题是我的JBoss在Eclipse中意外地停止了。我试图再次启动它并收到了这个错误,但实际上这是因为我的机器中仍有一个JBoss进程在运行,尽管Eclipse显示它已终止。所以我刚刚杀死了现存的JBoss进程

这是一个权限问题。我在jta.properties中添加了这两行(确认dir存在)


默认情况下,atomikos在运行JVM的用户的主目录中创建其日志文件和锁文件

对于Tomcat8,这将是:

/usr/share/tomcat8

您应该检查此文件夹的权限。在我身上,它是:

drwxr_xr-x  3 root   tomcat 4096 Feb  7 10:28 .
这意味着tomcat用户无法对其进行写入

我把它改成:

drwxrwxr-x  3 root   tomcat 4096 Feb  7 10:28 .

一切都很好

如果它能帮助一些迷失的灵魂,那么当我从Eclipse安装Eclipse内存分析器(MAT)插件时,我就遇到了这个问题

我一卸载插件(说明),问题就消失了


MAT插件开发者,请注意这个问题

/usr/share/tomcat8
可能不是放置应用程序日志文件的最佳位置。请确保同时删除.epoch文件(如果存在)。
drwxrwxr-x  3 root   tomcat 4096 Feb  7 10:28 .