code: protected SIDestinationAddress getProducerSIDestinationAddress() throws JMSException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "getProducerSIDestinationAddress");
  
          if (producerDestinationAddress == null) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "No cached value");
  
              StringArrayWrapper frp = (StringArrayWrapper) properties.get(FORWARD_ROUTING_PATH);
              if (frp != null) {
                  // There is an actual forward routing path to investigate.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Obtain from the frp data.");
                  producerDestinationAddress = frp.getProducerSIDestAddress();
              }
  
              if (producerDestinationAddress == null) {
  
                  // Set up the producer address from the big destination info.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Either FRP was empty, or no FRP at all - create from big dest info.");
  
                  // Establish whether this producer should be scoped to a local queue point only.
                  boolean localOnly = isLocalOnly();
  
                  // This variable should be initialised already since it is set up in the static
                  // init for the class, which must have been run by the time we get to access it.
                  producerDestinationAddress = JmsMessageImpl.destAddressFactory.createSIDestinationAddress(getProducerDestName(), localOnly, getBusName());
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "getProducerSIDestinationAddress", producerDestinationAddress);
          return producerDestinationAddress;
      }
docs: This method provides access to the cached SIDestinationAddress object for
  this JmsDestination.
  
  Parts of the JMS implementation that wish to obtain an SIDestinationAddress
  object for use with the coreSPI should call this method rather than creating
  their own new one in situations where it is might be possible to reuse the
  object.