@Override
  public CompositeData[] browse(String filterStr) throws Exception {
    checkStarted();

    clearIO();
    try {
      int pageSize =
          addressSettingsRepository
              .getMatch(queue.getName().toString())
              .getManagementBrowsePageSize();
      int currentPageSize = 0;
      ArrayList<CompositeData> c = new ArrayList<>();
      Filter filter = FilterImpl.createFilter(filterStr);
      queue.flushExecutor();
      try (LinkedListIterator<MessageReference> iterator = queue.totalIterator()) {
        while (iterator.hasNext() && currentPageSize++ < pageSize) {
          MessageReference ref = iterator.next();
          if (filter == null || filter.match(ref.getMessage())) {
            c.add(OpenTypeSupport.convert(ref));
          }
        }
        CompositeData[] rc = new CompositeData[c.size()];
        c.toArray(rc);
        return rc;
      }
    } catch (ActiveMQException e) {
      throw new IllegalStateException(e.getMessage());
    } finally {
      blockOnIO();
    }
  }
  @Override
  public List<PagingStore> reloadStores(
      final HierarchicalRepository<AddressSettings> addressSettingsRepository) throws Exception {
    File[] files = directory.listFiles();

    if (files == null) {
      return Collections.<PagingStore>emptyList();
    } else {
      ArrayList<PagingStore> storesReturn = new ArrayList<>(files.length);

      for (File file : files) {

        final String guid = file.getName();

        final File addressFile = new File(file, PagingStoreFactoryNIO.ADDRESS_FILE);

        if (!addressFile.exists()) {
          ActiveMQServerLogger.LOGGER.pageStoreFactoryNoIdFile(
              file.toString(), PagingStoreFactoryNIO.ADDRESS_FILE);
          continue;
        }

        BufferedReader reader =
            new BufferedReader(new InputStreamReader(new FileInputStream(addressFile)));

        String addressString;

        try {
          addressString = reader.readLine();
        } finally {
          reader.close();
        }

        SimpleString address = new SimpleString(addressString);

        SequentialFileFactory factory = newFileFactory(guid);

        AddressSettings settings = addressSettingsRepository.getMatch(address.toString());

        PagingStore store =
            new PagingStoreImpl(
                address,
                scheduledExecutor,
                syncTimeout,
                pagingManager,
                storageManager,
                factory,
                this,
                address,
                settings,
                executorFactory.getExecutor(),
                syncNonTransactional);

        storesReturn.add(store);
      }

      return storesReturn;
    }
  }
  @Override
  public String getDeadLetterAddress() {
    checkStarted();

    clearIO();
    try {
      AddressSettings addressSettings = addressSettingsRepository.getMatch(address);

      if (addressSettings != null && addressSettings.getDeadLetterAddress() != null) {
        return addressSettings.getDeadLetterAddress().toString();
      }
      return null;
    } finally {
      blockOnIO();
    }
  }