请教log4J在Jboss中能否使用?

03-09-03 xue
我在一个项目中发现这样的问题,因为需要在原有的系统上进行扩展,用到了EJB,选用JBOSS,EJB全使用localinterface,所以必须把原来在tomcat上的webapplication放到新的Jboss-tomcat下,结果开始总是失败,原来在tomcat中能运行的webapplication现在装不到jboss下,所出现的错误提示是:发布时陷入死循环!(奇怪的错误),后来终於发现问题在log4j上面,把原来webapplication中的log4j部分去掉,则一切可以正常使用。

那么是不是在JBOSS中不能使用log4j?也就是说webapplication也不允许读写在服务器端的文件?还是说在JBOSS下使用log4j有什么不一样的地方呢?

iceant
2003-09-03 09:23
我记得 JBoss 有两种 ClassLoader 模型,默认的模型中 Web Application 的 Class 是不具有优先权的。

因为 JBoss 中有 Log4j,而且应该是属于 System 一级的 ClassLoader,那么,当 Web Application 中需要 deploy log4j 这个冲突的 package 时,因为 JVM 中已经有 Log4j 存在,所以就不允许加载。

JBoss 也许在这里做了一个判断,它认为这个WebApplication 中依赖的类没法加载,所以整个 WebApplication 就不允许 Deploy.

Tomcat 中的 WebClassLoader 默认情况下是因WebApplication的不同而各自独立的。所以不会出现这个情况。即使Tomcat也使用了 Log4j,但是因为 JVM 只认 ClassLoader,所以各个 WebClassLoader 装载的 class 它认为是不同的 class.

我记得 JBoss 中通过配置可以实现不同 WebApplication 拥有不同 WebClassLoader 的模型。但是我尝试过,一旦改成这种模型, jmx-console 就没法工作了,因为 jmx-console 也是一个 webapplication, 它依赖于其它的 package 才能工作,而使用这种模型以后, jmx-console 就无法找到相应的 package, 于是无法工作。

raynix
2003-09-03 09:38
直接使用jboss的log4j就可以了。conf内有个log4j.xml,可以在那里配置你的context,然后在app中调用。这样就不依靠app中的log4j.jar了。

猜你喜欢