Hints to solution: 1. Multiple Deployments of Application 2. JNDI Partitioning (clients/x/ssbn, clients/y/ssbn) 3. Component is more than Java code its configuration (Entity->CMP->DataSourceX,Entity->CMP->DataSourceY). Same code different data.
Regards, William -----Original Message----- From: A mailing list for Enterprise JavaBeans development [mailto:[EMAIL PROTECTED]] On Behalf Of Mattias Jiderhamn Sent: 02 August 2002 09:20 To: [EMAIL PROTECTED] Subject: Re: Multiple databases - New idea > From your example, it looks like you are using multiple schemas - not > multiple databases. Multiple databases would require you to have one > datasource per client (and also one connection pool per client). Your right. Some vendors call it schemas but MySQL calls it databases. Anyway, there is only one datasoure/connection pool and the specific schema/database could be selected selected at run-time (either by "SELECT * FROM database.table" or "USE database; SELECT * FROM table") Does this insight open up for other possibilities? > When it comes to vendor-specific solutions, WebSphere has an > architected solution for making request-specific data available > without passing it as explicit parameters. It is managed through a > reserved jndi-mapped service called Workspace. The user-interface > logic looks up the Workspace object (which is like a Hashmap) and > assignes a name-value pair for the client identifier. The BMP > implementation looks up the workspace object to obtain the value of > the client identifier. This seems to be somewhat similar to what we do today. When a request comes in a servlet filter puts the Thread and a bean with session info (including client) into a Hashtable held by a singleton. The same Hashtable is accessed when it's time to access the database. Would this be possible in an EJB app-server too? (Do we have to put it in a JNDI resource even when Resin uses local EJBs?) > > After my first post I came up with a new idea that maybe could be > > the solution to our problems. > > > > What if we put the client ID (or database name) as an attribute in > > every entity bean, and made that attribute part of the key (so the > cache won't mix > > them up). Then we let all the entity beans be BMP, and within every > > SQL statement we add the database name (as in "SELECT FROM > DB1000.articles ...", > > "INSERT INTO DB1050.address ..."). > > > > I have only looked briefly into BMP and I don't know if my > theory will hold. > > How do you specify the object key in BMP? Does all the fields have > > to be fields in the database table? > > > > Would this be a valid solution? (Though somewhat tied to the > MySQL database) > > > >> -----Original Message----- > >> From: A mailing list for Enterprise JavaBeans development > >> [mailto:[EMAIL PROTECTED]]On Behalf Of Mattias Jiderhamn > >> Sent: Thursday, August 01, 2002 12:55 PM > >> To: [EMAIL PROTECTED] > >> Subject: Multiple databases... > >> > >> > >> Hi all subscribers. > >> Joined this list to be able to discuss this one question. I have > >> spent a lot of thought on this and I'll try to describe things > >> rather > detailed, so try > >> to bear with me. > >> > >> We are developing a web application in Java with extensive database > >> use. We have one "general", system database (SYSTEM) with texts, > >> user info, settings > >> etc. Every user of the system is associated to "clients" (usally > >> the company > >> where they work). Most users have only one client but some > have several. A > >> client can have "unlimited" number of user (mostly < 5) > associated to it. > >> There can be unlimited number of clients (currently ~30). > >> Ex: > >> User1 has access to client 1 > >> User2 has access to client 1 and 53 > >> > >> Every client has their own database with their data. When a > user loggs in > >> s/he is associated with the database of a) the only client s/he has > >> acces to or b) the client s/he chooses for the session. > >> > >> Today we are not using EJB or any third party middleware but > only our own > >> proprietary solution. We have one application in the J2EE > server (Resin) > >> with one connection pool to our MySQL database (initially the > >> SYSTEM database). I have built a wrapper around Resins connection > >> pool so that when a thread requests a connection, the connection is > >> first switched to the correct database, with MySQLs "USE database" > >> command, depending on the user > >> of the session running the thread as mentioned above. There > are also some > >> other features to handle transactions etc. > >> > >> Much of the use is through the web interface, where the data is > >> fetched from the database, put into hashtables and output on the > >> page. But there are also > >> lots of background work, for which we have classes mapping to > >> records in our > >> database tables. > >> > >> The biggest problem I see here is with caching. Since we have no > >> object cache we have to read the object from the database every > >> time we use it, and write it to the database every time we change > >> it. Since we also read directly from the database a lot, we can not > >> have an object > cache. I would > >> like to have the same interface for both "background" and "web" > >> (both being object oriented), but then we need to solve the > >> performance issue. > >> > >> I have thought about EJB many times. I have also looked > briefly at other > >> solutions that allow object caching. But it always comes down > to the same > >> problem: I can't see how to get it working with differens databases > >> for different users. And of course, how would the object cache know > >> wich client the user who updated an object was logged into, when it > >> is time to write it > >> back to the database? > >> > >> > >> Does anyone have a solution for this? > >> I saw someone mentioning Webgain TopLink in another post > >> (http://www.jguru.com/faq/view.jsp?EID=421472), could someone > expain how > >> that could be of any help? > >> > >> Summary of what we want: > >> - Multiple (structurally identical) databases (main reasons: > maintance and > >> security) > >> - Database selected at run-time > >> - Object-Relational mapping with caching > >> - Preferrably a non-proprietary solution > >> > >> Mattias Jiderhamn > >> Expert Systems > >> [EMAIL PROTECTED] > >> > >> ================================================================== > >> ========= > >> To unsubscribe, send email to [EMAIL PROTECTED] and include in > >> the body of the message "signoff EJB-INTEREST". For general help, > >> send email to [EMAIL PROTECTED] and include in the body of the > >> message "help". > >> > >> > > > > > ================================================================== > ========= > > To unsubscribe, send email to [EMAIL PROTECTED] and include > in the body > > of the message "signoff EJB-INTEREST". For general help, send email > > to [EMAIL PROTECTED] and include in the body of the message > > "help". > > > > ======================================================================== === To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff EJB-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help". =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff EJB-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".