Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Σχετικά έγγραφα
Σύνοψη 6 ης ιάλεξης. Εισαγωγικά (2)

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

Σύνοψη 3 ης ιάλεξης. Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων.

Remote Method Invocation (RMI)

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Απομακρυσμένα αντικείμενα (Remote Objects) Κατανεμημένα Συστήματα 1

Αντικειµενοστρεφής Προγραµµατισµός

Κινητά και Διάχυτα Συστήματα. Ενότητα # 4: Απομακρυσμένα αντικείμενα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Κατανεμημένα Συστήματα με Java. Ενότητα # 16: Κατανεμημένα συστήματα αντικειμένων Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Τι είναι η Spring. Η Spring είναι ένα ελεύθερο (open source) περιβάλλον εργασίας για εφαρμογές Java. Μπορεί να περιγραφεί ως:

Structuring Components Specifications using Dependencies among the Runtime Environments

Εργαστήριο Java. Αντικείµενο: Δίκτυα. Χειρισµός URLs. Άσκηση 1. Lab11. Πακέτο java.net

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

Σύστηµα Java RMI. Κατανεµηµένα Συστήµατα 17-1

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

11β Δομικά πρότυπα σχεδίασης

Ανάπτυξη Plugins για το AgentSheets

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Κλάσεις και Αντικείµενα

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Distributed Systems II

Αντικειμενοστρεφής Προγραμματισμός

ιαδικτυακές Εφαρµογές

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Περιγραφή της εργασίας

Week 10: Graphical User Interfaces

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΜΑΘΗΜΑ: Διαδικτυακές Εφαρμογές

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

2.1 Αντικειµενοστρεφής προγραµµατισµός

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Κεφάλαιο 1. Νήματα (Threads). Time Sharing

JAX-RPC (Web Services) ΕΠΛ 425: Τεχνολογίες ιαδικτύου Μιχάλης Έλληνας

Αντικειμενοστρεφής Προγραμματισμός

Βασικά της γλώσσας JAVA

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2008 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

Generics και ArrayLists

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #17

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

10.1 Γενικά για τα streams

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων

6. Εξαιρέσεις στη γλώσσα Java

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Διδάσκων: Παναγιώτης Ανδρέου

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Διάγραμμα Κλάσεων. Class Diagram

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

CORBA. Αρχιτεκτονική και 3-tier 3. εφαρµογές. Β. Φλώρος. Μαρτάκος. Τµήµα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστιακό Πανεπιστήµιο Αθηνών

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads)

Αρχιτεκτονική πελάτη-εξυπηρέτη Οι διεργασίες που εκτελούνται στο δίκτυο είναι είτε πελάτες (clients) είτε εξυπηρέτες (servers). Εξυπηρέτης: παθητικός,

Οντοκεντρικός Προγραμματισμός

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Μποχρίνη Σταυρούλα ΑΜ:3173 Σταθόπουλος Αναστάσιος ΑΜ:3220

Εισαγωγή στον Κατανεμημένο Προγραμματισμό

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2006)

Σχολή Προγραµµατιστών Ηλεκτρονικών Υπολογιστών (ΣΠΗΥ) Τµήµα Προγραµµατιστών Σειρά 112

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειμενοστρεφής Προγραμματισμός

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Αξιολόγηση Υπηρεσιών ιαδικτύου µέσω Περιπτώσεων Μελέτης

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Συγκριτικά Πλεονεκτήµατα Γραµµατείας 2003 έναντι Γραµµατείας 2.5

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Α2Α

