JMS === Kolejkowanie komunikatów (komunikacja P2P) ------------------------------------------ 1. Utworzenie fabryki połączeń :: javax.jms.ConnectionFactory fact = new com.sun.messaging.ConnectionFactory(); 2. Utworzenie połączenia :: javax.jms.Connection conn = fact.createConnection(); 3. Utworzenie sesji :: javax.jms.Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 4. Utworzenie kolejki :: javax.jms.Queue que = new com.sun.messaging.Queue("kolejka1"); Umieszczanie komunikatu w kolejce +++++++++++++++++++++++++++++++++ 1. Utworzenie producenta :: javax.jms.MessageProducer prod = sess.createProducer(que); 2. Utworzenie komunikatu :: javax.jms.TextMessage tmsg = sess.createTextMessage("Hej!"); 3. Otwarcie połączenia :: conn.start(); 4. Przekazanie komunikatu :: prod.send(tmsg); 5. Zamknięcia połączenia :: conn.close(); Program `p2p_send.java `_: .. include:: ./JMS/p2p_send.java :literal: Pobieranie komunikatu z kolejki +++++++++++++++++++++++++++++++ 1. Utworzenie konsumenta :: javax.jms.MessageConsumer cons = sess.createConsumer(que); 2. Deklaracja referecji na potrzeby pobrania komunikatu z kolejki :: javax.jms.TextMessage tmsg; 3. Otwarcie połączenia :: conn.start(); 4. Pobranie komunikatu :: tmsg = (javax.jms.TextMessage)cons.receive(); 5. Zamknięcia połączenia :: conn.close(); Program `p2p_recv.java `_: .. include:: ./JMS/p2p_recv.java :literal: Publikowanie i subskrybowanie (komunikacja publish-subscribe) ------------------------------------------------------------- Różnica w stosunku do kolejkowania komunikatówjest tylko w typie środka komunikacji, określanego przy tworzeniu poducenta i konsumenta w ramach sesji. 1. Utworzenie tematu (zamiast kolejki) :: javax.jms.Topic top = new com.sun.messaging.Topic("temat1"); 2. Utworzenie producenta :: javax.jms.MessageProducer prod = sess.createProducer(top); 3. 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. Tymczasowe kojeki prywatne (np. na potrzeby obsługi odpowiedzi) --------------------------------------------------------------- Tworzenie +++++++++ :: TemporaryQueue tmp = sess.createTemporaryQueue(); TextMessage tmsg = sess.createTextMessage("Hej!"); tmsg.setJMSReplyTo(tmp); Wykorzystanie do przekazania odpowiedzi +++++++++++++++++++++++++++++++++++++++ :: TextMessage tmsg, ack; tmsg = (TextMessage)cons.receive(); ack = sess.createTextMessage("OK!"); MessageProducer prod_ack = sess.createProducer(tmsg.getJMSReplyTo()); prod_ack.send(ack); Zadanie projektowe ------------------ Replikacja serwera usługi, zrealizowanej ramach :ref:`zadania z RMI ` [do 30 pkt. (zależnie od zaawansowania mechanizmu replikacji)]