docs: @Override
      public void merge(PersistenceContext annotation, Class<?> instanceClass, Member member) throws InjectionException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "merge : " + annotation + ", " + instanceClass + ", " + member);
  
          String thisUnitName = getPuName();
  
          // Only need to check values if not overridden by XML.             d662814
          if (!ivPuFromXML) {
              String mergedUnitName = annotation.unitName();
              if (mergedUnitName != null && mergedUnitName.length() > 0) {
                  if (!isComplete() && (thisUnitName == null || thisUnitName.length() == 0)) {
                      setPuName(mergedUnitName);
                  } else if (!mergedUnitName.equals(thisUnitName)) {
                      // Error - conflicting persistence unit specified         d662814
                      Tr.error(tc, "CONFLICTING_ANNOTATION_VALUES_CWWJP0042E",
                               ivNameSpaceConfig.getDisplayName(),
                               ivNameSpaceConfig.getModuleName(),
                               ivNameSpaceConfig.getApplicationName(),
                               "unitName",
                               "@PersistenceContext",
                               "name",
                               getJndiName(),
                               thisUnitName,
                               mergedUnitName);
                      String exMsg = "The " + ivNameSpaceConfig.getDisplayName() +
                                     " bean in the " + ivNameSpaceConfig.getModuleName() +
                                     " module of the " + ivNameSpaceConfig.getApplicationName() +
                                     " application has conflicting configuration data" +
                                     " in source code annotations. Conflicting " +
                                     "unitName" + " attribute values exist for multiple " +
                                     "@PersistenceContext" + " annotations with the same " +
                                     "name" + " attribute value : " + getJndiName() +
                                     ". The conflicting " + "unitName" +
                                     " attribute values are " + thisUnitName +
                                     " and " + mergedUnitName + ".";
                      throw new InjectionConfigurationException(exMsg);
                  }
              }
          }
  
          // Only need to check values if not overridden by XML.             d662814
          if (!ivTypeFromXML) {
              // If not set from XML, then just use the value from the annotation,
              // note that even if not set in XML, the 'this' value will be the
              // default of 'Transaction'. Also, if multiple annotations are present,
              // then use 'Extended' if any one of them has specified it.
              Boolean mergedExtendedType = annotation.type() == PersistenceContextType.EXTENDED;
              if (!isComplete() && ivExtendedType == null) {
                  ivExtendedType = mergedExtendedType;
              }
          }
  
          if (!ivSynchronizationFromXML) {
              // If not set from XML, then just use the value from the annotation.
              boolean mergedUnsynchronized = ivAttributeAccessor.isUnsynchronized(annotation);
              if (!isComplete() && ivUnsynchronized == null) {
                  ivUnsynchronized = mergedUnsynchronized;
              } else if (ivUnsynchronized == null || ivUnsynchronized.booleanValue() != mergedUnsynchronized) {
                  // Error - conflicting persistence unit specified         d662814
                  Tr.error(tc, "CONFLICTING_ANNOTATION_VALUES_CWWJP0042E",
                           ivNameSpaceConfig.getDisplayName(),
                           ivNameSpaceConfig.getModuleName(),
                           ivNameSpaceConfig.getApplicationName(),
                           "synchronization",
                           "@PersistenceContext",
                           "name",
                           getJndiName(),
                           getSynchronizationName(ivUnsynchronized),
                           getSynchronizationName(mergedUnsynchronized));
                  String exMsg = "The " + ivNameSpaceConfig.getDisplayName() +
                                 " bean in the " + ivNameSpaceConfig.getModuleName() +
                                 " module of the " + ivNameSpaceConfig.getApplicationName() +
                                 " application has conflicting configuration data" +
                                 " in source code annotations. Conflicting " +
                                 "synchronization" + " attribute values exist for multiple " +
                                 "@PersistenceContext" + " annotations with the same " +
                                 "name" + " attribute value : " + getJndiName() +
                                 ". The conflicting " + "synchronization" +
                                 " attribute values are " + getSynchronizationName(ivUnsynchronized) +
                                 " and " + getSynchronizationName(mergedUnsynchronized) + ".";
                  throw new InjectionConfigurationException(exMsg);
              }
          }
  
          // Merge annotation properties to DD, DD properties override annotation
          // properties and make sure a PersistenceProperty[] object is returned.
          Properties mergedProperties = getPersistenceProperties(annotation);
          if (!isComplete() && !mergedProperties.isEmpty()) {
              mergedProperties.putAll(ivProperties);
              ivProperties = mergedProperties;
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "merge", this);
      }