cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: flush cayenne config and connections
Date Mon, 21 Mar 2011 14:32:24 GMT
With this approach this is as best as you can get. Alternatively see option (1) in my original
message. It should work for both test and production use.

Andrus


On Mar 21, 2011, at 4:29 PM, Hans Pikkemaat wrote:

> So this is the best I can find right now
> 
>         setupNewJNDIInfo();
> 
>         for (Object o:Configuration.getSharedConfiguration().getDomains()) {
>             DataDomain d=(DataDomain)o;
>             for (Object no : d.getDataNodes()) {
>                 DataNode n = (DataNode) no;
>                 DataSourceFactory f = (DataSourceFactory) Class.forName(n.getDataSourceFactory()).newInstance();
>                 DataSource ds = f.getDataSource(n.getDataSourceLocation());
>                 n.setDataSource(ds);
>             }
>         }
> 
> This will recreate all datasources for all nodes in all domains.
> 
> Is there an easier/better way?
> 
> HPI
> 
> On 3/21/11 3:12 PM, Hans Pikkemaat wrote:
>> Hi,
>> 
>> So this is what I do now right after repopulating the jndi information:
>> 
>>          DataSourceFactory f = new JNDIDataSourceFactory();
>>          f.initializeWithParentConfiguration(Configuration.getSharedConfiguration());
>> 
>>          DataSource ds = f.getDataSource("jdbc/DB_DB1");
>> 
>>          Configuration.getSharedConfiguration().getDomain("Domain1").getNode("Node1").setDataSource(ds);
>> 
>> This overrides the data source but it is done hardcoded.
>> Is there an easy way to recreate a datasource based on the existing configuration?
>> Are there convenience methods/classes I can reuse to load this information?
>> 
>> I want to prevent manual ds reset/creation code in all my unit tests.
>> 
>> tx
>> 
>> Hans
>> 
>> 
>> On 3/21/11 2:00 PM, Hans Pikkemaat wrote:
>> 
>>> Sounds good, is there a way to programmatically set my own DataSourceFactory
before initializing cayenne?
>>> Or is the only way to set it during a reset process.
>>> 
>>> HPI
>>> 
>>> On 3/21/11 1:31 PM, Andrus Adamchik wrote:
>>> 
>>>> Yeah, Cayenne DataNode obtains DataSource once and stores it for future use.
Not sure if a better long-term strategy would be to do JNDI lookups every time ? (maybe not),
but for now you may either (1) write your own factory that creates a simple DataSource wrapper
that grabs a fresh DS via JNDI every time a connection is requested, or (2) call DataNode.setDataSource(..)
during your environment reset process.
>>>> 
>>>> Andrus
>>>> 
>>>> 
>>>> On Mar 21, 2011, at 2:12 PM, Hans Pikkemaat wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> I have a unit test where I use jndi to determine my connection parameters.
>>>>> 
>>>>> When I run one unit test which uses a specific jndi setup and it calls
cayenne then
>>>>> all works fine (i use org.apache.cayenne.conf.JNDIDataSourceFactory)
>>>>> 
>>>>> I then clear my jndi container and repopulate it with different connection
details
>>>>> (different database).
>>>>> 
>>>>> Running cayenne again still uses the earlier connection. Recreating a
data context
>>>>> doesn't seem to help. I also tried Configuration.getSharedConfiguration().shutdown()
>>>>> but this also doesn't help.
>>>>> 
>>>>> Maybe the connections are re-used? If so, is there a way to clear those?
>>>>> 
>>>>> In general, is there a way to reset cayenne in such a way that my above
unit testing will work?
>>>>> 
>>>>> tx
>>>>> 
>>>>> Hans
>>>>> 
>>>>> 
>>>>> 
> 
> -- 
> <tsi_logo.png>	 TSi Solutions
> Neptunusstraat 25
> 7521 WC Enschede
> 
> Tel. +31 (0)88 - 25 00 000
> Fax. +31 (0)88 - 25 00 122
> Hans Pikkemaat
> Java Developer (Services Team) 
> E-mail: h.pikkemaat@tsi-solutions.nl 
>  	www.tsi-solutions.nl
> www.toeristiek.nl
> <tsi_sunset.png>	<tsi_pictos.png>
> 10 jaar TSi Solutions
> ... marktleider in het automatiseren en outsourcen van werkprocessen in de reisbranche
> ... toonaangevende partij voor het verzamelen, structureren en beschikbaarstellen van
reiscontent
> ... Reisrevue Innovatieveer 2008 - Veervolle vermelding
> ... Winnaar Reisrevue Innovatieveer 2009
> ... Winnaar Reisrevue Innovatieveer 2010
> ... Top 20 positie in 2008 Deloitte Technology Fast50 Nederland
> ... Top 10 positie in 2009 Deloitte Technology Fast50 Benelux
> ... Top 100 positie in 2009 Deloitte Technology Fast500 EMEA
> ... Top 50 positie in 2010 Deloitte Technology Fast50 Benelux
> TSi Solutions is de handelsnaam van Travel Service International b.v.[KvK 06091935]
> DISCLAIMER: De informatie opgenomen in dit bericht kan vertrouwelijk zijn en is uitsluitend
bestemd voor de geadresseerde.
> Indien u dit bericht onterecht ontvangt, wordt u verzocht de inhoud niet te gebruiken
en de afzender direct te informeren door het bericht te retourneren.
> The information contained in this message may be confidential and is intended to be exclusively
for the addressee.
> Should you receive this message unintentionally, please do not use the contents herein
and notify the sender immediately by return e-mail.


Mime
View raw message