Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
´ ak ´ - 14. eload ˝ as ´ Java technologi Java Message Service
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
ANTAL Margit Sapientia - EMTE
2008
˝ as ´ celja ´ Az eload
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
◮ ◮ ◮
¨ ´ os ´ architektur ´ Uzenetkommunik aci ´ ak ´ JMS technologia ´ ak ´ Peld ◮ ◮ ◮ ◮
¨ ´ o´ Uzenet gyart Szinkron uzenetfogyaszt o´ ¨ Aszinkron uzenetfogyaszt o´ ¨ ¨ Uzenetbab (message-driven bean)
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ ´ ıtasi ´ mintak ´ Uzenettov abb´
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
◮
point-to-point modell: az uzenetet egyetlen ¨ ´ ´ calalkalmazashoz kell eljuttatni ¨ ´ asa: ´ Uzenetek tarol ◮ ◮
◮
´ memoria ´ o´ perzisztens tarol
¨ publish-subscribe modell: az uzenetet tobb ¨ ¨ alkalmazasnak ´ komponensnek, illetve tobb kell ´ ıtani tovabb´ ´ as) ´ jellegu˝ kozz ¨ et ´ etel ´ broadcast (uzenetsz or ¨ ◮ ◮ ◮
´ ıtoje ˝ publisher: az uzenet kesz´ ¨ ´ ¨ topic: tema kor ˝ ˝ subscriber: elofizet ok
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
Point-point architektura ´
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
Publish-subscribe architektura ´
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ ´ ˝ Uzenetrendszer resztvev ok
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ Uzenetrendszer ◮
◮
◮
◮
´ ´ osztalyok ´ JMS API: olyan Java interfeszek es ´ asok ´ halmaza, mely az uzenetkezel o˝ szolgaltat ¨ ´ of ´ uggetlen ´ es ´ et ´ lehetov ˝ e´ teszik - (javax.jms gyart eler ¨ csomag) ´ o: ´ konkret ´ uzenetkezel JMS API implementaci o˝ ¨ ´ rendszer. Nem szuks u, ¨ egszer ˝ hogy Javaban legyen ´ implementalva. ´ ´ ´ Alkalmazasszerver JMS tamogat assal: ´ ´ ast ´ biztos´ıt. Regisztralni ´ kell a nevszolg altat ´ okat, ´ ´ ´ kapcsolat gyart uzenetk uld asi ¨ ¨ esi/-fogad ´ vegpontokat (queue, topic) ¨ ´ ´ as ´ seg´ıtseg ´ evel ´ ´ amely a nevszolg altat Ugyfel: ´ ´ ast ´ igenybe veszi a szolgaltat
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
´ objektumok Adminisztralt
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
´ ´ Ezeket alkalmazasszerverben kell letrehozni (pl. GlassFish): ◮ Connection Factories szerepe kodb ´ ol ´ kapcsolatot ´ ıthetunk letes´ o˝ rendszerrel. ¨ uzenetkezel ¨ ◮ Destination Resources t´ıpusok: ◮ ◮
´ Topic Destination: publish-subscribe architektur ´ ahoz ´ Queue Destination: point-to-point architektur ´ ahoz
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ Uzenetrendszer ugyfelek ¨
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
´ asa ´ vagy fogyasztasa ´ Feladatuk: uzenet gyart ¨ ◮ gyart ´ o´ ◮ fogyaszto ´ ◮ ◮
´ ´ szinkron : varakozik am´ıg uzenet erkezik ¨ ´ regisztral ´ az uzenetsorn ´ amely aszinkron: azugyf al, ¨ el ¨ ´ ´ ´ ¨ ´ uzenet erkez esekor ertes´ ıti az osszes regisztralt ¨ ugyfelet ¨
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ Uzenetek
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
◮
´ Reszei: ◮
◮ ◮
◮
´ az uzenet ´ ıtas ´ ara ´ vonatkozo´ fejlec: tovabb´ ¨ ´ ok ´ informaci ´ ´ ert ´ ek) ´ parok ´ tulajdonsagok: (nev¨ torzs: az uzenet tartalma ¨
JMS API uzenet t´ıpusok: ¨ ◮ ◮ ◮ ◮
◮
´ TextMessage : karakterlanc ¨ MapMessage : asszociat´ıv tomb ´ BytesMessage : bajtsorozat StreamMessage: Java primit´ıv t´ıpusu´ adatokat tartalmazo´ adatfolyam ´ ObjectMessage: szerializalhat o´ Java objektum
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
´ ´ esei ´ JMS hasznalat tipikus lep
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
´ evel ´ ´ uk lekerj 1. JNDI seg´ıtseg ¨ a ConnectionFactory-t. ´ ashoz ´ ´ Ez tartalmazza a kapcsolod szuks ¨ eges ´ ´ evel ´ parametereket. Ennek seg´ıtseg kapcsplatot nyitunk az uzenetrendszerrel (Connection). ¨ ´ evel ´ ´ 2. A Connection seg´ıtseg letrehozunk egy Session ´ es ´ objektumot. Ez testes´ıti meg az uzenetk uld ¨ ¨ es ´ munkamenetet. ´ fogadas ´ ´ es ´ architektur ´ ol ´ fugg ˝ ´ 3. Vegpontt ol letrehozzuk az ´ at ¨ oen ˝ illetve fogado´ objektumokat. uzenetk uld ¨ ¨ o, ◮ ◮
˝ QueueSender, TopicPublisher kuld ¨ o: ´ QueueReceiver, TopicSubscriber fogado:
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
´ ak ´ Peld
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
´ ´ ult, Mindharom projekt Netbeansben kesz ¨ t´ıpusa: Enterprise Application Client ◮
QSender
◮
SyncQReceiver
◮
AsyncQReceiver
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
http://www.ms.sapientia.ro/˜manyi/QSender.txt http://www.ms.sapientia.ro/˜manyi/SyncQReceiver.txt http://www.ms.sapientia.ro/˜manyi/AsyncQReceiver.txt
¨ ´ ıtese ´ Uzenetbabok kesz´
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
◮ ◮
aszinkron uzenetfogyaszt o´ ugyfelek ¨ ¨ ´ ak ´ a MessageListener interfeszt ´ implementalj
◮
¨ ´ uk, ´ nincs kozvetlen interfesz sem pedig ¨ sem lokalis, ´ ´ eshez ´ tavoli eler
◮
´ ezzel a komponenssel indirekt modon, az ´ uzenetsoron keresztul, ¨ ¨ lehet kommunikalni ˝ od ¨ o˝ komponensek rejtozk
◮
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
´ MessageListener interfesz
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak
import javax.jms.*;
JMS API ´ technologia ´ ak ´ peld
public interface MessageListener{ public void onMessage( Message message); }
¨ Uzenetbab I package jms; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.*;
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit ¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
@MessageDriven( mappedName = "jms/myQueue", activationConfig = { @ActivationConfigProperty (propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty (propertyName = "destinationType", propertyValue = "javax.jms.Queue") }
¨ Uzenetbab II )
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
public class MessageListenerBeanBean implements MessageListener { public void onMessage( Message message ){ TextMessage msg = null; try{ if( message instanceof TextMessage){ msg = (TextMessage) message; System.out.println( "Received message: "+msg.getText()); } else{ System.out.println( "Message of wrong type "); }
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld
¨ Uzenetbab III
Java ´ ak ´ technologi ˝ as ´ 14. eload Java Message Service ANTAL Margit
} catch( Exception e ){ System.out.println( "Exception: "+ e.getMessage()); } } }
¨ Uzenet´ ıtasi ´ tovabb´ ´ mintak JMS API ´ technologia ´ ak ´ peld