Beispiel: Aufrufbare und ausführbare Tasks erstellen

Sie können eine Task erstellen, die ein Topic dynamisch subskribiert, und jede Komponente kann bei Bedarf einen Nachrichtenlistener hinzufügen.

Es folgt ein Beispiel für eine Task, die ein Topic dynamisch subskribiert:
class SampleTask implements Callable<Object>
{
   Set<MessageListener> listeners =
       Collections.newSetFromMap(new ConcurrentHashMap<MessageListener, Boolean>);
   	Topic targetTopic;
   	TopicConnectionFactory tcf;

   public SampleTask(TopicConnectionFactory tcf, Topic targetTopic)
   {
      		this.targetTopic = targetTopic;
      		this.tcf = tcf;
   }

   public void addMessageListener(MessageListener listener)
   {
      listeners.add(listener);
   }

   public Object call() throws JMSException
   {
      // JMS konfigurieren.
      		TopicConnection tc = tcf.createConnection();
      try 
      {
         		TopicSession sess = tc.createSession(false, Session.AUTOACK);
         		tc.start();

         while( !Thread.currentThread().isInterrupted() )
         {
            			// Bis zu 5 Sekunden lang blockieren.
            			Message msg = sess.receiveMessage(5000);
            			if(msg != null)
            {
               for (MessageListener listener : listeners)
                  // Beim Erhalt einer Nachricht ein Ereignis auslösen.
                  listener.onMessage(msg);
            }
         }
         		tc.close();
      }
      finally
      {
         if (tc != null) tc.close();
      }
      return null;
   }
}

Als Ergebnis dieser Codeausführung kann jede Komponente bei Bedarf einen Nachrichtenlistener hinzufügen, so dass die Komponenten ein Topic auf flexiblere Art und Weise subskribieren können, als wenn sie lediglich jedem Clientsubskribenten einen eigenen Thread zuteilen würden.


Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xasb_workobject
Dateiname:xasb_workobject.html