Hi Armin,

With the join() it works.


Does that means that I can only use inner transactions when I work with
multi-threading ? Or I all time have to use the join ()...?

I have some BusinessObjects who works directly with the JDO objects, does
that means that I must have an instance variable in the mother class of my
business objects, because I don't use multi threading and so, I only will
have only one thread, so the transaction is an instance variable....?

Thanks again for your replies Armin !




-----Message d'origine-----
De�: Armin Waibel [mailto:[EMAIL PROTECTED] 
Envoy�: lundi 30 juin 2003 18:12
��: OJB Users List
Objet�: Re: LocalTxManager delete the only current Thread available ???

Hi,

per thread you only can perform one transaction. Currently nested
tx are not supported.
Do you have tried do a tx.join() call before the last
tx.lock(...) method call?

regards,
Armin

----- Original Message -----
From: "Emmanuel Dupont" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Monday, June 30, 2003 4:24 PM
Subject: LocalTxManager delete the only current Thread available ???


All



I think I found a bug or my implementation doesn't create thread
properly.



Here is my code sample with ODMG API:



------------------------------------------------------

T1 = new Transaction();

T1.begin();



[...]

While (i<size) {

T2 = new Transaction();

T2.begin();



[...]



T2.commit();

}



ojb = new PObject();

T1.lock(obj, WRITE);



T1.commit();

----------------------------------------





It failed in the last lock with the message :

org.odmg.TransactionNotInProgressException: Calling method needed
transaction, but no transaction found for current thread :-(

      at
org.apache.ojb.odmg.LocalTxManager.getCurrentTransaction(LocalTxManager.
java
:46)





When I traced in Ojb code and I understand this processes:



In TransactionImpl the begin() do : txManager.registerTx(this);



The LocalTxManager call

registerTx(TransactionImpl tx) :

tx_table.put(Thread.currentThread(), tx);





It puts the current Thread in the tx_table (TransactionTable)





The trouble is on the commit off The T2 transaction:



The TransactionImpl 's commit call the doClose method and who call :

LocalTxManager : deregisterTx(Object token)

tx_table.remove(Thread.currentThread());



But the T2 transaction is attached to the same Thread as T1, so at the
last
T2.commit() call the tx_table doesn't contains the current-Tread anymore
!!!
And when T1 wants to work it failed !!







First question: Is it normal that T2 is on the same Thread as T1 ? So
the
commit method, delete the Thread reference in the LocalTxManager 's
tx_table.



Second question What can I do ??





Any help whould be really appreciated.



Thanks a lot in advance!!







Emmanuel.













---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to