300 likes | 473 Views
Java Enterprise Edition. Gabriele Tolomei DAIS – Università Ca ’ Foscari Venezia. Java Web Services. Web Services: SOAP vs. RESTful. 2 diversi tipi di “Web Services” I Web Services SOAP sono quelli “ classici ”
E N D
Java Enterprise Edition Gabriele Tolomei DAIS – UniversitàCa’ FoscariVenezia
Web Services: SOAP vs. RESTful • 2 diversi tipi di “Web Services” • I Web Services SOAP sonoquelli “classici” • Si basanosulloscambio di messaggi SOAP (un dialetto XML) sulprotocollo HTTP • Fornisconoilsupporto per transazioni, sicurezza, scambioasincrono di messaggi, etc. • Approccio “pesante” • I Web Services RESTfulsonopiù “recenti” • Si basanoesclusivamentesulloscambio di messaggitramiteprotocollo HTTP (GET, POST, PUT, DELETE) • Il contenutodeimessaggièsolitamente JSON o XML • Approccio “leggero”
Java Web Services: SOAP vs. RESTful • Java mette a disposizionemoltelibrerie per costruireedinteragire con i Web Services • Alcuniesempi di librerie per i Web Services SOAP sono: • JAX-WS noi ci concentreremosuquestalibreria! • Apache Axis • Alcuniesempi di librerie per i Web Services RESTfulsono: • Restlets • Spring REST Facilities
Web Services SOAP • Nuovatecnologiacheconsentel’interazione e l’interoperabilitàtraapplicazionidistribuite • Sonoapplicazioni a séstantichepossonoesserepubblicate, localizzate, ed invocate in modoremoto (via Internet) • I Web Services possonoimplementaresemplicifunzioni ma ancheprocessipiùcomplessi
Web Services SOAP • Costituiscono un altroesempio di Remote Procedure Call (RPC) • Sonoindipendentidallapiattaforma e dallatecnologia • Ad es. un client scritto in C puòinteragire con un WS in esecuzionesu un container Java EE • Si basanosu standard noti: HTTP + XML • Menoefficientirispetto ad altresoluzioni come RMI, Jini, CORBA, DCOM, etc. ma più “facili”
Service Oriented Architecture (SOA) • Modello di architettura “a servizi” • Glielementi di questomodellosono: • SOAP (Simple Object Access Protocol) • Specificailformato del messaggio, l’encoding, e tutte le convenzioni per rappresentare la chiamata e la rispostadellaproceduraremota • UDDI (Universal Description Discovery and Integration) • Standard per la pubblicazionedei WSs • WSDL (Web Service Description Language) • “Manifesto” del WS (descrizionedellecaratteristiche del servizio)
JAX-WS: Java API for XML-bases Web Services • Chiamata di proceduraremotasu XML • Scambio di messaggi via SOAP • Trasmissionedeimessaggi via HTTP • JAX-WS “nasconde” allosviluppatore la complessità del protocollo SOAP • Il supporto a runtime traduce le chiamatedella API JAX-WS da/a messaggi SOAP • Consentel’accesso a WS in esecuzionesualtrepiattaforme
JAX-WS: Java API for XML-bases Web Services • Chiamata di proceduraremotasu XML • Scambio di messaggi via SOAP • Trasmissionedeimessaggi via HTTP • JAX-WS “nasconde” allosviluppatore la complessità del protocollo SOAP • Il supporto a runtime traduce le chiamatedella API JAX-WS da/a messaggi SOAP • Consentel’accesso a WS in esecuzionesualtrepiattaforme
JAX-WS: Java API for XML-bases Web Services • Lato server: • Lo sviluppatoredeve solo specificare le procedure remote cheil WS espone • Ovverodefinireimetodi in un’intefacciaappositascritta in Java • Lo sviluppatoreimplemental’interfacciacreata in una o piùclassitramitel’uso di “annotazioni” (@) • Lato client: • Si crea un “proxy” (ovvero un oggetto locale al client cherappresentailservizioremoto) • Si invocanoimetodisul proxy locale. • La libreria JAX-WSpenserà a “tradurre” le chiamateaimetodisul proxy locale in chiamate al servizioremoto via SOAP • Infine, le risposte SOAP ottenute dal servizioremotosarannonuovamentegestite da JAX-WS e tradotte per il client
Web Services suJBoss • Su JBoss 5.x icomponenti Java EE possonoagiresia da “fornitori” (providers) che “consumatori” (consumers) di Web Services • Le applicazioni Java EE possonoesporre un WS come: • Stateless Session Bean (EJB Tier) • Oggetto Java “tradizionale” o Plain Old Java Object (Web Tier)
Web Services suJBoss • Il supporto per i Web Services suJBossèaffidato a deploy/jbossws.sar • Il protocollo per iltrasportodeimessaggi (HTTP) ègestito dal Web container (Apache Tomcat) • Il protocollochespecificailformatodeimessaggi (SOAP) ègestito da Apache Axis • Per vedere la lista di tuttii WSs disponibilisullapropriaistanza server JBoss: http://localhost:8080/jbossws/services
Java Web Services (Web Tier) • I WSs creatinel Web Tier sonooggetti “normali” mascherati da Servlets • Nessunainterfacciaspecifica da implementare come nelcasodelleHttpServlet
Java Web Services (Web Tier) • Creare un progetto Web dinamicosu Eclipse • Ad es., HelloWebService • Definire un package • Ad es., it.sipe.javaee.ws.example • Creareunanuovaclasse Java cherappresental’end-point (punto di accesso) del WS • Ad es., HelloWebService • Nota chesuJBossilnome di questa pseudo-Servlet NONdeveessere del tipo *Servlet.java • Implementareilmetodo del servizio • Ad es., hello(String nome)
Java Web Services: Annotazioni • @WebService èobbligatoria e specificache la classeè un Web • @SOAPBinding specificailtipo di binding SOAP unavoltadeployatoilservizio (RPC) • @WebMethod esponeilmetodo come parte deiserviziofferti dal WS • @WebResult indicailrisultatodell’invocazione del metodo • @WebParam parametro del metodo
Java Web Services: Deployment • Occorreaggiungerenel deployment descriptor (web.xml) una entry apposita (tag) chespecifichi la pseudo-Servlet cheabbiamocreato • Il nomedella pseudo-Servlet èimportante! Saràquello con cui ci riferiremoal Web Service url-pattern indicadove sitroveràil file WSDL associato al WS
Java Web Services: Packaging • Crearel’archivio .war dal progetto Web dinamico • Specificareil server su cui eseguireil deployment • Verificarecheil WS siacorrettamenteelencatonellalistadei WSs disponibili: http://localhost:8080/jbossws/services
Java Web Services: Client • Qualsiasi client, per poterdialogare con ilnostro WS, deve “conoscere” le caratteristiche del/deiserviziesposti: • Firma del/deimetodi, parametri, etc. • Tuttequestecaratteristichesonocontenutesottoforma di un file XML standard (WSDL) associato al nostro WS e reperibileall’URL: http://localhost:8080/HelloWebService/sayHello?wsdl
Java Web Services: Client • Il client puòaccedere al WS in 2 modi: • Tramiteinterfaccia Java remota • Se questaèdisponibile • Solitamente se ilservizioèstatosviluppato/è in esecuzionesuambiente Java • Dinamicamente • Se non èdisponibilealcunainterfaccia • Solitamentequandoilservizioèsviluppato in un altrolinguaggio
Java Web Services: Client • Su Eclipse creare un nuovoprogetto Java (non un progetto Web dinamico) checonterràilcodice del client • Dal menu principale Run External Tools External Tool Configurations • Cliccaresu “Program”
Nome configurazione Path dell’eseguibilewsconsumeinstallatonellavostra directory JBoss (su Win usarewsconsume.bat) Progetto client su Eclipse Parametri di esecuzione
wsconsume.bat (.sh) • I parametri di esecuzionespecificano: -k indica di generareilcodicesorgente del client -p indicail package in cui creareilcodicesorgente -o indica in quale progettogenerareilcodice (nelnostrocaso, ilprogetto Java cheabbiamoappenacreato) • Eseguirecliccandosu “Run” e fare un refresh del progetto
wsconsume.bat (.sh) • Se tuttoèandato a buon fine verrannocreati 2 file: • HelloWebService.java interfaccia al Web Service • HelloWebService_Service.java “artefatto” locale lato client usato per accedere al Web Service remoto
HelloWebServiceClient.java • Infine, occorrecreare la vera e propriaclasse client cheuseràl’artefatto per invocareil Web Service remoto
Eseguireil Client: Nota • La slide seguentepresupponecheil server JBosssiastatoavviato da linea di comando (run.bat o run.sh) • Se JBossvieneavviatodall’interno di Eclipse occorre: • aggiungere la seguentedipendenzanello script di avvio -Djava.endorsed.dirs=${JBOSS_HOME}/lib/endorsed • se non presenti, copiareall’interno di questa directory iseguenti .jar da ${JBOSS_HOME}/common/lib/: • jboss-(native-)saaj.jar, jboss-(native-)jaxws.jar, jboss-(native-)jaxrpc.jar, jaxb-api.jar, xercesImpl.jar, xalan.jar, serializer.jar
Eseguireil Client • Occorrecompilareilcodicesorgente del client edeseguireil packaging (.jar) • Spostarsinella directory di destinazione del file .jar • A secondadellaversionedellapiattaforma Java SE (runtime) usatatestareil client come segue: • Java SE 5 occorre far uso di librerieinclusenel server JBoss (Java EE) ovveroutilizzareil tool wsrunclient.bat (.sh) chesitrovanella directory ${JBOSS_HOME}/bin wsrunclient.bat–classpathHelloWebServiceClient.jarit.sipe.javaee.ws.example.client.HelloWebServiceClient • Java SE 6 include le librerie JAX-WS per cui èsufficiente java –classpathHelloWebServiceClient.jarit.sipe.javaee.ws.example.client.HelloWebServiceClient
Web Service come Stateless Session Bean • Èpossibileesporreil WS come uno Stateless Session Bean • Creare un nuovoprogetto EJB su Eclipse • Aggiungereuno Stateless Session Bean (ad es. HelloWSBean.java) • Aggiungere le annotazioniviste in precedenza (@WebService, @WebMethod, etc.)