use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.
the class BDBConfigurationStore method storeConfiguredObjectEntry.
private void storeConfiguredObjectEntry(final Transaction txn, ConfiguredObjectRecord configuredObject) throws StoreException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Storing configured object record: " + configuredObject);
}
DatabaseEntry key = new DatabaseEntry();
UUIDTupleBinding uuidBinding = UUIDTupleBinding.getInstance();
uuidBinding.objectToEntry(configuredObject.getId(), key);
DatabaseEntry value = new DatabaseEntry();
ConfiguredObjectBinding queueBinding = ConfiguredObjectBinding.getInstance();
queueBinding.objectToEntry(configuredObject, value);
try {
OperationStatus status = getConfiguredObjectsDb().put(txn, key, value);
if (status != OperationStatus.SUCCESS) {
throw new StoreException("Error writing configured object " + configuredObject + " to database: " + status);
}
writeHierarchyRecords(txn, configuredObject);
} catch (RuntimeException e) {
throw _environmentFacade.handleDatabaseException("Error writing configured object " + configuredObject + " to database: " + e.getMessage(), e);
}
}
use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.
the class AbstractBDBPreferenceStore method updateOrCreateInternal.
private void updateOrCreateInternal(final Transaction txn, final Collection<PreferenceRecord> preferenceRecords) {
Database preferencesDb = getPreferencesDb();
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
UUIDTupleBinding keyBinding = UUIDTupleBinding.getInstance();
MapBinding valueBinding = MapBinding.getInstance();
for (PreferenceRecord record : preferenceRecords) {
keyBinding.objectToEntry(record.getId(), key);
valueBinding.objectToEntry(record.getAttributes(), value);
OperationStatus status = preferencesDb.put(txn, key, value);
if (status != OperationStatus.SUCCESS) {
throw new StoreException(String.format("Error writing preference with id '%s' (status %s)", record.getId(), status.name()));
}
}
}
use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.
the class AbstractBDBPreferenceStore method getPreferenceRecords.
private Collection<PreferenceRecord> getPreferenceRecords(final EnvironmentFacade environmentFacade) {
Collection<PreferenceRecord> records = new LinkedHashSet<>();
try (Cursor cursor = getPreferencesDb().openCursor(null, null)) {
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
UUIDTupleBinding keyBinding = UUIDTupleBinding.getInstance();
MapBinding valueBinding = MapBinding.getInstance();
while (cursor.getNext(key, value, LockMode.READ_UNCOMMITTED) == OperationStatus.SUCCESS) {
UUID preferenceId = keyBinding.entryToObject(key);
Map<String, Object> preferenceAttributes = valueBinding.entryToObject(value);
PreferenceRecord record = new PreferenceRecordImpl(preferenceId, preferenceAttributes);
records.add(record);
}
} catch (RuntimeException e) {
throw environmentFacade.handleDatabaseException("Cannot visit preferences", e);
}
return records;
}
use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.
the class AbstractBDBPreferenceStore method removeAndAdd.
private void removeAndAdd(final Collection<UUID> preferenceRecordsToRemove, final Collection<PreferenceRecord> preferenceRecordsToAdd, final Action<Transaction> preCommitAction) {
_useOrCloseRWLock.readLock().lock();
try {
final StoreState storeState = getStoreState();
if (!storeState.equals(StoreState.OPENED)) {
throw new IllegalStateException(String.format("PreferenceStore is not opened. Actual state : %s", storeState));
}
if (preferenceRecordsToRemove.isEmpty() && preferenceRecordsToAdd.isEmpty()) {
return;
}
EnvironmentFacade environmentFacade = getEnvironmentFacade();
Transaction txn = null;
try {
txn = environmentFacade.beginTransaction(null);
Database preferencesDb = getPreferencesDb();
DatabaseEntry key = new DatabaseEntry();
UUIDTupleBinding keyBinding = UUIDTupleBinding.getInstance();
for (UUID id : preferenceRecordsToRemove) {
getLogger().debug("Removing preference {}", id);
keyBinding.objectToEntry(id, key);
OperationStatus status = preferencesDb.delete(txn, key);
if (status == OperationStatus.NOTFOUND) {
getLogger().debug("Preference {} not found", id);
}
}
updateOrCreateInternal(txn, preferenceRecordsToAdd);
if (preCommitAction != null) {
preCommitAction.performAction(txn);
}
txn.commit();
txn = null;
} catch (RuntimeException e) {
throw environmentFacade.handleDatabaseException("Error on replacing of preferences: " + e.getMessage(), e);
} finally {
if (txn != null) {
abortTransactionSafely(txn, environmentFacade);
}
}
} finally {
_useOrCloseRWLock.readLock().unlock();
}
}
use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.
the class AbstractBDBPreferenceStore method getStoredVersion.
ModelVersion getStoredVersion() {
try (Cursor cursor = getPreferencesVersionDb().openCursor(null, null)) {
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
ModelVersion storedVersion = null;
while (cursor.getNext(key, value, LockMode.READ_UNCOMMITTED) == OperationStatus.SUCCESS) {
String versionString = StringBinding.entryToString(key);
ModelVersion version = ModelVersion.fromString(versionString);
if (storedVersion == null || storedVersion.lessThan(version)) {
storedVersion = version;
}
}
if (storedVersion == null) {
throw new StoreException("No preference version information.");
}
return storedVersion;
} catch (RuntimeException e) {
throw getEnvironmentFacade().handleDatabaseException("Cannot visit preference version", e);
}
}
Aggregations