On 2 Jun 2011, at 15:09, Scott Marlow wrote:
> On 06/02/2011 09:50 AM, Mircea Markus wrote:
>>
>> On 2 Jun 2011, at 13:19, Scott Marlow wrote:
>>
>>> On 06/02/2011 05:31 AM, Mircea Markus wrote:
>>>>
>>>> On 1 Jun 2011, at 20:49, Scott Marlow wrote:
>>>>
>>>>> I posted a message on the as7-dev ml
>>>>>
(
http://lists.jboss.org/pipermail/jboss-as7-dev/2011-May/002254.html),
>>>>> about switching to use the TransactionSynchronizationRegistry.
>>>>>
>>>>> Does Infinispan currently register Transaction synchronization
objects?
>>>> yes
>>>>> Does Infinispan currently register synchronizations via
>>>>> TransactionSynchronizationRegistry (TSR)?
>>>> no, we register synchronizations through
transaction.registerSynchronization
>>>>>
>>>>> I'm trying to get a sense for, what would happen if container
managed
>>>>> (AS7) session beans were registered with the active JTA transaction
via
>>>>> the TSR.
>>>>>
>>>>> If AS7 switches to use the TSR, I think that Infinispan might need
to
>>>>> ensure that it doesn't attempt to register with the TX too late.
>>>> right. One way to go is by making the registration code pluggable.
>>>
>>> I should point out that I believe its only a problem, to call
Transaction.registerSynchronization() after the point, where the ordering cannot be
correct. However, no such checking is performed if no components are registering their
syncs via TransactionSynchronizationRegistry.
>>>
>>> So, another question, how likely would it be, that an application would see
Infinispan registering a sync via Transaction.registerSynchronization(), after the
transaction commit has been initiated?
>> ATM Infinispan allows the registration if the transaction is in one of the
following states: Status.STATUS_ACTIVE || Status.STATUS_PREPARING. If tx is in any other
state the sync won't be registered and a exception is instead sent to the user.
>>>
>>> If Transaction.registerSynchronization() will always be called by Infinispan
before the transaction commits. We shouldn't have to be as concerned about support
for registering the Infinispan syncs with TransactionSynchronizationRegistry.
>>
>>>
>>> If the answer is we aren't sure or Transaction.registerSynchronization()
could happen after the transaction commit has been started, we should have it be
pluggable.
>>
>> From Jonathan's comment[1] I understand that "interposed
Synchronizations must be called after non-interposed ones". That seems to be true
disregarding tx's status. Or am I wrong?
>
> Jonathan also commented here a few minutes ago, with further clarification of the
exact rules. Best to read what he said directly (he described the situation in much
better detail than me).
http://lists.jboss.org/pipermail/jboss-as7-dev/2011-June/002275.html
>
> Copying from his email:
>
> "
> So, the rule for activity in beforeCompletion is:
>
> - a Sync registered via registerSynchronization may call either
registerSynchronization or registerInterposedSynchronization.
>
> - a Sync registered via registerInterposedSynchronization may call only
registerInterposedSynchronization.
> "
Thanks for the clarification. The Syncs we register do not do any subsequent Sync
registration in beforeCompletion so should be on the safe side.
We are planning on switching over to use the TSR level syncs in AS 7.0.
The first part of this change will be in our connection pool management.
Thanks for all the responses about this subject!
Scott