public class ArrayStack implements Stack {

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι


ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Mεταβλητές (variables) και Σταθερές (constants)

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Πανεπιστήµιο Πειραιά Τµήµα Εκπαιδευτικής Τεχνολογίας και Ψηφιακών Συστηµάτων. Εισαγωγή στη γλώσσα προγραµµατισµού. Java. Βασίλειος Βεσκούκης

Transcript:

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων Ιωάννης Χατζηγιαννάκης Τρίτη, 15 Μαΐου, 2007 Αίθουσα ΑΠ7 Μελετάµε ένα κατανεµηµένο σύστηµα για την κράτηση αεροπορικών ϑέσεων Εξετάσαµε την αρχιτεκτονική του συστήµατος Επισκόπηση της ϐιβλιοθήκης JDBC για την σύνδεση µε την ϐάση δεδοµένων Επισκόπηση της ϐιβλιοθήκης java.net και την υλοποίηση του συστήµατος µε Sockets Βασιζόµαστε στο µοντέλο Πελάτη-Εξυπηρέτη ιαχωρίσαµε τον Εξυπηρέτη σε 3 επίπεδα Επίπεδο εδοµένων Βάση εδοµένων Επίπεδο Αντικειµένων Επίπεδο Λογικής Λογική επέκταση του µοντέλου πελάτη-εξυπηρέτη Χωρίζουµε την λειτουργικότητα σε ανεξάρτητα τµήµατα Κάθε τµήµα αναθέτετε σε διαφορετικό εξυπηρέτη (tier) Μια αίτηση µπορεί να απασχολήσει πολλούς εξυπηρέτες Αλυσιδωτές αιτήσεις κατά µήκος των διαφορετικών τµηµάτων Παράδειγµα Multi-tier Συστήµατος Εξετάσαµε ορισµένα ϑέµατα που σχετίζονται µε την ϐάση δεδοµένων Επίπεδο εδοµένων Για την υλοποίηση χρησιµοποιήσαµε τη Microsoft Access Υλοποιήσαµε 1 αντικείµενο για κάθε πίνακα της ϐάσης δεδοµένων Επίπεδο Αντικειµένων Κάναµε µια γρήγορη επισκόπιση των ϐασικών συνιστόσων από την ϐιβλιοθήκη java.net Επεκτίναµε την συνιστόσα Socket για να επιτρέπει την µεταφορά αντικειµένων (διανυσµάτων) Παρουσιάσαµε την υλοποίηση για επιλεγµέµενες λειτουργίες στον Εξυπηρέτη και Πελάτη Ο κώδικας και η ϐάση δεδοµένων ϑα αναρτηθούν στην σελίδα του µαθήµατος µαζί µε επιπλέον παραδείγµατα

Η υλοποίηση των server και client σε.net είναι παρόµοια Βασιζόµαστε στην ϐιβλιοθηκη System.Net.Sockets Η υλοποίηση του SuperSocket γίνεται µε την χρήση NetworkStream ϑα υλοποιήσουµε το σύστηµα µε την χρήση RMI Αφορά την διασύνδεση των δύο υψηλότερων επιπέδων Imports System.Net.Sockets Const portnumber As Integer = 8000 Dim tcplistener As New TcpListener(portNumber) tcplistener.start() Try Dim tcpclient As TcpClient = tcplistener.accepttcpclient() Dim networkstream As NetworkStream = tcpclient.getstream() Επίπεδο παρουσίασης (Presentation Tier) Επίπεδο λειτουργιών (Business Logic Tier) Τα χαµηλότερα επίπεδα (και ο τρόπος διασύνδεσης) παραµένουν τα ίδια Επίπεδο αντικειµένων (Object Tier) Επίπεδο δεδοµένων (Data Tier) Ενα αντικείµενο χαρακτηρίζεται κατανεµηµένο όταν οι µέθοδοι του µπορούν να κληθούν εξ αποστάσεως παρόµοιο τρόπο µε την κλήση αποµακρυσµένων διαδικασιών Σε τοπικό επίπεδο, οι δείκτες στο κατανεµηµένο αντικείµενο απεικονίζονται τοπικά από ένα ειδικό, εξουσιοδοτηµένο αντικείµενο από το οποίο γίνονται οι κλήσεις (proxy/stub) Μια αναφορά σε ένα κατανεµηµένο αντικείµενο µπορεί να χρησιµοποιηθεί ως παράµετρος στην κλήση µιας αποµακρυσµένης διαδικασίας Ο εξυπηρέτης ϑα δηµιουργήσει ένα τοπικό, εξουσιοδοτηµένο αντικείµενο (proxy) σύµφωνα µε τον δείκτη στο κατανεµηµένο αντικείµενο Για κάθε αντικείµενο υπάρχει ένα αντικείµενο σκελετού (skeleton object) Για κάθε αποµακρυσµένη αναφορά υπάρχει ένα αντικείµενο εξουσιοδότης (proxy object) Το αντικείµενο εξουσιοδότης αντιστοιχεί στο client stub Το αντικείµενο σκελετού αντιστοιχεί στο server stub Η χρήση των µεθόδων του κατανεµηµένου αντικείµενου γίνεται µέσω του RM runtime Εξουσιοδοτηµένο αντικείµενο Κλήση διαδικασίας

Ενα κατανεµηµένο αντικείµενο δηµιουργείτε από την κλάση που το ορίζει µε την πρώτη αναφορά ίδιος τρόπος µε τα απλά, τοπικά, αντικείµενα Η µονάδα που δηµιούργησε το αντικείµενο είναι υπεύθυνη για την διαχείριση του Κάθε αποµακρυσµένη διεργασία που επιθυµεί να χρησιµοποιήσει το αντικείµενο, πρέπει να επικοινωνήσει µε την µονάδα που το δηµιούργησε (διαχειριστή) Η µονάδα διαχειριστής κρατάει δείκτες προς τις διεργασίες που έχουν Ϲητήσει πρόσβαση στο κατανεµηµένο αντικείµενο Ορισµένοι µηχανισµοί περισυλλογής άχρηστων αντικείµενων (Garbage Collection) ακολουθούν την ίδια τακτική Οταν ένα αντικείµενο δεν έχει κανένα δείκτη προς κάποια διεργασία, ϑεωρείτε άχρηστο και περισυλλέγεται Μία διεργασία εξυπηρέτης δηµιουργεί το πρώτο αντικείµενο σύµφωνα µε την κλάση που το ορίζει Καταχωρεί τα στοιχεία του αντικειµένου (και της κλάσης που το ορίζει) σε µια υπηρεσία καταλόγου σύµφωνα µε ένα όνοµα Οταν µια διεργασία πελάτης ϑελήσει να χρησιµοποιήσει το κατανεµηµένο αντικείµενο, το αναζητά µέσω της υπηρεσίας καταλόγου µε ϐάση το όνοµα Η αναζήτηση επιστρέφει πληροφορίες για την τοποθεσία της κλάσης του αντικειµένου, την ύπαρξη ή όχι αντικειµένου Ενα αντικείµενο µπορεί να µην χρησιµοποιηθεί για µεγάλο χρονικό διάστηµα για λόγους εξοικονόµησης πόρων, το σύστηµα αποµακρύνει τα ανενεργά αντικείµενα σε δευτερεύουσα µονάδα αποθήκευσης Οταν µια διεργασία χρησιµοποιήσει τον τοπικό εξουσιοδότη (proxy) το σύστηµα επαναφέρει το αντικείµενο στην πρωτεύουσα µονάδα αποθήκευσης (επαναφορά) Η αποµάκρυνση και επαναφορά αντιστοιχεί στην λογική διαχείρισης σελίδων εικονικής µνήµης Το σύστηµα (εξυπηρέτης) που δηµιούργησε το κατανεµηµένο αντικείµενο A, διατηρεί ένα διάνυσµα A.v Οταν µια διεργασία p (πελάτης) δηµιουργήσει έναν τοπικό εξουσιοδότη (proxy) για το κατανεµηµένο αντικείµενο Το σύστηµα εξυπηρέτης προσθέτει την p στο A.v Οταν µια διεργασία p (πελάτης) περισυλλέξει τον τοπικό εξουσιοδότη (proxy) -- δεν υπάρχει καµία (τοπική) αναφορά Το σύστηµα εξυπηρέτης αφαιρεί την p από το A.v Αν ένα αντικείµενο έχει κενό διάνυσµα για ορισµένο χρονικό διάστηµα το σύστηµα ϑεωρεί ότι δεν χρησιµοποιείτε: το αντικείµενο περισυλλέγεται

Java RMI Αυστηρά για Java Ο κώδικας proxy µπορεί να δηµιουργηθεί εκ των προτέρων για τους πελάτες DCOM / COM+ Corba Υποστηρίζει διαφορετικές γλώσσες Απευθύνεται στα Windows* Υποστηρίζει διαφορετικές γλώσσες Υλοποιείται σε όλα τα λειτουργικά Πλούσια λειτουργικότητα ιαφορετικοί στόχοι διαφορετικές τεχνικές ανάπτυξης Η υλοποίηση µε RMI είναι σχεδόν πάντα πιο εύκολη και έχει µικρότερο κόστος σε σχέση µε κάποια υλοποίηση σε Sockets Η µετατροπή των δεδοµένων (προς µεταφορά) γίνεται εξολοκλήρου µε την χρήση της RMI Αν δεν µεταφέρουµε απλά στοιχεία (ASCII) µειώνουµε αρκετά τον απαραίτητο κώδικα Μπορούµε να επικοινωνήσουµε µε µεγαλύτερη ευκολία όταν παρεµβάλλονται firewalls -- η σύνδεση µπορεί να γίνει µέσω πρωτοκόλλου http Η µεταφορά λειτουργιών από τον πελάτη στον εξυπηρέτη είναι πολύ πιο εύκολη Ο κεντρικός στόχος δεν είναι µια αποδοτική υλοποίηση Μπορεί να επιτευχθεί µε την χρήση ισχυρότερων µηχανηµάτων Βελτίωση στην απόδοση δεν γίνεται ποτέ εκ των προτέρων Η υλοποίηση µε RMI είναι ορισµένα αρνητικά στοιχεία Η χρήση του JAVA Serialization απαιτεί µνήµη (δηµιουργία νέων προσωρινών αντικειµένων) και επεξεργαστική ισχύ (µετατροπή δεδοµένων) Η τεχνολογία RMI ανήκει στην SUN -- η εξέλιξη της, η ϐελτίωση των υπάρχοντων λειτουργιών, η υποστήριξη εξαρτάται από την SUN Είναι αποκλειστικά για JAVA -- υπάρχουν τρόποι να ξεπεραστεί το πρόβληµα µε την χρήση της ϐιβλιοθήκης JNI Παρ ολα αυτά είναι πιο απλή από την CORBA Συντοµότερος χρόνος υλοποίησης Ο στόχος είναι να καλύψουµε τις προδιαγραφές Απλό παράδειγµα χρήσης RMI Το αντικείµενο ϐρίσκετε στο µηχάνηµα URL addr = new URL("rmi://www.upatras.gr/ds2course"); Βασιζόµαστε στο πρωτόκολλο rmi και όχι στο http Απευθυνόµαστε στον κατάλογο της RMI (registry) του τοπικού µηχανήµατος Server server = (Server) Naming.lookup(addr); Η µέθοδος µας επιστρέφει µια αναφορά στο αντικείµενο που αναζητούµε, µε συγκεκριµένο τύπο στο παράδειγµα το αντικείµενο είναι τύπου Server Μόλις ϐρεθεί µια αναφορά, χρησιµοποιούµε το αντικείµενο σαν να ήταν ένα κανονικό τοπικό αντικείµενο float mark = server.getmymark(am); Μοναδική διαφορά η µέθοδος getmymark() µπορεί να δηµιουργήσει ένα σφάλµα τύπου RemoteException

Υλοποιούµε τρεις συναλλαγές µεταξύ Πελάτη-Εξυπηρέτη (δύο υψηλότερα επίπεδα) Αναζήτηση Πτήσεων επιστρέφει όλες τις πτήσεις που υπάρχουν στη ϐάση δεδοµένων Αναζήτηση Θέσεων επιστρέφει όλες τις κρατήσεις που αφορούν ένα συγκεκριµένο πελάτη Κράτηση ϑέσης υποθέτουµε ότι η πτήση και ο πελάτης υπάρχουν ήδη στους πίνακες της ϐάσης δεδοµένων (για χάριν ευκολίας) Οι υπόλοιπες λειτουργίες αφήνονται σαν άσκηση Ο κώδικας ϑα αναρτηθεί στην σελίδα του µαθήµατος Οι συνιστώσες λογισµικού για την υλοποίηση σε RMI δεν είναι πολύ διαφορετικές από αυτές που χρησιµοποιούν Sockets Η ϐασική διαφορά είναι η απουσία των µεθόδων που προετοιµάζουν τα δεδοµένα για αποστολή δηλ. η συνιστώσα SuperSocket Το πρώτο ϐασικό ϐήµα είναι να καταχωρίσουµε στην RMI τις µεθόδους που ϑα προσφέρει ο εξυπηρέτης Βασιζόµαστε στο interface της RMI Remote Το επεκτείνουµε ορίζοντας το ServerInterface Ολες οι µέθοδοι του interface µπορεί να δηµιουργήσουν ένα σφάλµα τύπου RemoteException import java.rmi.*; import java.sql.sqlexception; public interface ServerInterface extends Remote { public Flight [] searchflights() throws RemoteException, SQLException ; public Reservation [] searchseats( String passenger_no) throws RemoteException, SQLException ; public void bookseat(string flight_no, String passenger_no, String res_no) throws RemoteException, SQLException, FlightBookedException ; Οι δύο πρώτες µέθοδοι επιστρέφουν ένα πίνακα στην Java οι πίνακες είναι αντικείµενα τα οποία µπορούν να σειριοποιηθούν Η συνιστώσα Server επεκτείνει την UnicastRemoteObject Εποµένως η RMI ϑα περάσει τις τιµές των αντικειµένων και όχι αναφορές σε αυτά Αν πολλοί πελάτες Ϲητήσουν το ίδιο αντικείµενο Flight ϑα πάρουν διαφορετικά αντίγραφα αντί για µια αναφορά στο ίδιο αντικείµενο Αν για κάποιο λόγο ϑέλουµε να περάσουµε αναφορές σε ένα αντικείµενο µπορούµε να χρησιµοποιήσουµε την µέθοδο exportobject που ορίζει η συνιστώσα UnicastRemoteObject

import java.rmi.*; import java.rmi.server.*; import java.sql.*; public class Server extends UnicastRemoteObject implements ServerInterface { static final String SERVERNAME = "ARServer"; static final String DB = "jdbc:odbc:airline"; static final String USER = ""; static final String PASSWORD = ""; Connection theconnection; public Server() throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); theconnection = DriverManager.getConnection(DB, USER, PASSWORD); public static void main(string [] args) { System.setSecurityManager(new RMISecurityManager( try { Server server = new Server(); Naming.rebind(SERVERNAME, server); System.out.println("Server ready."); catch (Exception ex) { ex.printstacktrace(); public Flight [] searchflights() throws RemoteException, SQLException { Flight [] flights = Flight.getFlights(theConnecti return flights; public Reservation [] searchseats(string passenger_no) throws RemoteException, SQLException { Reservation [] res = Reservation.getPassenger( theconnection, passenger_no); return res; public void bookseat(string flight_no, String passenger_no, String res_no) throws RemoteException, SQLException, FlightBookedException { Reservation res = new Reservation( theconnection, res_no, flight_no,passenger_no); res.dbwrite(theconnection); Υλοποιούµε τον πελάτη χρησιµοποιώντας συνιστώσες του SWING Μπορούµε να εµφανίσουµε τα ίδια στοιχεία µε διαφορετικούς τρόπους (thin/thick clients) Υλοποίηση ως ανεξάρτητη εφαρµογή Υλοποίηση ως Applet Χρήση HTML, Flash,...... Ο Πελάτης δεν γνωρίζει πως εκτελείτε η αίτηση Η υλοποίηση του επιπέδου µε RMI είναι (σαφώς) ποιο απλή από την αντίστοιχη που χρησιµοποιεί Sockets

import java.rmi.*; import java.awt.*; import java.awt.event.*; public class RemoteClient extends Frame { public static final String URL = "rmi://127.0.0.1/arserver"; ServerInterface theserver; Button thesearchflights = new Button("Search Flights");... TextField theflightno = new TextField();... TextArea theresults = new TextArea(); public static void main(string [] args) { new RemoteClient(); public RemoteClient() { super("airline Reservation System (Remote Client)... setsize(600, 400); setvisible(true); try { theserver = (ServerInterface) Naming.lookup(URL); catch (Exception ex) { ex.printstacktrace(); public void searchflights() throws Exception { theresults.settext(""); Flight [] flights = theserver.searchflights(); for (int i = 0; i < flights.length; i++) { theresults.append(flights[i] + "\n"); public void searchseats() throws Exception { theresults.settext(""); Reservation [] seats = theserver.searchseats(thepassengerno.gettext()); for (int i = 0; i < seats.length; i++) { theresults.append(seats[i] + "\n"); public void bookseat() throws Exception { theresults.settext(""); theserver.bookseat(theflightno.gettext(), thepassengerno.gettext(), thereservationno.gettext()); public void actionperformed(actionevent evt) { try { String cmd = evt.getactioncommand(); if (cmd.equals("search Flights")) searchflights(); else if (cmd.equals("search Seats")) searchseats(); else if (cmd.equals("book Seat")) bookseat(); catch (Exception ex) { ex.printstacktrace();

ηµιουργήστε ένα ϕάκελο και τοποθετήστε όλα τον κώδικα της υλοποίησης και την ϐάση δεδοµένων (airline.mdb) Ρυθµίστε τον οδηγό ODBC Κάντε compile τον κώδικα: javac *.java ηλώστε την συνιστώσα Server στον τοπικό κατάλογο της RMI: rmic Server Ξεκινήστε τον τοπικό κατάλογο της RMI: start rmiregistry Ξεκινήστε τον Εξυπηρέτη: java Server Ξεκινήστε τον Πελάτη: java RemoteClient Κάναµε µια γρήγορη επισκόπηση των ϐασικών ιδεών των τεχνολογιών Κλήσης Αποµακρυσµένων ιαδικασιών Εστιάσαµε στην τεχνολογία RMI Παρουσιάσαµε την υλοποίηση για επιλεγµένες λειτουργίες στον Εξυπηρέτη και Πελάτη Ο κώδικας ϑα αναρτηθεί στην σελίδα του µαθήµατος µαζί µε επιπλέον παραδείγµατα Επόµενο Φροντιστήριο Case Study: Σύστηµα Κρατήσεων Αεροπορικών Θέσεων Υλοποίηση συστήµατος µε Servlets