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

David M. Lloyd david.lloyd at redhat.com
Fri Jan 29 10:47:38 EST 2016

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.

[2] (raw) 
[3] for a list, see: 


More information about the wildfly-dev mailing list