You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Mark Barnes <ma...@coat.com> on 2006/09/12 01:53:40 UTC

Problem setting up Application-managed DataSource???

I just cannot seem to get an Application-managed DataSource to work!


I am using Tomcat 5.5.17 on JDK 1.5.0_07 on Red Hat Linux.

I have done what I think is required in the context.xml and the web.xml files 
for my application to enable an Application-managed DataSource, and have done 
what is require to get the DataSource and get a connection from it, passing the 
correct username & password, but when I try to get my first connection to the 
database I always get an Exception telling me the username/password are invalid.

I have included below copies of the Stack Trace Back, the context.xml, the 
web.xml, and the code used to access the DataSource and get the connection.

Everything was working fine with the same username & password using a 
Container-managed DataSource, but now I have the requirement that I get the 
plain-text username & password out of the XML files.

I tried to cast the DataSource to org.apache.tomcat.dbcp.dbcp.BasicDataSource,
so as to get and display some of the properties (username, password, url, etc)
but the package and class could not be found when compiling.  So I added this 
jar file to the classpath:
     <INSTALL_DIR>/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar
Same error!  I looked inside the jar file, and the .class file is indeed there. 
   Am I to assume this class is private or package-protected?

I downloaded the Tomcat source but cannot find the source for this class.  I 
could not even find and directories named 'dbcp' in the source tree.  And I 
grep'ed the entire source tree for the string 'BasicDataSource' and it wasn't found.

(And, like many, it seems, I tried <ResourceParams> in my context.xml, only to 
find it doesn't work.)


Now I don't know what to do.

Can someone please help me?

Has anyone ever gotten an Application-managed DataSource to work?



Thanks,
---Mark Barnes
---Burlington Coat Factory Warehouse, Inc
---Lebanon, NH





============================
Here's the Stack Trace Back:
============================

    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create 
PoolableConnectionFactory (ORA-01017:
invalid username/password; logon denied
)
         at 
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
         at 
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:554)
         at coat.util.DatabaseAlias.getConnection(DatabaseAlias.java:108)
         at coat.util.DbUtils.getDatabaseConnection(DbUtils.java:383)
         at cwp.DmTrxRequest.getInternetMap(DmTrxRequest.java:72)
         at DmTrx.initializeData(DmTrx.java:1159)
         at DmTrx.initialize(DmTrx.java:745)
         at DmTrx.init(DmTrx.java:738)
         at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
         at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
         at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3917)
         at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4201)
         at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
         at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
         at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
         at 
org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
         at 
org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
         at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
         at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
         at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
         at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
         at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
         at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
         at org.apache.catalina.core.StandardService.start(StandardService.java:450)
         at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
         at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
         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:294)
         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied






============================
Here is the context.xml file
============================
<Context path="/allegiance"
          docBase="allegiance"
          debug="5"
          reloadable="true"
          crossContext="true"/>
 

 
            <Resource name="jdbc/myoracle"
             auth="Application"
             type="javax.sql.DataSource"
             driverClassName="oracle.jdbc.driver.OracleDriver"
             url="jdbc:oracle:oci8:@tsvc"
             maxActive="20"
             maxIdle="10"
             removeAbandoned="true"
             removeAbandonedTimeout="120"
             logAbandoned="true"
             maxWait="-1" />
 

</Context>




====================
Here is the web.xml:
====================
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd">
 

<web-app startup-mode='automatic' redeploy-mode='automatic'>
   <servlet>
     <servlet-name>WebAllegiance</servlet-name>
     <servlet-class>DmTrx</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
 

   <servlet>
     <servlet-name>BalanceInquiry</servlet-name>
     <servlet-class>BalanceInq</servlet-class>
   </servlet>
 

   <servlet>
     <servlet-name>f5_request</servlet-name>
     <servlet-class>f5_request</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
 

   <servlet-mapping>
     <servlet-name>WebAllegiance</servlet-name>
     <url-pattern>/servlet/DmTrx</url-pattern>
   </servlet-mapping>
 

   <servlet-mapping>
     <servlet-name>BalanceInquiry</servlet-name>
     <url-pattern>/servlet/BalanceInq</url-pattern>
   </servlet-mapping>
 

   <servlet-mapping>
     <servlet-name>f5_request</servlet-name>
     <url-pattern>/servlet/f5_request</url-pattern>
   </servlet-mapping>
 

   <resource-ref>
     <description>Oracle Datasource for SVC</description>
     <res-ref-name>jdbc/myoracle</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Application</res-auth>
   </resource-ref>
 

</web-app>




=======================================
Here is a snippet from the Source Code:
=======================================
try {
     Class.forName("oracle.jdbc.driver.OracleDriver");
 

     Context    initContext = new InitialContext();
     Context    envContext  = (Context) initContext.lookup("java:/comp/env");
     DataSource ds          = (DataSource) envContext.lookup("jdbc/myoracle");
     Connection conn        = ds.getConnection(this.userName, this.password);
} catch (SQLException e) }
     e.printStackTrace();
}

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Solution Re: Problem setting up Application-managed DataSource???

Posted by Mark Barnes <ma...@coat.com>.
Well, by reading the source for DBCP 1.2.1, I can see that
BasicDataSource method:

     getConnection(String username, String password)

is not supported because the delegate which BasicDataSource
uses, an instance of PoolingDataSource, throws an
UnsupportedOperationException in method:

     getConnection(String username, String password).




This essentially tells me that Tomcat 5.5.17 does not
support an Application-managed DataSource if you use the
standard  Java API.  You can, however, cast the
DataSource returned from JNDI to:

     org.apache.tomcat.dbcp.dbcp.BasicDataSource

and then call the following before getting the first
connection (where "ds" is the reference to the
BasicDataSource):

     ds.setUsername(username);
     ds.setPassword(password);

or:

     ds.addConnectionProperty("user", username);
     ds.addConnectionProperty("password", password);

This, of course, makes the code Tomcat-specific.




Mark Barnes wrote:
> I just cannot seem to get an Application-managed DataSource to work!
> 
> 
> I am using Tomcat 5.5.17 on JDK 1.5.0_07 on Red Hat Linux.
> 
> I have done what I think is required in the context.xml and the web.xml 
> files for my application to enable an Application-managed DataSource, 
> and have done what is require to get the DataSource and get a connection 
> from it, passing the correct username & password, but when I try to get 
> my first connection to the database I always get an Exception telling me 
> the username/password are invalid.
> 
> I have included below copies of the Stack Trace Back, the context.xml, 
> the web.xml, and the code used to access the DataSource and get the 
> connection.
> 
> Everything was working fine with the same username & password using a 
> Container-managed DataSource, but now I have the requirement that I get 
> the plain-text username & password out of the XML files.

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org