org.apache.activemq.broker.inteceptor.MessageInterceptorFilter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of activemq-osgi Show documentation
Show all versions of activemq-osgi Show documentation
Puts together an ActiveMQ OSGi bundle
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.broker.inteceptor;
import java.util.Set;
import org.apache.activemq.broker.Broker;
import org.apache.activemq.broker.BrokerFilter;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.broker.ProducerBrokerExchange;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.Message;
import org.apache.activemq.command.ProducerInfo;
import org.apache.activemq.filter.DestinationMap;
import org.apache.activemq.state.ProducerState;
class MessageInterceptorFilter extends BrokerFilter {
private DestinationMap interceptorMap = new DestinationMap();
MessageInterceptorFilter(Broker next) {
super(next);
}
MessageInterceptor addMessageInterceptor(String destinationName, MessageInterceptor messageInterceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.QUEUE_TYPE);
interceptorMap.put(activeMQDestination, messageInterceptor);
return messageInterceptor;
}
void removeMessageInterceptor(String destinationName, MessageInterceptor interceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.QUEUE_TYPE);
interceptorMap.remove(activeMQDestination, interceptor);
}
MessageInterceptor addMessageInterceptorForQueue(String destinationName, MessageInterceptor messageInterceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.QUEUE_TYPE);
interceptorMap.put(activeMQDestination, messageInterceptor);
return messageInterceptor;
}
void removeMessageInterceptorForQueue(String destinationName, MessageInterceptor interceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.QUEUE_TYPE);
interceptorMap.remove(activeMQDestination, interceptor);
}
MessageInterceptor addMessageInterceptorForTopic(String destinationName, MessageInterceptor messageInterceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.TOPIC_TYPE);
interceptorMap.put(activeMQDestination, messageInterceptor);
return messageInterceptor;
}
void removeMessageInterceptorForTopic(String destinationName, MessageInterceptor interceptor) {
ActiveMQDestination activeMQDestination = ActiveMQDestination.createDestination(destinationName, ActiveMQDestination.TOPIC_TYPE);
interceptorMap.remove(activeMQDestination, interceptor);
}
MessageInterceptor addMessageInterceptor(ActiveMQDestination activeMQDestination, MessageInterceptor messageInterceptor) {
interceptorMap.put(activeMQDestination, messageInterceptor);
return messageInterceptor;
}
void removeMessageInterceptor(ActiveMQDestination activeMQDestination, MessageInterceptor interceptor) {
interceptorMap.remove(activeMQDestination, interceptor);
}
/**
* Re-inject into the Broker chain
*/
void injectMessage(ProducerBrokerExchange producerExchange, final Message messageSend) throws Exception {
ProducerBrokerExchange pe = producerExchange;
if (pe == null) {
pe = new ProducerBrokerExchange();
ConnectionContext cc = new ConnectionContext();
cc.setBroker(this.getRoot());
pe.setConnectionContext(cc);
pe.setMutable(true);
pe.setProducerState(new ProducerState(new ProducerInfo()));
}
super.send(pe, messageSend);
}
@Override
public void send(ProducerBrokerExchange producerExchange, final Message messageSend) throws Exception {
ActiveMQDestination activeMQDestination = messageSend.getDestination();
if (!interceptorMap.isEmpty() && activeMQDestination != null) {
Set set = interceptorMap.get(activeMQDestination);
if (set != null && !set.isEmpty()) {
for (MessageInterceptor mi : set) {
mi.intercept(producerExchange, messageSend);
}
} else {
super.send(producerExchange, messageSend);
}
} else {
super.send(producerExchange, messageSend);
}
}
}