docs: private static Object getRemoteBusinessReference(final EJSRemoteWrapper remote,
                                                       final ClassLoader moduleContextClassLoader,
                                                       final Class<?> businessClass) throws NoSuchObjectException {
          Object stub = remote.container.getEJBRuntime().getRemoteReference(remote);
          ClassLoader contextClassLoader = svThreadContextAccessor.getContextClassLoaderForUnprivileged(Thread.currentThread());
  
          try {
              Class<?> contextBusinessClass;
              if (contextClassLoader == moduleContextClassLoader) {
                  contextBusinessClass = businessClass;
              } else {
                  contextBusinessClass = contextClassLoader.loadClass(businessClass.getName());
              }
  
              return PortableRemoteObject.narrow(stub, contextBusinessClass);
          } catch (Exception ex) {
              // If the context class loader cannot be used to narrow the stub and
              // is not the module classloader, then this is probably a pure remote
              // client lookup.  In that case, the context class loader is the WAS
              // server class loader, which will not have application stubs.
              // Attempt the narrow again using the module ClassLoader; if that
              // still fails then return the servant stub directly and hope the ORB
              // does the right thing on the client.
              if (contextClassLoader != moduleContextClassLoader) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "ignoring loadClass/narrow exception, attempting again with bean ClassLoader", ex);
  
                  Object origCL = svThreadContextAccessor.pushContextClassLoaderForUnprivileged(moduleContextClassLoader);
                  try {
                      return PortableRemoteObject.narrow(stub, businessClass);
                  } catch (Exception ex2) {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          Tr.debug(tc, "ignoring loadClass/narrow exception", ex2);
                  } finally {
                      svThreadContextAccessor.popContextClassLoaderForUnprivileged(origCL);
                  }
              } else {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "ignoring loadClass/narrow exception", ex);
              }
          }
  
          return stub;
      }