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 = (QueueConnectionFactory) context.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 = (Queue) context.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 = (QueueConnectionFactory) context.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 = (Queue) context.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 = (TextMessage) message;
System.out.println("Lese TextMessage: " + msg.getText());
}
else if(message instanceof ObjectMessage) {
ObjectMessage msg = (ObjectMessage) message;
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;
}
}