atomikos 在Windows Tomcat下使用遇到的坑
来源:互联网 发布:江南七怪 知乎 编辑:程序博客网 时间:2024/06/15 10:56
该问题主要出现在 Windows 环境下. Linux下不会
问题是很这样的:
1. 当在Eclipse 使用 maven的Tomcat 插件启动的时候,是不会报错的;
2. 当将war包放到 tomcat 容器中,启动Tomcat server的时候,就会报错.
eclipse中使用的Tomcat插件如下:
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <additionalClasspathDirs> <additionalClasspathDir>D:/config</additionalClasspathDir> </additionalClasspathDirs> <uriEncoding>utf-8</uriEncoding> <path>/gwhz</path> </configuration> </plugin> </plugins> </build>
ISSUE 1: Log already in use?
一开始,问题的描述如下
ERROR: the specified log seems to be in use already. Make sure that no other instance is running, or kill any pending process if needed.java.lang.RuntimeException: Log already in use?at com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault(UserTransactionServiceImp.java:246)at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:306)at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:413)at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:90)at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:140)
从log中可以知道,应该是日志的目录在同一个了
com.atomikos.icatch.log_base_namecom.atomikos.icatch.log_base_dir
从Eclipse启动,会发现不同的项目,启动的时候,他们的这个是不一样的:
E:\workspace\trunk\gwlogin\gwlogin-web\.\tmlog.lckE:\workspace\trunk\gwhyz\gwhyz-web\.\tmlog.lck
然后我们再可以发现如果我们啥都没有配置的话,atomikos的配置是这样的:
com.atomikos.icatch.automatic_resource_registration=true, com.atomikos.icatch.client_demarcation=false, com.atomikos.icatch.threaded_2pc=false, com.atomikos.icatch.serial_jta_transactions=true, com.atomikos.icatch.serializable_logging=true, com.atomikos.icatch.log_base_dir=.\, com.atomikos.icatch.max_actives=50, com.atomikos.icatch.checkpoint_interval=500, com.atomikos.icatch.enable_logging=true, com.atomikos.icatch.output_dir=.\, com.atomikos.icatch.log_base_name=tmlog, com.atomikos.icatch.max_timeout=300000, com.atomikos.icatch.tm_unique_name=192.168.158.80.tm, java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory, java.naming.provider.url=rmi://localhost:1099, com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory, com.atomikos.icatch.force_shutdown_on_vm_exit=false, com.atomikos.icatch.default_jta_timeout=10000
从上面可以看到 com.atomikos.icatch.log_base_dir 和 com.atomikos.icatch.output_dir 都是当前目录的
com.atomikos.icatch.log_base_dir=.\com.atomikos.icatch.output_dir=.\
所以多个项目同时在Tomcat启动的时候,就会报以上的问题. 而且我们可以在Tomcat的bin目录下看到如下的文件:
{your IP}.tm0.epochtmlog.lcktmlog0.log
然后发现这个问题之后,就试着去修改配置文件. 可是配置文件需要放在那儿呢?
通过log中的类
com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault
我们可以发现,atomikos的配置 最终是从两个文件中读取过来的
1. transactions.properties2. jta.properties
顺序是,先尝试读取 transactions.properties文件,如果没有读取到,就去读取jta.properties.
如果都没有读取到,那么就使用默认的配置.
ISSUE2: Error in init of UserTransactionServiceImp
然后兴致冲冲的在classpath中,将debug获取到的 默认配置放上去,然后再重启tomcat. 配置如下
com.atomikos.icatch.automatic_resource_registration=true, com.atomikos.icatch.client_demarcation=false, com.atomikos.icatch.threaded_2pc=false, com.atomikos.icatch.serial_jta_transactions=true, com.atomikos.icatch.serializable_logging=true, com.atomikos.icatch.log_base_dir=D:\logs\atomikos\gwhyz\, com.atomikos.icatch.max_actives=50, com.atomikos.icatch.checkpoint_interval=500, com.atomikos.icatch.enable_logging=true, com.atomikos.icatch.output_dir=D:\logs\atomikos\gwhyz\, com.atomikos.icatch.log_base_name=tmlog, com.atomikos.icatch.max_timeout=300000, com.atomikos.icatch.tm_unique_name=192.168.158.80.tm, java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory, java.naming.provider.url=rmi://localhost:1099, com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory, com.atomikos.icatch.force_shutdown_on_vm_exit=false, com.atomikos.icatch.default_jta_timeout=10000
然后重启,发现还是有错误,不过跟之前那个不一样了:
四月 17, 2017 4:51:33 下午 org.apache.catalina.core.StandardContext loadOnStartup严重: Servlet [dispatcher] in web application [/gwhyz] threw load() exceptioncom.atomikos.icatch.SysException: Error in init of UserTransactionServiceImp: com.atomikos.icatch.standalone.UserTransactionServiceFactory, at com.atomikos.icatch.config.UserTransactionServiceImp.checkInit(UserTransactionServiceImp.java:350) at com.atomikos.icatch.config.UserTransactionServiceImp.createTSInitInfo(UserTransactionServiceImp.java:362) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:568) 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(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)....
从源码中可以发现,是加载的时候报错了:
private void checkInit () { if ( delegate_ != null ) return; String factoryClassName = getOrFindProperty ( "com.atomikos.icatch.service" ); if ( factoryClassName == null ) throw new SysException ( "UserTransactionServiceImp: property not defined: com.atomikos.icatch.service" ); try { Class factoryClass = ClassLoadingHelper.loadClass ( factoryClassName ); UserTransactionServiceFactory factory = ( UserTransactionServiceFactory ) factoryClass.newInstance (); delegate_ = factory.getUserTransactionService ( properties_ ); //This should initialize the properties with whatever is specified and //use SYSTEM_DEPENDENT DEFAULT values for others } catch ( Exception e ) { Stack<Exception> errors = new Stack<Exception> (); errors.push ( e ); throw new SysException ( "Error in init of UserTransactionServiceImp: " + e.getMessage() , errors ); } }
这个找啊找啊。一开始以为是lib没加载进去,然后就讲 对应的jar包放到 classpath中,可是还是这样
最后实在没辙了,就从 官网上将jta.properties 放进来,不用 transactions.properties了.
下载的地址为:
https://www.atomikos.com/pub/Documentation/Tomcat7Integration35/jta.properties
然后竟然可以了.
然后再去对比了下 transactions.properties文件,发现自己竟然每一行多了一个逗号.真的快吐血了; 将逗号去掉就可以了
最后的配置如下:
transactions.properties
com.atomikos.icatch.automatic_resource_registration=truecom.atomikos.icatch.client_demarcation=falsecom.atomikos.icatch.threaded_2pc=falsecom.atomikos.icatch.serial_jta_transactions=truecom.atomikos.icatch.serializable_logging=truecom.atomikos.icatch.log_base_dir=D:\\logs\\atomikos\\gwhyz\\com.atomikos.icatch.max_actives=50com.atomikos.icatch.checkpoint_interval=500com.atomikos.icatch.enable_logging=truecom.atomikos.icatch.output_dir=D:\\logs\\atomikos\\gwhyz\\com.atomikos.icatch.log_base_name=tmlogcom.atomikos.icatch.max_timeout=300000com.atomikos.icatch.tm_unique_name=192.168.158.80.tmjava.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactoryjava.naming.provider.url=rmi://localhost:1099com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactorycom.atomikos.icatch.force_shutdown_on_vm_exit=falsecom.atomikos.icatch.default_jta_timeout=10000
将 log_base_dir 和 output_dir 的地址指向别的地方,Tomcat下的bin目录中就不会有以下三个文件了,他们会被放到 配置文件中指定的目录中去的
{your IP}.tm0.epochtmlog.lcktmlog0.log
- atomikos 在Windows Tomcat下使用遇到的坑
- 使用atomikos处理ActiveMQ在Spring环境的XA事务
- atomikos的几个坑
- windows下tomcat安装时遇到的问题说明
- Solr+Tomcat在Windows下的搭建
- tomcat在windows下的下载安装
- 在windows下使用xampp时遇到无法读取session的问题
- 在linux下安装tomcat,遇到的问题
- 使用JNI的struts2项目在tomcat遇到的问题
- Linux下使用Tomcat遇到的一些问题
- 在Windows下的Homestead遇到的问题
- 在使用supervisord 管理tomcat时遇到的小问题
- windows环境下Cocos2DX 3.0 rc2 结合使用Cocostudio时,在命令行下编译到Android遇到的问题
- 在windows下安装opengrok遇到的一个问题
- 在Windows下安装Hadoop环境遇到的问题
- 在windows下编译ffmpeg中遇到的一些问题
- Ruby在windows下配置所遇到的问题
- rails在windows下安装遇到的问题
- Follow me 挑战程序与设计
- ZOJ3775-?(>_o)!
- 单链表的基本操作
- ACM n-1位数
- Java 保留2位小数点(2种方式)
- atomikos 在Windows Tomcat下使用遇到的坑
- wireshark权限不够
- 项目开发笔记
- javascript放在head和body的区别(w3c建议放在head标签中)
- 一个小demo
- Android开发之--标签选择
- AndroidStudio Frameworks detected: Android framework is detected in the project Configure
- webstorm 中使用zencoding
- 紫书章六例题15 给任务排序 UVA 10305(拓扑排序)