Search in sources :

Example 11 with LocalTransaction

use of org.apache.qpid.server.txn.LocalTransaction in project qpid-broker-j by apache.

the class AbstractVirtualHost method executeTransaction.

@Override
public void executeTransaction(TransactionalOperation op) {
    final MessageStore store = getMessageStore();
    final LocalTransaction txn = new LocalTransaction(store);
    op.withinTransaction(new Transaction() {

        @Override
        public void dequeue(final QueueEntry messageInstance) {
            final ServerTransaction.Action deleteAction = new ServerTransaction.Action() {

                @Override
                public void postCommit() {
                    messageInstance.delete();
                }

                @Override
                public void onRollback() {
                }
            };
            boolean acquired = messageInstance.acquireOrSteal(new Runnable() {

                @Override
                public void run() {
                    ServerTransaction txn = new AutoCommitTransaction(store);
                    txn.dequeue(messageInstance.getEnqueueRecord(), deleteAction);
                }
            });
            if (acquired) {
                txn.dequeue(messageInstance.getEnqueueRecord(), deleteAction);
            }
        }

        @Override
        public void copy(QueueEntry entry, final Queue<?> queue) {
            final ServerMessage message = entry.getMessage();
            txn.enqueue(queue, message, new ServerTransaction.EnqueueAction() {

                @Override
                public void postCommit(MessageEnqueueRecord... records) {
                    queue.enqueue(message, null, records[0]);
                }

                @Override
                public void onRollback() {
                }
            });
        }

        @Override
        public void move(final QueueEntry entry, final Queue<?> queue) {
            final ServerMessage message = entry.getMessage();
            if (entry.acquire()) {
                txn.enqueue(queue, message, new ServerTransaction.EnqueueAction() {

                    @Override
                    public void postCommit(MessageEnqueueRecord... records) {
                        queue.enqueue(message, null, records[0]);
                    }

                    @Override
                    public void onRollback() {
                        entry.release();
                    }
                });
                txn.dequeue(entry.getEnqueueRecord(), new ServerTransaction.Action() {

                    @Override
                    public void postCommit() {
                        entry.delete();
                    }

                    @Override
                    public void onRollback() {
                    }
                });
            }
        }
    });
    txn.commit();
}
Also used : MessageStore(org.apache.qpid.server.store.MessageStore) AutoCommitTransaction(org.apache.qpid.server.txn.AutoCommitTransaction) PrivilegedAction(java.security.PrivilegedAction) LocalTransaction(org.apache.qpid.server.txn.LocalTransaction) ServerMessage(org.apache.qpid.server.message.ServerMessage) MessageEnqueueRecord(org.apache.qpid.server.store.MessageEnqueueRecord) QueueEntry(org.apache.qpid.server.queue.QueueEntry) AutoCommitTransaction(org.apache.qpid.server.txn.AutoCommitTransaction) LocalTransaction(org.apache.qpid.server.txn.LocalTransaction) ServerTransaction(org.apache.qpid.server.txn.ServerTransaction) ServerTransaction(org.apache.qpid.server.txn.ServerTransaction)

Example 12 with LocalTransaction

use of org.apache.qpid.server.txn.LocalTransaction in project qpid-broker-j by apache.

the class AbstractAMQPConnection method getOldestTransactionStartTime.

@Override
public Date getOldestTransactionStartTime() {
    long oldest = Long.MAX_VALUE;
    Iterator<ServerTransaction> iterator = getOpenTransactions();
    while (iterator.hasNext()) {
        final ServerTransaction value = iterator.next();
        if (value instanceof LocalTransaction) {
            long transactionStartTimeLong = value.getTransactionStartTime();
            if (transactionStartTimeLong > 0 && oldest > transactionStartTimeLong) {
                oldest = transactionStartTimeLong;
            }
        }
    }
    return oldest == Long.MAX_VALUE ? null : new Date(oldest);
}
Also used : LocalTransaction(org.apache.qpid.server.txn.LocalTransaction) ServerTransaction(org.apache.qpid.server.txn.ServerTransaction) Date(java.util.Date)

Aggregations

LocalTransaction (org.apache.qpid.server.txn.LocalTransaction)12 ServerTransaction (org.apache.qpid.server.txn.ServerTransaction)10 LogMessage (org.apache.qpid.server.logging.LogMessage)2 UnsignedInteger (org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger)2 TransactionError (org.apache.qpid.server.protocol.v1_0.type.transaction.TransactionError)2 AmqpError (org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError)2 Error (org.apache.qpid.server.protocol.v1_0.type.transport.Error)2 AutoCommitTransaction (org.apache.qpid.server.txn.AutoCommitTransaction)2 AccessControlException (java.security.AccessControlException)1 PrivilegedAction (java.security.PrivilegedAction)1 Date (java.util.Date)1 QpidByteBuffer (org.apache.qpid.server.bytebuffer.QpidByteBuffer)1 MessageDestination (org.apache.qpid.server.message.MessageDestination)1 RoutingResult (org.apache.qpid.server.message.RoutingResult)1 ServerMessage (org.apache.qpid.server.message.ServerMessage)1 MessageFormat (org.apache.qpid.server.plugin.MessageFormat)1 AmqpErrorRuntimeException (org.apache.qpid.server.protocol.v1_0.type.AmqpErrorRuntimeException)1 Binary (org.apache.qpid.server.protocol.v1_0.type.Binary)1 DeliveryState (org.apache.qpid.server.protocol.v1_0.type.DeliveryState)1 Outcome (org.apache.qpid.server.protocol.v1_0.type.Outcome)1