Can you summarize the following document?
        
  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.

  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čí.

  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:

  JMS a Java API:

  Typicky se JMS aplikace skládá z několika částí: JMS Clients, Non-JMS Clients, Messages, JMS Provider, Administered Objects.  Popis objektů JMS:  Souběžný přístup k objektům je v rámci JMS podporován pouze pro Destination, ConnectionFactory a Connection, tedy pro ty objekty, které přirozeně musí obsluhovat mnoho přístupů současně. Ostatní objekty jsou navrženy pro použití jen jedním logickým vláknem v určený čas. V případě Session je toto omezení uplatněno hlavně proto, že je velmi těžké implementovat mnohovláknové transakce a přineslo by to více škody než užitku. Pro složitější aplikace, které potřebují tuto funkcionalitu, je možné použít více Session najednou.

  Prostředkem komunikace v messaging systémech jsou samozřejmě zprávy a v mnoha messaging systémech se forma i obsah zpráv dost liší. JMS poskytuje způsoby jak jednotně přistupovat ke zprávám a tedy jakou mají mít formu a druhy obsahu. Zpráva v JMS se skládá ze tří částí:

  Takto se označují zprávy, které obsahují jednoduchý String a předpokládá se pouze posílání textu. Téměř ideální pro posílání zpráv pomocí XML, což je v podstatě pouhý text.  Používá se typ objektu TextMessage a s pomocí Session se vytvoří skrze createMessage(). Na vytvořené zprávě pak stačí zavolat metodu setText() do které se předá příslušný String. Dále už je zpráva hotova a může být předána messaging systému.

  Tyto zprávy slouží k posílání entit typu Object, ale pouze serializovatelných. JMS umožňuje posílat i Collection objekt (např. List, Set), tedy soubor více serializovatelných objektů v jedné zprávě.  Používá se pro to typ objektu ObjectMessage a na Session je třeba zavolat metodu createObjectMessage(). Před odesláním je už jen třeba pomocí metody setObject(), zavolané na vytvořené ObjectMessage zprávě, nastavit požadovaný objekt k odeslání. Následně lze zprávu předat messaging systému.

  Podstatou komunikace v MOM je asynchronní zpracování a posílání dat či informací mezi různými komponentami ve formě zpráv. Nejde ale pouze o textové řetězce, jak by napovídal název zpráva, ale lze posílat i celé objekty různých typů a také i kolekce objektů.  Příkladem použití asynchronních zpráv je komunikace mezi aplikacemi, sloužící k vytváření návrhů smluv. Tedy pracovník vytvoří smlouvu, připraví podklady a odešle ji ke schválení (tedy je publikovatelem – publisher). Technologicky se odešle v systému objekt Smlouva s určitými parametry ve zprávě typu ObjectMessage. Zde přichází ke slovu JMS a dle použitého modelu se Provider postará o doručení, publikování atd. O několik dní později, na jiném pracovišti, klidně i v jiném státě, si pracovník odpovědný za schvalování smluv příslušný návrh vyzvedne (jako odběratel – subscriber). Po schválení se ještě může nastavit jako další odběratel příslušný nadřízený kontroly kvality práce. Výsledkem je, že se zpráva (Smlouva) dostane na místo určení a i kdyby se původní místo odeslání odpojilo od sítě či internetu, tak stále, pokud bude provider v pořádku fungovat, je ta zpráva k dispozici.
Java Messaging Services se řadí do skupiny Message Oriented 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.