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