Utworzenie fabryki połączeń
javax.jms.ConnectionFactory fact = new com.sun.messaging.ConnectionFactory();
Utworzenie połączenia
javax.jms.Connection conn = fact.createConnection();
Utworzenie sesji
javax.jms.Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Utworzenie kolejki
javax.jms.Queue que = new com.sun.messaging.Queue("kolejka1");
Utworzenie producenta
javax.jms.MessageProducer prod = sess.createProducer(que);
Utworzenie komunikatu
javax.jms.TextMessage tmsg = sess.createTextMessage("Hej!");
Otwarcie połączenia
conn.start();
Przekazanie komunikatu
prod.send(tmsg);
Zamknięcia połączenia
conn.close();
Program p2p_send.java:
import javax.jms.*; class p2p_send { public static void main(String[] argv) { try { ConnectionFactory fact = new com.sun.messaging.ConnectionFactory(); Connection conn = fact.createConnection(); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue que = new com.sun.messaging.Queue("kolejka1"); MessageProducer prod = sess.createProducer(que); TextMessage tmsg = sess.createTextMessage("Hej!"); conn.start(); prod.send(tmsg); conn.close(); } catch (Exception jmse) { System.out.println("Exception occurred : " + jmse.toString()); jmse.printStackTrace(); } } }
Utworzenie konsumenta
javax.jms.MessageConsumer cons = sess.createConsumer(que);
Deklaracja referecji na potrzeby pobrania komunikatu z kolejki
javax.jms.TextMessage tmsg;
Otwarcie połączenia
conn.start();
Pobranie komunikatu
tmsg = (javax.jms.TextMessage)cons.receive();
Zamknięcia połączenia
conn.close();
Program p2p_recv.java:
import javax.jms.*; class p2p_recv { public static void main(String[] argv) { try { ConnectionFactory fact = new com.sun.messaging.ConnectionFactory(); Connection conn = fact.createConnection(); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue que = new com.sun.messaging.Queue("kolejka1"); MessageConsumer cons = sess.createConsumer(que); conn.start(); TextMessage tmsg; tmsg = (TextMessage)cons.receive(); System.out.println("Odebrano: " + tmsg.getText()); conn.close(); } catch (Exception jmse) { System.out.println("Exception occurred : " + jmse.toString()); jmse.printStackTrace(); } } }
Różnica w stosunku do kolejkowania komunikatówjest tylko w typie środka komunikacji, określanego przy tworzeniu poducenta i konsumenta w ramach sesji.
Utworzenie tematu (zamiast kolejki)
javax.jms.Topic top = new com.sun.messaging.Topic("temat1");
Utworzenie producenta
javax.jms.MessageProducer prod = sess.createProducer(top);
Utworzenie konsumenta
javax.jms.MessageConsumer cons = sess.createConsumer(top);
Proszę zwrócić uwagę na sposób przekazywania wiadomości, gdy najpierw dostawca coś opublikuje, a następnie odbiorca zasubskrybuje dany temat.
TemporaryQueue tmp = sess.createTemporaryQueue(); TextMessage tmsg = sess.createTextMessage("Hej!"); tmsg.setJMSReplyTo(tmp);
TextMessage tmsg, ack; tmsg = (TextMessage)cons.receive(); ack = sess.createTextMessage("OK!"); MessageProducer prod_ack = sess.createProducer(tmsg.getJMSReplyTo()); prod_ack.send(ack);
Replikacja serwera usługi, zrealizowanej ramach zadania z RMI [do 30 pkt. (zależnie od zaawansowania mechanizmu replikacji)]