Uploaded image for project: 'Stratos'
  1. Stratos
  2. STRATOS-110

Topology Event Message Processors should follow 'chain of responsibility' design pattern

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 4.0.0 M1
    • 4.0.0 M1
    • None
    • None

    Description

      Following is the MessageProcessor interface with this change.

      package org.apache.stratos.messaging.message.processor;

      import org.apache.stratos.messaging.domain.topology.Topology;

      /**

      • Message processor interface. Every Message Processor should implement this.
        */
        public interface MessageProcessor {

      /**

      • Link a message processor and its successor, if there's any.
      • @param nextProcessor
        */
        public abstract void setNext(MessageProcessor nextProcessor);

      /**

      • Message processing and delegating logic.
      • @param type type of the message.
      • @param message real message body.
      • @param topology Topology that will get updated.
      • @return whether the processing was successful or not.
        */
        public abstract boolean process(String type, String message, Topology topology);
        }

      I've implemented initial Message Processors:

      ├── ClusterCreatedEventProcessor.java
      ├── ClusterRemovedEventProcessor.java
      ├── CompleteTopologyEventProcessor.java
      ├── MemberActivatedEventProcessor.java
      ├── MemberStartedEventProcessor.java
      ├── MemberSuspendedEventProcessor.java
      ├── MemberTerminatedEventProcessor.java
      ├── ServiceCreatedEventProcessor.java
      └── ServiceRemovedEventProcessor.java

      Now, it is up to the Message Processor Delegator to build the Message processor chain.

      // instantiate all the relevant processors
      ServiceCreatedEventProcessor processor1 = new ServiceCreatedEventProcessor();
      ServiceRemovedEventProcessor processor2 = new ServiceRemovedEventProcessor();
      ClusterCreatedEventProcessor processor3 = new ClusterCreatedEventProcessor();

      // link all the relevant processors in the required order
      processor1.setNext(processor2);
      processor2.setNext(processor3);
      processor3.setNext(processor4);

      and also it's a duty of the deligator to start the flow:

      boolean hasProcessed = processor1.process(type, json, TopologyManager.getTopology());

      After the flow started, Processor who is capable of handling the message would eventually receive it and will process the message and other Processors will simply delegate the message to its successor.

      Attachments

        Activity

          People

            nirmal Nirmal Fernando
            nirmal Nirmal Fernando
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: