Άσκηση 9.2
Εκτέλεση
ενός απλού
πράκτορα
Θέση αρχείων = /ExerciseCode/C9/NineTwo/
Σε αυτή
την άσκηση
πρέπει να
δείτε κάποιο
κώδικα
και να τον
εκτελέσετε.
Η άσκηση
περιλαμβάνει
ένα απλό κινητό
πράκτορα.
Αποτελείται
από δύο μέρη: τον
πελάτη και
τον
διακομιστή.
Ο διακομιστής περιέχει:
- Την
κλάση AgentServer. Αυτή
είναι η
διεπαφή που
καθορίζει
το
απομακρυσμένο
αντικείμενο
και
παραλαμβάνει
ένα
αντικείμενο
TimeAgent, εκτελεί
μια
επεξεργασία
σε αυτό και
το
επιστρέφει
στον πελάτη. Η
μέθοδος που
εκτελεί την
επεξεργασία
είναι η executeAgent.
- Την
κλάση AgentServerImpl. Αυτή
η κλάση είναι η
υλοποίηση
του AgentServer.
Υλοποιεί τη
μέθοδο executeAgent. Ο
κώδικας στην
executeAgent θα
καλέσει
τον κώδικα
στον
αντίστοιχο
πράκτορα για
να
εκτελεστεί.
Η κλάση
έχει επίσης
μια μέθοδο main
που
αρχικοποιεί
το
απομακρυσμένο
αντικείμενο
το οποίο
περιμένει έναν
πράκτορα να
φτάσει από τον
πελάτη. Όταν ο
πράκτορας
παραληφθεί, ο
πελάτης θα
καλέσει την
μέθοδο
executeAgent που θα
καλέσει τη
μέθοδο execute.
- Την
κλάση TimeAgent που
ορίζει τη
διεπαφή η
οποία
περιέχει μόνο
μια μέθοδο
execute, η οποία
μεταφέρει το
εκτελέσιμο
κώδικα μέσα
στον
πράκτορα.
Το τμήμα
του πελάτη
περιέχει:
- Μια
κλάση TimeAgentImpl που
είναι η
υλοποίηση
του TimeAgent interface που
βρίσκετε
στον
διακομιστή.
Αυτή η
μέθοδος
πρέπει να
υλοποιεί τη
μέθοδο
execute αλλά επίσης
περιέχει τη
μέθοδο getDate. Η
μέθοδος execute θα
καθορίσει
την ημερομηνία
και ώρα και η
μέθοδος getDate θα
επιστρέψει
την ημερομηνία
και ώρα.
- Η
κλάση AgentClient που
έχει πρόσβαση
στον
απομακρυσμένο
αντικείμενο
AgentServer το οποίο
καθορίστηκε
από τον
διακομιστή.
Αυτή, έπειτα θα
καλέσει τη
μέθοδο executeAgent
χρησημοποιώντας
ένα
αντικείμενο
TimeAgentImpl σαν
δεδομένο
εισόδου. Το
αντικείμενο
είναι
δεδομένο
εισόδου για
το
απομακρυσμένο
αντικείμενο
για αυτό
στέλνεται
στο
διακομιστή,
όπου
εκτελείται
και αλλάζει
ώστε να
περιέχει την
τρέχουσα
ώρα. Η
ημερομηνία
και η ώρα
παραλαμβάνεται
στέλνοντας
το μήνυμα
getDate σ'αυτό. Έτσι,
θα
επιστραφεί
το
αντικείμενο
στον πελάτη.
Αν δεν
έχετε κάνει τη
άσκηση 9.1 τότε
αλλάξτε το
φάκελο
ασφαλείας
για το RMI ως
εξής:
Αλλάξτε
το αρχείο
ασφαλείας
που
διαχειρίζεται
την
πρόσβαση σε
αντικείμενα RMI.
Αυτό το
αρχείο μπορεί
να βρεθεί στο
φάκελο
/Java ROOT/jre/lib/security/.
Υπάρχουν 2
αρχεία
ασφαλείας,
βρείτε αυτό
με τύπο
πολιτικής (policy type).
Ανοίξτε το με
οποιονδήποτε
διορθωτή
κειμένου και
αντικαταστήστε
τα
περιεχόμενα
του με
grant{ //Allow everything permission
java.security.AllPermission;
};
Αυτό θα
επιτρέπει την
πρόσβαση σε
αντικείμενα RMI.
Για την
άσκηση αυτή
κάντε τα
παρακάτω
βήματα:
- Συμβολομεταφράστε
όλες τις κλάσεις.
- Δημιουργήστε
τα στελέχη
και τους
σκελετούς
χρησιμοποιώντας
το εργαλείο
rmic
που έρχεται
μαζί με την Java.
- Ξεκινήστε
το μητρώο RMI.
Πρέπει να
ελέγξετε την
υλοποίηση
σας για να
δείτε πως θα
το κάνετε
αυτό. Μερικές
υλοποιήσεις
σας
επιτρέπουν να
το κάνετ
ανοίγωντας
ένα παράθυρο MSDOS
και
πληκτρολογώντας
rmiregistry.
- Εκτελέστε
τον
διακομιστή
σε ένα
παράθυρο MSDOS.
Κατά την
εκτέλεση
του
διακομιστή
προσθέστε τη
γραμμή -Djava.rmi.server.codebase=file:///διαδρομή
προς τις
κλάσεις, στο
τέλος της
εντολής java. Θα
δείτε
ορισμένα
μηνύματα που
θα σας λένε
ότι ο
διακομιστής
ξεκίνησε και
είναι έτοιμος.
- Εκτελέστε
τον πελάτη σε
ένα παράθυρο MSDOS .
Πρέπει να
δείτε τη
τρέχουσα
ημερομηνία
και ώρα. Αυτό
αποτελεί
ένδειξη ότι ο
πελάτης πήγε
στον
διακομιστή
και
επέστρεψε με
την απαραίτητη
πληροφορία.
- Διαβάστε
τον κώδικα
και
κατανοήστε
πως το RMI
χρησιμοποιήθηκε
για την
αποστολή
ενός πράκτορα
σε ένα
απομακρυσμένο
υπολογιστή,
την εκτέλεσή
του και την
επιστροφή
του.