[wildfly-dev] The EJB client and remote JTA transaction propagation

David M. Lloyd david.lloyd at redhat.com
Fri Jan 29 13:27:16 EST 2016


That's an interesting idea.  So in effect, the remote EJB would tell the 
caller "you sent me a transaction ID, but in the end, I didn't use it"? 
  I would need to think about how this might work in the presence of 
multiple concurrent invocations on the same transaction.

Either way though, I think it would still be beneficial for clients to 
be able to explicitly annotate a client method (or otherwise establish a 
policy) such that it causes transactions to be propagated (or not), or 
to enforce transaction-related preconditions.  The interceptor that 
implements this feature doesn't actually have protocol awareness: it 
just examines the current environment, and decides whether to attach the 
transaction to the invocation context.

On 1/29/16 10:42 AM, Tom Jenkinson wrote:
> One option that I would favour is to go down the JTS route where the
> subordinate calls back on the parent to tell it to register it in the
> transaction. This could be a new JBoss Remoting API that I can invoke
> from Narayana. The call would not necessarily be a remote call, it would
> invoke back into the JBR transport to tell it that when it returns to
> the parent it needs to enlist (or not).
>
> On 29 January 2016 at 15:47, David M. Lloyd <david.lloyd at redhat.com
> <mailto:david.lloyd at redhat.com>> wrote:
>
>     As you may know, WildFly supports a feature wherein an EJB client which
>     is invoking an EJB on a remote server has the option to propagate its
>     local transaction to the remote server, treating the remote server as a
>     subordinate and coordinating the transaction's two-phase commit among
>     the resultant graph of servers.  This feature has always been limited in
>     that, when enabled, transactions are always propagated, regardless of
>     the peer EJB's transaction policy, or of whether the peer even has a
>     transaction manager.
>
>     So, for the invocation rework which I anticipate will be included in
>     WildFly 11, I've introduced a new client-side annotation intended to be
>     associated with the EJB interface which informs the client library what
>     to do for transaction propagation for that interface.  In addition, I
>     intend to configuration strategies which will allow the default mode to
>     be specified in various ways (per-thread, globally, and by target
>     interface/method all come to mind), for cases where the EJB's remote
>     interface cannot be easily modified for some reason.  I expect to also
>     broaden these configuration strategies to apply to all client-side EJB
>     interface/methods configuration items [3].
>
>     The first part of this change is the addition of a new annotation called
>     @ClientTransaction [1], which accepts as a value an enum called
>     ClientTransactionPolicy [2].  The latter specifies whether a local
>     transaction is required or forbidden for the method or interface, and
>     also specifies whether the transaction is propagated or not propagated.
>
>     I've added copious amounts of JavaDoc in order to establish exactly what
>     the behavior of each mode is, as well as to specify how each mode
>     interacts with the various modules that are configured via the standard
>     javax.ejb.TransactionAttributeType enum.
>
>     [1]
>     https://github.com/jbossas/jboss-ejb-client/blob/master/src/main/java/org/jboss/ejb/client/annotation/ClientTransaction.java
>     [2]
>     https://github.com/jbossas/jboss-ejb-client/blob/master/src/main/java/org/jboss/ejb/client/annotation/ClientTransactionPolicy.java
>     [2] (raw)
>     https://raw.githubusercontent.com/jbossas/jboss-ejb-client/master/src/main/java/org/jboss/ejb/client/annotation/ClientTransactionPolicy.java
>     [3] for a list, see:
>     https://github.com/jbossas/jboss-ejb-client/tree/master/src/main/java/org/jboss/ejb/client/annotation
>
>     --
>     - DML
>     _______________________________________________
>     wildfly-dev mailing list
>     wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
>


-- 
- DML


More information about the wildfly-dev mailing list