Re: opening multiple databases from same program

Hoang-Vu PHUNG <[email protected]> Fri, 9 Jul 2010 19:43:45 +0000 (GMT)
Newsgroups gmane.comp.java.orm.simpleorm
Message-ID <[email protected]>
If you want to migrate data from one database to another then it is better to use the specific tool for that, for example scriptella or even db-unit.

In oracle for example, we can have dblink and symbols so we can achieve the same goal. Brief there are so many choices !

Just a small suggestion.

Rgds
Vu



--- En date de : Ven 9.7.10, Abel Birya <[email protected]> a écrit :

De: Abel Birya <[email protected]>
Objet: Re: [SimpleORM] opening multiple databases from same program
À: [email protected]
Date: Vendredi 9 juillet 2010, 19h20







 



  


    
      
      
      Hi,

I had the same issue when I started using SimpleORM since I was doing a lot of data migration scripts from one database to another. This is the strategy that I used to achieve my goals;

For example if I have an entity _User and I need to transfer it to another db. I would name the corresponding entity User. I would then follow the below procedure to achieve a seamless transfer process.


SSessionJdbc ses = SSessionJdbc. open(connection1 , "db1");
ses.begin;
// create a method to retrieve users eg
List<_User> users = _User.getUsers( ses);
// detach the records into a dataset

SDataSet ds = ses.commitAndDetach DataSet() ;
ses.close();

//retrieve the records from the dataset
users = ds.findAllRecords( _User.USER) ; // assuming that USER is the SRecordMeta variable

//open the new connection

ses = SSessionJdbc. open(connection2 , "db2");

for(_User _user: users) {
    ses.begin();
    //create the user on the other db and fill in the other variables such as name etc
    User user = ses.createWithGener atedKey() ;

    ses.commit() ;
}

ses.close();

Hope this helps.

Kind regards.
Abel

In the even

On Fri, Jul 9, 2010 at 7:02 PM, Franck Routier <franck.routier@ axege.com> wrote:
















 



  


    
      
      
      Hi,



well, AFAIK, you can't do that... !



SSessionJdbc has built-in checks that a connection is single threaded

using a ThreadLocal object. [I think Hibernate has some kind of best

practice to achieve the same goal (I'm not formal here, I didn't use

hibernate for years)]



There is only one dataSource per SSessionJdbc and one SSessionJdbc per

thread.



You could implement a different strategy to handle this part. Some work

was done along this path in a previous version of Simpleorm, for using a

single JTA transaction per session. But it is not maintained.

See simpleorm/extras/ SConnectionEJB. java



My question would be : what are you trying to achieve ?



Franck



Le vendredi 09 juillet 2010 à 17:11 +0200, Noel Grandin a écrit :

>   

> Hi

> 

> I'm opening multiple different databases from the same thread, which

> is triggering this check:

> 

>  simpleorm.utils. SException$ Error: Thread's SSession already open [SS

> 1.SkyMon]

> [0@17:08:40. 976] !SE>:     at

> simpleorm.sessionjd bc.SSessionJdbc. innerOpen( SSessionJdbc. java:129)

> [0@17:08:40. 976] !SE>:     at

> simpleorm.sessionjd bc.SSessionJdbc. open(SSessionJdb c.java:88)

> [0@17:08:40. 976] !SE>:     at

> simpleorm.sessionjd bc.SSessionJdbc. open(SSessionJdb c.java:108)

> 

> 

> What do I do?

> 

> Thanks, Noel Grandin

> 

> 

> 

> 

> 

> 

> 

> ____________ _________ _________ _________ _________ _________ _

> Disclaimer: http://www.peralex. com/disclaimer. html

> 

> 

> 

> 

>