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


Reply via email to