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

时间:2014-01-09 08:21:21

标签: 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?
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)

我们无法弄清楚有问题的日志是什么,谷歌也没有多大帮助......任何人都知道这个奇怪问题的原因是什么?同样,我们的环境具有完全相同的配置,可以正常工作,另一个环境有另一个奇怪的警告:https://stackoverflow.com/questions/20936253/atomikos-with-activemq-commit-heuristic-warnings

谢谢! :)

7 个答案:

答案 0 :(得分:6)

如果部署了多个项目(使用Atomikos),则会出现此问题,原因是写入atomikos'日志文件(错误消息:'日志已在使用' )。

要解决此问题,您必须自定义日志文件名设置属性 &#39; com.atomikos.icatch.log_base_name&#39; < / strong> in atomikos configuration ,如下例所示:

<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>

P.S。:请注意,我已经更改了属性&#39; com.atomikos.icatch.output_dir &#39;和&#39; com.atomikos.icatch.log_base_dir &#39;只是为了保持组织有序,创造atomikos&#39;将日志文件放在JBoss日志文件的同一目录中。

答案 1 :(得分:3)

原来这是一个许可问题。 Atomikos试图在eclipse文件夹中创建lck文件,一旦我们将eclipse移动到另一个位置,一切正常。

答案 2 :(得分:3)

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

com.atomikos.icatch.output_dir = /data/logs/XXX/ 
com.atomikos.icatch.log_base_dir = /data/logs/XXX/

答案 3 :(得分:1)

转到生成atomikos日志的目标位置。在那里,您将观察需要删除的各种0字节锁定文件。当应用程序上次运行时,会出现此问题,但是它被错误地关闭了。删除lck文件然后尝试部署应用程序后,问题就会得到解决

答案 4 :(得分:0)

在我的情况下,问题是我的JBoss在Eclipse中以意想不到的方式停止了。我试图再次启动并收到此错误,但实际上是因为我的机器中仍然运行了一个JBoss进程,尽管Eclipse将其显示为已终止。所以我刚刚杀死了现有的JBoss进程。

答案 5 :(得分:0)

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

对于Tomcat8,这将是:

的/ usr /共享/ tomcat8

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

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

这意味着tomcat用户无法写入。

我把它改为:

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

一切正常。

答案 6 :(得分:0)

如果它可以帮助一些迷失的灵魂,那么当我从Eclipse安装 Eclipse Memory Analyzer (MAT)插件时,这个问题就发生了。

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

MAT插件开发人员,请注意此问题!