Raccolta di Codici per imparare a programmare in Java in modo tale da affrontare e superare con successo l’esame di Programmazione II Programmazione II: Esami Svolti A cura di: Emanuele Cennamo Nel seguente PDF sono riportati un insieme di Compiti Svolti di Programmazione II per esercitarsi su come organizzare una traccia e come risolverla utilizzando Proxy Skeleton, RMI o JMS. 1 A Cura di Emanuele Cennamo Indice 1. Prova del 01/07/2014 ………….………..…….… 3 2. Prova del 17/06/2014 ………….………..…….… 17 3. Prova del 11/09/2013 ………….………..…….… 25 4. Prova del 16/06/2015 ………….………..…….… 37 5. Prova del 29/07/2015 ………….………..…….… 44 6. Prova del 17/09/2015 ………….………..…….… 61 7. Prova del 11/09/2014 ………….………..…….… 69 8. Prova del 02/07/2015 ………….………..…….… 80 9. Prova Simulazione JMS ….…….………..…….… 90 2 A Cura di Emanuele Cennamo 3 A Cura di Emanuele Cennamo Organizzazione Traccia: packBroker/Broker.java 1 package packBroker; 2 3 public class Broker { 4 5 public static void main(String[] args){ 6 BrokerImpl broker = new BrokerImpl(); 7 broker.runSkeleton(); 8 } 9 10 } 4 A Cura di Emanuele Cennamo packBroker/BrokerImpl.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package packBroker; import java.util.ArrayList; import java.util.List; import packInterfacce.ISportello; public class BrokerImpl extends BrokerSkeleton{ private List<OggettoSportello> sportelli; public BrokerImpl() { this.sportelli = new ArrayList<OggettoSportello>(); } @Override public boolean inoltrarichiesta(int id_cliente) { if (sportelli.isEmpty()){ System.out.println("Non ci sono Sportelli connessi alla Rete"); return false; } else{ for (int i = 0; i < sportelli.size(); i++){ ISportello sportello = new BrokerStub(sportelli.get(i).getHost(), sportelli.get(i).getPort()); if(sportello.servirichiesta(id_cliente) == true){ return true; } } } 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 return false; } @Override public void sottoscrivi(String host, int port) { OggettoSportello sportello = new OggettoSportello(host, port); int n = sportelli.size(); sportelli.add(sportello); if (n+1 == sportelli.size()){ System.out.println("Uno Sportello ha effettuato una sottoscrizione"); System.out.println("Totale Sportelli sottoscritti: " + sportelli.size()); } else System.out.println("Uno Sportello ha fallito la sottoscrizione"); 43 44 45 46 47 48 49 50 51 } 5 } A Cura di Emanuele Cennamo packBroker/BrokerSkeleton.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package packBroker; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import packInterfacce.IBroker; public abstract class BrokerSkeleton implements IBroker { public void runSkeleton(){ ServerSocket serversock; try { serversock = new ServerSocket(2500); System.out.println("Server In Ascolto sulla porta 2500"); while (true){ Socket sock = serversock.accept(); Thread t1 = new BrokerSkeletonThread(sock, this); t1.start(); } } catch (IOException e) { e.printStackTrace(); } } } packBroker/BrokerSkeletonThread.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package packBroker; import import import import import import java.io.BufferedInputStream; java.io.BufferedOutputStream; java.io.DataInputStream; java.io.DataOutputStream; java.io.IOException; java.net.Socket; import packInterfacce.IBroker; public class BrokerSkeletonThread extends Thread { private Socket sock; private IBroker broker; public BrokerSkeletonThread(Socket sock, IBroker broker) { super(); this.sock = sock; this.broker = broker; } 6 A Cura di Emanuele Cennamo 22 23 24 25 26 27 28 @Override public void run() { boolean esito = false; try { DataOutputStream dos = new DataOutputStream (new BufferedOutputStream(sock.getOutputStream())); DataInputStream dis = new DataInputStream ( new BufferedInputStream(sock.getInputStream())); 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 } String command = dis.readUTF(); if(command.equals("sottoscrivi")){ String host = dis.readUTF(); int port = dis.readInt(); broker.sottoscrivi(host, port); dos.writeUTF("Sottoscrizione Effettuata al broker"); } else if (command.equalsIgnoreCase("inoltrarichiesta")){ int id_cliente = dis.readInt(); esito = broker.inoltrarichiesta(id_cliente); dos.writeBoolean(esito); } dos.flush(); dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } } packBroker/BrokerStub.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package packBroker; import import import import import import import java.io.BufferedInputStream; java.io.BufferedOutputStream; java.io.DataInputStream; java.io.DataOutputStream; java.io.IOException; java.net.Socket; java.net.UnknownHostException; import packInterfacce.ISportello; public class BrokerStub implements ISportello { String host; int port; public BrokerStub(String host, int port) { super(); this.host = host; 7 A Cura di Emanuele Cennamo 21 22 23 24 25 26 27 28 29 30 this.port = port; } @Override public boolean servirichiesta(int id_cliente) { boolean esito = false; try { Socket sock = new Socket(host, port); DataOutputStream dos = new DataOutputStream ( new BufferedOutputStream(sock.getOutputStream())); DataInputStream dis = new DataInputStream ( new BufferedInputStream(sock.getInputStream())); 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 } dos.writeInt(id_cliente); dos.flush(); esito = dis.readBoolean(); dos.close(); dis.close(); sock.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return esito; } packBroker/OggettoSportello.java 1 package packBroker; 2 3 public class OggettoSportello { 4 5 private String host; 6 private int port; 7 8 public OggettoSportello(String host, int port) { 9 super(); 10 this.host = host; 11 this.port = port; 12 } 13 14 public String getHost() { 15 return host; 16 } 17 18 public int getPort() { 19 return port; 20 } 21 8 A Cura di Emanuele Cennamo 22 } packClient/Client.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package packClient; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import packInterfacce.IBroker; public class Client { private static final int DEFAULT_PORT = 2500; private static final String DEFAULT_HOST = "localhost"; public static void main(String[] args) { if ( args.length >= 3 ){ System.out.println("ERRORE: aggiungere come argomento solo <broker host> e <broker port> "); System.exit(0); } 18 19 20 21 22 23 24 25 IBroker broker = null; int port = 0; if(args.length == 0){ System.out.print("Mi sto connettendo al broker '" + DEFAULT_HOST + "'alla porta " + DEFAULT_PORT ); broker = new ClientStub(DEFAULT_HOST, DEFAULT_PORT); } else if ( args.length == 1 ){ System.out.print("Mi sto connettendo al broker '" + args[0] + "' alla porta " + DEFAULT_PORT ); broker = new ClientStub(args[0], DEFAULT_PORT); } else if ( args.length == 2 ){ port = Integer.parseInt(args[1]); System.out.print("Mi sto connettendo al broker '" + args[0] + "' alla porta " + port ); broker = new ClientStub(args[0], port); } 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 } 9 Random rand = new Random(); int id_cliente; ExecutorService executor = Executors.newCachedThreadPool(); for ( int i = 0; i < 10; i++ ){ id_cliente = rand.nextInt(100)+1; executor.execute(new ClientThread(id_cliente, i, broker)); } } A Cura di Emanuele Cennamo