Dan
Thank you. Jconsole mbeans pointed me in the right direction. It made me doubt 
that Tomcat was reading the same server.xml that I was editing. Sure enough 
when I found that I was not able to change the description of the Resource 
"UserDatabase" then I knew I was editing the wrong copy of server.xml

Netbeans makes a copy of CATALINA_HOME and uses it as CATALINA_BASE.

I was editing the one at CATALINA_HOME instead of the copy at CATALINA_BASE.

I wish Tomcat had a clear cut separation between CATALINA_HOME and 
CATALINA_BASE such that they are ALWAYS distinct instead of the current 
potential for having the same stuff in both.

Thanks again
Vince


> -----Original Message-----
> From: Daniel Mikusa [mailto:dmik...@pivotal.io]
> Sent: 29 October 2014 17:10
> To: Tomcat Users List
> Subject: Re: NameNotFoundException: Name [jdbc/weblogin01b] is not
> bound in this Context. Unable to find [jdbc]
> 
> On Wed, Oct 29, 2014 at 12:45 PM, <vince.w...@thomsonreuters.com>
> wrote:
> 
> > Hello
> > I'm having difficulty getting a JDBC DataSource using Tomcat 8.
> >
> > I want to define the JDBC details in server.xml so the database
> identified
> > depends on the server and not the application. It will be beneficial
> for me
> > if the applications only need to know the JDBC name and not password
> > details.
> >
> > Thus I'm using GlobalNamingResources in server.xml
> > and ResourceLink in context.xml
> >
> > I'm obviously not getting it right because I get this exception:
> >
> > javax.naming.NameNotFoundException: Name [jdbc/weblogin01b] is not
> bound
> > in this Context. Unable to find [jdbc].
> >
> 
> Sometimes when you get a NameNotFoundException, it's because the pool
> encountered an error when it was being created.  Hence it doesn't
> actually
> exists.  A couple things you can do to troubleshoot.
> 
> 1.) Set an initial size for your pool.  This will force it to make at
> least
> one connection at startup which will generally cause it to fail fast,
> if
> there is a problem.  You can then look in the logs to see the error.
> 
> 2.) Connect with jconsole or jvisualvm and look at the mbeans for
> Tomcat.
> When the pool is actually there, you should see it in the mbeans.
> 
> 
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
> >     at
> >
> org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(Resourc
> eLinkFactory.java:92)
> >     at
> >
> javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321
> )
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
> >     at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
> >
> > In CATALINA_BASE/conf/server.xml
> >
> > I have included a variety of slightly different resources all aiming
> to
> > get to the same database schema hopefully one of them will be right:
> >
> > <GlobalNamingResources>
> >     <!-- Editable user database that can also be used by
> >          UserDatabaseRealm to authenticate users
> >     -->
> >     <Resource name="UserDatabase" auth="Container"
> >               type="org.apache.catalina.UserDatabase"
> >               description="User database that can be updated and
> saved"
> >
> factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
> >               pathname="conf/tomcat-users.xml" />
> >
> >
> >     <Resource name="jdbc/weblogin01"
> >         username="weblogin01"
> >         password="xxxxx"
> >         auth="Container"
> >         type="javax.sql.DataSource"
> >         driverClassName="oracle.jdbc.pool.OracleDataSource"
> >
> 
> This looks suspect.  I'm pretty sure you want the JDBC driver name.
> 
> 
> >         description="Global Address Database"
> >         url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
> >
> 
> You could add "initialSize" here, try "1".
> 
>         maxActive="15"
> >         maxIdle="3" />
> >
> >     <Resource name="jdbc/weblogin01b"
> >         user="weblogin01"
> >         password="xxxxx"
> >         auth="Container"
> >         type="javax.sql.DataSource"
> >         driverClassName="oracle.jdbc.OracleDriver"
> >         factory="oracle.jdbc.pool.OracleDataSourceFactory"
> >
> 
> You're using a different factory (specifically Oracle's
> implementation), so
> the configuration attributes are going to be different.  Not sure how
> to
> set initial size with this implementation.
> 
> 
> >         url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
> >         maxActive="20"
> >         maxIdle="3"
> >         maxWait="-1" />
> >
> >     <Resource name="jdbc/weblogin01c"
> >         user="weblogin01"
> >         password="xxxxx"
> >         auth="Container"
> >         type="javax.sql.DataSource"
> >         driverClassName="oracle.jdbc.OracleDriver"
> >         url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
> >         maxActive="20"
> >         maxIdle="3"
> >         maxWait="-1" />
> >
> 
> This looks the most right.  I'd also try adding "initialSize" of 1.
> 
> 
> >
> > </GlobalNamingResources>
> >
> > In META-INF/context.xml
> >
> > I have a ResourceLink to each resource
> >
> > <Context path="/testDbAccess">
> >     <ResourceLink name="jdbc/weblogin01"
> >         global="jdbc/weblogin01"
> >         type="javax.sql.DataSource"/>
> >     <ResourceLink name="jdbc/weblogin01b"
> >         global="jdbc/weblogin01b"
> >         type="javax.sql.DataSource"/>
> >     <ResourceLink name="jdbc/weblogin01c"
> >         global="jdbc/weblogin01c"
> >         type="javax.sql.DataSource"/>
> >
> 
> These look OK.
> 
> 
> > </Context>
> >
> > In web.xml I made no changes related to JDBC on the understanding
> that the
> > ResourceLink elements will be sufficient.
> >
> > In Java code I try to get a DataSource as follows:
> >
> > String dbUser = "weblogin01b";
> > try {
> >     Context initCtx = new InitialContext();
> >     Context envCtx = (Context) initCtx.lookup("java:comp/env");
> >
> >     // Get data source
> >     ds = (DataSource) envCtx.lookup("jdbc/" + dbUser);
> >     if (ds == null) {
> >         logger.log(Level.WARNING,"Null datasource for " + dbUser);
> >     }
> > }
> >
> > I get similar exceptions for each of the names:
> > jdbc/weblogin01
> > jdbc/weblogin01b
> > jdbc/weblogin01c
> >
> >
> Didn't test this, but it looks OK.
> 
> Dan
> 
> 
> 
> > After years using GlassFish, I'm struggling with Tomcat, any help
> would be
> > much appreciated.
> >
> > Thank you
> >
> > ________________________________
> >
> > This e-mail is for the sole use of the intended recipient and
> contains
> > information that may be privileged and/or confidential. If you are
> not an
> > intended recipient, please notify the sender by return e-mail and
> delete
> > this e-mail and any attachments. Certain required legal entity
> disclosures
> > can be accessed on our website.<
> > http://thomsonreuters.com/prof_disclosures/>
> >

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

Reply via email to