the test\java\org\apache\tomcat\jdbc\test\DefaulCase.java TC builds the properties... then calls BasicDataSourceFactory.createDataSource(p)
protected void transferProperties() { try { Properties p = new Properties(); for (int i=0; i< ALL_PROPERTIES.length; i++) { String name = "get" + Character.toUpperCase(ALL_PROPERTIES[i].charAt(0)) + ALL_PROPERTIES[i].substring(1); String bname = "is" + name.substring(3); Method get = null; try { get = PoolProperties.class.getMethod(name, new Class[0]); }catch (NoSuchMethodException x) { try { get = PoolProperties.class.getMethod(bname, new Class[0]); }catch (NoSuchMethodException x2) { System.err.println(x2.getMessage()); } } if (get!=null) { Object value = get.invoke(datasource.getPoolProperties(), new Object[0]); if (value!=null) { p.setProperty(ALL_PROPERTIES[i], value.toString()); } } } tDatasource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p); }catch (Exception x) { x.printStackTrace(); } } is there a reason why you would'nt use the available transferProperties method from the Tomcat TestCase? Martin > From: german.ferr...@gmail.com > Date: Wed, 8 Aug 2012 14:20:22 -0300 > Subject: Re: tomcat-jdbc: correct way to create a new separated > org.apache.tomcat.jdbc.pool.DataSource from another one > To: users@tomcat.apache.org > > On Wed, Aug 8, 2012 at 2:12 PM, Germán Ferrari > <german.ferr...@gmail.com>wrote: > > > > (...) > > > > > For the moment I think I have three options: > > 1. Change some interfaces to receive a Properties object with the pool > > configuration and use the suggestion given by Daniel > > 2. Cast the return of DataSource#getPoolProperties() to PoolProperties and > > use it's clone() method. > > > 3. Create a new PoolProperties and set all the properties manually to use > > the ones returned by DataSource#getPoolProperties() > > > > I think #2 is the closest to what I originally thought. > > > > mmm... I misread the signature of PoolProperties#clone(), it's protected... > So I guess #2 is not an option... > > > > > > > Regards, > > Germán > > > > > >> Martin > >> ______________________________________________ > >> Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité > >> > >> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene > >> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte > >> Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht > >> dient lediglich dem Austausch von Informationen und entfaltet keine > >> rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von > >> E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. > >> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas > >> le destinataire prévu, nous te demandons avec bonté que pour satisfaire > >> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie > >> de ceci est interdite. Ce message sert à l'information seulement et n'aura > >> pas n'importe quel effet légalement obligatoire. Étant donné que les email > >> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter > >> aucune responsabilité pour le contenu fourni. > >> > >> > >> > From: german.ferr...@gmail.com > >> > Date: Wed, 8 Aug 2012 08:20:59 -0300 > >> > Subject: Re: tomcat-jdbc: correct way to create a new separated > >> org.apache.tomcat.jdbc.pool.DataSource from another one > >> > To: users@tomcat.apache.org > >> > > >> > Hello, > >> > > >> > On Tue, Aug 7, 2012 at 9:36 PM, Martin Gainty <mgai...@hotmail.com> > >> wrote: > >> > > >> > > > >> > > Germán > >> > > > >> > > Is there a reason why you would not use > >> > > org.apache.commons.dbcp.datasources.SharedPoolDataSource from DBCP 1.4 > >> > > http://commons.apache.org/dbcp/apidocs/index.html > >> > > >> > ? > >> > > >> > > >> > For what I've looked in the javadoc of that class, it serves a somewhat > >> > different use case. In my concrete use case, the usename and password > >> would > >> > be the same, the main property I would want to change is the maxActive > >> > connections. I want to have a new data source, which is independent of > >> the > >> > other, son I can potentially close one without affecting the other. > >> > > >> > Also, at this moment I'm not evaluating to change the connection pooling > >> > library. > >> > > >> > Regards, > >> > Germán > >> > > >> > > >> > > Martin > >> > > ______________________________________________ > >> > > Verzicht und Vertraulichkeitanmerkung > >> > > > >> > > Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene > >> > > Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede > >> unbefugte > >> > > Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese > >> Nachricht > >> > > dient lediglich dem Austausch von Informationen und entfaltet keine > >> > > rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit > >> von > >> > > E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. > >> > > > >> > > > >> > > > >> > > > >> > > > From: german.ferr...@gmail.com > >> > > > Date: Tue, 7 Aug 2012 20:06:53 -0300 > >> > > > Subject: tomcat-jdbc: correct way to create a new separated > >> > > org.apache.tomcat.jdbc.pool.DataSource from another one > >> > > > To: users@tomcat.apache.org > >> > > > > >> > > > Hello. > >> > > > > >> > > > I have an use case in which I would want to copy an > >> > > > `org.apache.tomcat.jdbc.pool.DataSource`, to have two disjoint > >> connection > >> > > > pools, with some pool properties changed. > >> > > > > >> > > > My first thought was to do something like this: > >> > > > > >> > > > PoolProperties props = new > >> > > > PoolProperties(baseDataSource.getPoolProperties()); > >> > > > // set custom props ... > >> > > > DataSource newDataSource = new DataSource(props); > >> > > > > >> > > > > >> > > > The problem is that the PoolProperties class doesn't have such > >> > > constructor. > >> > > > Another option could be to share the PoolProperties object, but, > >> for what > >> > > > I've looked into the code, it doesn't seem safe. > >> > > > > >> > > > The PoolProperties class implements the Cloneable interface, so I > >> guess > >> > > > it's ok to use its clone method. The problem I have with this > >> option is > >> > > > that DataSource#getPoolProperties() returns a PoolConfiguration > >> which > >> > > > doesn't implements Cloneable. In my case I think it would be safe > >> to cast > >> > > > the PoolConfiguration to PoolProperties, but it doesn't seem safe > >> for the > >> > > > general case. > >> > > > > >> > > > What would be the correct way to create a new separated DataSource > >> from > >> > > > another one having some properties changed? > >> > > > > >> > > > I'm using tomcat-jdbc 7.0.29 as a standalone library. > >> > > > > >> > > > Thank you. > >> > > > > >> > > > Regards, > >> > > > Germán > >> > > > >> > > > >> > >> > > > >