Java Message Service
JMS
Java Messaging Services se řadí do skupiny Message Oritented Middleware(dále MOM), jiným názvem také Enterprise Messaging System. MOM produkty se staly nedílnou součástí firemního software pro zajištění integrace aplikací. Umožňují různým byznys komponentám fungovat dohromady a tvořit tak ucelený, spolehlivý a pružný systém. Přestože se často jedná o naprosto odlišné komponenty, tak díky prostředníkovi (MOM) mohou tyto aplikace spolu komunikovat prostřednictvím zpráv. Jedním z možných řešení je právě JMS, které poskytuje kompletní API pro vývojáře a poskytuje tím možnost, jak psát programy v Javě, které dokáží vytvářet, posílat, přijímat a číst zprávy posílané mezi aplikacemi. Soubor rozhraní a přidružené logiky definuje jak v rámci JMS přistupuje klient k prostředkům MOM. Cílem JMS je poskytnout co nejvíce konceptů a rozhraní v takové podobě, aby se minimalizoval počet konceptů, které musí programátor Javy umět, aby mohl pracovat s MOM a zprávami. Programátor se díky JMS nemusí starat o technické pozadí za koloběhem zpráv.
Message vs email
JMS není emailové API, přestože funguje na podobném principu. Základem komunikace mezi klienty v rámci JMS jsou asynchronně posílané zprávy (požadavky, události, odpovědi atd.). Tyto zprávy jsou vytvářeny a užívány aplikacemi a obsahují informace, díky kterým tyto aplikace fungují, nastavují se a koordinují svou činnost v rámci celku. Emaily jsou posílány také mezi klienty, ale výsledným cílem je uživatel – člověk.
Message system type
V oblasti MOM se běžně používají dva modely a to peer-to-peer(také point-to-point, dále P2P) a publish-subscribe(dále PS). Tyto dva modely se liší nejen počtem poskytovatelů a odběratelů zpráv, ale také způsobem jakým si odběratelé své zprávy vyzvedávají a jakým způsobem jsou zprávy publikovány. JMS dokáže pokrýt funkcionalitu obou modelů.
P2P je založen na frontách. Každá zpráva je přiřazena do určité fronty a klienti získávají z těchto front své zprávy. Není však přesně určeno kdy si klient má zprávu vyzvednout, třeba může nastat i případ, že si ji vůbec nevyzvedne. Tedy se v jedné frontě hromadí zprávy a mnoho uživatelů si je vyzvedává (one-to-many).
Oproti tomu PS model přiřazuje své zprávy určitému uzlu v kontextové hierarchii, ke kterému se odběratelé i publikovatelé přihlašují a odhlašují v průběhu doby trvání (many-to-many). Systém se stará o doručení zpráv od různých publikovatelů k mnoha různým odběratelům a systém také zajišťuje kdy a jak se zpráva odběrateli doručí.
Providers, Messages, Domains
Provider je entita, která implementuje MOM pro příslušný systém či aplikace. Provider může být implementován tak, jak ho definuje JMS (tedy Java implementace) a nebo je za providera považován adaptér na non-Java MOM, tedy lze zajistit i kompatibilitu Java aplikací s non-Java providerem.
Messages jsou hlavní podstatou MOM, tedy zprávy, kterými se zabývá provider a následně poskytovatel i konzument. Samotný JMS definuje soubor rozhraní pro zprávy, takže programátoři pracují s konzistentním API a můžou vytvářet a posílat zprávy nezávisle na druhu providera.
Domains(také Destinations) jsou buď point-to-point nebo publish-subscribe. Tyto domény byly vytvořeny jako reflexe dvou základních modelů MOM. JMS definuje různá rozhraní pro každou doménu a tím sice obtížně, ale přesto umožňuje propojení i různých modelů MOM najednou. Pro použití JMS není potřeba mít implementovány obě domény, stačí pouze jedna.
JMS neobsahuje
- JDBC - Klienti mohou použít JMS společně s JDBC v jedné transakci pro operace s databází, lze toho dosáhnout pomocí EJB, JTA.
- Java Bean - Java Beany mohou být použity s JMS pro posílání zpráv, ale JMS rozhraní nebyla vytvořena přímo pro tento způsob použití.
- Enterprise Java Bean --- JMS společně s JDBC a EJB tvoří silnou kombinaci pro vytváření enterprise services.
- Java Transaction - Klient JMS může použít JTA pro distribuované transakce. Nejedná se však o samotnou funkci JMS, ale o funkci transakčního prostředí ve kterém klient funguje.
- Java Transaction Service - Distribuované zpracování posílaných a přijímaných zpráv, které obsahují databázové updaty či další služby z oblasti JTS, může být explicitně naprogramováno, ale často je to řešeno automaticky pokud JMS klient běží v prostředí aplikačního serveru, tedy Enterprise Java Bean serveru, který je v souladu se specifikací.
- Java Naming and Directory Service - Klienti vyhledávají konfigurované JMS objekty pomocí JNDI. Přenecháním administrativních činností na JNDI se podporuje portabilita a tím jsou aplikace i lépe spravovatelné, protože tyto podpůrné činnosti (ohledně look up atd.) nejsou vloženy v kódu aplikací.
Části aplikací
Typicky se JMS aplikace skládá z několika částí: JMS Clients, Non-JMS Clients, Messages, JMS Provider, Administered Objects.
JMS Parent | P2P Domain | Pub/Sub Domain |
---|---|---|
ConnectionFactory | QueveConnectionFactory | TopicConnectionFactory |
Connection | QueveConnection | TopicConnection |
Destination | Queve | Topic |
Session | QueveSession | TopicSession |
MessageProducer | QueveSender | TopicPublisher |
MessageConsumer | QueveReceiver,QueveBrowser | TopicSubscriber |