SlideShare a Scribd company logo
1 of 28
Lezione 10: Web Service
          in Java (2)
        Corso di Programmazione in Rete
       Laurea Magistrale in Ing. Informatica
         Università degli Studi di Salerno



1
Outline

    ✦ I tipi di dato utilizzabili

    ✦ Parametri di uscita e ingresso/uscita

    ✦ Servizi stateless e stateful




2
I tipi di dato utilizzabili


    ✦ Poiché i WS devono essere indipendenti
      dal linguaggio, introducono delle
      limitazioni più forti rispetto a RMI sui tipi
      di dato utilizzabili per i parametri e i
      valori di ritorno




3
I tipi di dato utilizzabili

    ✦ Il mapping tra i tipi definiti in WSDL e i
      tipi di Java non è univoco, ma dipende
      dalla specifica libreria usata per i WS
     •   Faremo riferimento al mapping di JAX-WS
    ✦ Alcune librerie consentono di
      personalizzare il mapping quando la
      corrispondenza di default non è
      appropriata


4
I tipi di dato utilizzabili


    ✦ I tipi utilizzabili sono ristretti a:
      •   tipi atomici (es. int, boolean, ecc.)
      •   String
      •   array e List
      •   semplici JavaBeans usati come strutture




5
Array e liste

    ✦ È possibile usare array il cui tipo base sia
      tra quelli citati
    ✦ È possibile utilizzare List<T> se il tipo T è
      tra quelli citati
    ✦ Negli stub, i parametri/valori di ritorno di
      tipo array vengono comunque convertiti
      in List<T>



6
Oggetti
    ✦ È possibile usare dei semplici JavaBeans a
      condizione che abbiano un costruttore
      pubblico senza argomenti
    ✦ Vengono trasmessi solo:
     •   campi pubblici appartenenti a tipi utilizzabili
     •   proprietà accessibili attraverso coppie di metodi
         che seguono la convenzione di naming getXxxx()
         e setXxxx(), se il valore appartiene a un tipo
         utilizzabile



7
Oggetti
    ✦ NOTA BENE
     •   gli stub generati non usano la stessa classe
         definita nel server, ma una nuova classe con lo
         stesso nome che rende accessibili le proprietà con
         coppie di metodi getXxxx e setXxxx
     •   la classe definita dagli stub (e quindi vista dal
         client) non contiene gli eventuali altri metodi
         presenti nella classe usata dal server, né i campi
         che non rientrano nelle condizioni viste
         precedentemente
     •   in altre parole, gli oggetti utilizzabili si
         comportano come Data Transfer Objects: semplici
         contenitori di dati, a cui non sono associati
8
         comportamenti
