tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Germán Ferrari <german.ferr...@gmail.com>
Subject Re: tomcat-jdbc: correct way to create a new separated org.apache.tomcat.jdbc.pool.DataSource from another one
Date Wed, 08 Aug 2012 19:08:06 GMT
On Wed, Aug 8, 2012 at 3:11 PM, Martin Gainty <mgainty@hotmail.com> wrote:

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

Thank you for the pointer. The ALL_PROPERTIES array it's hard-coded in the
test case, so it's not part of the library and I can't re-use it. I could
copy it, but I would prefer not to do it.
Anyway this snippet makes me reconsider to use reflection to make the copy,
I think it's not a bad option for in my case.

I would like to mention that in the tests I've been doing, I found that the
PoolProperties serialization is not working because
PoolProperties.InterceptorDefinition is not marked as Serializable. Should
I report a bug?

Regards,
Germán


>
> > From: german.ferrari@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.ferrari@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.ferrari@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 <mgainty@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.ferrari@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
> > >> > >
> > >> > >
> > >>
> > >>
> > >
> > >
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message