docs: @Override
      public Object create(String application,
                           String module,
                           String beanName,
                           String interfaceName)
                      throws EJBException, RemoteException
      {
          if (application == null)
              throw new IllegalArgumentException("Application name not specified");
          if (module == null)
              throw new IllegalArgumentException("Module name not specified");
          if (!module.endsWith(".jar") && !module.endsWith(".war"))
              throw new IllegalArgumentException("Module must be a .jar or .war file");
          if (beanName == null)
              throw new IllegalArgumentException("Bean name not specified");
          if (interfaceName == null)
              throw new IllegalArgumentException("Interface name not specified");
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "create : application = " + application +
                           ", module = " + module +
                           ", bean = " + beanName +
                           ", interface = " + interfaceName);
  
          Object retObj = null;
          EJSHome home = null;
          J2EEName j2eeName = null;
  
          // -----------------------------------------------------------------------
          // First - find the bean home (EJSHome) based on what is known
          // -----------------------------------------------------------------------
  
          try
          {
              // This is ejb-link with a specified jar file, so look in the
              // specified module only.
              j2eeName = j2eeNameFactory.create(application, module, beanName);
              home = (EJSHome) homeOfHomes.getHome(j2eeName);
  
              if (home == null)
              {
                  // Either the ejb ref was configured wrong, and points to a
                  // bean that does not exist, or the bean has been uninstalled.
                  // To be consistent with the other HomeOfHome methods, throw
                  // an EJBNotFoundException, and wrap in EJBException.
                  throw new EJBNotFoundException("EJB named " + beanName +
                                                 " not present in module " +
                                                 module + " of application " +
                                                 application);
              }
          } catch (Throwable ex)
          {
              FFDCFilter.processException(ex, CLASS_NAME + ".create",
                                          "182", this);
              EJBException ejbex = ExceptionUtil.EJBException
                              ("Failure locating " + j2eeName, ex);
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "create: " + ejbex);
              throw ejbex;
          }
  
          if (isTraceOn && tc.isDebugEnabled())
              Tr.debug(tc, "home = " + home.getJ2EEName());
  
          // -----------------------------------------------------------------------
          // Second - determine the interface type, and create the return object
          // -----------------------------------------------------------------------
  
          retObj = create(home, interfaceName);
  
          // Careful not to call toString or it may invoke the customer bean!
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "create : " + retObj.getClass().getName());
  
          return retObj;
      }