Oggetti
    ✦ Esempio: sul server
      package myservice;

      public class Dimension {
      	 public int width;
      	 public int height;
      }


      package myservice;
      import javax.jws.*;

      @WebService
      public class MyService {
      	
      	 public Dimension getDim() {
      	 	 Dimension dim=new Dimension();
      	 	 dim.width=800;
      	 	 dim.height=600;
      	 	 return dim;
      	 }
      // etc etc etc
9
Oggetti
     ✦ Esempio: sul client
       package client;
       import client.stub.*;
       public class TestClient {
       	 public static void main(String args[]) {
       	 	 MyServiceService service=new TestService();
       	 	 MyService test=service.getPort(MyService.class);
       	 	 Dimension dim=test.getDim();
       	 	 int width=dim.getWidth();
                 // NOTA: non posso usare dim.width !
       	 }
       }




10
I tipi di dato utilizzabili


     ✦ Non è possibile usare direttamente come
       parametro/valore di ritorno il riferimento
       a un oggetto remoto
      •   vedremo successivamente un modo per aggirare
          (in parte) questa limitazione




11
Parametri di uscita e ingresso/uscita

     ✦ In linguaggi diversi da Java i parametri
       possono essere anche di uscita e di
       ingresso/uscita, usando il meccanismo del
       passaggio per riferimento
     ✦ Perciò operazioni definite in un WS
       possono anche avere parametri di uscita
       o di ingresso/uscita
      •   occorre un meccanismo per rappresentare questi
          parametri in Java


12
La classe Holder<T>
     ✦ La classe Holder<T> definita nel package
       javax.xml.ws è usata per rappresentare
       un parametro di tipo T
     ✦ Holder ha un campo pubblico value, che
       contiene il valore del parametro
      •   per i parametri di uscita, il metodo deve
          assegnare un valore al campo value
      •   per i parametri di ingresso/uscita, il metodo può
          usare il valore iniziale di value e può modificarlo
      •   in entrambi i casi, il nuovo valore di value verrà
          trasmesso al client
13
L’annotazione @WebParam

     ✦ Nella classe che implementa il servizio
       occorre indicare che il parametro è di
       uscita o ingresso/uscita con le seguenti
       annotazioni:
      •   @WebParam(mode=WebParam.Mode.OUT)
      •   @WebParam(mode=WebParam.Mode.INOUT)




14
Esempio
     ✦ Il server:

       package myservice;
       import javax.jws.*;
       import javax.xml.ws.*;

       @WebService
       public class Location {
       	 public void getCoordinates(
       	 	 	 @WebParam(mode=WebParam.Mode.OUT) Holder<Double> longitude,
       	 	 	 @WebParam(mode=WebParam.Mode.OUT) Holder<Double> latitude) {
       	 	 longitude.value = -13.7;
       	 	 latitude.value = 41.1;
       	 }
       }




15
Esempio
     ✦ Il client:
       package client;
       import client.stub.*;
       import javax.xml.ws.Holder;
       public class TestLocation {
       	 public static void main(String args[]) {
       	 	 LocationService service=new LocationService();
       	 	 Location loc=service.getPort(Location.class);

       	   	   Holder<Double> longitude=new Holder<Double>();
       	   	   Holder<Double> latitude=new Holder<Double>();

       	   	   loc.getCoordinates(longitude, latitude);

       	   	   System.out.println("Long: "+longitude.value);
       	   	   System.out.println("Lat: "+latitude.value);
       	   }
       }




16
Servizi stateless
     ✦ In JAX-WS gli oggetti che implementano
       un servizio sono considerati “stateless”
      •   una singola istanza dell’oggetto serve le richieste
          di tutti i client
      •   l’oggetto non può mantenere implicitamente
          traccia della conversazione con un singolo client
          ‣   Esempio: l’oggetto che implementa il service non può
              sapere se il client che fa una richiesta ha già effettuato una
              qualche forma di login, a meno che questa informazione
              non sia passata come parametro dal client stesso




17
Gestione delle sessioni

     ✦ Fino alla versione 2.1 di JAX-WS per
       mantenere una forma di stato associato a
       una sessione di lavoro c’erano due
       alternative:
      •   usare un parametro esplicito per identificare la
          sessione in tutte le operazioni
      •   usare meccanismi legati al sottostante
          meccanismo di trasporto (es. HttpSession)



18
Gestione delle sessioni
     ✦ Usare un parametro esplicito per
       identificare la sessione
      •   semplice da implementare
          ‣   al momento della prima connessione il client riceve
              (eventualmente a seguito di una verifica di identità) un
              identificatore della sessione di lavoro
          ‣   ogni altra richiesta prevede che il client passi questo
              identificatore al server
          ‣   il server usa questo identificatore come chiave in una
              struttura dati che contiene le informazioni relative alla
              particolare sessione di lavoro

      •   complica l’interfaccia con il client, che deve
          aggiungere esplicitamente questo parametro a
          tutte le operazioni
19
Gestione delle sessioni

     ✦ usare meccanismi legati al livello di
       trasporto (es. cookie HTTP)
      •   trasparente al client
      •   il server deve accedere a tali meccanismi,
          perdendo l’indipendenza dal tipo di trasporto
          utilizzato (es. il server diventa usabile solo con
          HTTP)




20
Servizi stateful
     ✦ Con JAX-WS 2.1 è stato introdotto il
       concetto di servizi stateful:
      •   è possibile creare più istanze
          dell’implementazione del servizio, in modo che
          un’istanza serva un singolo client
      •   le diverse istanze sono associate alla stessa URL;
          viene usata l’estensione WS-Addressing del
          protocollo SOAP, che definisce un Endpoint
          Reference all’interno del messaggio, per
          distinguere tra le diverse istanze


21
Servizi stateful
     ✦ Per definire un servizio come stateful
       bisogna:
      •   annotare il servizio con le annotazioni:
          ‣   @javax.xml.ws.soap.Addressing
          ‣   @com.sun.xml.ws.developer.Stateful

      •   definire un campo public static di tipo
          StatefulWebServiceManager<T>, dove T è la
          classe che implementa il web service
          (StatefulWebServiceManager è nel package
          com.sun.xml.ws.developer)


22
Esempio
     ✦ Supponiamo di voler realizzare un WS per
       gestire i conti correnti di una banca
       package myservice;
       import javax.jws.*;
       import javax.xml.ws.soap.Addressing;
       import com.sun.xml.ws.developer.*;

       @WebService @Stateful @Addressing
       public class Account {
       	 public static StatefulWebServiceManager<Account> manager;
       	 private int number;
       	 private double balance;
       	 public Account(int number) {
       	 	 this.number=number;
       	 	 this.balance=1000;
       	 }
       	 public synchronized double getBalance() {
       	 	 return balance;
       	 }
       	 public synchronized void transfer(double amount) {
       	 	 balance+=amount;
       	 }
23     }
Istanziazione
     ✦ Per pubblicare un WS stateful occorre
       usare il metodo export dell’oggetto
       StatefulWebServiceManager associato al
       WS
      •   l’oggetto StatefulWebServiceManager viene
          inserito automaticamente nel campo static della
          classe
      •   il metodo export restituisce un
          W3CEndpointReference, che deve essere
          comunicato al client per poter accedere al WS


24
Esempio
     ✦ Definiamo un WS Bank (stateless) per
       istanziare i conti correnti
     package myservice;
     import javax.jws.*;
     import javax.xml.ws.wsaddressing.W3CEndpointReference;
     import java.util.*;

     @WebService
     public class Bank {
     	 private Map<Integer, Account> accounts=new HashMap<Integer, Account>();
     	
     	 public synchronized
        W3CEndpointReference getAccount(int number, String password) {
     	 	 if (!"pippo".equals(password))
     	 	 	 throw new RuntimeException("Unvalid password!");
     	 	 Account acc=accounts.get(number);
     	 	 if (acc==null) {
     	 	 	 acc=new Account(number);
     	 	 	 accounts.put(number, acc);
     	 	 }
     	 	 return Account.manager.export(acc);
     	 }
     }
25
Deployment


     ✦ Il WS stateful deve essere installato
       regolarmente, in modo da rendere
       disponibile il suo WSDL
      •   nell’esempio precedente, occorre installare sia il
          WS Bank che il WS Account, su due URL diverse




26
Accesso a un WS stateful

     ✦ Il client deve innanzitutto ottenere un
       W3CEndpointReference per l’istanza del
       servizio stateful che intende usare
     ✦ Il client accede al WS passando il
       W3CEndpointReference come primo
       parametro del metodo getPort
       dell’oggetto Service



27
Esempio
     ✦ Accediamo ai nostri conti correnti

     package client;
     import client.stub.*;
     import javax.xml.ws.wsaddressing.W3CEndpointReference;

     public class TestAccount {
     	 public static void main(String args[]) {
     	 	 BankService bankService=new BankService();
     	 	 Bank bank=bankService.getPort(Bank.class);
     	 	 AccountService accountService=new AccountService();

     	   	   W3CEndpointReference ref=bank.getAccount(123, "pippo");
     	   	   Account account=accountService.getPort(ref, Account.class);
     	   	   account.transfer(100);
     	   	   System.out.println("Account 123 balance:" + account.getBalance());

     	   	   W3CEndpointReference ref2=bank.getAccount(456, "pippo");
     	   	   Account account2=accountService.getPort(ref2, Account.class);
     	   	   account2.transfer(150);
     	   	   System.out.println("Account 456 balance:" + account2.getBalance());
     	   }
     }
28

More Related Content

What's hot

What's hot (20)

[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
 
Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Corso web services
Corso web servicesCorso web services
Corso web services
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Portlet JSR168/286
Portlet JSR168/286Portlet JSR168/286
Portlet JSR168/286
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 

Viewers also liked

IllusionSolutions_PhysicalDemo
IllusionSolutions_PhysicalDemoIllusionSolutions_PhysicalDemo
IllusionSolutions_PhysicalDemo
Marc Antel
 
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
Ravindragouda Patil
 
11-IJSN-VOL7(3) 541-549-September
11-IJSN-VOL7(3) 541-549-September11-IJSN-VOL7(3) 541-549-September
11-IJSN-VOL7(3) 541-549-September
Ravindragouda Patil
 

Viewers also liked (13)

State of HighEdWeb: President's Address 2016
State of HighEdWeb: President's Address 2016State of HighEdWeb: President's Address 2016
State of HighEdWeb: President's Address 2016
 
CEFPI_compiled_JW_final v2
CEFPI_compiled_JW_final v2CEFPI_compiled_JW_final v2
CEFPI_compiled_JW_final v2
 
IllusionSolutions_PhysicalDemo
IllusionSolutions_PhysicalDemoIllusionSolutions_PhysicalDemo
IllusionSolutions_PhysicalDemo
 
Examen
ExamenExamen
Examen
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Retos y amenazas de la seguridad nacional en el ciberespacio
Retos y amenazas de la seguridad nacional en el ciberespacioRetos y amenazas de la seguridad nacional en el ciberespacio
Retos y amenazas de la seguridad nacional en el ciberespacio
 
Planes de auditoria y buenas practicas para entornos cloud computing y bring ...
Planes de auditoria y buenas practicas para entornos cloud computing y bring ...Planes de auditoria y buenas practicas para entornos cloud computing y bring ...
Planes de auditoria y buenas practicas para entornos cloud computing y bring ...
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Cruise chapter 6
Cruise chapter 6Cruise chapter 6
Cruise chapter 6
 
Caracteristicas web
Caracteristicas webCaracteristicas web
Caracteristicas web
 
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
8- IJRANSS-ANTIMICROBIAL POTENTIAL OF MARINE ACTINOMYCETES
 
13-JIFA Vol 43 _ 11-25
13-JIFA Vol 43 _ 11-2513-JIFA Vol 43 _ 11-25
13-JIFA Vol 43 _ 11-25
 
11-IJSN-VOL7(3) 541-549-September
11-IJSN-VOL7(3) 541-549-September11-IJSN-VOL7(3) 541-549-September
11-IJSN-VOL7(3) 541-549-September
 

Similar to Lezione 10: Web Service in Java (2)

Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
Crismer La Pignola
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
Luca Milan
 
Studio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
Studio e realizzazione di Web Services in Ambienti di Sviluppo IntegratiStudio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
Studio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
Giusy E Marco Tutone-Calandra
 

Similar to Lezione 10: Web Service in Java (2) (20)

Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Maria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazioneMaria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazione
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Yagwto
YagwtoYagwto
Yagwto
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarle
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
Back-end: Guide for developers - Edit by Luca Marasca, Matteo Lupini, Nicolò ...
Back-end: Guide for developers - Edit by Luca Marasca, Matteo Lupini, Nicolò ...Back-end: Guide for developers - Edit by Luca Marasca, Matteo Lupini, Nicolò ...
Back-end: Guide for developers - Edit by Luca Marasca, Matteo Lupini, Nicolò ...
 
OCP Paas_ultima
OCP Paas_ultimaOCP Paas_ultima
OCP Paas_ultima
 
Virtual Agency
Virtual AgencyVirtual Agency
Virtual Agency
 
Studio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
Studio e realizzazione di Web Services in Ambienti di Sviluppo IntegratiStudio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
Studio e realizzazione di Web Services in Ambienti di Sviluppo Integrati
 

More from Andrea Della Corte

More from Andrea Della Corte (9)

Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Recently uploaded

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 

Recently uploaded (20)

LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 

Lezione 10: Web Service in Java (2)

  • 1. Lezione 10: Web Service in Java (2) Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ I tipi di dato utilizzabili ✦ Parametri di uscita e ingresso/uscita ✦ Servizi stateless e stateful 2
  • 3. I tipi di dato utilizzabili ✦ Poiché i WS devono essere indipendenti dal linguaggio, introducono delle limitazioni più forti rispetto a RMI sui tipi di dato utilizzabili per i parametri e i valori di ritorno 3
  • 4. I tipi di dato utilizzabili ✦ Il mapping tra i tipi definiti in WSDL e i tipi di Java non è univoco, ma dipende dalla specifica libreria usata per i WS • Faremo riferimento al mapping di JAX-WS ✦ Alcune librerie consentono di personalizzare il mapping quando la corrispondenza di default non è appropriata 4
  • 5. I tipi di dato utilizzabili ✦ I tipi utilizzabili sono ristretti a: • tipi atomici (es. int, boolean, ecc.) • String • array e List • semplici JavaBeans usati come strutture 5
  • 6. Array e liste ✦ È possibile usare array il cui tipo base sia tra quelli citati ✦ È possibile utilizzare List<T> se il tipo T è tra quelli citati ✦ Negli stub, i parametri/valori di ritorno di tipo array vengono comunque convertiti in List<T> 6
  • 7. Oggetti ✦ È possibile usare dei semplici JavaBeans a condizione che abbiano un costruttore pubblico senza argomenti ✦ Vengono trasmessi solo: • campi pubblici appartenenti a tipi utilizzabili • proprietà accessibili attraverso coppie di metodi che seguono la convenzione di naming getXxxx() e setXxxx(), se il valore appartiene a un tipo utilizzabile 7
  • 8. Oggetti ✦ NOTA BENE • gli stub generati non usano la stessa classe definita nel server, ma una nuova classe con lo stesso nome che rende accessibili le proprietà con coppie di metodi getXxxx e setXxxx • la classe definita dagli stub (e quindi vista dal client) non contiene gli eventuali altri metodi presenti nella classe usata dal server, né i campi che non rientrano nelle condizioni viste precedentemente • in altre parole, gli oggetti utilizzabili si comportano come Data Transfer Objects: semplici contenitori di dati, a cui non sono associati 8 comportamenti
  • 9. Oggetti ✦ Esempio: sul server package myservice; public class Dimension { public int width; public int height; } package myservice; import javax.jws.*; @WebService public class MyService { public Dimension getDim() { Dimension dim=new Dimension(); dim.width=800; dim.height=600; return dim; } // etc etc etc 9
  • 10. Oggetti ✦ Esempio: sul client package client; import client.stub.*; public class TestClient { public static void main(String args[]) { MyServiceService service=new TestService(); MyService test=service.getPort(MyService.class); Dimension dim=test.getDim(); int width=dim.getWidth(); // NOTA: non posso usare dim.width ! } } 10
  • 11. I tipi di dato utilizzabili ✦ Non è possibile usare direttamente come parametro/valore di ritorno il riferimento a un oggetto remoto • vedremo successivamente un modo per aggirare (in parte) questa limitazione 11
  • 12. Parametri di uscita e ingresso/uscita ✦ In linguaggi diversi da Java i parametri possono essere anche di uscita e di ingresso/uscita, usando il meccanismo del passaggio per riferimento ✦ Perciò operazioni definite in un WS possono anche avere parametri di uscita o di ingresso/uscita • occorre un meccanismo per rappresentare questi parametri in Java 12
  • 13. La classe Holder<T> ✦ La classe Holder<T> definita nel package javax.xml.ws è usata per rappresentare un parametro di tipo T ✦ Holder ha un campo pubblico value, che contiene il valore del parametro • per i parametri di uscita, il metodo deve assegnare un valore al campo value • per i parametri di ingresso/uscita, il metodo può usare il valore iniziale di value e può modificarlo • in entrambi i casi, il nuovo valore di value verrà trasmesso al client 13
  • 14. L’annotazione @WebParam ✦ Nella classe che implementa il servizio occorre indicare che il parametro è di uscita o ingresso/uscita con le seguenti annotazioni: • @WebParam(mode=WebParam.Mode.OUT) • @WebParam(mode=WebParam.Mode.INOUT) 14
  • 15. Esempio ✦ Il server: package myservice; import javax.jws.*; import javax.xml.ws.*; @WebService public class Location { public void getCoordinates( @WebParam(mode=WebParam.Mode.OUT) Holder<Double> longitude, @WebParam(mode=WebParam.Mode.OUT) Holder<Double> latitude) { longitude.value = -13.7; latitude.value = 41.1; } } 15
  • 16. Esempio ✦ Il client: package client; import client.stub.*; import javax.xml.ws.Holder; public class TestLocation { public static void main(String args[]) { LocationService service=new LocationService(); Location loc=service.getPort(Location.class); Holder<Double> longitude=new Holder<Double>(); Holder<Double> latitude=new Holder<Double>(); loc.getCoordinates(longitude, latitude); System.out.println("Long: "+longitude.value); System.out.println("Lat: "+latitude.value); } } 16
  • 17. Servizi stateless ✦ In JAX-WS gli oggetti che implementano un servizio sono considerati “stateless” • una singola istanza dell’oggetto serve le richieste di tutti i client • l’oggetto non può mantenere implicitamente traccia della conversazione con un singolo client ‣ Esempio: l’oggetto che implementa il service non può sapere se il client che fa una richiesta ha già effettuato una qualche forma di login, a meno che questa informazione non sia passata come parametro dal client stesso 17
  • 18. Gestione delle sessioni ✦ Fino alla versione 2.1 di JAX-WS per mantenere una forma di stato associato a una sessione di lavoro c’erano due alternative: • usare un parametro esplicito per identificare la sessione in tutte le operazioni • usare meccanismi legati al sottostante meccanismo di trasporto (es. HttpSession) 18
  • 19. Gestione delle sessioni ✦ Usare un parametro esplicito per identificare la sessione • semplice da implementare ‣ al momento della prima connessione il client riceve (eventualmente a seguito di una verifica di identità) un identificatore della sessione di lavoro ‣ ogni altra richiesta prevede che il client passi questo identificatore al server ‣ il server usa questo identificatore come chiave in una struttura dati che contiene le informazioni relative alla particolare sessione di lavoro • complica l’interfaccia con il client, che deve aggiungere esplicitamente questo parametro a tutte le operazioni 19
  • 20. Gestione delle sessioni ✦ usare meccanismi legati al livello di trasporto (es. cookie HTTP) • trasparente al client • il server deve accedere a tali meccanismi, perdendo l’indipendenza dal tipo di trasporto utilizzato (es. il server diventa usabile solo con HTTP) 20
  • 21. Servizi stateful ✦ Con JAX-WS 2.1 è stato introdotto il concetto di servizi stateful: • è possibile creare più istanze dell’implementazione del servizio, in modo che un’istanza serva un singolo client • le diverse istanze sono associate alla stessa URL; viene usata l’estensione WS-Addressing del protocollo SOAP, che definisce un Endpoint Reference all’interno del messaggio, per distinguere tra le diverse istanze 21
  • 22. Servizi stateful ✦ Per definire un servizio come stateful bisogna: • annotare il servizio con le annotazioni: ‣ @javax.xml.ws.soap.Addressing ‣ @com.sun.xml.ws.developer.Stateful • definire un campo public static di tipo StatefulWebServiceManager<T>, dove T è la classe che implementa il web service (StatefulWebServiceManager è nel package com.sun.xml.ws.developer) 22
  • 23. Esempio ✦ Supponiamo di voler realizzare un WS per gestire i conti correnti di una banca package myservice; import javax.jws.*; import javax.xml.ws.soap.Addressing; import com.sun.xml.ws.developer.*; @WebService @Stateful @Addressing public class Account { public static StatefulWebServiceManager<Account> manager; private int number; private double balance; public Account(int number) { this.number=number; this.balance=1000; } public synchronized double getBalance() { return balance; } public synchronized void transfer(double amount) { balance+=amount; } 23 }
  • 24. Istanziazione ✦ Per pubblicare un WS stateful occorre usare il metodo export dell’oggetto StatefulWebServiceManager associato al WS • l’oggetto StatefulWebServiceManager viene inserito automaticamente nel campo static della classe • il metodo export restituisce un W3CEndpointReference, che deve essere comunicato al client per poter accedere al WS 24
  • 25. Esempio ✦ Definiamo un WS Bank (stateless) per istanziare i conti correnti package myservice; import javax.jws.*; import javax.xml.ws.wsaddressing.W3CEndpointReference; import java.util.*; @WebService public class Bank { private Map<Integer, Account> accounts=new HashMap<Integer, Account>(); public synchronized W3CEndpointReference getAccount(int number, String password) { if (!"pippo".equals(password)) throw new RuntimeException("Unvalid password!"); Account acc=accounts.get(number); if (acc==null) { acc=new Account(number); accounts.put(number, acc); } return Account.manager.export(acc); } } 25
  • 26. Deployment ✦ Il WS stateful deve essere installato regolarmente, in modo da rendere disponibile il suo WSDL • nell’esempio precedente, occorre installare sia il WS Bank che il WS Account, su due URL diverse 26
  • 27. Accesso a un WS stateful ✦ Il client deve innanzitutto ottenere un W3CEndpointReference per l’istanza del servizio stateful che intende usare ✦ Il client accede al WS passando il W3CEndpointReference come primo parametro del metodo getPort dell’oggetto Service 27
  • 28. Esempio ✦ Accediamo ai nostri conti correnti package client; import client.stub.*; import javax.xml.ws.wsaddressing.W3CEndpointReference; public class TestAccount { public static void main(String args[]) { BankService bankService=new BankService(); Bank bank=bankService.getPort(Bank.class); AccountService accountService=new AccountService(); W3CEndpointReference ref=bank.getAccount(123, "pippo"); Account account=accountService.getPort(ref, Account.class); account.transfer(100); System.out.println("Account 123 balance:" + account.getBalance()); W3CEndpointReference ref2=bank.getAccount(456, "pippo"); Account account2=accountService.getPort(ref2, Account.class); account2.transfer(150); System.out.println("Account 456 balance:" + account2.getBalance()); } } 28