docs: static JPAExPcBindingContext boundSfsbToExtendedPC(String j2eeName,
                                                         boolean isBMT,
                                                         JPAPuId[] exPcPuIds,
                                                         Set<JPAPuId> unsynchronizedJPAPuIdSet,
                                                         AbstractJPAComponent abstractJPAComponent)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "boundSfsbToExtendedPC : " + j2eeName + ", isBMT=" + isBMT +
                           ", ExPcPuIds=" + Arrays.toString(exPcPuIds) +
                           ", unsynchronizedJPAPuIdSet=" + unsynchronizedJPAPuIdSet);
          if (unsynchronizedJPAPuIdSet == null) {
              unsynchronizedJPAPuIdSet = new HashSet<JPAPuId>();
          }
  
          // The first time an extended-scoped persistence context is created that
          // is for a BMT bean, a TX callback object must be registered to enable
          // proper joinTransaction semantics. The static flag check is just for
          // performance and does not require synchronization as the TX service
          // will ignore duplicate registers.                                d515803
          if (isBMT && !abstractJPAComponent.ivTxCallbackRegistered)
          {
              abstractJPAComponent.registerLTCCallback();
          }
  
          // Obtain the extended-scoped persistence context binding accessor from
          // the JPA Service, which was registered by the EJB Container.     d515803
          JPAExPcBindingContextAccessor exPcAccessor = abstractJPAComponent.getExPcBindingContext(); // F743-18776
  
          // This should never occur, but if it somehow does, then just throw
          // a meaningful exception to let us know what occurred.            d515803
          if (exPcAccessor == null)
          {
              throw new IllegalStateException("The EJB container has not registered an extended-scoped persistence context binding context accessor with the JPA service.  An accessor is required to provide extended-scoped persistence context management for stateful beans.");
          }
  
          JPAExPcBindingContext childContext = null;
  
          if (exPcPuIds != null && exPcPuIds.length > 0)
          {
              childContext = new JPAExPcBindingContext(j2eeName, isBMT, exPcPuIds);
              long childBindId = childContext.getBindId();
  
              // retrieve the caller's binding context from the thread
              JPAExPcBindingContext parentContext = exPcAccessor.getExPcBindingContext();
  
              //d458689 start - clean up warnings.
              boolean notInheritingParent;
              long parentBindId;
              JPAPuId parentPuIds[];
              if (parentContext == null)
              {
                  notInheritingParent = true;
                  parentBindId = -1;
                  parentPuIds = NoPuIds;
              }
              else
              {
                  notInheritingParent = false;
                  parentBindId = parentContext.getBindId();
                  parentPuIds = parentContext.getExPcPuIds();
              }
              // d458689 end
  
              boolean createNewBindingInfo = notInheritingParent || parentPuIds.length == 0;
              for (JPAPuId puId : exPcPuIds)
              {
                  ExPcBindingInfo exPcInfo = null;
                  ExPcBindingKey childBindingKey = new ExPcBindingKey(childBindId, puId);
                  boolean txUnsynchronized = unsynchronizedJPAPuIdSet.contains(puId);
                  if (createNewBindingInfo || !parentHasSameExPc(parentPuIds, puId))
                  {
                      // if "non-SFSB caller or SFSB caller but has no ExPC declared" or
                      // does not have any extended PC in parent SFSB
                      exPcInfo = new ExPcBindingInfo(childBindingKey, txUnsynchronized);
                  } else
                  {
                      ExPcBindingKey parentBindingKey = new ExPcBindingKey(parentBindId, puId);
                      exPcInfo = svExPcBindingMap.get(parentBindingKey);
  
                      // Ensure tx synchronization type is the same.
                      if (!(txUnsynchronized == exPcInfo.isTxUnsynchronized())) {
                          Tr.error(tc, "JPATXSYNC_INCOMPATIBLE_INHERITANCE_CWWJP0045E", puId);
                          String msgTxt = "CWWJP0045E: A superclass has injected an extended persistence context for persistence unit " +
                                          puId +
                                          " that has a synchronization attribute incompatible with an extended persistence context injection in a subclass.";
                          throw new IllegalStateException(msgTxt);
                      }
  
                      exPcInfo.addNewlyBoundSfsb(childBindingKey);
                  }
                  svExPcBindingMap.put(childBindingKey, exPcInfo);
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "Added PuId:" + puId, exPcInfo);
              }
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              {
                  Tr.debug(tc, "[BindId=" + parentBindId + "] --instantiate--> [BindId="
                               + childBindId + "]  exPcBindingMap size=" + svExPcBindingMap.size(),
                           toStringPuIds("ExPC declared in caller component", parentPuIds),
                           toStringPuIds("ExPC declared in callee component", exPcPuIds),
                           svExPcBindingMap);
              }
          } else
          {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "No ExPc processing is needed.");
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "boundSfsbToExtendedPC : " +
                          (childContext != null ? childContext.thisToString() : "null"));
  
          return childContext;
      }