JMS WebServices Petr Aubrecht CA Je 10 druhů lidí: ti, kteří rozumí binárnímu kódu, a ti, kteří ne
Co dnes probereme JMS posílání zpráv textové zprávy, objekty WebServices vzdálené volání funkcí oboje je dostupné v JEE WS je dostupné i v JRE (jednoduchý web server) vhodné pro integraci různých systémů
JMS
JMS Java Messaging System asynchronní komunikace robustní řešení, zaručené doručení zprávy volitelně priority, timeout Loosely coupled communication, Message-Oriented Middleware je možné kombinovat spojovat různé aplikace vlastní implementace je záležitost implementace, definováno je rozhraní pro uživatele např. Glassfish má connectory pro připojení na další systémy legacy systémy, CORBA, mail, Jabber/XMPP
JMS v případě JEE se o veškerou agendu stará kontejner connections, vytváření zpracovávajících objektů škálování, příp. load balancing schéma životní cyklus
Message Driven Bean Jsou dva typy posílání zpráv, je potřeba zaregistrovat (!) queue, point to point messaging domain topic, publish/subscribe messaging domain zpracování může být synchronní (volání receive) asynchronní (listener) Posílat se mohou zprávy textové objektové dále Map, Bytes, Stream, Empty zprávy mohou mít textové atributy (key/value)
Queue, Topic Queue Topic
JMS zpráva Definuje několik typů zpráv Jak je zpráva serializována už definováno není Zpráva má hlavičku, properties a tělo Hlavička pro routing zprávy delivery mode, msg ID, timestamp, priorita, ReplyTo, msg type Properties (jméno, hodnota) Aplikační + MOM specifické údaje Díky unifikaci zpráv lze vybírat zprávy podle údajů v hlavičce (tzv. Selektor) (SQL 92 subset) Tělo Stream, Map, Text, Object, Bytes
Definice queue/topicu @MessageDriven(mappedName = "jms/TestQueue", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class NewMessageBean implements MessageListener { public NewMessageBean() {} public void onMessage(Message message) { }
Poslání zprávy @Resource(name = "jms/TestQueue") private Queue testQueue; @Resource(name = "jms/TestQueueFactory") private ConnectionFactory testQueueFactory; ... Connection connection = testQueueFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(testQueue); messageProducer.send(createJMSMessageForjmsTestQueue(session, session.createTextMessage(„Ahoj!“)));
Implementace JMS Komerční IBM MQ, Sonic MQ, Fiorano, BEA, Sun MQ Open Source OpenJMS, ActiveMQ, JbossMessaging, JBossMQ mom4j, JORAM, MantaRay, UberMQ
Web Service
Web Service protokol založený na XML a HTTP původní motivace byla jednoduchost a využití stávajících zvládnutých technologií Corba byla na Microsoft příliš složitá (i to XML je pro ně těžký, ale už je to lepší) průchod skrz firewally jak psát nové firewally, aby omezily útoky přes WS? opravdu snadná implementace (na základní úrovni)
W3C definice A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine- processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.
Technologie XML (Extensible Markup Language) WSDL (Web Services Description Language) UDDI (Universal Description, Discovery and Integration) A Web Service is located by its listing in a UDDI SOAP (Simple Object Access Protocol) Web Services communicate using SOAP Dále XML-RPC JAX-RPC, JAX-WS
UDDI (Universal Description, Discovery and Integration) Popisuje služby (services), podobné zlatým stránkám Slouží k vyhledání vhodné služby pro klienta “creates a platform-independent, open framework for describing services, discovering businesses, and integrating business services using the Internet.” Přístup z Javy pomocí JAXR technologie
WSDL (Web Services Description Language) Definuje interface dané služby Types: datové typy (např. pomocí XSD) Messages: typy zpráv pro komunikaci Operations: akce podporované službou Bindings: komunikační protokoly použité pro přenos dat Ports: komunikační brány (binding + adresa) Service: popis daní služby
SOAP (Simple Object Access Protocol) “Lightweight” protokol, nezávislý na platformě a programovacím jazyku Obálka a tělo zprávy Typicky přenášený pomocí HTTP Typicky request-response komunikace
Typické použití Klient kontaktuje UDDI registr aby nalezl vhodnou službu (web service) Klient získá WSDL dané služby Klient vytvoří SOAP zprávu a pošle ji službě Služba zpracuje požadavek a může odeslat SOAP odpověď
Java technologie pro Web Services JAX-RPC: API for XML-based RPC JAXR: Java API for XML Registries JAXB: Java Architecture for XML Binding JAXP: API for XML Processing JAXM: API for XML Messaging SAAJ: SOAP with Attachments API JAX-WS: Java API for XML Web Services Nahrazuje JAX-RPC
Prostředí Web Services v Javě Apache Axis od Apache konzorcia, verze 2.0 je stále vidět JEE kontainer (Glassfish, JBoss, komerční) řeší i security, transakce integrují technologie z předchozí strany stateless session beans mohou být zpřístupněny pro WS JSE základní podpora pro klienta i server
RESTful Web Services Jiný způsob jak vytvářet Web Services REST = Representational State Transfer Inspirováno WWW (resources, URI, ...) Jednoznačná identifikace zdroje pomocí URI http://mycomp.com/eshop/coffee/item/14582 Veškerý stav přenášen v URI obecný interface pro přístup ke zdrojům (e.g., HTTP GET, POST, PUT, DELETE) Architektonický styl, ne standard
Závěr Vyzkoušejte, není to složité. Další čtení Sun JEE tutorial: http://java.sun.com/javaee/5/docs/tutorial/doc/bncgl.h tml Java Passion:http://www.javapassion.com/javaee_advanced / Celé se to začne komplikovat, když dojde na zabezpečení, login, transakce atd. Objeví se nekompatibilita, takže pro opravdu kritická nasazení nasadit řešení jednoho výrobce (typicky buď všechno od MS nebo nic :-) ).