cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wernke zur Borg <>
Subject Re: Replacing DataSource in Cayenne 3.1 has no effect
Date Thu, 26 May 2011 13:50:17 GMT

Thanks, but I am not sure whether this is what I need.

I have hundreds of MS Access Database files (*.mdb), which I need to 
process in a single run of my program. Obviously I am using the JdbcOdbc 
bridge, which is working fine with Cayenne so far. My intention is to 
create a single ServerRuntime and then switch the data source 
dynamically for every file.

This used to be possible with 3.0 according to the FAQ entry - is it no 
longer possible with 3.1 ?

Thanks, Wernke

On 26/05/2011 15:25, Andrus Adamchik wrote:
> Yeah, the Wiki page refers to Cayenne 3.0 and earlier. In 3.1 it is much easier and can
be done via a DI container. And you don't have to remember all the classes that might use
the DataSource. So you would create a custom module, bind a custom DataSourceFactory, and
pass it to ServerRuntime constructor:
> Module m = new Module() {
>    public void configure(Binder binder) {
>      binder.bind(DataSourceFactory.class).to(MyDataSourceFactory.class);
>    }
> };
> ServerRuntime r = new ServerRuntime("cayenne-myconfig.xml", m);
> On May 26, 2011, at 6:19 AM, Wernke zur Borg wrote:
>> Hi all,
>> I am referring to FAQ "Setting Database Connection" here:
>> Firstly, in 3.1 the SharedConfiguration no longer exists, so we have to use the ServerRuntime
>>     ServerRuntime runtime = ...;
>>     DataDomain domain = runtime.getDataDomain();
>>     DataNode node = domain.getNode("DB1");
>>     node.setDataSource(dataSource);
>> However, this setting does not have the desired effect. When the connection to the
database is established, still the original definition from the config file is taken.
>> I have traced down this problem and found that the DataNode has a DbAdapter, which
has its own DataSource object. This gets set in the ServerRuntime.getDataDomain() call above.
>> The only way I found around this is by explicitly creating a new adapter with my
data source:
>>     node.setAdapter(new AutoAdapter(dataSource));
>> However, the AutoAdapter default constructor is deprecated, and I could not find
an easy way to use the recommended method with a DbAdapterFactory.
>> Any ideas?
>> Thanks for any hint.
>> Wernke

View raw message