commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "MALET, CREIGHTON C (SBCSI)" <cm2...@sbc.com>
Subject RE: [DBCP] Example of SharedPooledDataSource with JNDI
Date Fri, 11 Jun 2004 17:25:24 GMT

[Repost - should have gone to the mailing list.]

Here is what I'm doing, no doubt wrong, which is why I was hunting for
an example:

Server side:
		SharedPoolDataSource connectionPoolO = new
SharedPoolDataSource();
		try {
			  DriverAdapterCPDS opds = new
DriverAdapterCPDS();
	
opds.setDriver("oracle.jdbc.driver.OracleDriver");
	
opds.setUrl("jdbc:oracle:thin:@somehost.sbc.com:1521:dbname");
	
connectionPoolO.setConnectionPoolDataSource(opds);

			  InitialContext ic = new InitialContext();
				// Factory is:
com.sun.jndi.fscontext.RefFSContextFactory
			  ic.bind("jdbc/oDS", connectionPoolO);
		}
		catch ...

Client side
		try {
			InitialContext aic = new InitialContext();
			DataSource ds = (DataSource)
aic.lookup("jdbc/oDS");
			connection = ds.getConnection("name",
"password");
			...

When I run the client this I get:

javax.naming.NamingException: unexpected exception.  Root exception is
java.lang.InstantiationException:
org/apache/commons/dbcp/datasources/InstanceKeyObjectFactory
	at java.lang.Class.newInstance0(Native Method)
	at java.lang.Class.newInstance(Class.java:262)
	at
javax.naming.spi.NamingManager.getObjectFactoryFromReference(NamingManag
er.java:158)
	at
javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:311)
	at
com.sun.jndi.fscontext.RefFSContext.lookup(RefFSContext.java:146)
	at com.sun.jndi.fscontext.FSContext.lookup(FSContext.java:127)
	at javax.naming.InitialContext.lookup(InitialContext.java:359)
	at com.sbc.cm2159.ds.BOTHWorker.doOr(BOTHWorker.java:74)
	at com.sbc.cm2159.ds.BOTHWorker.run(BOTHWorker.java:47)
	at java.lang.Thread.run(Thread.java:512)

I debugged this to the getReference() method in InstanceKeyDataSource

    public Reference getReference() throws NamingException {
        Reference ref = new Reference(getClass().getName(), 
            InstanceKeyObjectFactory.class.getName(), null);
        ref.add(new StringRefAddr("instanceKey", instanceKey));
        return ref;
    }

- the factory is specified as InstanceKeyObjectFactory.class.getName()
which is what the JNDI API is trying to instantiate but the class is
abstract.

So I extended InstanceKeyDataSource and InstanceKeyObjectFactory to
overrride the getReference() method and the isCorrectClass() method that
verifies the datasource class. I use an extension of
SharedPoolDataSourceFactory as the factory and it all works great.  But
probably not as designed.

o this may be something to do with the InitialContextFactory
implementation - I'm using SUN's file based JNDI to test - probably
would normally use LDAP.
o I don't know if anything is necessarily wrong - it may be what I'm
doing - which is why I was looking for an example that did a bind in
JNDI.

Thanks 

------------
Creighton Malet
SBC Services, Inc.
(925)823-1463
cm2159@sbc.com


-----Original Message-----
From: Dirk Verbeeck [mailto:dirk.verbeeck@pandora.be] 
Sent: Wednesday, June 09, 2004 9:51 AM
To: Jakarta Commons Users List
Subject: Re: [DBCP] Example of SharedPooledDataSource with JNDI


If you send me what you have already then maybe I can help you.
I did some debugging with the JNDI setup in Tomcat but not yet in a 
standalone program.

So if you start with the testcase then I'll take a look at it.

-- Dirk

MALET, CREIGHTON C (SBCSI) wrote:
> Where can I find an example of the use of SharedPooledDataSource with
> JNDI?
> 
> In my attempts at this I get an exception from the JNDI API because
> InstanceKeyDataSource (from which SharedPoolDataSource inherits the
> implementation of Referenceable) specifies in the getReference()
method
> that
> InstanceKeyObjectFactory is the factory. However that is an abstract
> class and cannot be instantiated by the JNDI API implementation. I
> worked around this by extending SharedPoolDataSource to overload
> getReference() and SharedPoolDataSourceFactory to overload
> isCorrectClass() but that doesn't seem like the correct mechanism. I
am
> using DriverAdapterCPDS as the connection pool datasource for
> SharedDataSource.
> 
> A example (with binding to JNDI) would help a lot. I have gone through
> all the examples I can find but haven't seen one that actually binds
> into the JNDI.
> 
> Thanks
> 
> ------------
> Creighton Malet
> (925)823-1463
> cm2159@sbc.com



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message