Serviciul de mesagerie oferit de Java şi arhitecturile asociate reprezintă o alternativă la metodele de comunicare clasice şi arhitecturile asociate, precum RPC şi sitemele distribuite. Gradele de încredere, flexibilitate, extensibilitate şi modularitate ale unei aplicaţii sunt mult mai mari prin folosirea acestor arhitecturi decât în cazurile clasice, anterior amintite.
Iată alte câteva dintre avantajele folosirii sistemului de mesagerie:
Dezvoltarea serviciului de mesagerie a avut numeroase momente importante în ultimii zece ani. Apariţia noilor tehnici si tehnologii printre care Message Driven Bean (MDB), Spring messaging framework, Event Driven Architecture, Service-Oriented Architecture, RESTful JMS interfaces şi Enterprise Service Bus (ESB) sunt doar câteva dintre reperele importante în această dezvoltare.
Serviciul de mesagerie este gestionat prin intermediul unui API, ajuns la versiunea 1.1. Acesta este de fapt a doua versiune a specificaţiilor, după versiunea 1.0 iniţială. Platforma cu versiunea 7 a Enterprise Java, care este aproape de a fi lansată oficial, aduce o nouă versiune a specificaţiilor JMS şi anume 2.0. Îmbunătăţirile sunt numeroase, cele mai multe fiind pe partea de simplificare a codului şi adaptarea la noile dezvoltări ale tehnologiilor (trimiterea asincronă a mesajelor, introducerea factory-urilor, etc).
Cartea pe care v-o supun atenţiei, Java Message Service, a doua ediție, avându-i ca autori pe Mark Richards, Richard Monson-Haefel şi David A. Chappell, reprezintă un ghid complet pentru folosirea mesajelor şi a arhitecturilor bazate pe acestea.
Împărţită în 11 capitole, cartea prezintă gradual aspecte legate de atingerea performanţei în utilizarea serviciului de mesagerie în Java.
Dacă în primul capitol se discută aspectele generale legate de mesaje, precum consideraţii şi paralele cu alte arhitecturi, în capitolele doi, trei, patru şi cinci se prezintă cam tot ce ar trebui să ştie un novice despre această arhitectură. Anatomia unui mesaj cuprinde trei părţi importante: header-ele, proprietăţile şi tipurile de mesaje. Apoi, folosirea mesajelor point-to-point şi publish-and-subscribe sunt descrise cu discuţii asupra variantelor posibile de implementare. Fiecare dintre aceste capitole sunt ilustrate din plin cu exemple concludente. De la o aplicaţie de chat clasică pîna la o aplicaţie de împrumut şi creditori, toate scot în evidenţă aspectele teoretice prezentate.
Capitolul 6 se referă la filtrarea mesajelor. Filtrarea dintr-o coada sau dintr-un topic se face prin selectorii de mesaje. Selectorii de mesaje se aplică consumatorilor de mesaje. Consumatorii vor primi doar acele mesaje ce satisfac condiţiile de filtrare. Selectorii vor folosi proprietăţile şi header-ele de mesaj pentru a testa expresiile condiţionale ale filtrelor. Capitolul se încheie cu consideraţii privitoarele la design-ul aplicaţiilor ce folosesc filtre.
Capitolul şapte este împărţit în două subpărţi înrudite, prima legată de modul de confirmare al mesajelor şi implicit de consumare al acestora, iar cea de-a doua legată de tranzacţii. Tranzacţiile JMS sunt determinate de perspectiva diferită pe care producatorul şi consumatorul o au faţă de un mesaj. Producătorul are un contract cu serverul de mesaje ce asigură că mesajul va fi furnizat serverului. Serverul are un contract cu consumatorul prin care se asigură că mesajul îi va fi livrat. Cele două operaţii sunt separate, ceea ce este un beneficiu indiscutabil pentru mesageria asincronă. Tranzacţiile urmăresc această separare a operaţiilor de trimitere şi recepţionare, dar grupează mesajele astfel încât vor ajunge la server toate sau nici unul. Tranzacţiile JMS, deşi asemanatoare cu JTA (Java Transaction API) sunt gestionate de furnizorul de mesagerie.
Capitolul opt prezintă un mare pas înainte în gestionarea optimă a acestei arhitecturi şi anume Message-Driven Bean-urile (MDB). MDB-urile sunt componente logice, care se instanţiază automat de către container şi care asteaptă şi consumă mesajele primite de la diverşi producători. Avantajele sunt substanţiale pentru că întreg ciclul de viaţă este gestionat de container, iar procesele asincrone primesc un suport considerabil. Capitolul se încheie cu bune practici de folosire aMDB-urilor şi anume pattern-ul facade.
Capitolul nouă prezintă suportul oferit de Spring pentru dezvoltarea aplicaţiilor bazate pe JMS.
Capitolul zece este concentrat pe cosideraţii de desfăşurare pe server a resurselor folosite de arhitecturile JMS.
În sfârșit, ultimul capitol se bazează pe consideraţii asupra design-ului mesageriei, cu discuţii punctuale asupra destinaţiilor interne sau externe, design-ul mesageriei request/reply, dar şi anti-pattern-uri în design-ul de mesagerie.
Cartea cuprinde şi patru appendix-uri relativ la API-ul JMS, message header-e, message properties şi instalarea, respectiv, configurarea lui ActiveMQ.
Părerea mea este că serviciul de mesagerie oferit de Java nu este folosit, probabil pentru că nu este cunoscut suficient, la adevăratul său potenţial. Avantajele majore evidenţiate la începutul recenziei alături de îmbunătăţirile aduse de versiunea 2.0 fac ca acest serviciu să merite un interes mult mai mare decât cel actual. Cred că la nivel de backend, pe parte de comunicare asincronă, JMS şi MDB sunt soluţii excelente.
Vă doresc lectură plăcută şi aştept cu interes discuţii pe acest subiect pe programez.ro !