@Override public synchronized List<PagingStore> reloadStores(final HierarchicalRepository<AddressSettings> addressSettingsRepository) throws Exception { // We assume the directory list < Integer.MAX_VALUE (this is only a list of addresses). JDBCSequentialFile directoryList = (JDBCSequentialFile) pagingFactoryFileFactory.createSequentialFile(DIRECTORY_NAME); directoryList.open(); int size = ((Long) directoryList.size()).intValue(); ActiveMQBuffer buffer = readActiveMQBuffer(directoryList, size); ArrayList<PagingStore> storesReturn = new ArrayList<>(); while (buffer.readableBytes() > 0) { SimpleString table = buffer.readSimpleString(); JDBCSequentialFileFactory factory = (JDBCSequentialFileFactory) newFileFactory(table.toString(), false); factory.start(); JDBCSequentialFile addressFile = (JDBCSequentialFile) factory.createSequentialFile(ADDRESS_FILE); addressFile.open(); size = ((Long) addressFile.size()).intValue(); if (size == 0) { continue; } ActiveMQBuffer addrBuffer = readActiveMQBuffer(addressFile, size); SimpleString address = addrBuffer.readSimpleString(); 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); } directoryList.close(); return storesReturn; }
@Override public synchronized void removeFileFactory(SequentialFileFactory fileFactory) throws Exception { ((JDBCSequentialFileFactory)fileFactory).destroy(); String tableName = factoryToTableName.remove(fileFactory); if (tableName != null) { SimpleString removeTableName = SimpleString.toSimpleString(tableName); JDBCSequentialFile directoryList = (JDBCSequentialFile) pagingFactoryFileFactory.createSequentialFile(DIRECTORY_NAME); directoryList.open(); int size = ((Long) directoryList.size()).intValue(); ActiveMQBuffer buffer = readActiveMQBuffer(directoryList, size); ActiveMQBuffer writeBuffer = ActiveMQBuffers.fixedBuffer(size); while (buffer.readableBytes() > 0) { SimpleString table = buffer.readSimpleString(); if (!removeTableName.equals(table)) { writeBuffer.writeSimpleString(table); } } directoryList.write(writeBuffer, true, null, false); directoryList.close(); } }