Re: opening multiple databases from same program

Noel Grandin <[email protected]> Mon, 12 Jul 2010 14:44:22 +0200
Newsgroups gmane.comp.java.orm.simpleorm
Message-ID <[email protected]>
 Hi

In Swing, a lot of operations are required to happen on the event thread, which means I end up often talking to the DB
on the event thread, which in turn means that the two UIs both try and talk to the DB from the event thread.

Sigh. Looks like I'm going to have to call
    SSessionJdbc.open()
    .. do some stuff....
    SSessionJdbc.commitAndDetachDataSet();
    SSessionJdbc.detachFromThread();
everywhere I touch the DB.

(Note: I'm not closing it because I'm reusing connections - it is very expensive to open and close an embedded database!)

-- Noel


John Abraham wrote:
> I agree that multiple sessions per thread would sometimes be useful, and would support any enhancements in that
> direction.  But in your particular case, Noel, can you not just use two threads, one per UI?
>
> --
> John Abraham
>
>   
> On 2010-07-12, at 7:54 AM, Noel Grandin wrote:
>
>>  
>>
>> Hi
>>
>> I have 2 embedded databases, and normally one UI runs on each database. But in a particular situation, the two UIs
>> will be running the in same VM at the same time, and thus need access to both databases.
>>
>> I understand what the check is trying to achieve, but it would be better if it checked that there was only one
>> session per database per thread.
>> This should be possible by calling
>>    javax.sql.Connection#getMetaData()->getURL()
>>
>> Alternatively, could we get a mechanism for disabling the check?
>>
>> Thanks, Noel Grandin
>>
>> Franck Routier 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.sessionjdbc.SSessionJdbc.innerOpen(SSessionJdbc.java:129)
>>> > [0@17:08:40.976] !SE>: at
>>> > simpleorm.sessionjdbc.SSessionJdbc.open(SSessionJdbc.java:88)
>>> > [0@17:08:40.976] !SE>: at
>>> > simpleorm.sessionjdbc.SSessionJdbc.open(SSessionJdbc.java:108)
>>> >
>>> >
>>> > What do I do?
>>> >
>>> > Thanks, Noel Grandin
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > __________________________________________________________
>>> > Disclaimer: http://www.peralex.com/disclaimer.html <http://www.peralex.com/disclaimer.html>
>>> >
>>> >
>>> >
>>> >
>>> >
>>>
>>
>>
>>
>> ------------------------------------------------------------------------------------------------------------------------
>> Disclaimer: http://www.peralex.com/disclaimer.html <http://www.peralex.com/disclaimer.html>
>>
>>
>> 
>

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