docs: @Override
      public void merge(EJB annotation, Class<?> instanceClass, Member member)
                      throws InjectionException
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "merge : " + annotation + ", " + member);
  
          // Calling setInjectionClassType is done for 3 reasons:
          // 1 - to validate the element is assignable as per the spec
          // 2 - to set the Injection Class Type, which may be a subclass of what
          //     is configured in XML and which will be used in resolve
          // 3 - to set the HomeInterface class, if beanInterface extends EJBHome
          //     or EJBLocalHome.
          Class<?> beanInterface = annotation.beanInterface();
          setInjectionClassType(beanInterface); // d668376
  
          // If neither "ejb-link" nor "lookup-name" has been defined in XML,
          // then use the value from annotations. If there are multiple annotations
          // with the same name, then the values must match.            F743-21028.4
          if (!ivBeanNameOrLookupInXml)
          {
              String beanName = annotation.beanName();
              // An empty string is the default and not considered a specified value.
              if (beanName != null && !(beanName.equals("")))
              {
                  if (ivBeanName == null)
                  {
                      ivBeanName = beanName;
                  }
                  else
                  {
                      // If the beanName was found previously on another annotation,
                      // then throw an exception if the current annotation doesn't
                      // have the same beanName value. However, in WAS 7.0, overriding
                      // was allowed by a subclass... so if the current annotation is
                      // on a parent class of where beanName was found... then don't
                      // throw the exception.                                 d638111.1
                      Class<?> beanNameClass = (member != null) ? member.getDeclaringClass()
                                      : Object.class;
                      if (!ivBeanName.equals(beanName) &&
                          (ivBeanNameClass == null ||
                           ivBeanNameClass == beanNameClass ||
                          !beanNameClass.isAssignableFrom(ivBeanNameClass)))
                      {
                          // Error - conflicting beanName values between annotations
                          String component = ivNameSpaceConfig.getDisplayName();
                          Tr.error(tc, "CONFLICTING_ANNOTATION_VALUES_CWNEN0054E",
                                   new Object[] { component,
                                                 ivModule,
                                                 ivApplication,
                                                 "beanName",
                                                 "@EJB",
                                                 "name",
                                                 getJndiName(),
                                                 ivBeanName,
                                                 beanName });
                          String exMsg = "The " + component + " bean in the " +
                                         ivModule + " module of the " + ivApplication +
                                         " application has conflicting configuration data" +
                                         " in source code annotations. Conflicting " +
                                         "beanName" + " attribute values exist for multiple " +
                                         "@EJB" + " annotations with the same " +
                                         "name" + " attribute value : " + getJndiName() +
                                         ". The conflicting " + "beanName" +
                                         " attribute values are " + ivBeanName +
                                         " and " + beanName + ".";
                          throw new InjectionConfigurationException(exMsg);
                      }
                  }
              }
  
              String lookup = annotation.lookup();
              // An empty string is the default and not considered a specified value.
              if (lookup != null && !(lookup.equals("")))
              {
                  if (ivLookup == null)
                  {
                      ivLookup = lookup;
                  }
                  else
                  {
                      if (!(ivLookup.equals(lookup)))
                      {
                          // Error - conflicting lookup values between annotations
                          String component = ivNameSpaceConfig.getDisplayName();
                          Tr.error(tc, "CONFLICTING_ANNOTATION_VALUES_CWNEN0054E",
                                   new Object[] { component,
                                                 ivModule,
                                                 ivApplication,
                                                 "lookup",
                                                 "@EJB",
                                                 "name",
                                                 getJndiName(),
                                                 ivLookup,
                                                 lookup });
                          String exMsg = "The " + component + " bean in the " +
                                         ivModule + " module of the " + ivApplication +
                                         " application has conflicting configuration data" +
                                         " in source code annotations. Conflicting " +
                                         "lookup" + " attribute values exist for multiple " +
                                         "@EJB" + " annotations with the same " +
                                         "name" + " attribute value : " + getJndiName() +
                                         ". The conflicting " + "lookup" +
                                         " attribute values are " + ivLookup +
                                         " and " + lookup + ".";
                          throw new InjectionConfigurationException(exMsg);
                      }
                  }
              }
  
              // It is an error to specify both 'beanName' and 'lookup'. F743-21028.4
              // Unless a binding has been given.                             d661212
              if (ivBeanName != null && ivLookup != null && ivBindingName == null)
              {
                  // Error - conflicting beanName/lookup values
                  String component = ivNameSpaceConfig.getDisplayName();
                  Tr.error(tc, "CONFLICTING_ANNOTATION_VALUES_CWNEN0054E",
                           new Object[] { component,
                                         ivModule,
                                         ivApplication,
                                         "beanName/lookup",
                                         "@EJB",
                                         "name",
                                         getJndiName(),
                                         ivBeanName,
                                         ivLookup });
                  String exMsg = "The " + component + " bean in the " +
                                 ivModule + " module of the " + ivApplication +
                                 " application has conflicting configuration data" +
                                 " in source code annotations. Conflicting " +
                                 "beanName/lookup" + " attribute values exist for multiple " +
                                 "@EJB" + " annotations with the same " +
                                 "name" + " attribute value : " + getJndiName() +
                                 ". The conflicting " + "beanName/lookup" +
                                 " attribute values are " + ivBeanName +
                                 " and " + ivLookup + ".";
                  throw new InjectionConfigurationException(exMsg);
              }
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "merge", this);
      }