I was looking for any clues in the code, nothing concrete... And I
found it. The recent fix to CAY-785 deprecated and stopped calling
"Configuration.getDataSourceFactory()" replacing it with
"Configuration.getDataSourceFactory(String)". So you need to override
the new method. Also I checked in a fix that restores backwards
compatibility. It should be available from the Hudson CI server soon
(build #109 or newer).
Andrus
On May 3, 2008, at 3:21 AM, Brian Nelson wrote:
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();
@Override
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;
}
@Override
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;
}
@Override
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 <[EMAIL PROTECTED]> 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