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].
    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(ResourceLinkFactory.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"
        description="Global Address Database"
        url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
        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"
        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" />

</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"/>
</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

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/>

Reply via email to