public AMQPSessionCallback createSessionCallback(AMQPConnectionContext connection) { return new AMQPSessionCallback(this, manager, connection, this.connection, sessionExecutor, server.newOperationContext()); }
OperationContext oldContext = sessionSPI.recoverContext(); sessionSPI.ack(null, brokerConsumer, message); } catch (Exception e) { log.warn(e.toString(), e); ProtonTransactionImpl tx = (ProtonTransactionImpl) this.sessionSPI.getTransaction(txState.getTxnId(), false); sessionSPI.ack(tx, brokerConsumer, message); tx.addDelivery(delivery, this); } catch (Exception e) { sessionSPI.cancel(brokerConsumer, message, false); } catch (Exception e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCancellingMessage(message.toString(), e.getMessage()); sessionSPI.reject(brokerConsumer, message); } catch (Exception e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCancellingMessage(message.toString(), e.getMessage()); sessionSPI.cancel(brokerConsumer, message, true); } else { sessionSPI.cancel(brokerConsumer, message, false); sessionSPI.afterIO(connectionFlusher); sessionSPI.resetContext(oldContext);
try { if (sessionSPI != null) { sessionSPI.close();
OperationContext oldContext = sessionSPI.recoverContext(); sessionSPI.ack(null, brokerConsumer, message); } catch (Exception e) { log.warn(e.toString(), e); sessionSPI.afterIO(connectionFlusher); sessionSPI.resetContext(oldContext);
try { closed = true; sessionSPI.closeSender(brokerConsumer); if (source != null && source.getAddress() != null && multicast) { SimpleString queueName = SimpleString.toSimpleString(source.getAddress()); QueueQueryResult result = sessionSPI.queueQuery(queueName, routingTypeToUse, false); if (result.isExists() && source.getDynamic()) { sessionSPI.deleteQueue(queueName); } else { if (source.getDurable() == TerminusDurability.NONE && tempQueueName != null && (source.getExpiryPolicy() == TerminusExpiryPolicy.LINK_DETACH || source.getExpiryPolicy() == TerminusExpiryPolicy.SESSION_END)) { sessionSPI.removeTemporaryQueue(tempQueueName); } else { String clientId = getClientId(); result = sessionSPI.queueQuery(queue, multicast ? RoutingType.MULTICAST : RoutingType.ANYCAST, false); sessionSPI.deleteQueue(queue); sessionSPI.removeTemporaryQueue(SimpleString.toSimpleString(source.getAddress())); } catch (Exception e) {
global = hasRemoteDesiredCapability(sender, GLOBAL); queue = createQueueName(connection.isUseCoreSubscriptionNaming(), clientId, pubId, true, global, false); QueueQueryResult result = sessionSPI.queueQuery(queue, RoutingType.MULTICAST, false); multicast = true; routingTypeToUse = RoutingType.MULTICAST; tempQueueName = queue; try { sessionSPI.createTemporaryQueue(queue, RoutingType.ANYCAST); AddressQueryResult addressQueryResult = null; try { addressQueryResult = sessionSPI.addressQuery(addressToUse, multicast ? RoutingType.MULTICAST : RoutingType.ANYCAST, true); } catch (ActiveMQSecurityException e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.securityErrorCreatingConsumer(e.getMessage()); addressQueryResult = sessionSPI.addressQuery(addressToUse, defaultRoutingType, true); } catch (ActiveMQSecurityException e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.securityErrorCreatingConsumer(e.getMessage()); String pubId = sender.getName(); queue = createQueueName(connection.isUseCoreSubscriptionNaming(), clientId, pubId, shared, global, false); QueueQueryResult result = sessionSPI.queueQuery(queue, routingTypeToUse, false); if (result.isExists()) { sessionSPI.deleteQueue(queue); sessionSPI.createUnsharedDurableQueue(addressToUse, RoutingType.MULTICAST, queue, simpleStringSelector); } else { throw new ActiveMQAMQPIllegalStateException("Unable to recreate subscription, consumers already exist");
rejectMessage(delivery, Symbol.valueOf("failed"), "Missing 'to' field for message sent to an anonymous producer"); return; if (!checkAddressAndAutocreateIfPossible(address, routingType)) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist(); OperationContext oldcontext = recoverContext(); rejectMessage(delivery, AmqpError.RESOURCE_LIMIT_EXCEEDED, "Address is full: " + address); serverSend(context, transaction, message, delivery, receiver, routingContext); resetContext(oldcontext);
address = SimpleString.toSimpleString(sessionSPI.tempQueueName()); defRoutingType = getRoutingType(target.getCapabilities(), address); sessionSPI.createTemporaryQueue(address, defRoutingType); } catch (ActiveMQAMQPSecurityException e) { throw e; defRoutingType = getRoutingType(target.getCapabilities(), address); try { if (!sessionSPI.checkAddressAndAutocreateIfPossible(address, defRoutingType)) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist(); sessionSPI.check(address, CheckType.SEND, new SecurityAuth() { @Override public String getUsername() {
Binary txID = sessionSPI.newTransaction(); Declared declared = new Declared(); declared.setTxnId(txID); currentTx = sessionSPI.getTransaction(txID, false); IOCallback ioAction = new IOCallback() { @Override sessionSPI.afterIO(ioAction); } else if (action instanceof Discharge) { Discharge discharge = (Discharge) action; ProtonTransactionImpl tx = (ProtonTransactionImpl) sessionSPI.getTransaction(txID, true); tx.discharge(); sessionSPI.withinContext(() -> tx.rollback()); sessionSPI.afterIO(ioAction); } else { sessionSPI.withinContext(() -> tx.commit()); sessionSPI.afterIO(ioAction);
ProtonTransactionImpl tx = (ProtonTransactionImpl) this.sessionSPI.getTransaction(txState.getTxnId(), false); sessionSPI.ack(tx, brokerConsumer, message); tx.addDelivery(delivery, this); } catch (Exception e) { case Released: try { sessionSPI.cancel(brokerConsumer, message, false); } catch (Exception e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCancellingMessage(message.toString(), e.getMessage()); case Rejected: try { sessionSPI.reject(brokerConsumer, message); } catch (Exception e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.errorCancellingMessage(message.toString(), e.getMessage()); sessionSPI.cancel(brokerConsumer, message, true); } else { sessionSPI.cancel(brokerConsumer, message, false);
sessionSPI.invokeOutgoing(message, (ActiveMQProtonRemotingConnection) sessionSPI.getTransportConnection().getProtocolConnection()); sessionSPI.ack(null, brokerConsumer, messageReference.getMessage()); } catch (Exception e) { log.debug(e.getMessage(), e);
final RoutingContext routingContext) throws Exception { message.setConnectionID(receiver.getSession().getConnection().getRemoteContainer()); invokeIncoming((AMQPMessage) message, (ActiveMQProtonRemotingConnection) transportConnection.getProtocolConnection()); serverSession.send(transaction, message, directDeliver, false, routingContext); afterIO(new IOCallback() { @Override public void done() {
sessionSPI.invokeOutgoing(message, (ActiveMQProtonRemotingConnection) transportConnection.getProtocolConnection()); sessionSPI.ack(null, brokerConsumer, messageReference.getMessage()); delivery.settle(); } else {
@Override public void close(ErrorCondition condition) throws ActiveMQAMQPException { closed = true; if (condition != null) { sender.setCondition(condition); } protonSession.removeSender(sender); connection.runLater(() -> { sender.close(); try { sessionSPI.closeSender(brokerConsumer); } catch (Exception e) { log.warn(e.getMessage(), e); } sender.close(); connection.flush(); }); }
private void rejectMessage(Delivery delivery, Symbol errorCondition, String errorMessage) { ErrorCondition condition = new ErrorCondition(); condition.setCondition(errorCondition); condition.setDescription(errorMessage); Rejected rejected = new Rejected(); rejected.setError(condition); afterIO(new IOCallback() { @Override public void done() { connection.runLater(() -> { delivery.disposition(rejected); delivery.settle(); connection.flush(); }); } @Override public void onError(int errorCode, String errorMessage) { } }); }
public void addReceiver(Receiver receiver) throws Exception { try { ProtonServerReceiverContext protonReceiver = new ProtonServerReceiverContext(sessionSPI, connection, this, receiver); protonReceiver.initialise(); receivers.put(receiver, protonReceiver); ServerProducer serverProducer = new ServerProducerImpl(receiver.getName(), "AMQP", receiver.getTarget().getAddress()); sessionSPI.addProducer(serverProducer); receiver.setContext(protonReceiver); connection.runNow(() -> { receiver.open(); connection.flush(); }); } catch (ActiveMQAMQPException e) { receivers.remove(receiver); receiver.setTarget(null); receiver.setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage())); connection.runNow(() -> { receiver.close(); connection.flush(); }); } } }
global = hasRemoteDesiredCapability(sender, GLOBAL); queue = createQueueName(connection.isUseCoreSubscriptionNaming(), clientId, pubId, true, global, false); QueueQueryResult result = sessionSPI.queueQuery(queue, RoutingType.MULTICAST, false); multicast = true; routingTypeToUse = RoutingType.MULTICAST; tempQueueName = queue; try { sessionSPI.createTemporaryQueue(queue, RoutingType.ANYCAST); AddressQueryResult addressQueryResult = null; try { addressQueryResult = sessionSPI.addressQuery(addressToUse, multicast ? RoutingType.MULTICAST : RoutingType.ANYCAST, true); } catch (ActiveMQSecurityException e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.securityErrorCreatingConsumer(e.getMessage()); addressQueryResult = sessionSPI.addressQuery(addressToUse, defaultRoutingType, true); } catch (ActiveMQSecurityException e) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.securityErrorCreatingConsumer(e.getMessage()); String pubId = sender.getName(); queue = createQueueName(connection.isUseCoreSubscriptionNaming(), clientId, pubId, shared, global, false); QueueQueryResult result = sessionSPI.queueQuery(queue, routingTypeToUse, false); if (result.isExists()) { sessionSPI.deleteQueue(queue); sessionSPI.createUnsharedDurableQueue(addressToUse, RoutingType.MULTICAST, queue, simpleStringSelector); } else { throw new ActiveMQAMQPIllegalStateException("Unable to recreate subscription, consumers already exist");
rejectMessage(delivery, Symbol.valueOf("failed"), "Missing 'to' field for message sent to an anonymous producer"); return; if (!checkAddressAndAutocreateIfPossible(address, routingType)) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist(); OperationContext oldcontext = recoverContext(); rejectMessage(delivery, AmqpError.RESOURCE_LIMIT_EXCEEDED, "Address is full: " + address); serverSend(transaction, message, delivery, receiver); resetContext(oldcontext);
try { closed = true; sessionSPI.closeSender(brokerConsumer); if (source != null && source.getAddress() != null && multicast) { SimpleString queueName = SimpleString.toSimpleString(source.getAddress()); QueueQueryResult result = sessionSPI.queueQuery(queueName, routingTypeToUse, false); if (result.isExists() && source.getDynamic()) { sessionSPI.deleteQueue(queueName); } else { if (source.getDurable() == TerminusDurability.NONE && tempQueueName != null && (source.getExpiryPolicy() == TerminusExpiryPolicy.LINK_DETACH || source.getExpiryPolicy() == TerminusExpiryPolicy.SESSION_END)) { sessionSPI.removeTemporaryQueue(tempQueueName); } else { String clientId = getClientId(); result = sessionSPI.queueQuery(queue, multicast ? RoutingType.MULTICAST : RoutingType.ANYCAST, false); sessionSPI.deleteQueue(queue); sessionSPI.removeTemporaryQueue(SimpleString.toSimpleString(source.getAddress())); } catch (Exception e) {
address = SimpleString.toSimpleString(sessionSPI.tempQueueName()); defRoutingType = getRoutingType(target.getCapabilities(), address); sessionSPI.createTemporaryQueue(address, defRoutingType); } catch (ActiveMQAMQPSecurityException e) { throw e; defRoutingType = getRoutingType(target.getCapabilities(), address); try { if (!sessionSPI.checkAddressAndAutocreateIfPossible(address, defRoutingType)) { throw ActiveMQAMQPProtocolMessageBundle.BUNDLE.addressDoesntExist(); sessionSPI.check(address, CheckType.SEND, new SecurityAuth() { @Override public String getUsername() {