use of org.sirix.api.ResourceManager in project sirix by sirixdb.
the class DBCollection method add.
public DBNode add(final String resName, SubtreeParser parser) throws OperationNotSupportedException, DocumentException {
try {
final String resource = new StringBuilder(2).append("resource").append(mDatabase.listResources().size() + 1).toString();
mDatabase.createResource(ResourceConfiguration.newBuilder(resource, mDatabase.getDatabaseConfig()).useDeweyIDs(true).useTextCompression(true).buildPathSummary(true).build());
final ResourceManager manager = mDatabase.getResourceManager(ResourceManagerConfiguration.newBuilder(resource).build());
final XdmNodeWriteTrx wtx = manager.beginNodeWriteTrx();
final SubtreeHandler handler = new SubtreeBuilder(this, wtx, Insert.ASFIRSTCHILD, Collections.<SubtreeListener<? super AbstractTemporalNode<DBNode>>>emptyList());
// Make sure the CollectionParser is used.
if (!(parser instanceof CollectionParser)) {
parser = new CollectionParser(parser);
}
parser.parse(handler);
return new DBNode(wtx, this);
} catch (final SirixException e) {
LOGGER.error(e.getMessage(), e);
return null;
}
}
use of org.sirix.api.ResourceManager in project sirix by sirixdb.
the class DBCollection method add.
@Override
public DBNode add(SubtreeParser parser) throws OperationNotSupportedException, DocumentException {
try {
final String resourceName = new StringBuilder(2).append("resource").append(mDatabase.listResources().size() + 1).toString();
mDatabase.createResource(ResourceConfiguration.newBuilder(resourceName, mDatabase.getDatabaseConfig()).useDeweyIDs(true).useTextCompression(true).buildPathSummary(true).build());
final ResourceManager resource = mDatabase.getResourceManager(ResourceManagerConfiguration.newBuilder(resourceName).build());
final XdmNodeWriteTrx wtx = resource.beginNodeWriteTrx();
final SubtreeHandler handler = new SubtreeBuilder(this, wtx, Insert.ASFIRSTCHILD, Collections.<SubtreeListener<? super AbstractTemporalNode<DBNode>>>emptyList());
// Make sure the CollectionParser is used.
if (!(parser instanceof CollectionParser)) {
parser = new CollectionParser(parser);
}
parser.parse(handler);
return new DBNode(wtx, this);
} catch (final SirixException e) {
LOGGER.error(e.getMessage(), e);
return null;
}
}
use of org.sirix.api.ResourceManager in project sirix by sirixdb.
the class DBStore method create.
@Override
public TemporalCollection<?> create(final String collName, @Nullable final Stream<SubtreeParser> parsers) throws DocumentException {
if (parsers != null) {
final DatabaseConfiguration dbConf = new DatabaseConfiguration(mLocation.resolve(collName));
try {
Databases.truncateDatabase(dbConf);
Databases.createDatabase(dbConf);
final Database database = Databases.openDatabase(dbConf.getFile());
mDatabases.add(database);
final ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
int i = database.listResources().size() + 1;
try {
SubtreeParser parser = null;
while ((parser = parsers.next()) != null) {
final SubtreeParser nextParser = parser;
final String resourceName = new StringBuilder("resource").append(String.valueOf(i)).toString();
pool.submit(() -> {
database.createResource(ResourceConfiguration.newBuilder(resourceName, dbConf).storageType(mStorageType).useDeweyIDs(true).useTextCompression(true).buildPathSummary(true).build());
try (final ResourceManager resource = database.getResourceManager(new ResourceManagerConfiguration.Builder(resourceName).build());
final XdmNodeWriteTrx wtx = resource.beginNodeWriteTrx()) {
final DBCollection collection = new DBCollection(collName, database);
mCollections.put(database, collection);
nextParser.parse(new SubtreeBuilder(collection, wtx, Insert.ASFIRSTCHILD, Collections.<SubtreeListener<? super AbstractTemporalNode<DBNode>>>emptyList()));
wtx.commit();
}
return null;
});
i++;
}
} finally {
parsers.close();
}
pool.shutdown();
pool.awaitTermination(5, TimeUnit.MINUTES);
return new DBCollection(collName, database);
} catch (final SirixRuntimeException | InterruptedException e) {
throw new DocumentException(e.getCause());
}
}
return null;
}
use of org.sirix.api.ResourceManager in project sirix by sirixdb.
the class VersioningTest method test2.
/**
* Test revisioning.
*
* @throws SirixException if anything in Sirix fails
*/
public void test2() throws SirixException {
try (final ResourceManager manager = mDatabase.getResourceManager(new ResourceManagerConfiguration.Builder(TestHelper.RESOURCE).build())) {
XdmNodeWriteTrx wtx = manager.beginNodeWriteTrx();
wtx.insertElementAsFirstChild(new QNm("foo"));
wtx.commit();
wtx.insertElementAsFirstChild(new QNm("foo"));
wtx.commit();
wtx.insertElementAsFirstChild(new QNm("foo"));
wtx.commit();
wtx.insertElementAsFirstChild(new QNm("foo"));
wtx.commit();
wtx.insertElementAsFirstChild(new QNm("foo"));
wtx.commit();
wtx.close();
try (final XdmNodeReadTrx rtx = manager.beginNodeReadTrx()) {
assertTrue(rtx.moveToFirstChild().hasMoved());
assertTrue(rtx.moveToFirstChild().hasMoved());
assertTrue(rtx.moveToFirstChild().hasMoved());
assertTrue(rtx.moveToFirstChild().hasMoved());
assertTrue(rtx.moveToFirstChild().hasMoved());
}
}
}
use of org.sirix.api.ResourceManager in project sirix by sirixdb.
the class ResourceStore method closeResource.
public boolean closeResource(final Path resourceFile) {
final ResourceManager manager = mResourceManagers.remove(resourceFile);
Databases.removeResourceManager(resourceFile, manager);
return manager != null;
}
Aggregations