Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-7838

EJBClient user transaction is not propagated properly to the receiver

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Major
    • None
    • 10.1.0.Final
    • EJB
    • None

    Description

      Setup:

      • WF 10.1.0.Final
      • two deployments, one EAR and one WAR
      • EAR exposes EJB methods (SFSBs and SLSBs)
      • WAR uses wildfly-ejb-client-bom 10.1.0 to call remote EJBs

      Problem:
      The client uses bean-managed transactions. The problem is that transactions are not propagated properly to the EJB side, therefore instead of using the existing BMT, container will use CMT. The flow in detail:

      • LocalEjbReceiver#processInvocation receives an EJBClientInvocationContext
      • EJBClientInvocationContext contains contextData, which was populated by the client. contextData correctly contains the appropriate UserTransactionId
      • processInvocation extracts the transaction Id and puts it into the interceptorContext's context data (NOT into privateData)
      • later in the interceptor chain, control reaches EJBRemoteTransactionPropagatingInterceptor, which is responsible for checking whether there is an user transaction present.
      • it tries to fetch the transaction ID from the interceptorContext's privateData (NOT from contextData)
      • it does not find the userTransaction there

      It looks to me that either EJBRemoteTransactionPropagatingInterceptor should look look for the userTransaction in contextData, or LocalEjbReceiver should put the userTransaction ID into privateData.

      I've attached a patch that fixes the problem for me.

      Attachments

        Activity

          People

            Unassigned Unassigned
            matevarga Mate Varga (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: