ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Larry Meadors <larry.mead...@gmail.com>
Subject Re: Dynamically Discovering DataSource
Date Thu, 21 Apr 2005 17:56:49 GMT
The more I think in this, the more I think you could do it all just by 
creating the thread local class, and the DataSource implementation. You 
would use standard JNDI to set up your custom DataSource, but before making 
any calls that use it, set the thread local value to tell it how to act.

Larry

On 4/21/05, Brandon Goodin <brandon.goodin@gmail.com> wrote:
> 
> 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