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