You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Vamsi Atluri <vk...@yahoo.com> on 2006/05/04 15:57:18 UTC

Help needed for OJB transactions

Hello all,
 
I am having problems with OJB transactions. I am currently using OJB1.0.1 on WSAD 5.1.2 using JDK 1.3.1.
 
My settings and code are as follows:
 
useAutoCommit="0" 
ignoreAutoCommitExceptions="false"
 
PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
 
And the code looks as follows(I am using WSAD 5.1.2):
 
javax.transaction.UserTransaction userTx = null;
try {
    InitialContext initCtx = new InitialContext();
    userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
    userTx.begin();
    
    broker.store(objA);
    broker.store(objB);
    broker.deleteByQuery(someQuery);
    broker.store(objC);
    
    userTx.commit();
} catch(Exception e) {
    userTx.rollback();
}
 
But whenever I am calling broker.store(), I am getting the following warning on the console:
 
[org.apache.ojb.broker.core.PersistenceBrokerImpl] WARN: No running tx found, please only store in context of an PB-transaction, to avoid side-effects - e.g. when rollback of complex objects
 
Now, it appears to me that the broker.store() is not going through the transaction. Am I doing something wrong??
 
Also, a very strange thing happened today. I had a large amount of data to store and it was taking a long time and the transaction timed out after 120 seconds. Is this possibly because the user transaction started and none of the broker store calls are going through it. BUT, the strangest thing I have found is if any error occurs, the store calls ARE rolling back, so they are part of SOME transaction. Also, where is the 120 seconds setting coming from? I thought transactions are not supposed to time out during activity!
 
This is getting very confusing. Can anyone throw some light on my situation? Any help is greatly appreciated. Thanks.
 
Regards,
-Vamsi

Re: Help needed for OJB transactions

Posted by Vamsi Atluri <vk...@yahoo.com>.
Oh, so it's just a matter of wrong header on the message. Thanks a lot Armin. As always, you are very helpful. 
 
Regards,
-Vamsi

----- Original Message ----
From: Armin Waibel <ar...@apache.org>
To: OJB Users List <oj...@db.apache.org>
Sent: Thursday, May 4, 2006 2:08:42 PM
Subject: Re: Help needed for OJB transactions


Vamsi Atluri wrote:
> Hi Armin,
>  
> Thanks a lot for your response. Currently, my code looks like this:
>  
> javax.transaction.UserTransaction userTx = null;
> PersistenceBroker broker = null;
> 
> try {
>     InitialContext initCtx = new InitialContext();
>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>     userTx.begin();
> 
>     broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>     
>     broker.store(objA);
>     broker.store(objB);
>     broker.deleteByQuery(someQuery);
>     broker.store(objC);
>     
>     userTx.commit();
> } catch(Exception e) {
>     userTx.rollback();
> } finally {
>     if(null != broker) {
>         broker.close();
>     }
> }
>  
> Now, the warning message I reported before doesn't occur on each store call anymore. However, whenever there is an error and I attempt a transaction roll back, I get this:
>  
> [org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl$PersistenceBrokerSyncImpl] ERROR: Abort PB-tx, status of JTA tx is STATUS_ROLLEDBACK
>  
> Why would this happen? Any ideas? Any help is greatly appreciated. 
>

This error signals that the JTA transaction was rolled back and that OJB 
abort/cleanup its local PB-tx too. This is the expected behavior when 
JTA-tx rollback. Thus you are on the right track ;-)
In latest version of OJB the log level of this message is changed to 
'DEBUG' and will no longer bother you.
You can find all this stuff in PersistenceBrokerFactorySyncImpl.

regards,
Armin


