JBoss的classLoader问题出现在,我将richfaces的tree例子放到seam的ear项目中的时候,bean中竟然找不到UITree对象,报classNotFound从而我发现,默认seam将ear的jar文件和war的jar文件分开放了。
比如:同样是richfaces的jar,有三个,但是在ear/lib下面只有一个api,在WEB-INF/lib下面只有ui和impl。
猜到可能是这里出的问题,于是导出查找资料。seam官方论坛上有人说,将所有的lib全部放在ear下面,然后在war里面添加META-INF/MANIFEST.MF文件,在这个文件的Class-Path属性里面写上要加载的包
但是怎么试都试不出来,不知道这里的classpath该怎么写才能让war去找ear/lib下面的包。于是干脆我将包复制两份,ear和war下面都放一份,然后报错,具体的不记得了,貌似是类重复加载,然后结果还是找不到。
找了一天半,终于让我找到一个文章,里面说,JBoss4.2将ear和war的classLoader分开了,需要修改JBoss下面 server\default\deploy\JBoss-web.deploy\META-INF\JBoss-service.xml里面的配置,让 JBoss的classLoader合并为一个,但是文章还是没有说清楚到底该改哪个值。
还好,JBoss的注释做的好,我英文还勉强能在词典的帮助下看懂注释说的什么最终将<attribute name="UseJBossWebLoader">false</attribute>中的false改成true就ok了。
开始我还写成了ture,让我多费了一番周折,哎,eclipse用惯了,所有东西都用弹出提示了,就会让人不小心犯这种低级错误。以上是JBoss的classLoader问题和解决。
【编辑推荐】