Cursor cursor = null;
try
{
cursor = _deliveryDb.openCursor(null, null);
DatabaseEntry key = new DatabaseEntry();
EntryBinding keyBinding = new QueueEntryTB();
DatabaseEntry value = new DatabaseEntry();
while (cursor.getNext(key, value, LockMode.RMW) == OperationStatus.SUCCESS)
{
QueueEntryKey qek = (QueueEntryKey) keyBinding.entryToObject(key);
entries.add(qek);
}
try
{
cursor.close();
}
finally
{
cursor = null;
}
for(QueueEntryKey entry : entries)
{
AMQShortString queueName = entry.getQueueName();
long messageId = entry.getMessageId();
qerh.queueEntry(queueName.asString(),messageId);
}
}
catch (DatabaseException e)
{
_log.error("Database Error: " + e.getMessage(), e);
throw e;
}
finally
{
if (cursor != null)
{
cursor.close();
}
}
TransactionLogRecoveryHandler.DtxRecordRecoveryHandler dtxrh = qerh.completeQueueEntryRecovery();
cursor = null;
try
{
cursor = _xidDb.openCursor(null, null);
DatabaseEntry key = new DatabaseEntry();
XidTB keyBinding = new XidTB();
PreparedTransactionTB valueBinding = new PreparedTransactionTB();
DatabaseEntry value = new DatabaseEntry();
while (cursor.getNext(key, value, LockMode.RMW) == OperationStatus.SUCCESS)
{
Xid xid = keyBinding.entryToObject(key);
PreparedTransaction preparedTransaction = valueBinding.entryToObject(value);
dtxrh.dtxRecord(xid.getFormat(),xid.getGlobalId(),xid.getBranchId(),
preparedTransaction.getEnqueues(),preparedTransaction.getDequeues());
}