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
> >> > >
> >> > >
> >>
> >>
> >
> >
                                          

Reply via email to