activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jason Dillon <ja...@planet57.com>
Subject PolicyMap api is really bad :-(
Date Wed, 11 Jan 2012 02:51:26 GMT
Hiya, I'm trying to programmatically configure the destination policies via PolicyMap and I'm
not exactly sure how this component is expected to behave.  Looks like a lot of this behavior
is magical (eh evil?) xbean stuff.

To get around this and provide a better API I created this:

<snip>
public class ExtPolicyMap
    extends PolicyMap
{
    @NonNls
    private static final Logger log = LoggerFactory.getLogger(ExtPolicyMap.class);

    @ScriptAccessible
    public PolicyEntry forQueue(final String name) {
        log.debug("Looking up policy-entry for queue: {}", name);
        PolicyEntry entry = getEntryFor(new ActiveMQQueue(name));
        if (entry == null) {
            entry = new PolicyEntry();
            entry.setQueue(name);
            put(entry.getDestination(), entry);
        }
        log.debug("Entry: {}", entry);
        return entry;
    }

    @ScriptAccessible
    public PolicyEntry forTopic(final String name) {
        log.debug("Looking up policy-entry for topic: {}", name);
        PolicyEntry entry = getEntryFor(new ActiveMQTopic(name));
        if (entry == null) {
            entry = new PolicyEntry();
            entry.setTopic(name);
            put(entry.getDestination(), entry);
        }
        log.debug("Entry: {}", entry);
        return entry;
    }
}
</snip>

And then exposed via:

<snip>
public class ExtBrokerService
    extends SslBrokerService
{
    public ExtBrokerService() {
        // Force our version of the policy map to be used
        setDestinationPolicy(new ExtPolicyMap());
    }

    @Override
    public ExtPolicyMap getDestinationPolicy() {
        return (ExtPolicyMap) super.getDestinationPolicy();
    }
}
</snip>

And then I can go configure things like:

<snip>
service.getDestinationPolicy().forQueue(">").setOptimizedDispatch(true);
service.start();
</snip>

I'm not sure how to easily verify if this is correct or not, so I wanted to know if this looks
sane.  Given use of ExtBrokerService here with ExtPolicyMap, will this properly configure
optimizeDispatch for all queues?

--jason



Mime
View raw message