Java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

O problema é o seguinte, tenho uma aplicação web que funciona normalmente no Tomcat. Mas no servidor da Oracle dá o seguinte erro:

SEVERE: Dispatch[/ReportDownloadAction] to method ‘reportDownloadGerencial’ returned an exception
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:711)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:368)
at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:866)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:448)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:94)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:147)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:57)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)
at br.com.appi.portal.action.report.ReportDownloadAction.reportDownloadGerencial(Unknown Source)

O caso é que a aplicação está logando normalmente, o erro só acontece quando vou gerar um relatório em pdf usado o Jasper Report. No Tomcat os relatórios funcionam sem problemas. O que eu acho é que algum componente do Jasper Report está tentando logar mas não está encontrando o a classe LogFactory.

Alguém pode ajudar?
Obrigado.

O q vc chama de logando normalmente?

[quote=dsjbv]Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
[/quote]
Adicione o commons-logging.jar no diretório de libs do seu servidor

Logando normalmente significa que está escrevendo no arquivo de log. A gente tá usando o Log4J pra logar.

[quote=raf4ever][quote=dsjbv]Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
[/quote]
Adicione o commons-logging.jar no diretório de libs do seu servidor[/quote]

Já está lá. Tanto que o log funciona em todas as partes do sistema, menos quando vai gerar o relatório.

Mas nas outras partes… vc tá usando o Log4J…

O Jasper precisa do commons logging…

Sim, mas o commons logging provê uma interface pro log e o Log4J implementa essa interface. Mas vc me deu ma ideia, no site do commons logging diz que o Log4J é umas das ferramentas que implementa mais proximamente a interface do commons logging, talvez o Jasper esteja tentando usar alguma coisa que o log4J não implementa. Vou tentar tirar o log4j.jar pra ver o que acontece.
Obrigado pela ajuda!

Rolou uma confusão aí… o commons logging nao prove uma interface que o Log4J implementa…

O que acontece é:

Existe o Log4J… independente do commons-logging…

O Commons logging prove uma interface no estilo Facade para outros sistemas de log…

Interface no sentido de uma forma de acessar… nao no sentido interface implements…

Entao, o commons logging delega ao log4j… mas num tem isso de um implementar o outro nao…


Sobre tirar o log4j… num vai adiantar nada… agora vao faltar mais classes no seu sistema…

Eu nem queria dar a solucao direta… mas ela já foi dada…

Entendi. Então não vou nem tentar tirar o log4j.jar. O problema é que tanto o commons logging quanto o log4j estão lá na pasta WEB-INF/lib e os relatórios funcionam no Tomcat. O erro acontece só no servidor da Oracle. Tentei colocar o commons-logging.jar na pasta de libs globais do servidor, mas aí o servidor nem subiu.