我正在尝试将EHCache的事务功能与Atomikos和Apache Tomcat结合使用(用于JMS和Hibernate,但这只是为了向怀疑者保证我真的需要JTA)。
我正在开发一个小POC,我正在尝试放置一个实现MyValue
的{{1}}实例,当我尝试提交事务时,我得到__ {{1作为根(堆栈跟踪在末尾)。
当我对Serializable
文件进行jar并将其放在%TOMCAT_HOME%\ lib下时,我没有异常。
重要的是要添加,因为我在atomikos tutorial上看到的指令Atomikos的罐子和EHCache罐子都在%TOMCAT_HOME%\ lib下。
这是引用:
当在Tomcat中全局安装Atomikos事务管理器时,您现在还必须在同一个全局位置安装JDBC驱动程序(即:进入TOMCAT_HOME / lib文件夹)。如果不这样做,您将在Web应用程序部署期间获得NoClassDefFoundErrors或ClassNotFoundException,甚至是ClassCastException。
这不是Atomikos和Tomcat的限制,而是Tomcat和Atomikos必须遵循的J2EE类加载设计的限制。
问题是我当然不能在该文件夹下拥有所有的值类。
我是否误入了指令?
有没有人遇到过这个问题?
EHCache.xml
ClassNotFoundException
堆栈跟踪
MyValue
答案 0 :(得分:1)
重要的是,由于我在atomikos教程中看到的指令,Atomikos的罐子和EHCache罐子都在%TOMCAT_HOME%\ lib
下
来自网络应用程序的类(即由 WebappX 类加载器加载)在 Common classloader(参见Apache Tomcat 6.0 - Class Loader HOW-TO),这就是你获得CNFE的原因。
现在,问题是,为什么要将EHCache JAR放在 Common 类加载器中?我觉得你不需要。将其打包到您的Web应用程序级别。