2007-08-31

又一次谈classloading--java.lang.VerifyError

事情是这样的, ear里的war老部署不上去, war里的一个filter(确切的应该是acegi的filter, 托管给spring的)加载不了, 问题出在spring给它的doFilter方法注入属性被检测到verifyError.

后来, 修改jbossweb-tomcat55.sar/META-INF/jboss-service.xml, 把Java2ClassLoadingCompliance属性设置为true, 就OK了.

这个属性是jboss集成tomcat用的, 它的意思是, 是否把java2的"父类优先"加载模型替换为servlet 2.3的"web容器优先"


2007-08-29

jobss类加载

一般来说, 象httpclient, logging等, 不会从ear包内加载, 而是用jboss现有的.如果想加载, 要在meta-inf/下加个jboss-app.xml文件, 内容大概是:
<jboss-app>
<loader-repository>some.dot.com:loader=webtest.ear</loader-repository>
</jboss-app>
原文

然后我就照这个办了, 后来发现还不行, 说是mdb(部署了一个message-driven bean)不合规范:
section:15.7.4
The message driven bean must declare one onMessage method

后来才发现, 不知道哪个傻X把geronimo-j2ee-spec.jar放到ear包里来了, NND, 估计是geronimo与jboss验证方法不一样吧.

去掉就OK了. 还有个关于logging的, 不加jboss-app.xml的话, 会自动把你自己ear内的logging.jar忽略掉(而用jboss服务器的), 加了jboss-app.xml, ear的classLoader也会把ear里面的logging.jar加载上 , 然后Log对象就发现它有两个版本(一个jboss的, 一个ear载的).就会报错(检查的还挺仔细)

再这么下去, 快成jboss专家了....

--
It's Hard to Define, But I Know it When I See it…

2007-08-28

class 版本

Unsupported major.minor version 49.0
部署ejb的时候就出这问题, 也会出classNotFoundException. 原因是jdk5编译出来的class在jdk4上面不能.
这种问题...真让人无奈....

--
It's Hard to Define, But I Know it When I See it…