我遇到一头疼问题:

02-09-27 banq

在Jboss下,Factory类中class.forName不能正常运行,报错classnoFoundException,明明我的class在WEB-INF/class/下

我的软件以前运行正常,今天就只是增加另外一个包含class.forName的Factory类,结果,两个都不能运行了,删除后来新增的,原来的还是不能运行,怀疑是Jboss本身有Bug.

有人碰到过相同问题不?

banq
2002-09-27 22:12

发现问题了,其实这问题在以前帖子里讨论过,由于我的软件系统太复杂,没想到这个问题,Jboss先EJB中的classpath是最优先考虑,如果在EJB中的Jar中没有这个类,不管从EJB还是从WEB应用调用class.forName(这个类),都会报错,ClassNoFound Exception的错误。

我只要将EJB中补充这个类就可以.

调试J2EE也总结个规律,当出现顽固问题,可以分别调试WEB和EJB,这样比较容易发现一些动态问题所在。

以前帖子的讨论

banq
2002-09-27 22:21

从这里也可以解释,为什么在PET store中 param/CatalogDAOImpl为什么分别在web.xml和ejb-jar.xml都定义,这也是分别为Web应用和EJB容器服务的。

这两者从某种意义上说不是相通的。

andrawu
2002-09-28 09:22

呵呵,受益不浅,谢板主了!

newcaptain
2002-09-28 10:44

其实这和应用服务器的类装载方式有关。比如weblogic会为ejb-jar.jar 和war创建不同的类装载器,而且war包的类装载器是ejb包装载器的子类,也就是说ejb包中的类对war包的类装载器来说是可见的,而反之,则不行。