docs: private ArrayList<String> generateDefaultEjbBindings(String interfaceName)
                      throws NameAlreadyBoundException // d457053.1
      {
          ArrayList<String> defaultJNDINames = new ArrayList<String>(2);
          StringBuilder sb = new StringBuilder(256);
  
          if (ivDefaultJNDIPrefix == null)
          {
              // Add the context specific (local/remote) default binding prefix first.
              if (ivContextPrefix != null)
                  sb.append(ivContextPrefix);
  
              // Then add the component-id or j2eename
              if (ivHomeRecord.bmd.ivComponent_Id != null) { // d445912
                  sb.append(ivHomeRecord.bmd.ivComponent_Id).append("#"); // d445912
              } else {
                  sb.append(ivHomeRecord.j2eeName.getApplication()).append("/");
                  sb.append(ivHomeRecord.j2eeName.getModule()).append("/");
                  sb.append(ivHomeRecord.j2eeName.getComponent()).append("#"); // d443702
              }
  
              // cache away the string we just built up so we can resuse it again the next time
              ivDefaultJNDIPrefix = sb.toString();
          }
          else
          {
              // Use the previously cached prefix
              sb.append(ivDefaultJNDIPrefix);
          }
  
          sb.append(interfaceName); // d443702
  
          String longBindingName = sb.toString();
  
          // Add to the list of jndiNames to be returned
          defaultJNDINames.add(longBindingName);
          addToServerContextBindingMap(interfaceName, longBindingName);
          ivEjbContextBindingMap.put(interfaceName, longBindingName);
  
          // Add the short default (convienence) bindings if not explicitly disabled.
          if (ivHomeRecord.shortDefaultBindingsEnabled())
          {
              // Determine if this interface (short binding) has already been bound
              // by another EJB.
              BindingData bdata = ivServerContextBindingMap.get(interfaceName);
  
              // For both cases, add to the ShortDefaultName map so that it can
              // be unbound during application stop, and to the server wide
              // context map (so other ambiguous references may be found).
              addToServerContextBindingMap(interfaceName);
              ivEjbContextShortDefaultJndiNames.add(interfaceName);
  
              if (bdata == null)
              {
                  // Has not been bound yet, so just bind this EJB.
                  defaultJNDINames.add(interfaceName);
              }
              else if (bdata.ivExplicitBean == null) // d457053.1
              {
                  // Has already been bound, so add an AmbiguousEJBReference to
                  // the ambiguous map, which will be bound later.
                  addAmbiguousShortDefaultBindingName(interfaceName);
              }
              else
              {
                  // There is an explicit binding, so just ignore this
                  // short-form default (convenience) binding.               d457053.1
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "generateDefaultEjbBindings: " + interfaceName +
                                   " short-form default overridden : " + bdata.ivExplicitBean);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, "generateDefaultEjbBindings: " + defaultJNDINames);
  
          return defaultJNDINames;
      }