Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Λειτουργία RMI και Ζητήματα Σχεδίασης Στούμπος Βασίλης Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής."— Μεταγράφημα παρουσίασης:

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

2 Περίληψη Crash course σε Java.Crash course σε Java. Παράδειγμα σε RMI.Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. –Σχεδιασμός.

3 Περίληψη - Java Crash course σε Java.Crash course σε Java. –Κλάσεις και αντικείμενα. –Διαφορές με τη C++. Παράδειγμα σε RMI.Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. –Σχεδιασμός.

4 Κλάσεις στην Java Οι κλάσεις (classes) ορίζουν τύπους αντικειμένων.Οι κλάσεις (classes) ορίζουν τύπους αντικειμένων. Τα αντικείμενα (objects) είναι στιγμιότυπα (instances) των κλάσεων.Τα αντικείμενα (objects) είναι στιγμιότυπα (instances) των κλάσεων. Οι κλάσεις ομαδοποιούνται σε μια ιεραρχία πακέτων (packages).Οι κλάσεις ομαδοποιούνται σε μια ιεραρχία πακέτων (packages). package gr.uoa.di.stoumpos; public class Counter { private int value; public Counter(int v) { this.value = v; } public int getValue() { return this.value; } public void increment() { this.value++; }

5 Αντικείμενα στην Java Τα αντικείμενα (objects) είναι στιγμιότυπα (instances) των κλάσεων.Τα αντικείμενα (objects) είναι στιγμιότυπα (instances) των κλάσεων. Πρόσβαση στα αντικείμενα μόνο μέσω αναφορών (references).Πρόσβαση στα αντικείμενα μόνο μέσω αναφορών (references). Πεδία αντικειμένων και πεδία κλάσεων (class/object fields).Πεδία αντικειμένων και πεδία κλάσεων (class/object fields). Garbage collecting.Garbage collecting. Counter a = new Counter(12); Counter b = new Counter(-12); for (int i=0; i< 10; i++) { a.increment(); } b.increment(); System.out.println( “Counter a value is ” + a.getValue()); System.out.println( “Counter b value is ” + b.getValue());

6 Πρόγραμμα Java Μία μόνο public κλάση σε κάθε αρχείο.Μία μόνο public κλάση σε κάθε αρχείο. Όνομα του αρχείου όπως η public κλάση.Όνομα του αρχείου όπως η public κλάση. Μεταγλώττιση με javac.Μεταγλώττιση με javac. Εκτέλεση με java.Εκτέλεση με java. –Υπάρχει main μέθοδος κλάσης. Ιδεατή Μηχανή (VM- Virtual Machine)Ιδεατή Μηχανή (VM- Virtual Machine) /* Αρχείο: TestProg.java */ import gr.uoa.di.stoumpos; public class TestProg { public static void main( String[] args) { for(i=0; i

7 Εξαιρέσεις (Exceptions) στη Java Η εξαίρεση είναι ένα αντικείμενο μιας κλάσης.Η εξαίρεση είναι ένα αντικείμενο μιας κλάσης. Εξαιρέσεις χρησιμοποιούνται σε εξαιρετικές περιπτώσεις.Εξαιρέσεις χρησιμοποιούνται σε εξαιρετικές περιπτώσεις. Η δυνατότητα εξαίρεσης (throw exception) δηλώνεται στις μεθόδους.Η δυνατότητα εξαίρεσης (throw exception) δηλώνεται στις μεθόδους. Διαχείριση λαθών με try-catch μπλοκ.Διαχείριση λαθών με try-catch μπλοκ. Εξαιρέσεις:Εξαιρέσεις: –Runtime –Error –Άλλες try { FileInputStream stream = new FileInputStream( new File(“foo.dat”));File } catch(FileNotFoundException fnfe) {FileNotFoundException //... } catch(SecurityException se) {SecurityException //... } catch(IOException ioe) { //... } catch(Throwable) { throw new MyException(); } finally { //... }

8 Αντικειμενοστρεφές Μοντέλο στη Java Κληρονομικότητα (inheritance)Κληρονομικότητα (inheritance) –Μόνο απλή (όχι multiple inheritance από C++). –Χρήση Interface: σαν κλάση χωρίς σώματα μεθόδων Πολυμορφισμός (polymorphism)Πολυμορφισμός (polymorphism) –Όπως στη C++. –Strong-typed γλώσσα. Ενθυλάκωση (encapsulation)Ενθυλάκωση (encapsulation) –Τέσσερα επίπεδα περιορισμών (visibility scope): private, protected, public και package.

9 Περίληψη - RMI Crash course σε Java.Crash course σε Java. Παράδειγμα σε RMI.Παράδειγμα σε RMI. –Απλό παράδειγμα. –Εγκατάσταση συστήματος. –Ειδικές περιπτώσεις. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. –Σχεδιασμός.

10 Τοπική και Απομακρυσμένη Κλήση Μεθόδου Που βρίσκεται το αντικείμενο; Πως γίνεται η κλήση; Ποιος αναλαμβάνει τις λεπτομέρειες της κλήσης;

11 Παράδειγμα RMI Τι θα πει απομακρυσμένη κλήση;Τι θα πει απομακρυσμένη κλήση; –Μια μέθοδος, κάποιου αντικειμένου, καλείται από κάποια άλλη. –Διαφορετικός χώρος διευθύνσεων. –Διαφορετικό μηχάνημα (δίκτυο). Τρόπος κλήσης κοινός με τοπική κλήση.Τρόπος κλήσης κοινός με τοπική κλήση. Διαφοροποιούμε:Διαφοροποιούμε: –Διεπαφή (interface). –Υλοποίηση (implementation). Θα δούμε τον μετρητή σαν παράδειγμα.Θα δούμε τον μετρητή σαν παράδειγμα.

12 Διεπαφή Μετρητή Όλες οι διεπαφές είναι εξειδικεύσεις της java.rmi.Remote διεπαφής.Όλες οι διεπαφές είναι εξειδικεύσεις της java.rmi.Remote διεπαφής. Όλες οι μέθοδοι μπορεί να δώσουν RemoteException.Όλες οι μέθοδοι μπορεί να δώσουν RemoteException. Το ίδιο interface πρέπει να χρησιμοποιεί και ο καλούμενος και ο καλών.Το ίδιο interface πρέπει να χρησιμοποιεί και ο καλούμενος και ο καλών. import java.rmi.*; public interface Counter extends java.rmi.Remote { public void setValue(int v) throws RemoteException; public int getValue() throws RemoteException; public void increment() throws RemoteException; }

13 Υλοποίηση Μετρητή Η υλοποίηση επεκτείνει το java.rmi.UnicastRemot eObject και υλοποιεί το Counter.Η υλοποίηση επεκτείνει το java.rmi.UnicastRemot eObject και υλοποιεί το Counter. Μπορούν να οριστούν πεδία της υλοποίησης.Μπορούν να οριστούν πεδία της υλοποίησης. Απαραίτητος default constructor.Απαραίτητος default constructor. Οι υλοποιήσεις δεν επηρεάζονται από το είδος κλήσης.Οι υλοποιήσεις δεν επηρεάζονται από το είδος κλήσης. import java.rmi.*; public class CounterImpl extends java.rmi.UnicastRemoteObject implements Counter { int value = 0; public Counter() throws RemoteException { super(); } public void setValue(int v) throws RemoteException { this.value = v; } //... }

14 Εξυπηρέτης Μετρητή Απαιτείται να:Απαιτείται να: 1.Κατασκευαστεί το αντικείμενο εξυπηρέτης. 2.Δεσμευθεί ένα «όνομα» για αυτό. 3.Να συνδεθεί (bind) με μια διεύθυνση. Ο εξυπηρέτης τρέχει συνέχεια.Ο εξυπηρέτης τρέχει συνέχεια. Χρειάζεται να τρέχει το rmiregistry.Χρειάζεται να τρέχει το rmiregistry. import java.rmi.*; public class CounterServer { public static void main( String[] args) { Counter counter = null; String url = “rmi://localhost” + “:1099/MyNiceCounter”; try { counter = new Counter(); Naming.bind(url, counter); } catch(Exception e) { System.exit(-1); }

15 Απομακρυσμένη Κλήση Μετρητή Απαιτείται να:Απαιτείται να: 1.Αναγνωρισθεί το «όνομα» του αντικειμένου. 2.Αναφορά στο απομακρυσμένο αντικείμενο. 3.Χρήση της αναφοράς. Πολλοί πελάτες εκτελούνται ταυτόχρονα.Πολλοί πελάτες εκτελούνται ταυτόχρονα. Χρειάζεται να τρέχει ο εξυπηρέτης.Χρειάζεται να τρέχει ο εξυπηρέτης. Counter counter = null; String url = “rmi://localhost” + ":1099/MyNiceCounter”; try { counter = Naming.lookup(url); counter.increment(); System.out.println( “Counter a value is ” + counter.getValue()); } catch(Exception e) { //... }

16 Επίτευξη Απομακρυσμένης Κλήσης Λεπτομέρειες της κλήσης: –Κώδικας που γεννιέται αυτόματα. –Stubs και Skeletons. –Πέρασμα παραμέτρων και αποτελεσμάτων. Οι διεπαφές έχουν όλη την πληροφορία. Marshalling/Unmarsh alling. skeleton stub

17 Εγκατάσταση Συστήματος Μεταγλωττίζουμε όλες τις κλάσεις.Μεταγλωττίζουμε όλες τις κλάσεις. –Χρήση javac. Κατασκευάζουμε τον αυτόματο κώδικα.Κατασκευάζουμε τον αυτόματο κώδικα. –Χρήση rmic. Μοιράζουμε κλάσεις στις τοποθεσίες που θα χρειαστούνΜοιράζουμε κλάσεις στις τοποθεσίες που θα χρειαστούν –jar Εκτελούμε (σε χωριστά shells): –rmiregistry –java gr.uoa.di. stoumpos.CounterServer –Java gr.uoa.di. stoumpos.CounterClient

18 Περίληψη – Σχεδιασμός (RMI) Crash course σε Java.Crash course σε Java. Παράδειγμα σε RMI.Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. Εξαιρέσεις.Εξαιρέσεις. Παράμετροι.Παράμετροι. –Σχεδιασμός.

19 Περίληψη – Σχεδιασμός (RMI) Crash course σε Java.Crash course σε Java. Παράδειγμα σε RMI.Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. Εξαιρέσεις.Εξαιρέσεις. Παράμετροι.Παράμετροι. –Σχεδιασμός.

20 Πέρασμα Παραμέτρων στο RMI Πρωτογενείς Τύποι:Πρωτογενείς Τύποι: –int, char, double,… –Αντιγραφή των τιμών. Αντικείμενα Java.Αντικείμενα Java. Απομακρυσμένα RMI αντικείμενα.Απομακρυσμένα RMI αντικείμενα.

21 Πέρασμα Αντικειμένων στο RMI Αντικείμενα Java:Αντικείμενα Java: –Πρέπει να είναι serializable! Υλοποιούν την διεπαφή java.io.Serializable.Υλοποιούν την διεπαφή java.io.Serializable. Μεταφορά στιγμιότυπου σε σειρά από bytes.Μεταφορά στιγμιότυπου σε σειρά από bytes. Όλα τα μέλη ενός «σειριοποιήσιμου» αντικειμένου πρέπει να είναι «σειριοποιήσιμα».Όλα τα μέλη ενός «σειριοποιήσιμου» αντικειμένου πρέπει να είναι «σειριοποιήσιμα». Τα πεδία των κλάσεων δεν λαμβάνονται υπόψη στη σειριοποίηση.Τα πεδία των κλάσεων δεν λαμβάνονται υπόψη στη σειριοποίηση. –Αντιγραφή bytes, και αναδόμηση στον προορισμό. –Αντιγραφή ολόκληρων αντικειμένων.

22 Πέρασμα RMI Αντικειμένων στο RMI Αντικείμενα RMI:Αντικείμενα RMI: –Στην κατασκευή (constructor) τους τα αντικείμενα αυτά είναι έτοιμα να δεχθούν απομακρυσμένη κλήση. –Δεν έχουν συνδεθεί (bind) με όνομα πιθανώς. –Κατασκευή απομακρυσμένων αναφορών στα αντικείμενα. –Αντιγραφή αναφοράς.

23 Διαχείριση Λαθών Κάθε φορά που κάτι πάει στραβά έχουμε εξαίρεση (exception).Κάθε φορά που κάτι πάει στραβά έχουμε εξαίρεση (exception). Δύο ειδών εξαιρέσεις:Δύο ειδών εξαιρέσεις: –Εφαρμογής. –Συστήματος. Επιτρέπεται να έχουμε στην διεπαφή και εξαιρέσεις εφαρμογής.Επιτρέπεται να έχουμε στην διεπαφή και εξαιρέσεις εφαρμογής. –Μήπως είναι καλύτερο να χρησιμοποιήσουμε wrappers; –Η κλάση Exception υλοποιεί το Serialized. –Μία εξαίρεση μπορεί να έχει εμφωλιασμένες εξαιρέσεις (nested exceptions).

24 Περίληψη – Σχεδιασμός Crash course σε Java.Crash course σε Java. Παράδειγμα σε RMI.Παράδειγμα σε RMI. Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών.Ζητήματα σχεδίασης (κατανεμημένων) εφαρμογών. –RMI. –Σχεδιασμός. Συγχρονισμός.Συγχρονισμός. Callbacks.Callbacks. Blocking/Callbacks/Polling.Blocking/Callbacks/Polling. Push και Pull.Push και Pull.

25 Σχεδιασμός Συγχρονισμού Κατασκευάζουμε ένα αντικείμενο που κρατά Strings που φτάνουν σε αυτό.Κατασκευάζουμε ένα αντικείμενο που κρατά Strings που φτάνουν σε αυτό. Ζητούμε τα strings με δείκτες.Ζητούμε τα strings με δείκτες. Δεν αφαιρούμε strings ποτέ.Δεν αφαιρούμε strings ποτέ. public interface List { public void addString( String s) throws...; public String getString( int i) throws...; public int getNumOfStrings() throws RemoteException; }

26 Σχεδιασμός Συγχρονισμού (συν.) Στην υλοποίηση κρατούμε τα strings σε ένα πίνακα.Στην υλοποίηση κρατούμε τα strings σε ένα πίνακα. Σίγουρα θα χάσουμε strings!Σίγουρα θα χάσουμε strings! //... public void addString( String s) { if (this.counter) { throw new Exception( “No space!”); } this.stringArray[ this.counter++] = s; } //...

27 Σχεδιασμός Συγχρονισμού (συν.) Συγχρονίζουμε την πρόσβαση στον πόρο (resource).Συγχρονίζουμε την πρόσβαση στον πόρο (resource). Χρησιμοποιούμε τον synchronized μηχανισμό της Java.Χρησιμοποιούμε τον synchronized μηχανισμό της Java. Προσοχή στην έκταση συγχρονισμού!Προσοχή στην έκταση συγχρονισμού! Προσοχή στο κοινό σημείο συγχρονισμού!Προσοχή στο κοινό σημείο συγχρονισμού! //... public void addString( String s) { synchronized( this.stringArray) { if (this.counter) { throw new Exception( “No space!”); } this.stringArray[ this.counter++] = s; } //...

28 Τρόπος Κλήσης Όλες οι RMI κλήσεις είναι σύγχρονες (synchronous/blocking).Όλες οι RMI κλήσεις είναι σύγχρονες (synchronous/blocking). –Ο καλούμενος αναστέλλει την εκτέλεσή του μέχρι να εκτελεστεί η απομακρυσμένη μέθοδος. Μπορούμε να έχουμε κλήση ασύγχρονη;Μπορούμε να έχουμε κλήση ασύγχρονη; –Σε επίπεδο σχεδίασης ναι. –Δύο λύσεις: CallbacksCallbacks PollingPolling

29 Blocking Κλήση ClientStubSkeletonServer idle

30 Callback Κλήση ClientCallbackServer idle create other processing thread

31 Polling μετά την Κλήση ClientRequestServer create other processing thread poll updte poll

32 Άλλες Τεχνικές Push και PullPush και Pull Thread PoolsThread Pools Άλλα;Άλλα;

33 Αναφορές JavaJava –“Thinking in Java”, Bruce Eckel, διαθέσιμο από το –“The Java Tutorial”, Sun, διαθέσιμο από το RMIRMI –“Fundamentals of RMI”, jGuru, διαθέσιμο (μαζί με άλλα) από το Architecture (πάρα πολλά – ένα όχι τρομερό)Architecture (πάρα πολλά – ένα όχι τρομερό) –“Pattern-Oriented Software Architecture”, Douglas C. Schmidt, διαθέσιμο από (σύνδεσμος powerpoint slides) το ΆλλαΆλλα –Το είχει πολύ καλά αποτελέσματα όταν έψαξα.


Κατέβασμα ppt "Λειτουργία RMI και Ζητήματα Σχεδίασης Στούμπος Βασίλης Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google