Try java:/comp instead. If that doesn't help, then we'll need more info: - OS: - where you got tomcat from (tomcat.apache.org or third party repackage) - Details of your setup like what's in tomcat's common/lib folder? - Config (relevant parts of server.xml, the webapp's context.xml and WEB-INF/web.xml) - The code used to access JNDI if available:
Links to any docs you used to get you to this point would also be great just in case they are providing bad advice. --David Mikolaj Rydzewski wrote: > 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) > > > > -- David Smith Programmer/Analyst College of Agriculture and Life Sciences Cornell University B32 Morrison Hall Ithaca, NY 14853 Phone: (607) 255-4334 --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org