code: @Override
      public synchronized UserTransaction getUserTransaction() {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "getUserTransaction");
  
          // Calling getUserTransaction is not allowed from setMessageDrivenContext
          // per the EJB Specification.                                      d159152
          if ((state == PRE_CREATE)) {
              IllegalStateException ise;
  
              ise = new IllegalStateException("MessageDrivenBean: getUserTransaction " +
                                              "not allowed from state = " +
                                              getStateName(state));
              if (isTraceOn && tc.isDebugEnabled())
                  Tr.exit(tc, "getUserTransaction", ise);
  
              throw ise;
          }
  
          UserTransaction userTransactionWrapper = UserTransactionWrapper.INSTANCE; // d631349
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getUserTransaction", userTransactionWrapper);
          return userTransactionWrapper;
      }
docs: Get user transaction object bean can use to demarcate transactions