ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rafiq, Adnan" <ara...@carreker.com>
Subject RE: Dynamically Discovering DataSource
Date Thu, 21 Apr 2005 17:56:25 GMT
Thanks Brandon.

The company id is stored in the user session. Basically, as soon as the user
is authenticated we store her corresponding company id in the session. I am
using a dynamic proxy in front of the DaoImpl class which will set the
company id prior to invoking the target (i.e. dao impl class in question).

One more question: Is the DaoImpl class cached by ibatis (similar to Struts
Action) or does it instantiate it every time a method is called?

-----Original Message-----
From: Brandon Goodin [mailto:brandon.goodin@gmail.com]
Sent: Thursday, April 21, 2005 12:48 PM
To: ibatis-user-java@incubator.apache.org
Subject: Re: Dynamically Discovering DataSource


You would simply use the Fully Qualified class name and make sure it
implements DataSourceFactory.

<transactionManager ...>
<dataSource type="com.foo.MyCustomerFactory">
<property name="propertyA" value="valueA"/>
<property name="propertyB" value="valueB"/>
</dataSource>
</transactionManager>

Where you set the company is up to your architecture. Where do you get
the id from in the first place?

Brandon

On 4/21/05, Rafiq, Adnan <arafiq@carreker.com> wrote:
>  
> Larry, 
>   
> Using ThreadLocal just might solve my problem. This is what I am thinking:

>   
> 1 - Extend the JndiDataSourceFactory class and override the getDataSource
> method 
> 2 - Obtain the company id from ThreadLocal (assuming that its been set in
> the DaoImpl class) 
> 3 - In the getDataSource method of my new factory class, lookup the
> datasource name based on the company id 
> 4 - Return the looked-up datasource name (instead of the one defined in
sql
> maps xml file) 
>   
> However, I need to figure out the following: 
> 1 - If extend the JndiDataSourceFactory class, how do I plug it into
iBatis?
> 2 - What will be the best place to set the company id in ThreadLocal 
>     a) In the DaoImpl class constructor, or 
>     b) In each DaoImpl class method 
>   
> Your help is really appreciated in this matter. 
>   
> Thanks, 
>   
> - Adnan 
>  
> -----Original Message-----
> From: Larry Meadors [mailto:larry.meadors@gmail.com]
> Sent: Thursday, April 21, 2005 11:15 AM
> To: ibatis-user-java@incubator.apache.org
> Subject: Re: Dynamically Discovering DataSource
> 
> This is such an unusual case that IMO, the DataSourceFactory should not be
> changed to accommodate it.
> 
> You could probably use a ThreadLocal class to set the parameter, then in
> your datasource, examine it to decide the real datasource to use.
> 
> Larry
> 
>  
> On 4/21/05, Rafiq, Adnan <arafiq@carreker.com> wrote: 
> > 
> > Larry, 
> >   
> > Thanks for the suggestion. 
> >   
> > I looked at the DataSourceFactory. The method getDataSource() does not
> take any parameters. The flow of our application is like this: 
> >   
> > 1 - Contact the system datasource and get a list of all companies and
> their associated datasource jndi names 
> > 2 - When the user logs in, we get its company id and using it as a key
we
> find the corresponding datasource jndi name 
> > 3 - The company datasource jndi name is then returned and used for all
> connections. 
> >   
> > What seems like a good solution is to extend the JNDIDataSourceFactory
and
> overload the method getDataSource so that it can accept a company id as an
> argument: getDataSource(int companyId). Internally, we have a map of
> companyid (key) and datasource name (value). 
> >   
> > However, what I can't figure out is where that method is actually called
> in iBatis. 
> >   
> > Thanks, 
> >   
> > - Adnan 
> > 
> > 
> > -----Original Message-----
> > From: Larry Meadors [mailto:larry.meadors@gmail.com]
> > Sent: Thursday, April 21, 2005 10:26 AM
> > To: ibatis-user-java@incubator.apache.org
> > Subject: Re: Dynamically Discovering DataSource
> > 
> > Roll your own javax.sql.DataSource (6 methods) and
> com.ibatis.sqlmap.engine.datasource.DataSourceFactory (2
> methods).
> > 
> > Larry
> > 
> > 
> > On 4/21/05, Rafiq, Adnan <arafiq@carreker.com> wrote: 
> > > 
> > > I have a situation where we have an ASP-like environment. There is one
> system database and several customer-specific databases. Each customer
> database is mapped to a different datasource. In iBatis we have to
hardcode
> the JNDI name for the datasource in the sql-map-confi.xml file. Is there
> anyway to make this dynamic? In other words, I want to query the customer
> datasource name (the names are stored in the system database) at run time
> based on the user id, and then use that name for getting my connections. 
> > >   
> > > Any help is greatly appreciated.
> > 
> > 
> 
>

Mime
View raw message