Larry
On 4/21/05, Brandon Goodin <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED]]
> 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 <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED]]
> > 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 < [EMAIL PROTECTED]> 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.
> >
> >
>
>