Hello everybody, I have faced interesting issue recently. Here are details:I had to implement custom log4j appender that logs particular messages to database (JDBCAppender was not enough). So I did, using JNDI based datasources, not a difficult task. Of course I updated server.xml, context.xml and web.xml with datasource definition, etc.
Unfortunately every time I deployed application there was "Name java:comp is not bound in this Context" error in logfile (see stacktrace at end of email). It's strange, isn't it? "java:comp" is a standard Java root for all JNDI based resources. So I don't understand how does it happen that it is not bound.
My appender implementation tries to lookup datasource in JNDI just after all properties has been set (recommended way - http://tinyurl.com/dg4fxa). Then I moved JNDI lookup code to method that actully performs logging. And it started to work!
So, to summarize. My custom log4j code was not able to lookup JNDI resources during deployment process. But it was able to during normal webapplication usage.
Is it expected behaviour? It looks like Tomcat (5.5.26 on Sun's JDK 1.5 in my case) fills JNDI context information after webapplication deployment.
On other hand, I wonder how does it keep separate copies of JNDI catalog per webapplication.
javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770) at org.apache.naming.NamingContext.lookup(NamingContext.java:153) at javax.naming.InitialContext.lookup(InitialContext.java:351)at mypackage.DataSourceAppender.activateOptions(DataSourceAppender.java:34) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256) at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:220) at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:150) at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:163) at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:425) at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:345) at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:827) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:712) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:122) at org.apache.log4j.Logger.getLogger(Logger.java:104)at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289) at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:109) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1116) at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:914) at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:704)at org.apache.catalina.core.ContainerBase.getLogger(ContainerBase.java:381) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4119) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 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.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) -- Mikolaj Rydzewski <m...@ceti.pl>
smime.p7s
Description: S/MIME Cryptographic Signature