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

Sender

Achtung, das Beispiel enthält im Gegensatz zu dem Beispiel zu Publish-Subscribe den Verweis auf die exolab und nicht die Apache-Implementierung von JMS. Bitte entsprechend anpassen.

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

import javax.jms.DeliveryMode;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Sender {

  public Sender() {
    try {
      
      Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory");
      env.put(Context.PROVIDER_URL, "tcp://spielplatz.johner-institut.de:5958");
      Context context = new InitialContext(env);
          
      //QueueConnectionFactory holen
      QueueConnectionFactory factory = (QueueConnectionFactorycontext.lookup("JmsQueueConnectionFactory");
      
      //Verbindung aufbauen:
      QueueConnection connection = factory.createQueueConnection();
      connection.start();
      
      //Session erzeugen und sich Queue holen
      QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      Queue queue = (Queuecontext.lookup("queue1");
      
      //Sender erzeugen, und an der Queue anmleden
      QueueSender sender = session.createSender(queue);
      sender.setDeliveryMode(DeliveryMode.PERSISTENT);
      
      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);
      
      sender.close();
      session.close();
      connection.stop();
      context.close();
      System.out.println("Reached");
      
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  public static void main(String[] args) {
    new Sender();
  }
}

Receiver

package point2point;
import java.util.Hashtable;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;


public class Receiver{

  public Receiver() {
    try {
      // JNDI Environment bauen um ConnectionFactory Klasse des JMS zu finden..
      Hashtable contextEnvironment = new Hashtable();
      contextEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory");
      contextEnvironment.put(Context.PROVIDER_URL, "tcp://spielplatz.johner-institut.de:5958");
      Context context = new InitialContext(contextEnvironment);

      //QueueConnectionFactory holen
      QueueConnectionFactory factory = (QueueConnectionFactorycontext.lookup("JmsQueueConnectionFactory");

      // Connection erstellen, und verbinden
      QueueConnection connection = factory.createQueueConnection();
      connection.start();

      //Session erzeugen und sich Queue holen
      QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      Queue queue = (Queuecontext.lookup("queue1");

      //Empfänger erzeugen, und an der Queue "anmwelden"
      QueueReceiver receiver = session.createReceiver(queue);

      receiver.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.getGebDatum());
          }
        }
        else {
          System.out.println("Unknown Message Type");
        }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

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

Patient

package point2point;

import java.io.Serializable;
import java.util.Date;

public class Patient implements Serializable{
  private String name;
  private int gewicht;
  private Date gebDatum;
  
  public Patient(String name, int gewicht, Date gebDatum) {
    this.name = name;
    this.gewicht = gewicht;
    this.gebDatum = gebDatum;
  }
  
  public String getName() {
    return name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
  
  public int getGewicht() {
    return gewicht;
  }
  
  public void setGewicht(int gewicht) {
    this.gewicht = gewicht;
  }
  
  public Date getGebDatum() {
    return gebDatum;
  }
  
  public void setGebDatum(Date gebDatum) {
    this.gebDatum = gebDatum;
  }
}