Λειτουργία RMI και Ζητήματα Σχεδίασης

33
Λειτουργία Λειτουργία RMI RMI και και Ζητήματα Σχεδίασης Ζητήματα Σχεδίασης Στούμπος Βασίλης Στούμπος Βασίλης [email protected] [email protected] Πανεπιστήμιο Αθηνών Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής Τμήμα Πληροφορικής

description

Λειτουργία RMI και Ζητήματα Σχεδίασης. Στούμπος Βασίλης [email protected] Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής. Περίληψη. Crash course σε Java. Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. RMI . Σχεδιασμός. Περίληψη - Java. Crash course σε Java. - PowerPoint PPT Presentation

Transcript of Λειτουργία RMI και Ζητήματα Σχεδίασης

Page 1: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Λειτουργία Λειτουργία RMIRMI και καιΖητήματα ΣχεδίασηςΖητήματα Σχεδίασης

Στούμπος ΒασίληςΣτούμπος Βασίλης[email protected]@di.uoa.grΠανεπιστήμιο ΑθηνώνΠανεπιστήμιο ΑθηνώνΤμήμα ΠληροφορικήςΤμήμα Πληροφορικής

Page 2: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

ΠερίληψηΠερίληψη• Crash course Crash course σε σε Java.Java.• Παράδειγμα σε Παράδειγμα σε RMI.RMI.• Ζητήματα σχεδίασης Ζητήματα σχεδίασης

(κατανεμημένων) εφαρμογών.(κατανεμημένων) εφαρμογών.– RMIRMI..– Σχεδιασμός.Σχεδιασμός.

Page 3: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Περίληψη - Περίληψη - JavaJava• Crash course Crash course σε σε Java.Java.

– Κλάσεις και αντικείμενα.Κλάσεις και αντικείμενα.– Διαφορές με τη Διαφορές με τη C++.C++.

• Παράδειγμα σε Παράδειγμα σε RMI.RMI.• Ζητήματα σχεδίασης Ζητήματα σχεδίασης

(κατανεμημένων) εφαρμογών.(κατανεμημένων) εφαρμογών.– RMIRMI..– Σχεδιασμός.Σχεδιασμός.

Page 4: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Κλάσεις στην Κλάσεις στην JavaJava• Οι Οι κλάσειςκλάσεις ( (classesclasses) )

ορίζουν τύπους ορίζουν τύπους αντικειμένων.αντικειμένων.

• Τα Τα αντικείμενααντικείμενα ((objectsobjects)) είναι είναι στιγμιότυπαστιγμιότυπα ((instancesinstances)) των των κλάσεων.κλάσεων.

• Οι κλάσεις Οι κλάσεις ομαδοποιούνται σε ομαδοποιούνται σε μια ιεραρχία μια ιεραρχία πακέτων πακέτων ((packagespackages).).

package package gr.uoa.di.stoumposgr.uoa.di.stoumpos;;

public class public class CounterCounter { { private int private int value;value; public public CounterCounter(int v) {(int v) { thisthis.value = v;.value = v; }} public int public int getValue() {getValue() { return return this.value;this.value; }} public void public void increment() {increment() { this.value++;this.value++; }}}}

Page 5: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Αντικείμενα στην Αντικείμενα στην JavaJava• Τα Τα αντικείμενααντικείμενα

((objectsobjects)) είναι είναι στιγμιότυπαστιγμιότυπα ((instancesinstances)) των των κλάσεων.κλάσεων.

• Πρόσβαση στα Πρόσβαση στα αντικείμενα μόνο μέσω αντικείμενα μόνο μέσω αναφορώναναφορών (references(references).).

• Πεδία αντικειμένωνΠεδία αντικειμένων και και πεδία κλάσεωνπεδία κλάσεων ((class/object fieldsclass/object fields).).

• Garbage collecting.Garbage collecting.

Counter Counter aa = = newnew Counter(12); Counter(12);Counter Counter bb = = newnew Counter(-12); Counter(-12);

for (for (intint i=0; i< 10; i++) { i=0; i< 10; i++) { a.increment();a.increment();}}b.increment();b.increment();

