Strumenti Utente

Strumenti Sito


lpr-b-2007-2008:esercizi

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
lpr-b:esercizi [27/11/2007 alle 21:47 (17 anni fa)] Marco Daneluttolpr-b-2007-2008:esercizi [19/09/2008 alle 14:08 (16 anni fa)] (versione attuale) – modifica esterna 127.0.0.1
Linea 270: Linea 270:
   * [[copyout|thread copiatore (tastiera -> pacchetto)]]   * [[copyout|thread copiatore (tastiera -> pacchetto)]]
   * [[mainchat|main]]   * [[mainchat|main]]
 +
  
  
Linea 280: Linea 281:
   * codice della classe [[datagrampacket|DatagramPacket]]   * codice della classe [[datagrampacket|DatagramPacket]]
      
 +
 +
 +
 +
 +
 +==== ContoCorrente RMI ====
 +Si realizzi un oggetto ContoCorrente e lo si renda accessibile da remoto utilizzando la tecnologia RMI, che permetta di effettuare operazioni di
 +  
 +  long saldo()                      // restitiusce il saldo
 +  long prelievo(long cifra)         // preleva la cifra e restituisce il saldo
 +  long deposito(long cifra)         // deposita la cifra e restituisce il saldo
 +  String ultimiMovimenti(int n)     // restituisce gli ultimi n movimenti, uno per riga
 +
 +Si realizzino:
 +    * un'interfaccia con la signature dell'oggetto remoto
 +    * l'oggetto da pubblicare con RMI
 +    * un main che crea il registry e pubblica l'oggetto
 +    * un cliente che accetta come parametri dalla riga di comando il nome dell'host su cui si trova l'oggetto, il nome dell'oggetto, un codice operazione e eventuali parametri dell' operazione ed effettui l'operazione richiesta. 
 +
 +Si faccia in modo che ciascuna delle operazioni dell'oggetto conto corrente prenda un certo tempo (per esempio 20 secondi) e si controlli, lanciando piu' clienti contemporaneamente che le operazioni avvengano effettivamente in mutua esclusione e rispettando la semantica propria di un contocorrente. 
 +
 +
 +=== Soluzione proposta === 
 +  * Codice dell'[[interfacciaCC|interfaccia CC remoto]]
 +  * Codice del [[CCremoto|CC remoto]]
 +  * Codice del [[mainCCremote|main]] che pubblica l'oggetto remoto
 +  * Codice del [[clienteCC|cliente]]
 +
 +
 +==== Asta RMI ====
 +Si realizzi un server che implementa il battitore di un'asta. Il server deve permettere la registrazione di un cliente   e l'esecuzione di un'offerta.  La registrazione del cliente comporta la registrazione di una callback che il battitore usa per comunicare una nuova offerta al cliente. 
 +Il cliente esegue un'offerta iniziale (per esempio prendendo il valore dell'offerta dalla riga di comando). Successivamente si mette in attesa. La callback scrive a schermo le offerte, man mano che queste avvengono. L'utente che decide di fare una nuova offerta la batte a terminale e di conseguenza il cliente la invia al battitore. 
 +
 +In particolare, si consideri che la callback deve essere rappresentata da un oggetto che implementa l'interfaccia:
 +<code java>
 +public interface ClientInterface extends Remote {
 + public void offertaAvvenuta(int howMuch) throws RemoteException; 
 +}
 +</code>
 +e l'oggetto battitore deve implementare l'interfaccia:
 +<code java>
 +public interface InterfacciaBattitore extends Remote {
 +
 + /** 
 + * used to make an offer. 
 + * @param name the name of who makes the offer
 + * @param howMuch the amount of the offer
 + * @return the current amount offered, 0 if the offer made is the currently accepted one
 + * @throws RemoteException
 + */
 + public int offer(String name, int howMuch) throws RemoteException;
 +
 + /**
 + * this is used to register the callback;
 + * @param name the name of who makes the offer
 + * @param cif
 + */
 + public void register(String name, ClientInterface cif) throws RemoteException; 
 +
 +}
 +</code>
 +Purchè il meccanismo delle callback venga implementato correttamente, si può trascurare di trattare la terminazione dell'asta.
 +
 +Il dettaglio del comportamento di client e server, nonchè del metodo che sull'oggetto remoto registra una nuova offerta, è dato dai flow chart che seguono.
 +
 +{{lpr-b:astarmi.jpg?600|}}
 +
 +=== Soluzione proposta === 
 +  * Interfaccia per l'[[callbackAsta|oggetto callback]]
 +  * Interfaccia del [[interfacciaBattitoreAsta|battitore]]
 +  * Codice del [[clienteAsta|cliente]] (//fa offerte random iniziali finchè una non risulta vincente, poi aspetta notifiche dal battitore (tramite la callback) e nuove offerte da effettuare dal terminale//)
 +  * Codice del [[battitoreAsta|battitore]]
 +  * Codice del [[mainBattitore|main]] che pubblica il battitore
  
  
  ===============================  ===============================
 [[lpr-b:start|Torna alla pagina principale del corso]] [[lpr-b:start|Torna alla pagina principale del corso]]
lpr-b-2007-2008/esercizi.1196200062.txt.gz · Ultima modifica: 19/09/2008 alle 14:08 (16 anni fa) (modifica esterna)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki