code: private void invokeSessionSynchMethod(Method method, Object[] parameters)
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isDebugEnabled())
          {
              StringBuilder traceMsg = new StringBuilder("invoking session synchronization method : ");
              traceMsg.append(method.getName());
              if (parameters != null && parameters.length > 0) {
                  traceMsg.append("(").append(parameters[0]).append(")");
              }
              Tr.debug(tc, traceMsg.toString());
          }
  
          try
          {
              method.invoke(ivEjbInstance, parameters);
          } catch (IllegalArgumentException ex)
          {
              // This should never happen... log useful info and re-throw
              FFDCFilter.processException(ex, CLASS_NAME + ".invokeSessionSynchMethod",
                                          "601", new Object[] { this, method,
                                                               ivEjbInstance, parameters });
              throw ex;
          } catch (IllegalAccessException ex)
          {
              // This should never happen... log useful info and re-throw
              FFDCFilter.processException(ex, CLASS_NAME + ".invokeSessionSynchMethod",
                                          "610", new Object[] { this, method,
                                                               ivEjbInstance, parameters });
              throw ExceptionUtil.EJBException
                              ("Failure invoking session synchronization method " + method, ex);
          } catch (InvocationTargetException ex)
          {
              FFDCFilter.processException(ex, CLASS_NAME + ".invokeSessionSynchMethod",
                                          "618", new Object[] { this, method,
                                                               ivEjbInstance, parameters });
              // To make this consistent with the interface, the cause will be
              // extracted and re-thrown; which should be a RuntimeException.
              Throwable cause = ex.getCause();
              if (cause instanceof RuntimeException) {
                  throw (RuntimeException) cause;
              }
              if (cause instanceof Error) {
                  throw (Error) cause;
              }
              throw ExceptionUtil.EJBException
                              ("Failure invoking session synchronization method " + method, ex);
          }
      }
docs: F743-25855