ActiveMQ is an open source application messaging middleware service where applications can send messages to other applications (or groups of consumers) in real-time without polling.
Grouper can be used to manage ActiveMQ authorizations. University of Pennsylvania and Penn State are interested in this component.
ActiveMQ users can send/receive messages to topics/queues, and also can dynamically create topics/queues. Grouper permissions can be exported and kept in sync (cron'ed and real-time) with a local permissions store. An ActiveMQ plugin reads the local permissions and enforces the rules.
Broker plugin example
If you have an implementation of Broker:
/** * @author mchyzer $Id$ */ package edu.upenn.isc.activemq; 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.broker.region.Destination; import org.apache.activemq.broker.region.Subscription; import org.apache.activemq.command.ActiveMQDestination; import org.apache.activemq.command.ConsumerInfo; import org.apache.activemq.command.DestinationInfo; import org.apache.activemq.command.Message; import org.apache.activemq.command.ProducerInfo; /** * my broker */ public class MyBroker extends BrokerFilter { /** * @param next1 */ public MyBroker(Broker next1) { super(next1); } /** * @see org.apache.activemq.broker.BrokerFilter#addDestinationInfo(org.apache.activemq.broker.ConnectionContext, org.apache.activemq.command.DestinationInfo) */ @Override public void addDestinationInfo(ConnectionContext context, DestinationInfo info) throws Exception { System.out.println("addDestinationInfo: "); super.addDestinationInfo(context, info); } /** * @see org.apache.activemq.broker.BrokerFilter#addDestination(org.apache.activemq.broker.ConnectionContext, org.apache.activemq.command.ActiveMQDestination, boolean) */ @Override public Destination addDestination(ConnectionContext context, ActiveMQDestination destination, boolean create) throws Exception { System.out.println("addDestination: "); return super.addDestination(context, destination, create); } /** * @see org.apache.activemq.broker.BrokerFilter#removeDestination(org.apache.activemq.broker.ConnectionContext, org.apache.activemq.command.ActiveMQDestination, long) */ @Override public void removeDestination(ConnectionContext context, ActiveMQDestination destination, long timeout) throws Exception { System.out.println("removeDestination: "); super.removeDestination(context, destination, timeout); } /** * @see org.apache.activemq.broker.BrokerFilter#addConsumer(org.apache.activemq.broker.ConnectionContext, org.apache.activemq.command.ConsumerInfo) */ @Override public Subscription addConsumer(ConnectionContext context, ConsumerInfo info) throws Exception { System.out.println("addConsumer: "); return super.addConsumer(context, info); } /** * @see org.apache.activemq.broker.BrokerFilter#addProducer(org.apache.activemq.broker.ConnectionContext, org.apache.activemq.command.ProducerInfo) */ @Override public void addProducer(ConnectionContext context, ProducerInfo info) throws Exception { System.out.println("addProducer: "); super.addProducer(context, info); } /** * * @see org.apache.activemq.broker.BrokerFilter#send(org.apache.activemq.broker.ProducerBrokerExchange, org.apache.activemq.command.Message) */ @Override public void send(ProducerBrokerExchange producerExchange, Message messageSend) throws Exception { System.out.println("send: "); super.send(producerExchange, messageSend); } }
And you have an implementation for BrokerPlugin:
/** * 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 edu.upenn.isc.activemq; import org.apache.activemq.broker.Broker; import org.apache.activemq.broker.BrokerPlugin; /** * An authorization plugin where each operation on a destination is checked * against an authorizationMap * * @org.apache.xbean.XBean * * */ public class MyBrokerPlugin implements BrokerPlugin { public MyBrokerPlugin() { } public Broker installPlugin(Broker broker) { return new MyBroker(broker); } }
Then you can register the broker in the activemq.xml (add above <transportConnectors>
<plugins> <bean xmlns="http://www.springframework.org/schema/beans" id="myBrokerPlugin" /> </plugins>
sdf