You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by "Marrs, Kasey" <Ka...@Williams.com> on 2006/05/30 20:17:20 UTC

multiple database/datasources

I have an application that uses multiple databases to pull data from.
How do I configure the SQL map config file and the DAO configuration to
access multiple databases?
 
Thanks
 
<>< <>< <>< <>< <><
Kasey Marrs
918-573-2242
WIT Consulting Company
><> ><> ><> ><> ><>
 

Re: multiple database/datasources

Posted by Jeff Butler <je...@gmail.com>.
You need multiple sqlmap config files - one for each database.  Then in the
dao.xml, you add multiple <context> elements specifying the different sqlmap
config files, and the DAOs associated with that database.

Jeff Butler


On 5/30/06, Marrs, Kasey <Kasey.Marrs@williams.com > wrote:
>
>   I have an application that uses multiple databases to pull data from.
> How do I configure the SQL map config file and the DAO configuration to
> access multiple databases?
>
> Thanks
>
> <>< <>< <>< <>< <><
> Kasey Marrs
> 918-573-2242
> WIT Consulting Company
> ><> ><> ><> ><> ><>
>
>

Re: multiple database/datasources

Posted by John Moore <jo...@jmsd.co.uk>.
Denis Vladimirov wrote:

> Another option is to use Spring:
>
> ----------in Spring Config------------
>
>    <bean id="database1DataSource"
>        class="org.springframework.jndi.JndiObjectFactoryBean">
>        <property 
> name="jndiName"><value>java:comp/env/jdbc/database1DS</value>
>            </property>
>    </bean>
>
>    <bean id="database2DataSource"
>        class="org.springframework.jndi.JndiObjectFactoryBean">
>        <property 
> name="jndiName"><value>java:comp/env/jdbc/database2DS</value>
>            </property>
>    </bean>
>
>    <bean id="sqlMapClient"
>        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
>        <property name="configLocation">
>            <value>/yourPath/ibatisSqlMapConfig.xml</value></property>
>    </bean>
>
>    <bean id="yourDao1"
>        class="com.yourpackage.dao.SameDao">
>        <property name="dataSource"><ref
> local="database1DataSource"/></property>
>        <property name="sqlMapClient"><ref 
> local="sqlMapClient"/></property>
>    </bean>
>
>    <bean id="yourDao2"
>        class="com.yourpackage.dao.SameDao">
>        <property name="dataSource"><ref
> local="database2DataSource"/></property>
>        <property name="sqlMapClient"><ref 
> local="sqlMapClient"/></property>
>    </bean>
>
> <bean id="yourDao3"
>        class="com.yourpackage.dao.AnotherDao">
>        <property name="dataSource"><ref
> local="database2DataSource"/></property>
>        <property name="sqlMapClient"><ref 
> local="sqlMapClient"/></property>
>    </bean>
>
> -----------in Java ---------
> /* the first 2 DAOs are the same but with the different datasource */
>  SameDao yourDaoDB1 = (SameDao ) new ClassPathXmlApplicationContext(
>                "your_spring_config.xml").getBean("yourDao1");
>
>  SameDao yourDaoDB2 = (SameDao ) new ClassPathXmlApplicationContext(
>                "your_spring_config.xml").getBean("yourDao2");
>
>
> AnotherDao anotherDaoDB2 = (AnotherDao) new 
> ClassPathXmlApplicationContext(
>                "your_spring_config.xml").getBean("yourDao3");
>
> Regards,
> Denis
>
>
> On 5/31/06, Marrs, Kasey <Ka...@williams.com> wrote:
>
>>
>>
>>
>> I have an application that uses multiple databases to pull data 
>> from.  How
>> do I configure the SQL map config file and the DAO configuration to 
>> access
>> multiple databases?
>>
>> Thanks
>>
>> <>< <>< <>< <>< <><
>> Kasey Marrs
>> 918-573-2242
>> WIT Consulting Company
>> ><> ><> ><> ><> ><>
>>
>
>
There is a potential problem with this approach, in that you are using 
the same mapping files for the different databases, which means that the 
SQL you use has to work for all of them. This is, of course, fine if 
they're all the same type, and even if they're not, you may be able to 
get all you want from using ANSI SQL which all the dbs support. There 
may be advantages, though, in doing something like this:

    <bean id="mysqlDataSource" 
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property 
name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property 
name="url"><value>jdbc:mysql://localhost:3306/mydb</value></property>
        <property name="username"><value>username</value></property>
        <property name="password"><value>password</value></property>
    </bean>

    <bean id="firebirdDataSource" 
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property 
name="driverClassName"><value>org.firebirdsql.jdbc.FBDriver</value></property>
        <property 
