Pankesh Patel
Pankesh Patel

Reputation: 1302

want to implement simple message oriented middleware in java

My research work is focusing on a Domain Specific Language (DSL) for sensor and actuator augmented system.

I want to quickly test my DSL ( in Java) , which uses Message Oriented middleware ( whose task is to just enable communication among the software components of DSL).

Communication means simple publish/subscribe, event notification, procedure call.

Can you suggest me a quick way to implement a simple middleware in Java ? I just want to test my DSL only on my single machine.

Upvotes: 1

Views: 1119

Answers (2)

Pankesh Patel
Pankesh Patel

Reputation: 1302

I thanks StackOverflow community for helping me by answering my questions. Stackoverflow is really great!! 2 months before, I have asked above mentioned question. Now, I have figured out "Simple Message-oriented Middleware for single PC". I would like to contribute the Simple Message Oriented Middleware to this community. Let me know if you have difficulty in understanding.

import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

public class PubSubMiddleware {

    private Map<String, Set<Subscriber>> subscriberMap = new Hashtable<String, Set<Subscriber>>();
    private Map<String, Set<CommandListener>> registeredInstanceMap = new Hashtable<String, Set<CommandListener>>();


    static PubSubMiddleware singletonInstance;

    public static PubSubMiddleware getInstance() {
        if (singletonInstance == null) {
            singletonInstance = new PubSubMiddleware();
        }
        return singletonInstance;
    }

    public void subscribe(Subscriber s, String eventSignature) {

        registerNewSubscriber(s, eventSignature);
    }

    public void publish(String eventName, Object arg) {

        Set<Subscriber> subscriberEventSet = getSubscribersForEvent(eventName);

        if (subscriberSet != null) {
            for (Subscriber s : subscriberSet) {
                s.notifyReceived(eventName, arg);
            }
        }

    }
    private void registerNewSubscriber(Subscriber s, String eSig) {

    if (subscriberMap.containsKey(eSig)) {

            Set<Subscriber> tempSet = subscriberMap.get(eSig);

            tempSet.add(s);
        } else {
            Set<Subscriber> newSet = new HashSet<Subscriber>();
            newSet.add(s);
            subscriberMap.put(eSig, newSet);
        }
    }

    private Set<Subscriber> getSubscribersForEvent(String eventSignature) {
        return subscriberMap.get(eventSignature);
    }

    // Request-Response

    public Object sendCommand(String methodName, Object arg) {

        Set<CommandListener> registeredInstanceSet = getInstanceForCommand(methodName);

        if (registeredInstanceSet != null) {
            for (CommandListener s : registeredInstanceSet) {
                return s.commandReceived(methodName, arg);
            }
        }
        return null;
    }

    private Set<CommandListener> getInstanceForCommand(String methodName) {
        return registeredInstanceMap.get(methodName);
    }

    private void registerNewInstance(CommandListener s, String listnerSignature) {


        if (registeredInstanceMap.containsKey(listnerSignature)) {
            Set<CommandListener> tempSet = registeredInstanceMap
                    .get(listnerSignature);
            tempSet.add(s);
        } else {
            Set<CommandListener> newSet = new HashSet<CommandListener>();
            newSet.add(s);
            registeredInstanceMap.put(listnerSignature, newSet);
        }
    }

    public void registerInstance(CommandListener s, String listnerSignature) {
        registerNewInstance(s, listnerSignature);
    }

}

Upvotes: 2

&#211;scar L&#243;pez
&#211;scar L&#243;pez

Reputation: 236004

Try any of the open source MOMs existing in Java, say mom4j, Open Message Queue or ActiveMQ (among others.)

Upvotes: 1

Related Questions