Exception in thread "main" java.lang.NoSuchFieldError: TRACE
at org.jboss.logging.Log4jLoggerPlugin.isTraceEnabled(Log4jLoggerPlugin.java:85)
at org.jboss.logging.Logger.isTraceEnabled(Logger.java:122)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:660)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at jp.fukuoka.pref.kiban.common.util.ServiceLocator.getEjbHome(ServiceLocator.java:124)
at jp.fukuoka.pref.kiban.common.batch.OnlineSequencer.next(OnlineSequencer.java:48)
at jp.fukuoka.pref.kiban.common.api.ProcessRequestMessageAccessor.setProcessRequestMessage(ProcessRequestMessageAccessor.java:74)
at jp.fukuoka.pref.kiban.sample.common.batch.MyDelayedOnBatchRequester.request(MyDelayedOnBatchRequester.java:38)
at jp.fukuoka.pref.kiban.sample.common.batch.MyDelayedOnBatchRequester.main(MyDelayedOnBatchRequester.java:53)
出现该异常的原因是:项目中导入的log4j版本和jboss的client下的log4j版本不一致(jboss的版本>项目中导入的版本)
解决方法:将jboss下的log4j替换项目中的log4j包就可以了,注意EJB和EJB客户端都需要替换,替换一个同样存在问题。
解决了该问题后在jboss中部署可能产生下面问题:
09:27:42,500 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a
"org.apache.log4j.Appender" variable.
09:27:42,500 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
09:27:42,500 ERROR [STDERR] log4j:ERROR [org.jboss.mx.loading.UnifiedClassLoader3@13849df{
url=file:/C:/osac/jboss-4.2.2.GA/server/default/deploy/sample_common.war/ ,addedOrder=46}] whereas object of type
09:27:42,500 ERROR [STDERR] log4j:ERROR "org.jboss.logging.appender.FileAppender" was loaded by
[org.jboss.system.server.NoAnnotationURLClassLoader@89cf1e].
09:27:42,515 ERROR [STDERR] log4j:ERROR Could not instantiate appender named "FILE".
解决方法:
将jboss/lib中的jboss-common.jar包复制到项目的lib中即可。这样就可以让项目中的日志和jboss中的日志一起工作。