Messaging Anbindung

Nachfolgend ein einfaches Beispiel, wie der ISA Messaging Service genutzt werden kann.

  1. Es wird eine Topic Queue Verbindung mit einem Nachrichtenfilter angelegt und ein anonymer MessageReceiver als Empfänger gesetzt. Letzteres verhindert, dass die MessageReceiver Schnittstelle Teil der öffentlichen Schnittstelle des TestModuls wird.
  2. Es wird eine Senderverbindung mit einer Queue aufgebaut und N Nachrichten versendet.

Der Code ist für Client und Server gleich.

//MANIFEST.MF[
// PlugIn-Name: com.my.MessagingTest
// PlugIn-Imports: isa.Core[version=1.0.0.DEV-SNAPSHOT];
//  isa.Messaging[version=1.0.0.DEV-SNAPSHOT]
//]
package com.my;

import isa.MessagingIFace;
import isa.MessageReceiver;
import isa.common.QueueObject;
import isa.common.QueueSender;

/**
*/
public class MessagingTest {

	@Service()
	protected MessagingIFace messaging = null;
	protected QueueObject topicQueue = null;

	/**
	*/
	public MessagingTest () {
	}

	/**
	*/
	protected void onInstanceActivation(Object pConfig)throws Exception{
		String filter = "receiver='all' OR receiver='me'";
		String topicName = "com.my.MessagingTopic"

		topicQueue = messaging.getTopicQueue(topicName, filter,
			new MessageReceiver() {
				public void processMessage(Object pMsg){
					System.out.println("Topic Message received: "+pMsg);
				}
			}
		);
	}

	/**
	*/
	protected void onInstanceDeactivation(Object pConfig)throws Exception{
		if(topicQueue!=null){
			topicQueue.disconnect(false);
		}
	}

	/**
	*/
	protected void sendMessages(List pMessages){
		QueueSender sender = null;

		try{
			sender = messaging.getQueueSender("com.my.QueueName");

			Iterator iter = pMessages.iterator();
			while(iter.hasNext()){
				sender.send(iter.next(), "");
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			sender.disconnect(false);
		}
	}
}

Das Beispiel zeigt auch wie nahe das ISA Modulkonzept an das traditionelle Import Konzept von Java angelehnt ist. Dabei werden einfach an Stelle von Klassen und Paketen – Module in der Manifestdatei importiert. An der Programmierung selbst ändert sich nichts.