I thought I would update the list with the solution I ended up with. Not sure that its brilliant but it does seem to work...
When the user selects a database environment to use, the servlet creates the datasource as before but stores it in a ThreadLocal (actually, a wrapper to a ThreadLocal for convenience). My DAO is wired to a custom AbstractDataSource which, when asked for a connection in getConnection, retrieves the datasource from the ThreadLocal wrapper and returns it's connection. Took a long time to get to that but I appreciate the people here who helped nudge my understanding. Just in case someone as clueless as I comes along and wants some code, here are some snippets. Thanks again Paul +++++++++ <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:/sqlMapConfig.xml"/> <property name="dataSource" ref="mediusProdDataSource"/> </bean> <bean id="mediusProdDataSource" class="persistence.dao.MediusCentralRoutingDataSource" /> and the class: public class MediusCentralRoutingDataSource extends AbstractDataSource { public Connection getConnection() throws SQLException { DataSource ds = MediusContextDataSourceHolder.getDataSource(); return ds.getConnection(); } public Connection getConnection(String username, String password) throws SQLException { DataSource ds = MediusContextDataSourceHolder.getDataSource(); return ds.getConnection(username, password); } } -- View this message in context: http://www.nabble.com/How-can-I-change-datasource-connect-info-on-the-fly-w-iBATIS-and-Spring--tf3573169.html#a10089746 Sent from the iBATIS - User - Java mailing list archive at Nabble.com.