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: 
https://cwiki.apache.org/CAY/setting-database-connection.html

Firstly, in 3.1 the SharedConfiguration no longer exists, so we have to use the 
ServerRuntime instead:

    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


Reply via email to