1 / 65

Integr ácia aplikácií : Technol ógie 1 - Komunikácia

Integr ácia aplikácií : Technol ógie 1 - Komunikácia. Obsah. HTTP (Hypertext Transfer Protocol) XML SOAP WSDL (Web Service Description Lang.) JMS (Java Message Service) REST (Representational State Transfer). HTTP. Hypertext Transfer Protocol. HTTP. HTTP: princíp fungovania.

nuncio
Download Presentation

Integr ácia aplikácií : Technol ógie 1 - Komunikácia

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Integrácia aplikácií: Technológie 1 - Komunikácia

  2. Obsah • HTTP (Hypertext Transfer Protocol) • XML • SOAP • WSDL (Web Service Description Lang.) • JMS (Java Message Service) • REST (Representational State Transfer)

  3. HTTP Hypertext Transfer Protocol

  4. HTTP HTTP: princíp fungovania adresa dokumentu (URL): http://server/dokument

  5. Schéma fungovania Proxy servery sa používajú typicky kvôli bezpečnosti (filtrovanie URL, filtrovanie obsahu prichádzajúcich dokumentov) alebo zvýšeniu výkonu (caching).

  6. Požiadavka klienta na sprístupnenie dokumentu /www/index.html HTTP 1.1: RFC 2616

  7. Using HTTP for application communication method: GET; parameters in URL (limited size) GET /getCustDetails?id=100347 HTTP/1.1 method: POST; parameters in message body POST /getCustDetails HTTP/1.1 Content-Type: text/xml <?xml version=“1.0” encoding=“UTF-8”?> <Customer> <ID>100347</ID> </Customer>

  8. Properties • simple • rich existing infrastructure • application servers • proxy servers and load balancers • standard security solution (HTTPS = HTTP + SSL/TLS) • monitoring tools, test clients, client libraries, ... • almost no compatibility issues at the protocol level • synchronous mode • both parties + network connection must be available • in order to be reliable the client must implement retry mechanisms • server should respond in “reasonable” time (max. minutes)

  9. HTTP a Java java.net • URL • URLConnection • HttpURLConnection • HttpsURLConnection

  10. Príklad URL u = new URL("http://www.uniba.sk/"); URLConnection c = u.openConnection(); System.out.println("Content type: " + c.getContentType()); Map h = c.getHeaderFields(); dump(h); InputStream is = c.getInputStream(); int ch; while ((ch = is.read()) != -1) System.out.write(ch); is.close(); Communication/src/http/HttpClient.java

  11. XML eXtensible Markup Language

  12. Čo je to XML • XML je štandardný, na platforme nezávislý spôsob reprezentácie údajov • podobne ako HTML uzatvára údaje do značiek (tags), ale: • pri HTML sa značky týkajú spôsobu zobrazovania údajov, kým pri XML opisujú význam údajov • XML je rozšíriteľný (konkrétne značky definuje používateľ) <cenník> <káva> <názov>Nescafé</názov> <cena>167</cena> </káva> <káva> <názov>Jacobs</názov> <cena>213</cena> </káva> </cenník>

  13. XML dokument • má fyzickú a logickú štruktúru • základom logickej štruktúry je element • prázdny • obsahujúci text a/alebo vnorené elementy • element môže mať tiež atribúty (meno="hodnota") <Cennik> <Kava nazov="Nescafé" cena="167" /> <Kava nazov="Jacobs" cena="213"> <Poznamka>platí do 10.6.2004</Poznamka> </Kava> </Cennik>

  14. Práca s dokumentom XML • SAX (Simple API for XML) • parser, ktorý číta dokument XML a pri výskyte rôznych štrukturálnych prvkov volá používateľom určené funkcie • DOM (Document Object Model) • nástroj na reprezentáciu dokumentu formou stromu, umožňujúci čítania a modifikáciu

  15. DOM: príklad public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Document doc = factory.newDocumentBuilder().parse(new File("test.xml")); NodeList kavy = doc.getElementsByTagName("Kava"); for (int i = 0; i < kavy.getLength(); i++) { Element kava = (Element) kavy.item(i); System.out.println(kava.getAttribute("nazov") + ": " + kava.getAttribute("cena")); } } Communication/src/xml/*.java

  16. Schéma XML dokumentu • XML nedefinuje význam mien elementov a ich atribútov • s výnimkou rezervovaných mien začínajúcich na „xml“ • schéma XML dokumentu, t.j. štruktúra a dátové typy elementov a ich atribútov môže byť popísaná v špeciálnom jazyku: • Document Type Definition • XML Schema • ak chcú aplikácie komunikovať, musia sa okrem syntaxe dohodnúť na význame (sémantike) jednotlivých elementov a atribútov • nad rámec XML a DTD / XML Schema

  17. XML Schema • schéma – dokument v jazyku XSD určuje množinu vyhovujúcich XML dokumentov (inštancií tejto schémy) • popisuje elementy a ich atribúty prostredníctvom typov • typy sú: • jednoduché (pre atribúty a elementy obsahujúce len text) • zložené (pre elementy s podelementmi a/alebo atribútmi) • jednoduché typy: • preddefinované (rôzne textové a číselné typy, boolean, čas, ...) • odvodené (napr. reštrikciou) • zložené typy sú definované: • atribútmi a vnorenými elementmi (zoznam, počet výskytov, impl. hodnota, ...) • rozšírením (≈ dedenie) • ...

  18. string, normalizedString, token base64Binary hexBinary integer [non]positiveInteger [non]negativeInteger [unsigned][long|int|short|byte] decimal, float, double boolean dateTime, date, time duration gYear, gYearMonth, gMonth, gMonthDay, gDay Name QName NCName anyURI language ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS XML Schemapríklady jednoduchých typov

  19. <xsd:element name="Cennik"> <xsd:complexType> <xsd:sequence> <xsd:element minOccurs="0" maxOccurs="unbounded" ref="Kava"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Kava"> <xsd:complexType> <xsd:sequence> <xsd:element name="Poznamka" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="nazov" type="xsd:string"/> <xsd:attribute name="cena" type="xsd:int"/> </xsd:complexType> </xsd:element> <Cennik> <Kavanazov="Nescafé" cena="167"/> <Kavanazov="Jacobs" cena="213"> <Poznamka>do 10.6.2004</Poznamka> </Kava> </Cennik>

  20. Java API for XML Binding (JAXB) • umožňuje pracovať so (štruktúrovanými) XML dokumentmi ako s objektmi • podporuje dva režimy • XML schema → java (xjc) • java → XML schema (schemagen)

  21. public static void main(String[] args) throws JAXBException, IOException { Unmarshaller unmarshaller = JAXBContext.newInstance("xsd.generated").createUnmarshaller(); Cennikc = (Cennik) unmarshaller.unmarshal (new FileReader("test.xml")); for (Kava k : c.getKava()) System.out.println(k.getNazov() + ": " + k.getCena()); } Communication/src/xsd + xsd/generated

  22. XML Namespaces • názvy elementov a atribútov môžu byť globálne jednoznačné, ak sa pre ne určí menný priestor (namespace) • príklady: <cenníkxmlns=“http://myshop.sk/xmlschemy”> <káva> ... <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”> <xsd:element ...>

  23. SOAP (pôvodne Simple Object Access Protocol)

  24. SOAP • protokol na posielanie XML správ medzi aplikáciami • schéma: aplikácia A (initial SOAP sender) posiela správu aplikácii Z (ultimate SOAP receiver) ktorá môže cestou prejsť aplikáciami B, C, D, ... (SOAP intermediaries) • prenosové protokoly sú rôzne • štandardizované je použitie HTTP • môže ísť aj o SMTP, MOM (napr. JMS), ... • formát správy: • SOAP Header • SOAP Body

  25. SOAP Header a Body • SOAP Header prenáša najmä riadiace informácie zaisťujúce „vyššie“ služby: • adresovanie • bezpečnosť • transakcie • spoľahlivé doručenie • ... • pozostáva z položiek (Header Blocks) • zovšeobecnená obdoba položiek hlavičky v HTTP, RFC822, ... • SOAP Body prenáša samotný obsah správy • obsah nie je predpísaný – vec komunikujúcich strán

  26. Príklad <env:Envelopexmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <objxmlns="http://obchod.sk/schemy"> <káva>Nescafé</káva> <množstvo>100</množstvo> </obj> </env:Body> </env:Envelope> <env:Envelopexmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <wsse:Securityenv:mustUnderstand="true"xmlns:wsse=...> <wsse:UsernameToken> <wsse:Username>peter</wsse:Username> <wsse:Password>xxxxxx</wsse:Password> </wsse:UsernameToken> </wsse:Security> ... </env:Header> <env:Body> <objxmlns="http://obchod.sk/schemy"> <káva>Nescafé</káva> <množstvo>100</množstvo> </obj> </env:Body> </env:Envelope> značky definované v SOAP značky definované vo WS-Security značky definované aplikáciou

  27. Čo definuje SOAP • v položke hlavičky (header block): • atribút role: pre koho je táto položka určená (URI) • atribút mustUnderstand: či jej musí príjemca rozumieť • atribút relay: čo má príjemca spraviť, ak jej nerozumie • spôsob signalizácie chýb (v Body) • spôsob realizácie RPC (nepovinný!) <env:Body> <názov operácie> <parameter1> hodnota </parameter1> <parameter2> hodnota </parameter2> ... </názov operácie> </env:Body> • detaily prenosu prostredníctvom HTTP

  28. Verzie SOAP • SOAP 1.1 – vo forme W3C Note • SOAP 1.2 – vo forme W3C Recommendation (jún 2003) • dôraz kladený na „ideovú čistotu“ a rozšíriteľnosť

  29. Properties • platform neutral, generally accepted • rich programming support • though compatibility is not 100% (as of today) • extensible • though more advanced specifications are not so widespread as the basic protocol • human-friendly (sometimes) • due to the use of XML • performance issues • though alternative XML encodings are emerging

  30. WSDL Web Services Description Language

  31. WSDL Opisuje formát správ prijímaných a posielaných webovou službou: • na abstraktnej úrovni (messages, operations, port types) • na konkrétnej úrovni (bindings, ports, services)

  32. Abstraktný opis(1) • rozhranie (portType) pozostáva z popisu množiny súvisiacich operácií • operácia (operation) pozostáva z 1, 2 alebo viacerých správ (vstup, výstup, [chyby]) • správa (message) – pozostáva z častí (parts) definovaných ako elementy alebo typy cez XML Schema

  33. <wsdl:definitions ...> <wsdl:types> <xsd:schema ...> <xsd:element name="A" type="xsd:double"/> <xsd:element name="B" type="xsd:double"/> <xsd:element name="C" type="xsd:double"/> </xsd:schema> </wsdl:types> <wsdl:message name="Input"> <wsdl:part name="A" element="tns:A"/> <wsdl:part name="B" element="tns:B"/> </wsdl:message> <wsdl:message name="Output"> <wsdl:part name="C" element="tns:C"/> </wsdl:message> <wsdl:portType name="CalcPortType"> <wsdl:operation name="sum"> <wsdl:input message="tns:Input“/> <wsdl:output message="tns:Output“/> </wsdl:operation> </wsdl:portType>

  34. Konkrétny opis • element binding definuje napríklad (pre SOAP 1.1) • ktoré z (abstraktných) častí správy sa mapujú do SOAP Body a ktoré do SOAP Headers (a akým spôsobom) • štýl volania: rpc alebo document • štýl kódovania: encoded alebo literal • použitý transport (napr. HTTP, SMTP, JMS) • element service pozostáva z podelementov port, ktoré definujú, na akých fyzických adresách (napr. URL) sú prístupné jednotlivé bindings

  35. <binding xmlns:ns1="http://test/" name="CalcPortBinding“ type="ns1:CalcPortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document“/> <operation name="sum"> <soap:operation soapAction=""/> <input> <soap:body use="literal“/> </input> <output> <soap:body use="literal“/> </output> </operation> </binding>

  36. <servicename="CalcService"> <portname="CalcPort" binding="tns:CalcPortBinding"> <soap:address location="http://localhost:9001/calc"/> </port> </service>

  37. Verzie WSDL • WSDL 1.1 – vo forme W3C Note • WSDL 2.0 – W3C Recommendation (jún 2007)

  38. WS-IWeb Services Interoperability Organization • štandardy pre webové služby sú veľmi flexibilné, čo spôsobuje niekedy problémy • snaha definovať tzv. profily zabezpečujúce interoperabilitu • profil = výber z existujúcich štandardov • príklad: WS-I Basic Profile 1.1 (august 2004) • špecifikuje podmnožinu SOAP 1.1, WSDL 1.1 a UDDI 2 • napr. vylučuje používanie SOAP Encoding

  39. Java API pre XML • Java API for XML Processing (JAXP) • prístup k XML dokumentom (SAX, DOM) • prístup k službám XSL procesora a k XPath • Java Architecture for XML Binding (JAXB) • generovanie javovských tried pre čítanie a zápis (unmarshalling / marshalling) konkrétnych tried XML dokumentov • Java API for XML-based Web Services (JAX-WS) • SOAP (implementácia klientov a serverov) • predtým JAX-RPC • SOAP with Attachments API for Java (SAAJ) • nízkoúrovňová práca so SOAP • Java API for XML Registries (JAXR) • prístup k adresárovým službám pre Web Services (napr. UDDI)

  40. JAX-RPC / JAX-WS • princíp podobný ostatným RPC a CORBA • programátor definuje rozhranie / službu • nástroje JAX-WS vygenerujú podporný kód na strane klienta (stub) aj servera (ties) • programátor vytvorí „čistý“ kód na strane klienta aj servera • začať je možné z: • javovského rozhrania / služby (a z neho generovať WSDL) • WSDL (a z neho generovať javovské rozhranie)

  41. JAX-WS (2)

  42. package ws.server1; import javax.jws.WebService; @WebService() public class Calc { public double sum(double a, double b) { return a + b; } } ------------------------------------------------------------ package ws.server1; import javax.xml.ws.Endpoint; class CalcMain { public static void main(String[] args) { Endpoint.publish("http://localhost/calc", new Calc()); } }

  43. Java → WSDL Server • (v adresári Communication) • \jdk\bin\wsgen -cp bin -s src -d bin ws.server1.Calc -keep • vytvára artefakty potrebné na spustenie webovej služby • spustenie ws.server1.CalcMain spustí webovú službu • o.i. sprístupní WSDL na adrese http://localhost:9000/calc?wsdl Klient • \jdk\bin\wsimport http://localhost:9000/calc?wsdl -keep -p ws.client1.jaxws -s src -d bin • získa WSDL, vytvára java stub(s)

  44. WSDL→ Java Server • \jdk\bin\wsimportsrc\ws\server2\CalcService.wsdl -keep -p ws.server2.jaxws -s src -d bin [-b src/ws/server2/binding.xml] • vytvára pomocný kód na strane servera • binding.xml (nepovinné) v tomto prípade kvôli logginghandler • spusenie ws.server2.CalcMain spustí webovú službu Klient (bez zmeny) • \jdk\bin\wsimport http://localhost:9001/calc?wsdl -keep -p ws.client2.jaxws -s src -d bin • získa WSDL, vytvára javastub(s)

  45. <types> <xsd:schema ...> <element name="sum"> <complexType> <sequence> <element name="A" type="xsd:double"/> <element name="B" type="xsd:double"/> </sequence> </complexType> </element> <element name="sumResponse"> <complexType> <sequence> <element name="C" type="xsd:double"/> </sequence> </complexType> </element> </xsd:schema> </types> <message name="sum"> <part name="data" element="tns:sum"/> </message> <message name="sumResponse"> <part name="data" element="tns:sumResponse"/> </message> <portType name="CalcPortType"> <operation name="sum"> <input message="tns:sum"/> <output message="tns:sumResponse"/> </operation> </portType>

  46. Java Message Service

  47. Java Message Service (JMS) • štandardné API pre MOM (Messaging Oriented Middleware) • dnes je súčasťou Java Platform, Enterprise Edition • produkty – komerčné • IBM WebSphere MQ family (pôvodne MQSeries) • Progress SonicMQ • FioranoMQ • všetky implementácie Java EE (J2EE) • free / open source • Apache ActiveMQ • JBoss Messaging • JORAM, OpenJMS, MantaRay, ...

  48. Základné pojmy • implementácia (JMS provider) • klienti (JMS clients) • správy (messages) • sprostredkovatelia (brokers)

  49. Fronty • klient posiela správu do frontu (queue) • správa tam čaká, kým ju(iný) klient neprevezme • môže byť viac príjemcov, ale každá správa je doručená práve jednému (z nich) • tiež známe ako režim komunikácie bod-bod (point-to-point)

  50. Topics • klient posiela správu natopic • správa je doručenávšetkýmklientom, ktorí • sa prihlásili (subscribe) na odber správ z tohto topic-u • sú v súčasnosti pripojeník brokeru (výnimka: durable subscriptions) • tiež známe ako režimpublish/subscribe

More Related