[ https://issues.apache.org/activemq/browse/AMQ-877?page=all ]

Maxim Fateev updated AMQ-877:
-----------------------------

    Attachment: destinationFactoryActiveMQ_438704.patch

The updated patch is attached.

> Patch: refactoring to allow alternative (using different storage interface) 
> Destinations implementations.
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-877
>                 URL: https://issues.apache.org/activemq/browse/AMQ-877
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: Broker
>    Affects Versions: 4.x
>            Reporter: Maxim Fateev
>         Assigned To: Rob Davies
>             Fix For: 4.1
>
>         Attachments: destinationFactoryActiveMQ_438704.patch, 
> destinationFactoryActiveMQPatch.txt
>
>
> We were looking at alternate message persistence mechanisms that can co-exist 
> in current ActiveMQ code base and we are thinking of a mechanism that is 
> somewhat incompatible with the current MessageStore and PersistenceAdapter 
> APIs. Unfortunately, the current ActiveMQ broker doesn't allow for such a 
> change as the PersistenceAdapter and MessageStore interfaces are referenced 
> directly by the RegionBroker and by both the Queue and Topic region 
> implementations. Therefore, we are proposing a relatively small backwards 
> compatible refactoring of the broker code that would eliminate all 
> dependencies on the PersistenceAdapter and MessageStore interfaces from those 
> classes that do not use them directly. This refactoring would also allow 
> creation of a custom Destination implementation that may use an alternative 
> persistence mechanism on a destination by destination basis (which is exactly 
> what we need to do).
>       The main idea behind the refactoring is to replace many references to 
> PersistenceAdapter with a new interface: DestinationFactory:
>       public abstract class DestinationFactory { 
>       abstract public Destination createDestination(ConnectionContext 
> context, ActiveMQDestination destination, DestinationStatistics 
> destinationStatistics) throws Exception;
>       abstract public Set getDestinations(); 
>       abstract public SubscriptionInfo[] 
> getAllDurableSubscriptions(ActiveMQTopic topic) throws IOException; 
>       abstract public long getLastMessageBrokerSequenceId() throws 
> IOException; 
>       abstract public void setRegionBroker(RegionBroker regionBroker); 
>       } 
>       Note that DestinationFactory doesn't mandate any specific persistence 
> mechanism. The classes that would reference it instead of PersistenceAdapter 
> are: RegionBroker, AbstractRegion, QueueRegion, and TopicRegion. Also, the 
> AbstractRegion.createDestination method would be changed from abstract to an 
> implementation that uses DestinationFactory to create a destination.
>       BrokerService could be changed to use DestinationFactory if one is 
> provided. If none is provided, it will create a DestinationFactory 
> implementation that instantiates Queue and Topic using PersistenceAdapter as 
> it does currently. Hence, full backwards compatibility will be maintained.
> Patch is attached.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to