https://issues.apache.org/bugzilla/show_bug.cgi?id=57380

            Bug ID: 57380
           Summary: Misleading NameNotFoundException from DataSourceRealm
           Product: Tomcat 8
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: mi...@cargosoft.ru

Imagine we have the following context descriptor, and the application is
protected with security constraints:

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <Resource name="jdbc/FooDB"
            type="javax.sql.DataSource"
            driverClassName="org.postgresql.Driver"
            url="jdbc:postgresql:foo"
            ... />

    <Realm className="org.apache.catalina.realm.DataSourceRealm"
           dataSourceName="jdbc/FooDB"
           ... />

</Context>

If DataSource has any problems (driver class not found, connection refused,
username/password mismatch, no database etc.), login attempt will give the
following in the log:

21-Dec-2014 03:08:58.707 SEVERE [http-nio-8080-exec-1]
org.apache.catalina.realm.DataSourceRealm.open Exception performing
authentication
 javax.naming.NameNotFoundException: Name [jdbc/FooDB] is not bound in this
Context. Unable to find [jdbc].
    at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
    at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:363)
    at
org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:260)
    at
org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:111)
    at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:576)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

The message is completely misleading, since the actual cause is not printed.
Obtaining actual cause requires the knowledge of initialSize="1" hint.
Moreover, if we disable security constraints, and (provided that driver is
present) try to resolve java:comp/env/jdbc/FooDB from an application, it turns
out that the resource in fact *is* bound and alive.

It would be great if Tomcat did actually log the relevant stacktrace, making
easy to diagnose network or database problems with JNDI DataSource +
DataSourceRealm combo.

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to