name="url"><value>jdbc:firebirdsql:localhost/3050:D:/Firebird_1_5/databases/mydb.fdb</value></property>
        <property name="username"><value>username</value></property>
        <property name="password"><value>password</value></property>
    </bean>

 
    <bean id="mysqlSqlMapClient" 
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="mysql-sql-map-config.xml"/>
    </bean>

    <bean id="firebirdSqlMapClient" 
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" 
value="firebird-sql-map-config.xml"/>
    </bean>
      
    <bean id="mysqlDao" class="mypackage.MySQLMapClientDao">
        <property name="dataSource" ref="mysqlDataSource"/>
        <property name="sqlMapClient" ref="mysqlSqlMapClient"/>
    </bean>

    <bean id="firebirdDao" class="mypackage.FirebirdSqlMapClientDao">
        <property name="dataSource" ref="firebirdDataSource"/>
        <property name="sqlMapClient" ref="firebirdSqlMapClient"/>
    </bean>

You set up completely separate mapping files, pointed to by 
"mysql-sql-map-config.xml" and "firebird-sql-map-config.xml" 
respectively, allowing for dialect-specific features to be used, and you 
just pick the DAO bean you want to use for each database action.

-- 
==============================================
John Moore  -  Norwich, UK  -  john@jmsd.co.uk
==============================================

Re: multiple database/datasources

Posted by Denis Vladimirov <de...@gmail.com>.
Another option is to use Spring:

----------in Spring Config------------

    <bean id="database1DataSource"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>java:comp/env/jdbc/database1DS</value>
            </property>
    </bean>

    <bean id="database2DataSource"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>java:comp/env/jdbc/database2DS</value>
            </property>
    </bean>

    <bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>/yourPath/ibatisSqlMapConfig.xml</value></property>
    </bean>

    <bean id="yourDao1"
        class="com.yourpackage.dao.SameDao">
        <property name="dataSource"><ref
local="database1DataSource"/></property>
        <property name="sqlMapClient"><ref local="sqlMapClient"/></property>
    </bean>

    <bean id="yourDao2"
        class="com.yourpackage.dao.SameDao">
        <property name="dataSource"><ref
local="database2DataSource"/></property>
        <property name="sqlMapClient"><ref local="sqlMapClient"/></property>
    </bean>

 <bean id="yourDao3"
        class="com.yourpackage.dao.AnotherDao">
        <property name="dataSource"><ref
local="database2DataSource"/></property>
        <property name="sqlMapClient"><ref local="sqlMapClient"/></property>
    </bean>

-----------in Java ---------
/* the first 2 DAOs are the same but with the different datasource */
  SameDao yourDaoDB1 = (SameDao ) new ClassPathXmlApplicationContext(
                "your_spring_config.xml").getBean("yourDao1");

  SameDao yourDaoDB2 = (SameDao ) new ClassPathXmlApplicationContext(
                "your_spring_config.xml").getBean("yourDao2");


 AnotherDao anotherDaoDB2 = (AnotherDao) new ClassPathXmlApplicationContext(
                "your_spring_config.xml").getBean("yourDao3");

Regards,
Denis


On 5/31/06, Marrs, Kasey <Ka...@williams.com> wrote:
>
>
>
> I have an application that uses multiple databases to pull data from.  How
> do I configure the SQL map config file and the DAO configuration to access
> multiple databases?
>
> Thanks
>
> <>< <>< <>< <>< <><
> Kasey Marrs
> 918-573-2242
> WIT Consulting Company
> ><> ><> ><> ><> ><>
>