> Thanks and regards,
> -Vamsi
> 
> ----- Original Message ----
> From: Armin Waibel <ar...@apache.org>
> To: OJB Users List <oj...@db.apache.org>
> Sent: Thursday, May 4, 2006 12:45:28 PM
> Subject: Re: Help needed for OJB transactions
> 
> 
> Hi Vamsi,
> 
> Vamsi Atluri wrote:
>> Hello all,
>>  
>> I am having problems with OJB transactions. I am currently using OJB1.0.1 on WSAD 5.1.2 using JDK 1.3.1.
>>  
>> My settings and code are as follows:
>>  
>> useAutoCommit="0" 
>> ignoreAutoCommitExceptions="false"
>>  
>> PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
>> ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
>>  
>> And the code looks as follows(I am using WSAD 5.1.2):
>>  
>> javax.transaction.UserTransaction userTx = null;
>> try {
>>     InitialContext initCtx = new InitialContext();
>>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>>     userTx.begin();
>>     
>>     broker.store(objA);
>>     broker.store(objB);
>>     broker.deleteByQuery(someQuery);
>>     broker.store(objC);
>>     
>>     userTx.commit();
>> } catch(Exception e) {
>>     userTx.rollback();
>> }
>>  
>> But whenever I am calling broker.store(), I am getting the following warning on the console:
>>  
>> [org.apache.ojb.broker.core.PersistenceBrokerImpl] WARN: No running tx found, please only store in context of an PB-transaction, to avoid side-effects - e.g. when rollback of complex objects
>>
> 
> It seems you lookup the broker instance before you start the 
> UserTransaction. In this case OJB can't synchronize the broker instance 
> with the tx. Please create the broker instance after the UserTransaction 
> starts and see what happens.
> 
> regards,
> Armin
> 
> 
>> Now, it appears to me that the broker.store() is not going through the transaction. Am I doing something wrong??
>>  
>> Also, a very strange thing happened today. I had a large amount of data to store and it was taking a long time and the transaction timed out after 120 seconds. Is this possibly because the user transaction started and none of the broker store calls are going through it. BUT, the strangest thing I have found is if any error occurs, the store calls ARE rolling back, so they are part of SOME transaction. Also, where is the 120 seconds setting coming from? I thought transactions are not supposed to time out during activity!
>>  
>> This is getting very confusing. Can anyone throw some light on my situation? Any help is greatly appreciated. Thanks.
>>  
>> Regards,
>> -Vamsi
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org

Re: Help needed for OJB transactions

Posted by Armin Waibel <ar...@apache.org>.
Vamsi Atluri wrote:
> Hi Armin,
>  
> Thanks a lot for your response. Currently, my code looks like this:
>  
> javax.transaction.UserTransaction userTx = null;
> PersistenceBroker broker = null;
> 
> try {
>     InitialContext initCtx = new InitialContext();
>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>     userTx.begin();
> 
>     broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>     
>     broker.store(objA);
>     broker.store(objB);
>     broker.deleteByQuery(someQuery);
>     broker.store(objC);
>     
>     userTx.commit();
> } catch(Exception e) {
>     userTx.rollback();
> } finally {
>     if(null != broker) {
>         broker.close();
>     }
> }
>  
> Now, the warning message I reported before doesn't occur on each store call anymore. However, whenever there is an error and I attempt a transaction roll back, I get this:
>  
> [org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl$PersistenceBrokerSyncImpl] ERROR: Abort PB-tx, status of JTA tx is STATUS_ROLLEDBACK
>  
> Why would this happen? Any ideas? Any help is greatly appreciated. 
>

This error signals that the JTA transaction was rolled back and that OJB 
abort/cleanup its local PB-tx too. This is the expected behavior when 
JTA-tx rollback. Thus you are on the right track ;-)
In latest version of OJB the log level of this message is changed to 
'DEBUG' and will no longer bother you.
You can find all this stuff in PersistenceBrokerFactorySyncImpl.

regards,
Armin


