As part of the unified invoker refactor, am working on moving the marshalling of the transaction out of the invoker itself and into a marshaller. I see that in the case of a ClientUserTransaction, it actually sets itself as the TransactionPropagationContextFactory on the JRMPInvokerProxy when it is created. Tracing up the call stack, this seems to happen when the ClientUserTransactionService is started or when getObjectInstance() is called on ClientUserTransactionObjectFactory.
My question is when does either of these two cases happen? Is this the only case in which I need to have a TransactionPropagationContextFactory set in the invoker proxy or are there others? Is there a better way to marshall and propagate the transaction to the server side other than using the current approach of calling setTransactionPropagationContext() on the MarshalledInvocation object?
Dealing with transaction marshalling/unmarshalling needs to be pulled out of all invokers. This should be handled by the new marshalling layer and the marshallers for the various (javax.transaction.Transaction, transport) keys installed by the transaction manager service.