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: [email protected]
> 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: [email protected]
>
> On Wed, Aug 8, 2012 at 2:12 PM, Germán Ferrari
> <[email protected]>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: [email protected]
> >> > 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: [email protected]
> >> >
> >> > Hello,
> >> >
> >> > On Tue, Aug 7, 2012 at 9:36 PM, Martin Gainty <[email protected]>
> >> 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: [email protected]
> >> > > > 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: [email protected]
> >> > > >
> >> > > > 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
> >> > >
> >> > >
> >>
> >>
> >
> >