use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AbstractAMQPConnection method registerTransactionTickers.
@Override
public void registerTransactionTickers(final ServerTransaction serverTransaction, final Action<String> closeAction, final long notificationRepeatPeriod) {
NamedAddressSpace addressSpace = getAddressSpace();
if (addressSpace instanceof QueueManagingVirtualHost) {
final QueueManagingVirtualHost<?> virtualhost = (QueueManagingVirtualHost<?>) addressSpace;
EventLogger eventLogger = virtualhost.getEventLogger();
final Set<Ticker> tickers = new LinkedHashSet<>(4);
if (virtualhost.getStoreTransactionOpenTimeoutWarn() > 0) {
tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionOpenTimeoutWarn(), notificationRepeatPeriod, serverTransaction::getTransactionStartTime, age -> eventLogger.message(getLogSubject(), ConnectionMessages.OPEN_TXN(age))));
}
if (virtualhost.getStoreTransactionOpenTimeoutClose() > 0) {
tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionOpenTimeoutClose(), notificationRepeatPeriod, serverTransaction::getTransactionStartTime, age -> closeAction.performAction(OPEN_TRANSACTION_TIMEOUT_ERROR)));
}
if (virtualhost.getStoreTransactionIdleTimeoutWarn() > 0) {
tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionIdleTimeoutWarn(), notificationRepeatPeriod, serverTransaction::getTransactionUpdateTime, age -> eventLogger.message(getLogSubject(), ConnectionMessages.IDLE_TXN(age))));
}
if (virtualhost.getStoreTransactionIdleTimeoutClose() > 0) {
tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionIdleTimeoutClose(), notificationRepeatPeriod, serverTransaction::getTransactionUpdateTime, age -> closeAction.performAction(IDLE_TRANSACTION_TIMEOUT_ERROR)));
}
if (!tickers.isEmpty()) {
for (Ticker ticker : tickers) {
getAggregateTicker().addTicker(ticker);
}
notifyWork();
}
_transactionTickers.put(serverTransaction, tickers);
}
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class VirtualHostTest method createMockProtocolConnection.
private AbstractAMQPConnection createMockProtocolConnection(final VirtualHost<?> virtualHost) {
final AbstractAMQPConnection connection = mock(AbstractAMQPConnection.class);
final List<Action<?>> tasks = new ArrayList<>();
final ArgumentCaptor<Action> deleteTaskCaptor = ArgumentCaptor.forClass(Action.class);
Answer answer = new Answer() {
@Override
public Object answer(final InvocationOnMock invocation) {
return tasks.add(deleteTaskCaptor.getValue());
}
};
doAnswer(answer).when(connection).addDeleteTask(deleteTaskCaptor.capture());
when(connection.getAddressSpace()).thenReturn(virtualHost);
doAnswer(new Answer() {
@Override
public Object answer(final InvocationOnMock invocation) {
for (Action action : tasks) {
action.performAction(connection);
}
return null;
}
}).when(connection).sendConnectionCloseAsync(any(AMQPConnection.CloseReason.class), anyString());
when(connection.getRemoteAddressString()).thenReturn("peer:1234");
return connection;
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AbstractConfiguredObject method doResolution.
protected final void doResolution(boolean skipCheck, final AbstractConfiguredObjectExceptionHandler exceptionHandler) {
if (skipCheck || _dynamicState.get().getDynamicState() != DynamicState.OPENED) {
onResolve();
postResolve();
applyToChildren(new Action() {
@Override
public void performAction(Object child) {
try {
if (child instanceof AbstractConfiguredObject) {
AbstractConfiguredObject configuredObject = (AbstractConfiguredObject) child;
configuredObject.doResolution(false, exceptionHandler);
} else if (child instanceof AbstractConfiguredObjectProxy) {
AbstractConfiguredObjectProxy configuredObject = (AbstractConfiguredObjectProxy) child;
configuredObject.doResolution(false, exceptionHandler);
}
} catch (RuntimeException e) {
exceptionHandler.handleException(e, (ConfiguredObject) child);
}
}
});
postResolveChildren();
}
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class ManagementAddressSpace method createProxyNode.
private ProxyMessageSource createProxyNode(final Map<String, Object> attributes) {
Subject currentSubject = Subject.getSubject(AccessController.getContext());
Set<SessionPrincipal> sessionPrincipals = currentSubject.getPrincipals(SessionPrincipal.class);
if (!sessionPrincipals.isEmpty()) {
final ProxyMessageSource proxyMessageSource = new ProxyMessageSource(this, attributes);
final AMQPSession<?, ?> session = sessionPrincipals.iterator().next().getSession();
final Object connectionReference = session.getConnectionReference();
ConcurrentMap<String, ProxyMessageSource> connectionSpecificDestinations = _connectionSpecificDestinations.get(connectionReference);
if (connectionSpecificDestinations == null) {
connectionSpecificDestinations = new ConcurrentHashMap<>();
if (_connectionSpecificDestinations.putIfAbsent(connectionReference, connectionSpecificDestinations) == null) {
session.getAMQPConnection().addDeleteTask(new Action() {
@Override
public void performAction(final Object object) {
_connectionSpecificDestinations.remove(connectionReference);
}
});
}
}
connectionSpecificDestinations.put(proxyMessageSource.getName(), proxyMessageSource);
return proxyMessageSource;
} else {
return null;
}
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AMQPConnection_1_0Impl method sendConnectionCloseAsync.
@Override
public void sendConnectionCloseAsync(final CloseReason reason, final String description) {
stopConnection();
final ErrorCondition cause;
switch(reason) {
case MANAGEMENT:
cause = ConnectionError.CONNECTION_FORCED;
break;
case TRANSACTION_TIMEOUT:
cause = AmqpError.RESOURCE_LIMIT_EXCEEDED;
break;
default:
cause = AmqpError.INTERNAL_ERROR;
}
Action<ConnectionHandler> action = object -> closeConnection(cause, description);
addAsyncTask(action);
}
Aggregations