Sorry for the repost , does anyone out there have any feedback on 
this one ?

thanks 




On Wed, 10 Jul 2002, St�phane Verlet wrote:

> 
> Hi folks
> 
> Here is my set up , in the same application I use 2 different databases, I 
> have 2 JDO
> objects, the db have different name , different JNDI conn pools, however I 
> have
> the SAME O/R  mapping for the 2 db.
> The goal is not to share date across the dbs , each db is used 
> independently, according to
> the context of the application.
> 
> For one of the classes , I am using a High/Low key generator , and I 
> noticed that
> depending on the order the mappings are loaded , the key generator would 
> use
> the sequence table in the wrong db.
> 
>         for example
>                 starting application
>                 open a transaction with db1
>                 creating object1 of type A
>                 commiting and closing db1
> 
>                 open a transaction with db2
>                 creating object2 of type B
>                 commiting and closing db2
> 
>       object1 and object2 would be created correctly , EXCEPT that object2 
> would have an id from the
>       sequence table of db1. ( object2.id=object1.id+grab_size )
> 
> Using the "EJB" set up, same-connection = true , everything works 
> properly, however this is
> no very applicable for me as I need to  have several threads , creating 
> objects of the same type at the
> same time in the same db , I ended up with a deadlock , as I guess each 
> thread was fighting to get the next id block.
> 
> 
> I thought taht ,  may be , castor had "global" key-generator registry and 
> tried using different key-gen alias
> for the 2 db , unsucessful (I learn later , while digging into the source 
> that , the key-gen registry
> is db specific)
> 
> After putting some debug statement , in Castor , I realized that Castor 
> was using the right
> key generator instance for each cases , however I realized it gave the 
> wrong db connection
> to the key-gen class
> in other word the key-gen instance for the db2 was using a connection to 
> db1
> 
> After more digging around , I realized that the problem lied in the
> org.exolab.castor.jdo.engine.SQLEngine class , in particular the
> getSeparateConnection() method
> that called
> 
> dr=DatabaseRegistry.getDatabaseRegistry(_clsDesc.getJavaClass()); (line 
> 360 in the latest CVS)
> 
> to find out what db to use to create a new separate conn for the key gen
> The DatabaseRegistry.getDatabaseRegistry(Class) , goes through all the db 
> registries
> to find which db this class is from. Obviously this explains my problem, 
> as in my case the class
> definition appears in the 2 different dbs
> 
> I also noticed that method DatabaseRegistry.getDatabaseRegistry(Class) is 
> only called from this
> place, it almost look like some ad hoc method ...
> 
> My main question , is Castor capable to handle my settings ? or is it a 
> bug ?
> 
> I started working  on fix (if it is a bug, that is )
> This is my first real attempt at working with Castor internals (I have 
> been a daily user for the
> last 2 months), so my aproach may seem a little bit out of place
> 
> The idea , is to  pass the DataBase object to the SQLEngine so that when
> it needs to create a separate connection for id generation , it picks
> the right db by calling DatabaseRegistry.getDatabaseRegistry(String 
> dbName)
> here are the steps
>         adding the public String getDatabaseName()  method to the the 
> DataBase interface and DataBaseImpl class
>         adding the Database getDatabase() method in  the 
> TransactionContext class
>         in the ClassMolder , passing the the Database object from the 
> TransactionContext when calling
>         SQLEngine to create a new Object
>         using that Database object information , to create the separate 
> conn
> 
> I ran a couple tests , and this fix my issue; However I am afraid that I 
> cannot be sure if it breaks
> anything else , as I do not fully understand the Castor code base and I 
> haven t had time
> to setup a full dev environment to run the full test suite.
> 
> If indeed , this is considered a bug , and I don t see why castor should 
> not be capable
> to connect to 2 different db , with the same schema in the same 
> application ...
> I would be glad to provide my little fix  as a patch , or provide another 
> patch with a fix
> featuring a different (better) approach if someone can suggested such a 
> thing.
> 
> Thanks
> 
> Stephane
> 
> ----------------------------------------------------------- 
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
>       unsubscribe castor-dev
> 
> 

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to