Σύστηµα Java RMI οµή συστήµατος Μεταβίβαση παραµέτρων Μοντέλα επικοινωνίας Αναφορές αντικειµένων Ονόµατα αντικειµένων ιαχείριση αντικειµένων Υλοποίηση συστηµάτων Java RMI Κατανεµηµένα Συστήµατα 17-1
οµήσυστήµατος Πελάτης Κορµός RMI JVM Λειτουργικό Υλισµικό Αντικείµενο Σκελετός RMI JVM Λειτουργικό Υλισµικό ίκτυο ιασύνδεσης Αποµακρυσµένες κλήσεις µεθόδων Το αντικείµενο υλοποιεί µία αποµακρυσµένη διεπαφή Κλήση µεθόδων από αποµακρυσµένη JVM Πληρεξούσιος στον πελάτη Σκελετός στον εξυπηρετητή Παρόµοιες µε τοπικές κλήσεις ιαφοροποιήσεις για λόγους απόδοσης Κατανεµηµένα Συστήµατα 17-2
οµήσυστήµατος Αντιγραφή αποµακρυσµένων αντικειµένων εν αντιγράφονται και οι πληρεξούσιοι Συµπεριφορά synchronizedµεθόδων Συγχρονισµός µόνο σε κάθε JVM Κλείδωµα µόνο του πληρεξούσιου Λειτουργία εξυπηρετητή αντικειµένων ηµιουργία αντικειµένων, δηµοσίευση αναφορών Λειτουργία πελάτη Αναζήτηση αναφορών, εκτέλεση κλήσεων Υπέρ και κατά Java RMI Κατά: Αποκλειστική χρήση της Java Υπέρ: Πολυνηµάτωση, εξαιρέσεις, σειριακοποίηση Κατανεµηµένα Συστήµατα 17-3
Μεταβίβασηπαραµέτρων Τιµές ενυπαρχόντων τύπων Μεταβίβαση µε τιµή ηµιουργία αντιγράφου στον παραλήπτη Τοπικά αντικείµενα Μεταβίβαση µε τιµή Σειριακοποίηση και αποστολή Λήψη και αποσειριακοποίηση Πρέπει να υλοποιείται η διεπαφή java.io.serializable Αποµακρυσµένα αντικείµενα Μεταβίβαση µε αναφορά Αντιγραφή της αποµακρυσµένης αναφοράς Στην πραγµατικότητα αντιγραφή του πληρεξούσιου Ο πληρεξούσιος περιέχει και την αναφορά Κατανεµηµένα Συστήµατα 17-4
Σύγχρονες κλήσεις Μοντέλαεπικοινωνίας Εµποδισµός πελάτη κατά τη διάρκεια της κλήσης Σηµασιολογία: κλήση το πολύ µία φορά Το σύστηµα ρίχνει εξαιρέσεις RemoteException Χρήση πρόσθετων ευκολιών της Java Ασύγχρονες κλήσεις: χρήση πολλών νηµάτων Γεγονότα: χρήση παρατηρήσιµων αντικειµένων Πρωτόκολλο επικοινωνίας RMI Αξιοποιεί και το πρωτόκολλο σειριακοποίησης Εκτελείται πάνω από το TCP Μπορεί να αντικατασταθεί από άλλο πρωτόκολλο Αρχικά δοκιµή απευθείας σύνδεσης µέσω TCP Σε περίπτωση αποτυχίας δοκιµή σύνδεσης µέσω HTTP Κατανεµηµένα Συστήµατα 17-5
Αναφορέςαντικειµένων Κορµός Αναφορά Αντικείµενο Σκελετός Περιεχόµενα αναφοράς ιεύθυνση δικτύου, θύρα, τοπικό αναγνωριστικό Ο πελάτης βλέπει µόνο τον τοπικό πληρεξούσιο Μεταβίβαση αναφορών Το αντικείµενο αποτελείται από τρία µέρη Μεταβίβαση του πληρεξούσιου αντί της αναφοράς Ο πληρεξούσιος είναι σειριακοποιήσιµος Κατέβασµα κώδικα πληρεξούσιου για οικονοµία Πλεονεκτήµατα µεταβίβασης πληρεξούσιων Χρήση οποιασδήποτε µεθόδου επικοινωνίας Προϋποθέτει τη δυνατότητα κατεβάσµατος κώδικα Κατανεµηµένα Συστήµατα 17-6
Ονόµατααντικειµένων Μητρώο συστήµατος RMI (rmiregistry) ιαχειριστής αντικειµένων και υπηρεσία ονοµασίας Λειτουργεί ως δεσµευτής του συστήµατος Απεικόνιση ονοµάτων URL σε αναφορές αντικειµένων Το URL ξεκινάει µε rmi:// Εµβέλεια µητρώου Το µητρώο κάθε µηχανής είναι ανεξάρτητο εν είναι κατανεµηµένη υπηρεσία ονοµασίας Ο πελάτης πρέπει να γνωρίζει που να ρωτήσει Πολλαπλά µητρώα ανά µηχανή Αρκεί να εκτελούνται σε διαφορετικές θύρες Πολλοί εξυπηρετητές ανά µητρώο Πολλά µητρώα ανά εξυπηρετητή Κατανεµηµένα Συστήµατα 17-7
Ονόµατααντικειµένων ιεπαφή java.rmi.naming void bind(string url, Remote obj) εσµεύει ένα αντικείµενο µε ένα όνοµα Όλα τα αντικείµενα υλοποιούν τη διεπαφή Remote Όνοµα µορφής rmi://<διεύθυνση>:<θύρα>/<όνοµα> void rebind(string url, Remote obj) εσµεύει ένα νέο αντικείµενο µε το όνοµα Remote lookup (String url) Επιστρέφει την αναφορά που αντιστοιχεί στο όνοµα void unbind (String url) Ακυρώνει τη δέσµευση ονόµατος µε αντικείµενο String[] list (String url) Επιστρέφει όλες τις δεσµεύσεις σε µορφή πίνακα Κατανεµηµένα Συστήµατα 17-8
ιαχείρισηαντικειµένων Παροδικά αντικείµενα Επεκτείνουν την τάξη java.rmi.unicastremoteobject Ξεκινούν πάντα µε την ίδια αρχική κατάσταση Λίστα αναφορών ανά αντικείµενο Επίµονα αντικείµενα Επεκτείνουν την τάξη java.rmi.activation.activatable Ενεργοποιούνται όταν γίνεται αναφορά σε αυτά Ειδικός κατασκευαστής ενεργοποίησης Παίρνει ένα προταγµένο αντικείµενο ως παράµετρο Αναφορές ενεργοποιήσιµων αντικειµένων Αναγνωριστικό ενεργοποίησης (όνοµα) Ενεργή αναφορά (πραγµατική αναφορά) Κενή αναφορά: παθητικό αντικείµενο Μη κενή αναφορά: ενεργό αντικείµενο Κατανεµηµένα Συστήµατα 17-9
ιαχείρισηαντικειµένων Object1 Null Object1 Object2 Object3 Descriptor1 Descriptor2 Descriptor3 rmid αίµονας ενεργοποίησης (rmid) Αντιστοιχίζει αναγνωριστικά σε περιγραφητές Περιγραφητής ενεργοποίησης Group1 Class1 ιαδροµή Init1 Οµάδα ενεργοποίησης αντικειµένου Όνοµα τάξης και τοποθεσία κώδικα τάξης Προταγµένο αντικείµενο για αρχικοποίηση Κατανεµηµένα Συστήµατα 17-10
ιαχείρισηαντικειµένων Group1 Class1 ιαδροµή Init1 Class1 Σύστηµα αρχείων Object1 Group1 Κλήση παθητικού αντικειµένου Ανάκτηση περιγραφητή από δαίµονα ενεργοποίησης Μεταβίβαση περιγραφητή σε οµάδα ενεργοποίησης Οµάδα ενεργοποίησης Οµαδοποιεί τα ενεργοποιήσιµα αντικείµενα µίας JVM Φορτώνει την τάξη από την τοποθεσία Καλεί τον κατασκευαστή ενεργοποίησης Μεταβιβάζει το προταγµένο αντικείµενο Κατανεµηµένα Συστήµατα 17-11 JVM
Υλοποίησησυστηµάτων Java RMI Συγγραφή της αποµακρυσµένης διεπαφής Πρέπει να επεκτείνει τη διεπαφή java.rmi.remote Οι µέθοδοι πρέπει να ρίχνουν εξαιρέσεις RemoteException Ορίζονται µόνο οι αποµακρυσµένες µέθοδοι Υλοποίηση της αποµακρυσµένης διεπαφής Ο κώδικας ανήκει σε µία τάξη υπηρέτη Συνήθως επέκταση της java.rmi.unicastremoteobject Κατάλληλη για επικοινωνία σηµείου-προς-σηµείο Ειδικές υλοποιήσεις hashcode(), equals() και tostring() ιακρίνουν την ισότητα αποµακρυσµένων αντικειµένων εν αναφέρονται στους τοπικούς πληρεξούσιους Κατασκευαστής για αυτόµατη εξαγωγή αντικειµένου Τυχόν πρόσθετες µέθοδοι είναι µόνο τοπικές Κατανεµηµένα Συστήµατα 17-12
Υλοποίησησυστηµάτων Java RMI Παραγωγή κορµού πελάτη και σκελετού εξυπηρετητή Μεταγλώττιση διεπαφής και υλοποίησης Κλήση rmic στην τάξη υλοποίησης εν χρησιµοποιούµε την τάξη διεπαφής ηµιουργία τάξεων κορµού και σκελετού Απευθείας παραγωγή κώδικα δυφιοσυλλαβών Υλοποίηση προγραµµάτων εξυπηρετητή και πελάτη Εξυπηρετητής: κατασκευάζει αντικείµενα Εγγράφει τα αντικείµενα στο µητρώο MyObjImpl obj = new MyObjImpl(); Naming.rebind ("Obj1", obj); Πελάτης: ανακτά αναφορές προς αντικείµενα MyObj objstub = (MyObj)Naming.lookup("rmi://όνοµα/Obj1"); Κατανεµηµένα Συστήµατα 17-13
Υλοποίησησυστηµάτων Java RMI Κατέβασµα κώδικα Java Αυτόµατο κατέβασµα πληρεξούσιου εν απαιτείται ο ίδιος κώδικας παντού υναµική προσθήκη νέων υποτάξεων Χρήση νέων υποτάξεων σε αποµακρυσµένες κλήσεις ιαχειριστής ασφαλείας RMI Καθορίζεται µε τη µέθοδο setsecuritymanager Επιβάλλει πολιτική ασφαλείας για τους κορµούς Η εξ ορισµού τάξη είναι πολύ συντηρητική εν επιτρέπει καµία προσπέλαση! Ο προγραµµατιστής πρέπει να σκεφτεί την ασφάλεια Υλοποίηση κατάλληλης τάξης ανάλογα µε την εφαρµογή Επιβολή των κανόνων που ταιριάζουν στο περιβάλλον Κατανεµηµένα Συστήµατα 17-14