David,

That test is almost identical to what I did in my code. The difference is
that I don't explicitly access the transaction manager like you do. I use
blueprint to make my method transactional (with the "Requires" transaction
attribute) and I configure the transaction timeout via Config Admin.

I never doubted that Geronimo's transaction timeout worked but I wonder if
Aries is setting the properties correctly. I will make a test where I sleep
for longer than the default timeout (600 s) to see if that would trigger an
exception. If so, then the problem is how to configure the timeout
correctly.

/Bengt

2012/1/13 David Jencks <[email protected]>

>
> On Jan 12, 2012, at 11:08 PM, Bengt Rodehav wrote:
>
> David, do you think I should create a JIRA for this? I don't know for sure
> whether I'm doing anything wrong or not but I think it makes sense to add
> an integration test for the transaction timeout anyway.
>
>
> I looked and geronimo has a timeout test like this:
>
>     public void testTimeout() throws Exception
>     {
>         long timeout = tm.getTransactionTimeoutMilliseconds(0L);
>         tm.setTransactionTimeout((int)timeout/4000);
>         tm.begin();
>         System.out.println("Test to sleep for " + timeout + " millisecs");
>         Thread.sleep(timeout);
>         try
>         {
>             tm.commit();
>             fail("Tx Should get Rollback exception");
>         }catch(RollbackException rex)
>         {
>             // Caught expected exception
>         }
>
>         // Now test if the default timeout is active
>         tm.begin();
>         System.out.println("Test to sleep for " + (timeout/2) + "
> millisecs");
>         Thread.sleep((timeout/2));
>         tm.commit();
>         // Its a failure if exception occurs.
>     }
>
>
> So I tend to think timeout works.  Is what's tested for here what you
> observe in your code?
>
> thanks
> david jencks
>
>
> I'm currently just using one resource manager (SQL Server 2005) which I
> guess means that no transaction log is necessary. Thanks for explaining.
>
> /Bengt
>
> 2012/1/13 David Jencks <[email protected]>
>
>>
>> On Jan 12, 2012, at 1:26 PM, Bengt Rodehav wrote:
>>
>> I took a look at the transaction related itests and I can't see any tests
>> regarding the transaction timeout - they seem to be focused on testing the
>> transaction attributes. Could it be that the transaction timeout has never
>> been tested?
>>
>>
>> probably not in aries since the tm implementation is from geronimo.  I
>> did think there were some osgi tx timeout tests but I dont have access
>> right now.
>>
>>
>> Regarding the transaction log I'm not sure how this is supposed to work -
>> perhaps someone can enlighten me. Shouldn't every transaction be written to
>> a transaction log file?
>>
>>
>> Every successfully prepared transaction with at least two participating
>> resource managers will have a log record written for prepare and another
>> written for commit.  Transaction with only one participant don't need
>> logging.
>>
>> thanks
>> david jencks
>>
>>
>> /Bengt
>>
>> 2012/1/12 Bengt Rodehav <[email protected]>
>>
>>>
>>> David,
>>>
>>> I have verified that the configuration is applied to the transaction
>>> service I just can't see that it has any effect. I guess I can start
>>> debugging but I was hoping to avoid that. Do you know if there are any
>>> integration tests that tests the transaction timeout?
>>>
>>> /Bengt
>>>
>>>
>>> Den torsdagen den 12:e januari 2012 skrev David Jencks<
>>> [email protected]>:
>>>
>>> > I would guess that perhaps your configuration is not actually getting
>>> supplied to the managed service?  If you are running in karaf you can use
>>> confiig:list to make sure config admin is aware of your config.  You might
>>> also want to debug the aries code and make sure that  the configuration is
>>> actually getting supplied to the service.
>>> > david jencks
>>> > On Jan 12, 2012, at 6:36 AM, Bengt Rodehav wrote:
>>> >
>>> > Hello again Alasdair,
>>> > I finally got around to test configuration of Aries Transaction. I
>>> created the following configuration (using
>>> PID org.apache.aries.transaction):
>>> > aries.transaction.timeout=1
>>> > aries.transaction.howl.logFileDir=${karaf.data}/txlog/
>>> > I set the logfile directory as well as the transaction timeout (I
>>> peeked at how they do it in Servicemix). I set the timeout to a low value
>>> in order to test that I actually get a transaction timeout. I also perform
>>> a 5s sleep in a transacted method to force a transaction timeout.
>>> > But, I never get a transaction timeout and I never get a transaction
>>> log file in the "logFileDir" directory. I'm not beginning to fear that my
>>> methods are not transacted. How can I verify this?
>>> > Under what circumstances would a transaction log file be created? I
>>> assumed that it would be created when the first transaction was created.
>>> Or, do I also need to add the following line?
>>> > aries.transaction.recoverable=true
>>> > I've tried that but still no logfile was created.
>>> > I also noticed that the default value for
>>> "aries.transaction.howl.maxBuffers" is 0 while the default value for
>>> "aries.transaction.howl.minBuffers" is 4. Is that correct? At first sight I
>>> would think it should be the other way around.
>>> > /Bengt
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > 2011/12/29 Bengt Rodehav <[email protected]>
>>> >
>>> > Thanks Alasdair - will look into it.
>>> > /Bengt
>>> >
>>> > 2011/12/28 Alasdair Nottingham <[email protected]>
>>> >
>>> > Hi,
>>> > The pid for configuring transactions is "org.apache.aries.transaction".
>>> > Alasdair
>>> >
>>> > On 14 December 2011 14:33, Bengt Rodehav <[email protected]> wrote:
>>> >
>>> > It turned out that my error was not due to the transaction timing out
>>> but to violation of unique constraints. Nevertheless, I would like to know
>>> how to control the transaction timeout in Aries transaction.
>>> > /Bengt
>>> >
>>> > 2011/12/14 Bengt Rodehav <[email protected]>
>>> >
>>> > Thanks for your reply David,
>>> > I'll see if I can figure out the pid although this seems like
>>> something that really needs to be documented in Aries. If the default
>>> timeout is 600 seconds then this is probably not the reason of the errors I
>>> see. I need a time out of about 30 s which then is much less than the
>>> default.
>>> > I have been using MySql but I'm in the process of switching to SQL
>>> Server 2005. MySql worked fine but I started having problems committing the
>>> longer transactions with SQL Server 2005 which caused me to suspect a
>>> transaction timeout. Perhaps the timeout is not propagated to SQL Server
>>> like you hinted.
>>> > /Bengt
>>> >
>>> > 2011/12/14 David Jencks <[email protected]>
>>> >
>>> > Transaction is set up as a managed service factory.  I haven't figured
>>> out exactly how this results in a tm instance without any visible
>>> configuration.
>>> > If you can figure out what is triggering the creation of a tm and the
>>> pid, the property to set is called aries.transaction.timeout and the
>>> default value is 600 (seconds) or 10 minutes.
>>>
>>
>>
>>
>
>

Reply via email to