第五十三天补: JMS除错笔记

2008-02-23 10:12:52来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

这两天一直被在Weblogic下集成第三方JMS实现而烦恼.

环境:
App Server: Weblogic 8.1SP4
JMS provider: ActiveMQ

之所以选用ActiveMQ,最主要理由因为是它是免费的,而且对Spring的支持很好.


开始先用在Tomcat下运行无问题的默认 Spring 配置进行部署,在Weblogic下运行失败
错误详情:

Error 500--Internal Server Error
Java.lang.NoSuchMethodError: javax.jms.ConnectionFactory.createConnection()

使用ActiveMQ2.0新版,文档中说提升了对JCA的支持,在Weblogic等APP容器上可以用RA的方式实现Message Driven POJO.
使用中,把jca的Spring样例考入程序,不能运行,在id="activeMQContainer"的BEAN中加上abstract="true"的属性后运行通过.

经查看ActiveMQ的源码,问题并不是Spring配置文件的问题,而是出在org.codehaus.activemq.jca.JCAContainer类的第77行处,
代码片断如下:
for (int i = 0; i < names.length; i ) {
// TODO one day we could be smart to only pre-load the correct
// types of bean, based on the definitions?
String name = names[i];
beanFactory.getBean(name); //Error
//我在用Spring处理事务的时候,曾经把一个模板类定义成了Abstract,因此如果getBean企图生成一个抽象类的实例,则抛异常.
}

我是通过加了个判断:
if(!name.equalsIgnoreCase("txProxyTemplate")) {
beanFactory.getBean(name);
}
暂时跳过了这个问题,Spring应该有判断一个Bean是否abstract为true的方法.

做了实验依旧不行,开始琢磨Weblogic的console,发现了Foreign JMS Server项,
在网上查了查,有的文档说在weblogic中集成第三方JMS实现要配置此项,于是开始设置,还是不行...

这也不成那也不成,把weblogic.jar中的class全部换成了geronimo-spec-J2EE-1.4-rc3.jar文件中的,一切OK了.

可是老这样用crack之后的weblogic.jar也不舒服,考虑到今后部署的麻烦和修改jar文件可能带来的版权法律问题,还是决定再试试其他方法.
想到weblogic总是说java.jms.Connection中"NoSuchMethodError",而对我JMS的新规范实现视而不见,想到有可能jar在classpath中loading的前后位置有问题,就试着改了改.
把geronimo-spec-j2ee-1.4-rc3.jar文件在classpath中的位置提在weblogic.jar之前. 问题解决...

想来我这几天,先是怀疑weblogic对JMS1.1标准支持不良.
然后又怀疑是ActiveMQ的jca有bug(实际上的确是有一点).
之后又是在weblogic里大肆配置Foreign JMS Server和Bridge Destination.
后来竟然把weblogic.jar做了crack,而且居然AppServer跑起来没有什么问题.
最后把JMS1.1版本的规范实现jar包放在weblogic.jar之前来loading,问题就这么简单的解决了.

无语...

上一篇: 在JBOSS,TOCMAT上部署J2EE应用
下一篇: 配置JBoss 4 JDBC连接JDBC

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:一个电子商务网站的设计及开发环境配置文档

下一篇:Mini Java编译器(三)——属性翻译文法