Andrus,
I'm not sure exactly how you want the code sample. If you need me to provide a self contained app
I can do that. For now I'll just copy the code from my app so you can take a look at it. I have a
static method that configures my custom DataSourceFactory. The call to DbUtils.openDb succeeds,
but the getDataSourceFactory method in CompanyConfiguration is never called.
public class DbUtils {
private static DataContext globalContext;
private static DataContext estimateContext;
private static DataContext roomContext;
private static DataContext assemblyContext;
private static DataContext partsContext;
public static void openDb(String pathToDb) throws Exception {
try {
CompanyDataSourceFactory.setDbPath(pathToDb);
Configuration.initializeSharedConfiguration(CompanyConfiguration.class);
Configuration config = Configuration.getSharedConfiguration();
DataDomain domain = config.getDomain();
globalContext = DataContext.createDataContext(domain.getName());
estimateContext = DataContext.createDataContext(domain.getName());
roomContext = DataContext.createDataContext(domain.getName());
assemblyContext = DataContext.createDataContext(domain.getName());
partsContext = DataContext.createDataContext(domain.getName());
} catch (Exception e) {
throw new Exception("Unable to initialize database!", e);
}
}
}
public class CompanyConfiguration extends DefaultConfiguration {
private static CompanyDataSourceFactory factory = new CompanyDataSourceFactory();
..verride
public DataSourceFactory getDataSourceFactory() {
return factory;
}
}
public class CompanyDataSourceFactory implements DataSourceFactory {
private static DataSource ds = null;
private static String dbPath = "Companies/db";
public static void setDbPath(String val) {
dbPath = val;
}
..verride
public DataSource getDataSource(String arg0) throws Exception {
if(dbPath.startsWith("server")) {
// server:host
ClientDataSource40 tmpDS = new ClientDataSource40();
String[] sArray = dbPath.split(":");
tmpDS.setServerName(sArray[1]);
tmpDS.setDatabaseName("db");
tmpDS.setUser("user");
tmpDS.setPassword("pass");
ds = tmpDS;
} else {
EmbeddedDataSource40 tmpDS = new EmbeddedDataSource40();
tmpDS.setDatabaseName(dbPath);
tmpDS.setUser("user");
tmpDS.setPassword("db");
ds = tmpDS;
}
return ds;
}
..verride
public void initializeWithParentConfiguration(Configuration arg0) {
}
}
Hopefully that's enough. If not let me know what I should provide.
Thanks for your help!
Brian
--- Andrus Adamchik <andru..bjectstyle.org> wrote:
> Strange. That should still work the same. The only change to
> Configuration since M3 was related to the DataSourceFactory handling
> (CAY-785)... Do you have a code example that demonstrates the problem?
>
> Thanks,
> Andrus
>
>
> On May 1, 2008, at 10:29 PM, Brian Nelson wrote:
> > I've been using a custom subclass of DefaultConfiguration to
> > customize my database connection.
> > This works great with 3.0M3. However, today I upgraded to the
> > snapshot build and it seems to be
> > ignoring the custom configuration class I pass into the
> > Configuration.initializeSharedConfiguration method. Has the way
> > custom configurations work
> > changed?
> >
> > Thanks in advance!
> >
> > Brian
> >
> >
>
>
This archive was generated by hypermail 2.0.0 : Fri May 02 2008 - 20:22:12 EDT