docs: private void reconstituteDurableSubscriptions()
                      throws
                      MessageStoreException,
                      SIDiscriminatorSyntaxException,
                      SISelectorSyntaxException,
                      SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "reconstituteDurableSubscriptions");
  
          // First create a filter to locate subscriptions for this destination
          DurableSubscriptionItemStream durableSub = null;
          final SubscriptionStateFilter subStateFilter =
                          new SubscriptionStateFilter();
  
          /*
           * Get a browse cursor on the topicspace itemstream to allow us to search
           * for all the persisted durable sub items. Find the first one.
           */
          NonLockingCursor subCursor =
                          _pubsubMessageItemStream.newNonLockingReferenceStreamCursor(
                                          subStateFilter);
  
          /* Find the first subscription in the itemstream */
          durableSub = (DurableSubscriptionItemStream) subCursor.next();
  
          /* Loop through the persisted durable subscriptions */
          while (durableSub != null)
          {
              //we need to restore this item stream
              durableSub.initializeNonPersistent(_baseDestinationHandler);
              // Increment the count of refStreams on the parentMsgStream 
              _pubsubMessageItemStream.incrementReferenceStreamCount();
  
              boolean valid = checkDurableSubStillValid(durableSub);
              if (valid)
              {
                  // Create a new ConsumerDispatcher for this durable subscription with the
                  // recovered state item
                  configureDurableSubscription(durableSub);
                  //defect 257231
                  //we need to ensure that unrestored msgRefs (due to in-doubt transactions)
                  //are initialized with the CD and RefStream call backs
                  Collection unrestoredMsgCollection =
                                  durableSub.clearUnrestoredMessages();
                  if (unrestoredMsgCollection != null)
                  {
                      Iterator indoubtMessages = unrestoredMsgCollection.iterator();
                      while (indoubtMessages.hasNext())
                      {
                          MessageItemReference itemRef =
                                          (MessageItemReference) _baseDestinationHandler.findById(
                                                          ((Long) indoubtMessages.next()).longValue());
                          if (itemRef != null)
                          {
                              durableSub.registerListeners(itemRef);
                          }
                      }
                  }
              }
  
              /* Get the next subscription in the itemstream */
              durableSub = (DurableSubscriptionItemStream) subCursor.next();
  
          } // Loop round if more subscriptions to recover
  
          subCursor.finished();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "reconstituteDurableSubscriptions");
      }