2012-03-11 8 views
1

私の研究は、センサーとアクチュエータ拡張システムのドメイン固有言語(DSL)に焦点を当てています。は、Javaで単純なメッセージ指向のミドルウェアを実装したい

私はにメッセージオリエンテッドミドルウェア(DSLのソフトウェアコンポーネント間の通信を有効にするタスク)を使用するDSL(Java)をすばやくテストします。

通信とは、簡単なパブリッシュ/サブスクライブ、イベント通知、プロシージャコールを意味します。

私はJavaの単純なミドルウェアを迅速に実装することをお勧めしますか?私はちょうど私の単一のマシンの私のDSLをテストしたい

答えて

2

I私の質問に答えることで私を助けてくれてありがとうStackOverflowのコミュニティを。 Stackoverflowは本当に素晴らしいです! 2ヶ月前、私は上記の質問をしました。今、私は「単一のPCのためのシンプルなメッセージ指向のミドルウェア」を考え出しました。このコミュニティにSimple Message Oriented Middlewareを提供したいと思います。理解が難しい場合は教えてください。

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); 
    } 

} 
1

はJavaで既存のオープンソースママのいずれかを試してみて、(他の中。)mom4jOpen Message QueueまたはActiveMQを言う

+0

ありがとうオスカーあなたのポインタです。上にリストアップされていない中間製品は有意なlearnig曲線とエラーを起こしやすいですか? – Pankesh

+0

@PankeshPatelいいえ、彼らは良い文書を持っています。独自のメッセージングソリューションを実装すると、学習曲線が急峻になり、エラーが発生しやすくなります。 –

関連する問題