System.out.printlnSystem.out.println(( “ “Counter a value is ” +Counter a value is ” + a.getValue());a.getValue());System.out.printlnSystem.out.println(( “ “Counter b value is ” +Counter b value is ” + b.getValue());b.getValue());

Page 6: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Πρόγραμμα Πρόγραμμα JavaJava• Μία μόνο Μία μόνο publicpublic

κλάση σε κάθε αρχείο.κλάση σε κάθε αρχείο.• Όνομα του αρχείου Όνομα του αρχείου

όπως η όπως η publicpublic κλάση.κλάση.• Μεταγλώττιση με Μεταγλώττιση με javacjavac..

• Εκτέλεση με Εκτέλεση με javajava..– Υπάρχει Υπάρχει mainmain μέθοδος μέθοδος

κλάσης.κλάσης.• Ιδεατή Μηχανή (Ιδεατή Μηχανή (VM-VM-

Virtual MachineVirtual Machine))

/* Αρχείο: /* Αρχείο: TestProg.java */TestProg.java */importimport gr.uoa.di.stoumpos; gr.uoa.di.stoumpos;

public class public class TestProg {TestProg { public static void public static void main(main( StringString[] args) {[] args) {

forfor(i=0; i<args.length; i++){(i=0; i<args.length; i++){ System.out.println(System.out.println( “ “arg[” + i + “]=” +arg[” + i + “]=” + args[i]);args[i]); }}}}

Page 7: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Εξαιρέσεις (Εξαιρέσεις (ExceptionsExceptions) ) στη στη JavaJava

• Η εξαίρεση είναι ένα Η εξαίρεση είναι ένα αντικείμενοαντικείμενο μιας κλάσης.μιας κλάσης.

• Εξαιρέσεις Εξαιρέσεις χρησιμοποιούνται σε χρησιμοποιούνται σε εξαιρετικέςεξαιρετικές περιπτώσεις. περιπτώσεις.

• Η δυνατότητα εξαίρεσης Η δυνατότητα εξαίρεσης ((throw exceptionthrow exception)) δηλώνεταιδηλώνεται στις μεθόδους. στις μεθόδους.

• Διαχείριση λαθών με Διαχείριση λαθών με try-try-catchcatch μπλοκ.μπλοκ.

• Εξαιρέσεις:Εξαιρέσεις:– RuntimeRuntime– ErrorError– ΆλλεςΆλλες

try try {{

FileInputStreamFileInputStream stream = stream = new new FileInputStreamFileInputStream(( new new FileFile(“foo.dat”)(“foo.dat”)));;

} } catchcatch((FileNotFoundExceptionFileNotFoundException fnfe) { fnfe) { // ...// ...} } catchcatch((SecurityExceptionSecurityException se) { se) { // ...// ...} } catchcatch(IOException ioe) {(IOException ioe) { // ...// ...} } catchcatch(Throwable) {(Throwable) { throw new throw new MyException();MyException();} } finallyfinally { { // ...// ...}}

Page 8: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Αντικειμενοστρεφές Αντικειμενοστρεφές ΜοντέλοΜοντέλοστη στη JavaJava

• Κληρονομικότητα (Κληρονομικότητα (inheritanceinheritance))– Μόνο απλή (όχι Μόνο απλή (όχι multiple inheritance multiple inheritance από από C++C++))..– Χρήση Χρήση Interface: Interface: σαν κλάση χωρίς σώματα μεθόδωνσαν κλάση χωρίς σώματα μεθόδων

• ΠολυμορφισμόςΠολυμορφισμός ((polymorphismpolymorphism))– Όπως στη Όπως στη C++.C++.– Strong-typed Strong-typed γλώσσα.γλώσσα.

• ΕνθυλάκωσηΕνθυλάκωση ((encapsulationencapsulation))– Τέσσερα επίπεδα περιορισμών (Τέσσερα επίπεδα περιορισμών (visibility scopevisibility scope)): :

private, protected, public private, protected, public και και packagepackage..

Page 9: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

ΠερίληψηΠερίληψη - RMI - RMI• Crash course Crash course σε σε Java.Java.• Παράδειγμα σε Παράδειγμα σε RMI.RMI.

– Απλό παράδειγμα.Απλό παράδειγμα.– Εγκατάσταση συστήματος.Εγκατάσταση συστήματος.– Ειδικές περιπτώσεις.Ειδικές περιπτώσεις.

• Ζητήματα σχεδίασης (κατανεμημένων) Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.εφαρμογών.– RMIRMI..– Σχεδιασμός.Σχεδιασμός.

Page 10: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Τοπική και Τοπική και Απομακρυσμένη ΚλήσηΑπομακρυσμένη Κλήση

ΜεθόδουΜεθόδου• ΠουΠου

βρίσκεται το βρίσκεται το αντικείμενο;αντικείμενο;

• ΠωςΠως γίνεται γίνεται η κλήση;η κλήση;

• ΠοιοςΠοιος αναλαμβάνει αναλαμβάνει τις τις λεπτομέρειες λεπτομέρειες της κλήσης; της κλήσης;

Page 11: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

ΠαράδειγμαΠαράδειγμα RMI RMI• Τι θα πει απομακρυσμένη κλήση;Τι θα πει απομακρυσμένη κλήση;

– Μια μέθοδος, Μια μέθοδος, κάποιου αντικειμένουκάποιου αντικειμένου, καλείται , καλείται από κάποια άλλη.από κάποια άλλη.

– Διαφορετικός Διαφορετικός χώρος διευθύνσεων.χώρος διευθύνσεων.– Διαφορετικό Διαφορετικό μηχάνημαμηχάνημα (δίκτυο). (δίκτυο).

• Τρόπος κλήσης κοινός με τοπική κλήση.Τρόπος κλήσης κοινός με τοπική κλήση.• Διαφοροποιούμε:Διαφοροποιούμε:

– Διεπαφή (Διεπαφή (interfaceinterface).).– Υλοποίηση (Υλοποίηση (implementationimplementation).).

• Θα δούμε τον μετρητή σαν παράδειγμα.Θα δούμε τον μετρητή σαν παράδειγμα.

Page 12: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Διεπαφή ΜετρητήΔιεπαφή Μετρητή• Όλες οι διεπαφές Όλες οι διεπαφές

είναι εξειδικεύσεις είναι εξειδικεύσεις της της java.rmi.Remotejava.rmi.Remote διεπαφής.διεπαφής.

• Όλες οι μέθοδοι Όλες οι μέθοδοι μπορεί να δώσουν μπορεί να δώσουν RemoteExceptionRemoteException..

• Το ίδιο Το ίδιο interface interface πρέπει να πρέπει να χρησιμοποιεί και ο χρησιμοποιεί και ο καλούμενος και ο καλούμενος και ο καλών.καλών.

import java.rmi.*;import java.rmi.*;

public interface public interface CounterCounter extends extends java.rmi.Remotejava.rmi.Remote { {

public void public void setValue(int v)setValue(int v) throws throws RemoteExceptionRemoteException;;

public int public int getValue()getValue() throws throws RemoteExceptionRemoteException;;

public void public void increment() increment() throws throws RemoteExceptionRemoteException;;}}

Page 13: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Υλοποίηση ΜετρητήΥλοποίηση Μετρητή• Η υλοποίηση επεκτείνει Η υλοποίηση επεκτείνει

το το java.rmi.UnicastRemotjava.rmi.UnicastRemoteObject eObject και υλοποιεί τοκαι υλοποιεί το CounterCounter..

• Μπορούν να οριστούν Μπορούν να οριστούν πεδίαπεδία της υλοποίησης. της υλοποίησης.

• Απαραίτητος Απαραίτητος default default constructorconstructor..

• Οι υλοποιήσεις δεν Οι υλοποιήσεις δεν επηρεάζονται από το επηρεάζονται από το είδος κλήσης.είδος κλήσης.

import java.rmi.*;import java.rmi.*;

public class public class CounterImpl extendsCounterImpl extends java.rmi.UnicastRemoteObjectjava.rmi.UnicastRemoteObject implements Counterimplements Counter { { int value = 0;int value = 0;

public public CounterCounter()() throws throws RemoteException {RemoteException { super();super(); }} public void public void setValue(int v)setValue(int v) throws throws RemoteException {RemoteException { this.value = v;this.value = v; }} //...//...}}

Page 14: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Εξυπηρέτης ΜετρητήΕξυπηρέτης Μετρητή• Απαιτείται να:Απαιτείται να:

1.1. Κατασκευαστεί το Κατασκευαστεί το αντικείμενο αντικείμενο εξυπηρέτηςεξυπηρέτης..

2.2. ΔεσμευθείΔεσμευθεί ένα ένα «όνομα» για αυτό.«όνομα» για αυτό.

3.3. Να Να συνδεθείσυνδεθεί ( (bindbind) με ) με μια διεύθυνση.μια διεύθυνση.

• Ο εξυπηρέτης τρέχει Ο εξυπηρέτης τρέχει συνέχεια.συνέχεια.

• Χρειάζεται να τρέχει Χρειάζεται να τρέχει το το rmiregistry.rmiregistry.

import java.rmi.*;import java.rmi.*;

public class public class CounterServerCounterServer { { public static void main(public static void main( String[] args) {String[] args) {

Counter counter = Counter counter = nullnull;; StringString url = url = “ “rmi://localhost” +rmi://localhost” + “ “:1099/MyNiceCounter”;:1099/MyNiceCounter”; trytry { { counter = counter = newnew CounterCounter();(); Naming.Naming.bindbind(url, counter);(url, counter); } } catchcatch(Exception e) {(Exception e) { System.exit(-1);System.exit(-1); }}}}

Page 15: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Απομακρυσμένη Κλήση Απομακρυσμένη Κλήση ΜετρητήΜετρητή

• Απαιτείται να:Απαιτείται να:1.1. ΑναγνωρισθείΑναγνωρισθεί το το

«όνομα» του «όνομα» του αντικειμένου.αντικειμένου.

2.2. Αναφορά στο Αναφορά στο απομακρυσμένο απομακρυσμένο αντικείμενοαντικείμενο..

3.3. ΧρήσηΧρήση της αναφοράς. της αναφοράς.• Πολλοί πελάτες Πολλοί πελάτες

εκτελούνται εκτελούνται ταυτόχρονα.ταυτόχρονα.

• Χρειάζεται να τρέχει Χρειάζεται να τρέχει ο εξυπηρέτηςο εξυπηρέτης..

Counter counter = null;Counter counter = null;StringString url = url = ““rmi://localhost” +rmi://localhost” + "":1099/MyNiceCounter”;:1099/MyNiceCounter”;

try {try { counter =counter = Naming.lookupNaming.lookup(url);(url); counter.counter.incrementincrement();(); System.out.println(System.out.println( “ “Counter a value is ” +Counter a value is ” + counter.counter.getValuegetValue());());} catch(Exception e) {} catch(Exception e) { //...//...}}

Page 16: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Επίτευξη Επίτευξη Απομακρυσμένης Απομακρυσμένης

ΚλήσηςΚλήσης• Λεπτομέρειες της Λεπτομέρειες της

κλήσης:κλήσης:– Κώδικας που Κώδικας που

γεννιέται γεννιέται αυτόματα.αυτόματα.

– StubsStubs και και SkeletonsSkeletons..

– Πέρασμα Πέρασμα παραμέτρων και παραμέτρων και αποτελεσμάτων.αποτελεσμάτων.

• Οι διεπαφές έχουν Οι διεπαφές έχουν όλη την πληροφορία.όλη την πληροφορία.

• Marshalling/Marshalling/Unmarshalling.Unmarshalling.

skeleton

stub

Page 17: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Εγκατάσταση Εγκατάσταση ΣυστήματοςΣυστήματος

• Μεταγλωττίζουμε Μεταγλωττίζουμε όλες τις κλάσεις.όλες τις κλάσεις.– Χρήση Χρήση javacjavac..

• Κατασκευάζουμε τον Κατασκευάζουμε τον αυτόματο κώδικα.αυτόματο κώδικα.– Χρήση Χρήση rmicrmic..

• Μοιράζουμε κλάσεις Μοιράζουμε κλάσεις στις τοποθεσίες που στις τοποθεσίες που θα χρειαστούνθα χρειαστούν– jarjar

• ΕκτελούμεΕκτελούμε ( (σε σε χωριστά χωριστά shells)shells)::– rmiregistryrmiregistry– java gr.uoa.di.java gr.uoa.di.stoumpos.CounterServerstoumpos.CounterServer

– Java gr.uoa.di.Java gr.uoa.di.stoumpos.CounterClientstoumpos.CounterClient

Page 18: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Περίληψη – Περίληψη – Σχεδιασμός Σχεδιασμός (RMI)(RMI)

• Crash course Crash course σε σε Java.Java.• Παράδειγμα σε Παράδειγμα σε RMI.RMI.• Ζητήματα σχεδίασης Ζητήματα σχεδίασης

(κατανεμημένων) εφαρμογών.(κατανεμημένων) εφαρμογών.– RMI.RMI.

• Εξαιρέσεις.Εξαιρέσεις.• Παράμετροι.Παράμετροι.

– ΣχεδιασμόςΣχεδιασμός..

Page 19: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Περίληψη – Περίληψη – Σχεδιασμός Σχεδιασμός (RMI)(RMI)

• Crash course Crash course σε σε Java.Java.• Παράδειγμα σε Παράδειγμα σε RMI.RMI.• Ζητήματα σχεδίασης Ζητήματα σχεδίασης

(κατανεμημένων) εφαρμογών.(κατανεμημένων) εφαρμογών.– RMI.RMI.

• Εξαιρέσεις.Εξαιρέσεις.• Παράμετροι.Παράμετροι.

– ΣχεδιασμόςΣχεδιασμός..

Page 20: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Πέρασμα Παραμέτρων Πέρασμα Παραμέτρων στο στο RMIRMI

• Πρωτογενείς Τύποι:Πρωτογενείς Τύποι:– intint,, charchar,, doubledouble,…,…– ΑντιγραφήΑντιγραφή των τιμών. των τιμών.

• Αντικείμενα Αντικείμενα JavaJava..• Απομακρυσμένα Απομακρυσμένα RMI RMI αντικείμενα.αντικείμενα.

Page 21: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Πέρασμα Πέρασμα Αντικειμένων στο Αντικειμένων στο RMIRMI• Αντικείμενα Αντικείμενα Java:Java:

– Πρέπει να είναι Πρέπει να είναι serializableserializable!!• Υλοποιούν την διεπαφή Υλοποιούν την διεπαφή java.io.Serializablejava.io.Serializable..• Μεταφορά στιγμιότυπου σε σειρά από Μεταφορά στιγμιότυπου σε σειρά από bytes.bytes.• Όλα τα μέληΌλα τα μέλη ενός «σειριοποιήσιμου» ενός «σειριοποιήσιμου»

αντικειμένου πρέπει να είναι «σειριοποιήσιμα».αντικειμένου πρέπει να είναι «σειριοποιήσιμα».• Τα πεδία των κλάσεων Τα πεδία των κλάσεων δενδεν λαμβάνονται υπόψη λαμβάνονται υπόψη

στη σειριοποίηση.στη σειριοποίηση.– Αντιγραφή Αντιγραφή bytes, bytes, και αναδόμηση στον και αναδόμηση στον

προορισμό.προορισμό.– Αντιγραφή ολόκληρων αντικειμένωνΑντιγραφή ολόκληρων αντικειμένων..

Page 22: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Πέρασμα Πέρασμα RMI RMI ΑντικειμένωνΑντικειμένων

στο στο RMIRMI• Αντικείμενα Αντικείμενα RMI:RMI:– Στην κατασκευή (Στην κατασκευή (constructorconstructor) τους ) τους

τα αντικείμενα αυτά είναι έτοιμα να τα αντικείμενα αυτά είναι έτοιμα να δεχθούν απομακρυσμένη κλήση.δεχθούν απομακρυσμένη κλήση.

– Δεν έχουν συνδεθεί Δεν έχουν συνδεθεί (bind) (bind) με όνομα με όνομα πιθανώς.πιθανώς.

– Κατασκευή απομακρυσμένων Κατασκευή απομακρυσμένων αναφορών στα αντικείμενα.αναφορών στα αντικείμενα.

– Αντιγραφή αναφοράςΑντιγραφή αναφοράς..

Page 23: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Διαχείριση ΛαθώνΔιαχείριση Λαθών• Κάθε φορά που κάτι πάει στραβά έχουμε Κάθε φορά που κάτι πάει στραβά έχουμε

εξαίρεση (εξαίρεση (exceptionexception).).• Δύο ειδών εξαιρέσειςΔύο ειδών εξαιρέσεις::

– ΕφαρμογήςΕφαρμογής..– Συστήματος.Συστήματος.

• Επιτρέπεται να έχουμε στην διεπαφή και Επιτρέπεται να έχουμε στην διεπαφή και εξαιρέσεις εφαρμογής.εξαιρέσεις εφαρμογής.– Μήπως είναι καλύτερο να χρησιμοποιήσουμε Μήπως είναι καλύτερο να χρησιμοποιήσουμε

wrapperswrappers;;– Η κλάση Η κλάση Exception Exception υλοποιεί το υλοποιεί το Serialized.Serialized.– Μία εξαίρεση μπορεί να έχει Μία εξαίρεση μπορεί να έχει εμφωλιασμένες εμφωλιασμένες

εξαιρέσειςεξαιρέσεις ( (nested exceptionsnested exceptions).).

Page 24: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Περίληψη – Περίληψη – ΣχεδιασμόςΣχεδιασμός

• Crash course Crash course σε σε Java.Java.• Παράδειγμα σε Παράδειγμα σε RMI.RMI.• Ζητήματα σχεδίασης (κατανεμημένων) Ζητήματα σχεδίασης (κατανεμημένων)

εφαρμογών.εφαρμογών.– RMI.RMI.– ΣχεδιασμόςΣχεδιασμός..

• Συγχρονισμός.Συγχρονισμός.• Callbacks.Callbacks.• Blocking/Callbacks/Polling.Blocking/Callbacks/Polling.• Push Push και και Pull.Pull.

Page 25: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Σχεδιασμός Σχεδιασμός ΣυγχρονισμούΣυγχρονισμού

• Κατασκευάζουμε Κατασκευάζουμε ένα αντικείμενο ένα αντικείμενο που κρατά που κρατά Strings Strings που φτάνουν σε που φτάνουν σε αυτό.αυτό.

• Ζητούμε τα Ζητούμε τα strings strings με δείκτες.με δείκτες.

• Δεν αφαιρούμε Δεν αφαιρούμε strings strings ποτέ.ποτέ.

public interfacepublic interface List { List { public void public void addString(addString( StringString s) s) throws ...throws ...;; public Stringpublic String getString( getString( intint i) i) throws ...throws ...;; public int public int

getNumOfStrings()getNumOfStrings() throws throws

RemoteExceptionRemoteException;;}}

Page 26: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Σχεδιασμός Σχεδιασμός Συγχρονισμού (συν.)Συγχρονισμού (συν.)

• Στην υλοποίηση Στην υλοποίηση κρατούμε τα κρατούμε τα strings strings σε ένα σε ένα πίνακα.πίνακα.

• Σίγουρα θα Σίγουρα θα χάσουμε χάσουμε strings!strings!

//...//...public void public void addString(addString( StringString s) { s) { if (this.counter) {if (this.counter) { throw new throw new Exception(Exception( “ “No space!”);No space!”); } }

this.stringArray[this.stringArray[ this.counter++] = s;this.counter++] = s;

}}// ...// ...

Page 27: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Σχεδιασμός Σχεδιασμός Συγχρονισμού (συν.)Συγχρονισμού (συν.)

• Συγχρονίζουμε την Συγχρονίζουμε την πρόσβαση στον πρόσβαση στον πόρο (πόρο (resourceresource))..

• Χρησιμοποιούμε τον Χρησιμοποιούμε τον synchronizedsynchronized μηχανισμό της μηχανισμό της Java.Java.

• Προσοχή στην Προσοχή στην έκταση έκταση συγχρονισμού!συγχρονισμού!

• Προσοχή στο Προσοχή στο κοινό κοινό σημείο σημείο συγχρονισμού!συγχρονισμού!

//...//...public void public void addString(addString( StringString s) { s) { synchronizedsynchronized(( this.stringArray) {this.stringArray) { if (this.counter) {if (this.counter) { throw new throw new Exception(Exception( “ “No space!”);No space!”); } } this.stringArray[this.stringArray[ this.counter++] = s;this.counter++] = s; }}}}// ...// ...

Page 28: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Τρόπος ΚλήσηςΤρόπος Κλήσης• Όλες οι Όλες οι RMI RMI κλήσεις είναι κλήσεις είναι σύγχρονες σύγχρονες

((synchronous/blocking)synchronous/blocking)..– Ο καλούμενος αναστέλλει την εκτέλεσή του Ο καλούμενος αναστέλλει την εκτέλεσή του

μέχρι να εκτελεστεί η απομακρυσμένη μέχρι να εκτελεστεί η απομακρυσμένη μέθοδος.μέθοδος.

• Μπορούμε να έχουμε κλήση ασύγχρονη;Μπορούμε να έχουμε κλήση ασύγχρονη;– Σε επίπεδο σχεδίασης ναι.Σε επίπεδο σχεδίασης ναι.– Δύο λύσεις:Δύο λύσεις:

• CallbacksCallbacks• PollingPolling

Page 29: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Blocking Blocking ΚλήσηΚλήση

Client Stub Skeleton Server

idle

Page 30: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Callback Callback ΚλήσηΚλήση

Client Callback Server

idle

create

otherprocessing

thread

Page 31: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Polling Polling μετά τηνμετά την ΚλήσηΚλήση

Client Request Server

create

otherprocessing

thread

pollupdte

poll

Page 32: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

Άλλες ΤεχνικέςΆλλες Τεχνικές• Push Push και και PullPull• Thread PoolsThread Pools• Άλλα;Άλλα;

Page 33: Λειτουργία  RMI  και Ζητήματα Σχεδίασης

ΑναφορέςΑναφορές• JavaJava

– ““Thinking in Java”Thinking in Java”,, Bruce Eckel Bruce Eckel, , διαθέσιμο από το διαθέσιμο από το www.bruceeckel.comwww.bruceeckel.com..

– ““The Java Tutorial”The Java Tutorial”,, Sun Sun, , διαθέσιμο από το διαθέσιμο από το http://java.sun.com/docs/books/tutorial/index.htmlhttp://java.sun.com/docs/books/tutorial/index.html..

• RMIRMI– ““Fundamentals of RMI”Fundamentals of RMI”, , jGurujGuru, , διαθέσιμο (μαζί με άλλα) από το διαθέσιμο (μαζί με άλλα) από το

http://developer.java.sun.com/developer/onlineTraining/http://developer.java.sun.com/developer/onlineTraining/..• ArchitectureArchitecture (πάρα πολλά – ένα όχι τρομερό) (πάρα πολλά – ένα όχι τρομερό)

– ““Pattern-Oriented Software Architecture”Pattern-Oriented Software Architecture”, , Douglas C. Schmidt, Douglas C. Schmidt, διαθέσιμο από (σύνδεσμος διαθέσιμο από (σύνδεσμος powerpoint slidespowerpoint slides) το ) το http://www.cs.wustl.edu/~schmidt/POSA/http://www.cs.wustl.edu/~schmidt/POSA/..

• ΆλλαΆλλα– Το Το www.google.comwww.google.com είχει πολύ καλά αποτελέσματα όταν έψαξα.είχει πολύ καλά αποτελέσματα όταν έψαξα.