Hello Stephane,

I think in general it is necessary to supply a test case when submitting 
a bug or a fix. It sounds like you possibly have a found a bug since I 
believe that Castor wasn't really designed for use with multiple DBs. If 
you have the time, it would be great if you could create a test case. 
This way it is possible for one of the JDO committers (Bruce and Ned) to 
quickly assess the fix. Sadly, I think everyone is too busy to provide 
much guidance on your approach, it's best just to get in there and have 
a go.

I would recommend reading the JDO Test framework documentation
http://www.castor.org/test-framework.html

That way you can regression test your changes to Castor and ensure 
nothing else gets broke. It sounds like you are working from CVS 
already, which is good because I believe you need to submit patches in 
the form of a diff. More information at...

http://www.castor.org/cvs.html

It's worth looking at the test-framework documentation. It is very clear 
and will probably take you less than a day to get the test harness 
working and your test case incorporated.

Patrick

St�phane Verlet wrote:

>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
>  
>

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

Reply via email to