docs: public Object getAggregateLocalWrapper()
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (ivBusinessLocal == null) {
              J2EEName j2eeName = ivBeanId.getJ2EEName();
              throw new EJBException("The " + j2eeName.getComponent() + " bean in the " +
                                     j2eeName.getModule() + " module of the " + j2eeName.getApplication() +
                                     " application has no business local interfaces.");
          }
  
          if (ivBusinessLocal.length == 1)
          {
              if (isTraceOn && tc.isDebugEnabled())
                  Tr.debug(tc, "getAggregateLocalWrapper: single interface: " +
                               Util.identity(ivBusinessLocal[0]));
              return ivBusinessLocal[0];
          }
  
          EJSHome home = ivBMD.getHome();
          String wrapperClassName = null;
  
          try
          {
              // Synchronize on the BMD (where the class to be generated is held) to
              // insure multiple threads do not attempt to generate it concurrently.
              synchronized (ivBMD)
              {
                  if (ivBMD.ivAggregateLocalImplClass == null)
                  {
                      if (isTraceOn && tc.isDebugEnabled())
                          Tr.debug(tc, "getAggregateLocalWrapper: generating wrapper class for " +
                                       ivBMD.j2eeName);
  
                      // Note, both component and business interfaces are required on
                      // the call to DeploymentUtil, as the returned list of methods
                      // is used to determine the method ids.                   d677413
                      Method[] localBeanMethods = DeploymentUtil.getMethods(ivBMD.localInterfaceClass,
                                                                            ivBMD.ivBusinessLocalInterfaceClasses);
                      wrapperClassName = NameUtil.getAggregateLocalImplClassName(ivBMD.ivBusinessLocalImplClasses[0].getName());
  
                      ivBMD.ivAggregateLocalImplClass = JITDeploy.generateEJBWrapper
                                      (ivBMD.classLoader,
                                       wrapperClassName,
                                       ivBMD.ivBusinessLocalInterfaceClasses,
                                       (ivBMD.ivLocalBean ? EJBWrapperType.LOCAL_BEAN : EJBWrapperType.BUSINESS_LOCAL),
                                       localBeanMethods,
                                       ivBMD.localMethodInfos,
                                       ivBMD.enterpriseBeanClassName,
                                       ivBMD.j2eeName.toString(),
                                       ivBMD.container.getEJBRuntime().getClassDefiner()); // F70650
                      wrapperClassName = null;
                  }
              }
  
              BusinessLocalWrapper bLocal = null;
              Object wrapper = ivBMD.ivAggregateLocalImplClass.newInstance();
  
              // For No-Interface view (LocalBean), the 'wrapper' will not
              // subclass EJSWrapperBase, but the EJB itself, so a separate
              // EJSWrapperBase must be created to hold the metadata and
              // associated with the real wrapper.
              if (ivBMD.ivLocalBean)
              {
                  try {
                      // Obtain the reflection Fields from the generated wrapper   d679175
                      Field wrapperField = AccessController.doPrivileged(new PrivilegedExceptionAction<Field>() {
                          @Override
                          public Field run() throws NoSuchFieldException {
                              return ivBMD.ivAggregateLocalImplClass.getDeclaredField(LOCAL_BEAN_WRAPPER_FIELD);
                          }
                      });
  
                      wrapperField.setAccessible(true);
  
                      bLocal = new BusinessLocalWrapper();
                      wrapperField.set(wrapper, bLocal);
  
                  } catch (PrivilegedActionException paex) {
                      Throwable cause = paex.getCause();
                      if (cause instanceof NoSuchFieldException) {
                          throw (NoSuchFieldException) cause;
                      }
                      throw new Error(cause);
                  }
  
              }
              // Otherwise, normal wrapper - subclasses BusinessLocalWrapper
              else
              {
                  bLocal = (BusinessLocalWrapper) wrapper;
              }
  
              bLocal.beanId = ivBeanId;
              bLocal.bmd = ivBMD;
              bLocal.methodInfos = ivBMD.localMethodInfos;
              bLocal.methodNames = ivBMD.localMethodNames;
              bLocal.container = home.container;
              bLocal.wrapperManager = home.wrapperManager;
              bLocal.ivPmiBean = home.pmiBean;
              bLocal.ivCommon = this;
              bLocal.isManagedWrapper = false;
              bLocal.ivInterface = WrapperInterface.BUSINESS_LOCAL;
              bLocal.ivBusinessInterfaceIndex = EJSWrapperBase.AGGREGATE_LOCAL_INDEX;
  
              if (isTraceOn && tc.isDebugEnabled())
                  Tr.debug(tc, "getAggregateLocalWrapper: " + Util.identity(wrapper));
  
              return wrapper;
          } catch (Exception ex)
          {
              FFDCFilter.processException(ex, CLASS_NAME + ".getAggregateLocalWrapper",
                                          "970", this);
              if (wrapperClassName != null)
              {
                  throw ExceptionUtil.EJBException
                                  ("Failed to generate aggregate local reference class " +
                                   wrapperClassName + " for bean " + ivBMD.j2eeName + " : ", ex);
              }
  
              throw ExceptionUtil.EJBException
                              ("Failed to create aggregate local reference for bean " +
                               ivBMD.j2eeName + " : ", ex);
          }
      }