> Thanks and regards,
> -Vamsi
> 
> ----- Original Message ----
> From: Armin Waibel <ar...@apache.org>
> To: OJB Users List <oj...@db.apache.org>
> Sent: Thursday, May 4, 2006 12:45:28 PM
> Subject: Re: Help needed for OJB transactions
> 
> 
> Hi Vamsi,
> 
> Vamsi Atluri wrote:
>> Hello all,
>>  
>> I am having problems with OJB transactions. I am currently using OJB1.0.1 on WSAD 5.1.2 using JDK 1.3.1.
>>  
>> My settings and code are as follows:
>>  
>> useAutoCommit="0" 
>> ignoreAutoCommitExceptions="false"
>>  
>> PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
>> ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
>>  
>> And the code looks as follows(I am using WSAD 5.1.2):
>>  
>> javax.transaction.UserTransaction userTx = null;
>> try {
>>     InitialContext initCtx = new InitialContext();
>>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>>     userTx.begin();
>>     
>>     broker.store(objA);
>>     broker.store(objB);
>>     broker.deleteByQuery(someQuery);
>>     broker.store(objC);
>>     
>>     userTx.commit();
>> } catch(Exception e) {
>>     userTx.rollback();
>> }
>>  
>> But whenever I am calling broker.store(), I am getting the following warning on the console:
>>  
>> [org.apache.ojb.broker.core.PersistenceBrokerImpl] WARN: No running tx found, please only store in context of an PB-transaction, to avoid side-effects - e.g. when rollback of complex objects
>>
> 
> It seems you lookup the broker instance before you start the 
> UserTransaction. In this case OJB can't synchronize the broker instance 
> with the tx. Please create the broker instance after the UserTransaction 
> starts and see what happens.
> 
> regards,
> Armin
> 
> 
>> Now, it appears to me that the broker.store() is not going through the transaction. Am I doing something wrong??
>>  
>> Also, a very strange thing happened today. I had a large amount of data to store and it was taking a long time and the transaction timed out after 120 seconds. Is this possibly because the user transaction started and none of the broker store calls are going through it. BUT, the strangest thing I have found is if any error occurs, the store calls ARE rolling back, so they are part of SOME transaction. Also, where is the 120 seconds setting coming from? I thought transactions are not supposed to time out during activity!
>>  
>> This is getting very confusing. Can anyone throw some light on my situation? Any help is greatly appreciated. Thanks.
>>  
>> Regards,
>> -Vamsi
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Help needed for OJB transactions

Posted by Vamsi Atluri <vk...@yahoo.com>.
Hi Armin,
 
Thanks a lot for your response. Currently, my code looks like this:
 
javax.transaction.UserTransaction userTx = null;
PersistenceBroker broker = null;

try {
    InitialContext initCtx = new InitialContext();
    userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
    userTx.begin();

    broker = PersistenceBrokerFactory.defaultPersistenceBroker();
    
    broker.store(objA);
    broker.store(objB);
    broker.deleteByQuery(someQuery);
    broker.store(objC);
    
    userTx.commit();
} catch(Exception e) {
    userTx.rollback();
} finally {
    if(null != broker) {
        broker.close();
    }
}
 
Now, the warning message I reported before doesn't occur on each store call anymore. However, whenever there is an error and I attempt a transaction roll back, I get this:
 
[org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl$PersistenceBrokerSyncImpl] ERROR: Abort PB-tx, status of JTA tx is STATUS_ROLLEDBACK
 
Why would this happen? Any ideas? Any help is greatly appreciated. 
 
Thanks and regards,
-Vamsi

----- Original Message ----
From: Armin Waibel <ar...@apache.org>
To: OJB Users List <oj...@db.apache.org>
Sent: Thursday, May 4, 2006 12:45:28 PM
Subject: Re: Help needed for OJB transactions


Hi Vamsi,

