[prev in list] [next in list] [prev in thread] [next in thread]
List: geronimo-user
Subject: NoClassDefFoundError trying to use log4j SMTPAppender
From: Kevan Miller <kevan.miller () gmail ! com>
Date: 2012-03-02 15:02:21
Message-ID: 454B3C51-7FC6-4353-BDC6-F99A41D32D8B () gmail ! com
[Download RAW message or body]
On IRC, yesterday, a user reported a problem deploying their app on =
Geronimo 2.2.1. They had an exception like the following:
ERROR Servlet /analytics threw load() exception
org.springframework.beans.PropertyBatchUpdateException; nested =
PropertyAccessException details (1) are:
PropertyAccessException 1:
org.springframework.beans.MethodInvocationException: Property =
'accountService' threw exception; nested exception is =
java.lang.NoClassDefFoundError: javax/mail/Multipart
at =
org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl=
.java:1119)
at =
org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl=
.java:899)
at =
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(Abstr=
actPropertyAccessor.java:76)
at =
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(Abstr=
actPropertyAccessor.java:58)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1350)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.createBean(AbstractAutowireCapableBeanFactory.java:456)
at =
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(=
AbstractBeanFactory.java:291)
at =
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.get=
Singleton(DefaultSingletonBeanRegistry.java:222)
at =
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Ab=
stractBeanFactory.java:288)
at =
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abst=
ractBeanFactory.java:190)
at =
org.springframework.context.support.AbstractApplicationContext.getBean(Abs=
tractApplicationContext.java:1075)
at =
org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.register=
Handler(AbstractUrlHandlerMapping.java:383)
at =
org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.register=
Handler(AbstractUrlHandlerMapping.java:362)
at =
org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping=
.detectHandlers(AbstractDetectingUrlHandlerMapping.java:82)
at =
org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping=
.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58)
at =
org.springframework.context.support.ApplicationObjectSupport.initApplicati=
onContext(ApplicationObjectSupport.java:119)
at =
org.springframework.web.context.support.WebApplicationObjectSupport.initAp=
plicationContext(WebApplicationObjectSupport.java:72)
at =
org.springframework.context.support.ApplicationObjectSupport.setApplicatio=
nContext(ApplicationObjectSupport.java:73)
at =
org.springframework.context.support.ApplicationContextAwareProcessor.invok=
eAwareInterfaces(ApplicationContextAwareProcessor.java:106)
at =
org.springframework.context.support.ApplicationContextAwareProcessor.postP=
rocessBeforeInitialization(ApplicationContextAwareProcessor.java:85)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBean=
Factory.java:394)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1405)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at =
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto=
ry.createBean(AbstractAutowireCapableBeanFactory.java:456)
at =
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(=
AbstractBeanFactory.java:291)
at =
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.get=
Singleton(DefaultSingletonBeanRegistry.java:222)
at =
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Ab=
stractBeanFactory.java:288)
at =
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abst=
ractBeanFactory.java:194)
at =
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBe=
ansOfType(DefaultListableBeanFactory.java:398)
at =
org.springframework.context.support.AbstractApplicationContext.getBeansOfT=
ype(AbstractApplicationContext.java:1146)
at =
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAnc=
estors(BeanFactoryUtils.java:266)
at =
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAnc=
estors(BeanFactoryUtils.java:270)
at =
org.springframework.web.servlet.DispatcherServlet.initHandlerMappings(Disp=
atcherServlet.java:424)
at =
org.springframework.web.servlet.DispatcherServlet.initStrategies(Dispatche=
rServlet.java:339)
at =
org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServ=
let.java:328)
at =
org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(Framew=
orkServlet.java:523)
at =
org.springframework.web.servlet.FrameworkServlet$ContextRefreshListener.on=
ApplicationEvent(FrameworkServlet.java:749)
at =
org.springframework.web.servlet.FrameworkServlet$ContextRefreshListener.on=
ApplicationEvent(FrameworkServlet.java:1)
at =
org.springframework.context.event.GenericApplicationListenerAdapter.onAppl=
icationEvent(GenericApplicationListenerAdapter.java:51)
at =
org.springframework.context.event.SourceFilteringListener.onApplicationEve=
ntInternal(SourceFilteringListener.java:97)
at =
org.springframework.context.event.SourceFilteringListener.onApplicationEve=
nt(SourceFilteringListener.java:68)
at =
org.springframework.context.event.SimpleApplicationEventMulticaster.multic=
astEvent(SimpleApplicationEventMulticaster.java:97)
at =
org.springframework.context.support.AbstractApplicationContext.publishEven=
t(AbstractApplicationContext.java:303)
at =
org.springframework.context.support.AbstractApplicationContext.finishRefre=
sh(AbstractApplicationContext.java:911)
at =
org.springframework.context.support.AbstractApplicationContext.refresh(Abs=
tractApplicationContext.java:428)
at =
org.springframework.web.servlet.FrameworkServlet.createWebApplicationConte=
xt(FrameworkServlet.java:442)
at =
org.springframework.web.servlet.FrameworkServlet.createWebApplicationConte=
xt(FrameworkServlet.java:458)
at =
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext=
(FrameworkServlet.java:339)
at =
org.springframework.web.servlet.FrameworkServlet.initServletBean(Framework=
Servlet.java:306)
at =
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:=
127)
at javax.servlet.GenericServlet.init(GenericServlet.java:215)
at =
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:=
1065)
at =
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:967)
at =
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.jav=
a:4343)
at =
org.apache.catalina.core.StandardContext.start(StandardContext.java:4649)
at =
org.apache.geronimo.tomcat.GeronimoStandardContext.access$201(GeronimoStan=
dardContext.java:64)
at =
org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invok=
e(GeronimoStandardContext.java:412)
at =
org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoB=
eforeAfterValve.java:47)
at =
org.apache.geronimo.tomcat.GeronimoStandardContext.start(GeronimoStandardC=
ontext.java:264)
at =
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java=
:791)
at =
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at =
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at =
org.apache.geronimo.tomcat.TomcatContainer.addContext(TomcatContainer.java=
:339)
at =
org.apache.geronimo.tomcat.TomcatWebAppContext.doStart(TomcatWebAppContext=
.java:525)
at =
org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance(GBeanInstan=
ce.java:953)
at =
org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBea=
nInstanceState.java:269)
at =
org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceSt=
ate.java:103)
at =
org.apache.geronimo.gbean.runtime.GBeanInstance.start(GBeanInstance.java:5=
25)
at =
org.apache.geronimo.gbean.runtime.GBeanDependency.attemptFullStart(GBeanDe=
pendency.java:110)
at =
org.apache.geronimo.gbean.runtime.GBeanDependency.addTarget(GBeanDependenc=
y.java:145)
at =
org.apache.geronimo.gbean.runtime.GBeanDependency$1.running(GBeanDependenc=
y.java:119)
at =
org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.fireRunningEvent(Ba=
sicLifecycleMonitor.java:175)
at =
org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.access$300(BasicLif=
ecycleMonitor.java:44)
at =
org.apache.geronimo.kernel.basic.BasicLifecycleMonitor$RawLifecycleBroadca=
ster.fireRunningEvent(BasicLifecycleMonitor.java:253)
at =
org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBea=
nInstanceState.java:295)
at =
org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceSt=
ate.java:103)
at =
org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive(GBeanI=
nstanceState.java:125)
at =
org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive(GBeanInstan=
ce.java:539)
at =
org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean(BasicKern=
el.java:377)
at =
org.apache.geronimo.kernel.config.ConfigurationUtil.startConfigurationGBea=
ns(ConfigurationUtil.java:456)
at =
org.apache.geronimo.kernel.config.KernelConfigurationManager.start(KernelC=
onfigurationManager.java:190)
at =
org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConfigur=
ation(SimpleConfigurationManager.java:546)
at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
at =
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm=
pl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at =
org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(Reflectio=
nMethodInvoker.java:34)
at =
org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.jav=
a:130)
at =
org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:=
816)
at =
org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
at =
org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationIn=
voker.java:35)
at =
org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMet=
hodInterceptor.java:96)
at =
org.apache.geronimo.gbean.GBeanLifecycle$$EnhancerByCGLIB$$badafacb.startC=
onfiguration(<generated>)
at =
org.apache.geronimo.system.main.EmbeddedDaemon.doStartup(EmbeddedDaemon.ja=
va:204)
at =
org.apache.geronimo.system.main.EmbeddedDaemon.execute(EmbeddedDaemon.java=
:87)
at =
org.apache.geronimo.kernel.util.MainConfigurationBootstrapper.main(MainCon=
figurationBootstrapper.java:45)
at =
org.apache.geronimo.cli.AbstractCLI.executeMain(AbstractCLI.java:65)
at =
org.apache.geronimo.cli.daemon.DaemonCLI.main(DaemonCLI.java:30)
Caused by: java.lang.NoClassDefFoundError: javax/mail/Multipart
at =
com.vistracks.tracking.web.controller.AccountController.setAccountService(=
AccountController.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at =
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:=
39)
at =
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm=
pl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at =
org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl=
.java:1106)
... 98 more
Caused by: java.lang.ClassNotFoundException: javax.mail.Multipart
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 104 more
The problem was caused by their use of org.apache.log4j.net.SMTPAppender =
(actually they were using com.tgerm.log4j.appender.GmailSMTPAppender, =
which extends SMTPAppender).
log4j was being loaded from the Geronimo root classloader (log4j is =
packaged in our lib). The root classloader does not include the javamail =
spec api classes. And thus we end up with a confusing =
NoClassDefFoundError.
Their app included log4j. So, adding:
<dep:hidden-classes>
<dep:filter>org.apache.log4j</dep:filter>
</dep:hidden-classes>
to their deployment plan fixed the problem. If the app didn't include =
log4j, you could add a dependency for the log4j jar in their deployment =
plan=85
You should probably also review docs on application specific logging -- =
https://cwiki.apache.org/GMOxDOC22/configuring-application-specific-loggin=
g-with-log4j.html
--kevan=
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic