| home | suche | kontakt/johner | institut | hinweise studierende | tech-docs | blog | 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 = (TopicConnectionFactory) context.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 = (Topic) context.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 = (TopicConnectionFactory) context.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 = (Topic) context.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 = (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.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.