Vamsi Atluri wrote:
> Hello all,
>  
> I am having problems with OJB transactions. I am currently using OJB1.0.1 on WSAD 5.1.2 using JDK 1.3.1.
>  
> My settings and code are as follows:
>  
> useAutoCommit="0" 
> ignoreAutoCommitExceptions="false"
>  
> PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
> ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
>  
> And the code looks as follows(I am using WSAD 5.1.2):
>  
> javax.transaction.UserTransaction userTx = null;
> try {
>     InitialContext initCtx = new InitialContext();
>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>     userTx.begin();
>     
>     broker.store(objA);
>     broker.store(objB);
>     broker.deleteByQuery(someQuery);
>     broker.store(objC);
>     
>     userTx.commit();
> } catch(Exception e) {
>     userTx.rollback();
> }
>  
> But whenever I am calling broker.store(), I am getting the following warning on the console:
>  
> [org.apache.ojb.broker.core.PersistenceBrokerImpl] WARN: No running tx found, please only store in context of an PB-transaction, to avoid side-effects - e.g. when rollback of complex objects
>

It seems you lookup the broker instance before you start the 
UserTransaction. In this case OJB can't synchronize the broker instance 
with the tx. Please create the broker instance after the UserTransaction 
starts and see what happens.

regards,
Armin


> Now, it appears to me that the broker.store() is not going through the transaction. Am I doing something wrong??
>  
> Also, a very strange thing happened today. I had a large amount of data to store and it was taking a long time and the transaction timed out after 120 seconds. Is this possibly because the user transaction started and none of the broker store calls are going through it. BUT, the strangest thing I have found is if any error occurs, the store calls ARE rolling back, so they are part of SOME transaction. Also, where is the 120 seconds setting coming from? I thought transactions are not supposed to time out during activity!
>  
> This is getting very confusing. Can anyone throw some light on my situation? Any help is greatly appreciated. Thanks.
>  
> Regards,
> -Vamsi

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org

Re: Help needed for OJB transactions

Posted by Armin Waibel <ar...@apache.org>.
Hi Vamsi,

Vamsi Atluri wrote:
> Hello all,
>  
> I am having problems with OJB transactions. I am currently using OJB1.0.1 on WSAD 5.1.2 using JDK 1.3.1.
>  
> My settings and code are as follows:
>  
> useAutoCommit="0" 
> ignoreAutoCommitExceptions="false"
>  
> PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
> ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
>  
> And the code looks as follows(I am using WSAD 5.1.2):
>  
> javax.transaction.UserTransaction userTx = null;
> try {
>     InitialContext initCtx = new InitialContext();
>     userTx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
>     userTx.begin();
>     
>     broker.store(objA);
>     broker.store(objB);
>     broker.deleteByQuery(someQuery);
>     broker.store(objC);
>     
>     userTx.commit();
> } catch(Exception e) {
>     userTx.rollback();
> }
>  
> But whenever I am calling broker.store(), I am getting the following warning on the console:
>  
> [org.apache.ojb.broker.core.PersistenceBrokerImpl] WARN: No running tx found, please only store in context of an PB-transaction, to avoid side-effects - e.g. when rollback of complex objects
>

It seems you lookup the broker instance before you start the 
UserTransaction. In this case OJB can't synchronize the broker instance 
with the tx. Please create the broker instance after the UserTransaction 
starts and see what happens.

regards,
Armin


> Now, it appears to me that the broker.store() is not going through the transaction. Am I doing something wrong??
>  
> Also, a very strange thing happened today. I had a large amount of data to store and it was taking a long time and the transaction timed out after 120 seconds. Is this possibly because the user transaction started and none of the broker store calls are going through it. BUT, the strangest thing I have found is if any error occurs, the store calls ARE rolling back, so they are part of SOME transaction. Also, where is the 120 seconds setting coming from? I thought transactions are not supposed to time out during activity!
>  
> This is getting very confusing. Can anyone throw some light on my situation? Any help is greatly appreciated. Thanks.
>  
> Regards,
> -Vamsi

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org