docs: protected void recoverNeighbours() throws MessageStoreException, SIResourceException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "recoverNeighbours");
      
      NonLockingCursor cursor = null;
      
      try 
      {   
        cursor 
          = _proxyHandler.newNonLockingItemStreamCursor(
            new ClassEqualsFilter(Neighbour.class));
    
        AbstractItem item = null;
        while ((item = cursor.next()) != null)
        {
          Neighbour neighbour = null;
            neighbour = (Neighbour)item; 
          
          // Add the Neighbour into the list of recovered Neighbours
          synchronized(_recoveredNeighbours)
          {
            _recoveredNeighbours.put(neighbour.getUUID(), neighbour);
          }
            
          // Setup the non persistent state for this Neighbour.
          neighbour.intialiseNonPersistent(_proxyHandler, this);
            
          // Ask the neighbour to recover its subscriptions.
          neighbour.recoverSubscriptions(_proxyHandler);
    
          // Check that the Bus matches the current Bus.
          if (!neighbour.getBusId().equals(_proxyHandler.getMessageProcessor().getMessagingEngineBus()))
          {        
            // This neighbour lives on a Foreign Bus.
            // Make sure this link still exists before putting it into the neighbours list
            
            ForeignBusDefinition bus = _proxyHandler.getMessageProcessor().getForeignBus(neighbour.getBusId());
            // If there is no bus the bus definition will be null
            if (bus != null)
            {
              try
              {
                //see defect 295990
                //This is a bit of a hack, but there is a window wherby the link could have
                //been deleted but not actually removed before the ME restarted.
                //We can examine the link's locality set to ascertain whether 
                //this link is really 'there' or not.
                VirtualLinkDefinition vLinkDef = bus.getLink();
                if( vLinkDef!=null 
                    && vLinkDef.getLinkLocalitySet()!=null 
                    && vLinkDef.getLinkLocalitySet().contains(neighbour.getUUID().toString()))
                {
                  try
                  {              
                    addNeighbour(neighbour.getUUID(), neighbour.getBusId(), null);
                  }
                  catch (SIException e)
                  {
                    // FFDC
                    FFDCFilter.processException(
                      e,
                      "com.ibm.ws.sib.processor.proxyhandler.Neighbours.recoverNeighbours",
                      "1:1534:1.113",
                      this);
                        
                    final SIErrorException finalE = new SIErrorException(
                      nls.getFormattedMessage(
                        "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                        new Object[] {
                          "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
                          "1:1542:1.113",
                          e },
                        null),
                      e);
                        
                    SibTr.exception(tc, finalE);
                    SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                      new Object[] {
                        "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
                        "1:1551:1.113",
                        e });
                    
                    if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "recoverNeighbours", finalE);
            
                    throw finalE;
                  }
                }
                else
                {
                  //the link's locality set was not correct
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                    SibTr.debug(tc, "Link no longer exists " + neighbour.getBusId() + " for neighbour " + neighbour.getUUID());              
                }
              }
              catch(SIBExceptionNoLinkExists e)
              {
                // No FFDC code needed
                //There is no link whatsoever, this probably means that the foreign bus still 
                // exists, but the link has been deleted
                  
                if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "Link no longer exists " + neighbour.getBusId() + " for neighbour " + neighbour.getUUID() + " : " + e);
              }
            }  
            else
            {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                SibTr.debug(tc, "Bus no longer exists " + neighbour.getBusId() + " for neighbour " + neighbour.getUUID());          
            }
          } 
        }//end while
      }
      finally
      {
        if (cursor != null)
          cursor.finished();
      }
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "recoverNeighbours");    
    }