home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Publisher

package publishsubscribe;

import java.util.GregorianCalendar;
import java.util.Properties;
import java.util.Scanner;

import javax.jms.DeliveryMode;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Publisher {

  public Publisher() {
    try {
      
      Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
      //env.put(Context.PROVIDER_URL, "tcp://localhost:61616");
      env.put(Context.PROVIDER_URL, "tcp://spielplatz.johner-institut.de:5959");
      env.put("topic.MeinKanal""example.MeinKanal");  //Topic erstellen... topic.[jndiName] = [physicalName] (ActiveMQ)
      Context context = new InitialContext(env);
          
      TopicConnectionFactory factory = (TopicConnectionFactorycontext.lookup("ConnectionFactory");
      
      //Verbindung aufbauen:
      TopicConnection connection = factory.createTopicConnection();
      connection.start();
      
      //Session erzeugen und sich Topic holen
      TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
      Topic topic = (Topiccontext.lookup("MeinKanal")
      
      //Publisher erzeugen, und am Topic anmleden
      TopicPublisher sender = session.createPublisher(topic);
      sender.setDeliveryMode(DeliveryMode.PERSISTENT)//damit werden Nachrichten nachgeliefert falls Subscriber weg waren
            
      System.out.println("Bitte Diagnose eingeben: ");
      Scanner scanner = new Scanner(System.in);
      String nachricht = scanner.nextLine();
      
      TextMessage text = session.createTextMessage(nachricht);
      sender.send(text);
      
      Patient neuerPatient = new Patient("Franz Bauer"78, GregorianCalendar.getInstance().getTime());
      ObjectMessage patient = session.createObjectMessage(neuerPatient);
      
      sender.send(patient);
    
      System.out.println("Nachricht wurde verschickt gesendet..");
      System.exit(0);

    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    new Publisher();
  }
}

SubscriberA

package publishsubscribe;

import java.util.Properties;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;

public class SubscriberSystemA{

  public SubscriberSystemA() {
    try {
      // JNDI Environment bauen um ConnectionFactory Klasse des JMS zu finden..
      Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
      //env.put(Context.PROVIDER_URL, "tcp://spielplatz.johner-institut.de:61616");
      env.put(Context.PROVIDER_URL, "tcp://spielplatz.johner-institut.de:5959");
      env.put("topic.MeinKanal""example.MeinKanal");  //Für ActiveMQ notwendig
      Context context = new InitialContext(env);

      //TopicConnectionFactory holen
      TopicConnectionFactory factory = (TopicConnectionFactorycontext.lookup("ConnectionFactory");

      // Connection erstellen, verbinden und Session erzeugen
      TopicConnection connection = factory.createTopicConnection();
      connection.setClientID("SystemA");          //Für ActiveMQ notwendig
      connection.start();
      TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);


      //Topic holen und anmelden
      Topic topic = (Topiccontext.lookup("MeinKanal");
      TopicSubscriber subscriber = session.createDurableSubscriber(topic, "SystemA");
      subscriber.setMessageListener(new MessageHandler());

      System.out.println("Warte auf messages... ");

    catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  class MessageHandler implements MessageListener {
    public void onMessage(Message message) {
      try {
        if (message instanceof TextMessage) {
          TextMessage msg = (TextMessagemessage;
          System.out.println("Lese TextMessage: " + msg.getText());
        
        else if(message instanceof ObjectMessage) {
          ObjectMessage msg = (ObjectMessagemessage;
          System.out.println("Lese ObjectMessage:");
          
          Object payload = msg.getObject();
          if(payload instanceof Patient) {
            Patient patient = (Patient)payload;
            System.out.println("....Name:\t\t"       + patient.getName());
            System.out.println("....Geburtsdatum:\t" + patient.getGebDatum());
            System.out.println("....Gewicht:\t\t"    + patient.getGewicht());
          }
        }
        else {
          System.out.println("Unknown Message Type");
        }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  public static void main(String[] args) {
    System.out.println("Ich bin das System Nummer Eins:");
    new SubscriberSystemA();
  }
}

Weitere Subscriber

analog zu SubscriberA.