Hi Guys and thanks in advance for any pointers.

 

I am running Tomcat 5.5.9 and would like to remove the need to specify
database configuration details within the context.xml file e.g.

 

  <Resource

    name="jdbc/one"

    type="javax.sql.DataSource"

    username="user"

    password="pass"

    driverClassName="oracle.jdbc.driver.OracleDriver"

    maxIdle="2"

    maxWait="5000"

    maxActive="50"

    validationQuery="SELECT count(*) FROM dual"

    url="jdbc:oracle:thin:@server:1521:sid"

  />

 

I need to provide (apache commons db) datasources 'on the fly' and after
trying every thing I can think of such as trying to register the details
against JNDI as follows:-

 

              //Hashtable env = new Hashtable();
               //env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");
               //env.put(Context.URL_PKG_PREFIXES, "org.apache.naming");
               
 
//System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext
.RefFSContextFactory");
 
//System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.naming.java
.javaURLContextFactory");
                
               //System.setProperty(Context.PROVIDER_URL, " <file:///\\tmp>
file:///tmp");
               //InitialContext ic = null;
               Context ic = null;
               try {
                 //ic = new InitialContext(env);  
                 ic = new InitialContext();
                 
                 if (log.isDebugEnabled()) log.debug("Creating logindb
references");
                 // Construct DriverAdapterCPDS reference
                 Reference cpdsRef = new
Reference("org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS",
                   "org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS",
null);
                 cpdsRef.add(new StringRefAddr("driver", strDriver));
                 cpdsRef.add(new StringRefAddr("url", strUrl));
                 cpdsRef.add(new StringRefAddr("user",
objLoginDB.getUsername()));
                 cpdsRef.add(new StringRefAddr("password",
objLoginDB.getPassword()));
                 //ic.rebind("java:comp/env/jdbc/cpdslogindb", cpdsRef);
                 ic.bind("java:/comp/env/jdbc/cpdslogindb", cpdsRef);
                 
                 if (log.isDebugEnabled()) log.debug("Creating connection
pool");
                 // Construct PerUserPoolDataSource reference
                 Reference ref = new
Reference("org.apache.commons.dbcp.datasources.PerUserPoolDataSource",
 
"org.apache.commons.dbcp.datasources.PerUserPoolDataSourceFactory", null);
                 ref.add(new StringRefAddr("dataSourceName",
"java:/comp/env/jdbc/cpdslogindb"));
                 ref.add(new StringRefAddr("defaultMaxActive",
Config.getParam("pool.max.active")));
                 ref.add(new StringRefAddr("defaultMaxIdle",
Config.getParam("pool.max.idle")));
                 ref.add(new StringRefAddr("defaultMaxWait",
Config.getParam("pool.max.wait")));
                 //ic.rebind("jdbc/" + "logindb", ref); 
                 //ic.bind("logindb", ref);
                 ic.bind("java:/comp/env/jdbc/logindb", ref);
                 
               } catch (NamingException ne) {
                 log.error("Failed while doing JNDI on connection logindb");
                 log.debug(ne.getMessage(), ne);             
               }

 

The results of this indicate that the Tomcat Initial Context seems to be
'READ-ONLY' ??

 

Any pointers into what I am doing wrong are greatly appreciated.

 

Thanks

Rob

 

Reply via email to