Άσκηση 9.3
Ανάπτυξη ενός
εργοστασίου
αντικειμένων
Θέση αρχείων = /ExerciseCode/C9/ExNineThree/
Σε αυτή
την άσκηση θα
αναπτύξετε
κώδικα που
αλληλεπιδρά
με έναν
διακομιστή
που
δημιουργεί
απομακρυσμένα
αντικείμενα
δυναμικά. Αυτό
έρχεται σε
αντίθεση με
την Άσκηση
9.1
όπου ένα
απομακρυσμένο
αντικείμενο
δημιουργήθηκε
στατικά. Η
άσκηση
σχετίζεται
με δύο
συστατικά :
έναν πελάτη και
ένα
διακομιστή.
Ο
διακομιστής
περιέχει τις
ακόλουθες
κλάσεις:
- RMIFactory.
Αυτή είναι η
διεπαφή που
καθορίζεται
από τις
κλάσεις που
δυναμικά
υλοποιούν
απομακρυσμένα
αντικείμενα
τα οποία
έχουν
καθοριστεί
από την
κλάση StringObject. Ένας
πελάτης
μπορεί να
στέλνει
μηνύματα σε
κλάσεις που
υλοποιούν
αυτή τη
διεπαφή ώστε
να
δημιουργούν
οποιοδήποτε
αριθμό
αντικειμένων
StringObject.
- RMIFactoryImpl
είναι η
υλοποίηση
της διεπαφής
RMIFactory. Η μέθοδος
createObject στην
κλάση
δημιουργεί
απομακρυσμένα
αντικείμενα
και τα
αναγνωρίζει
μονδικά
με ένα
αλφαριθμητικό
που περιέχει
ένα μοναδικό
ακέραιο
αριθμό.
- StringObject
ορίζει το
απομακρυσμένο
αντικείμενο
που θα
δημιουργηθεί
δυναμικά. Αυτά
τα
αντικείμενα
πρόκειται να
επιστραφούν
στον πελάτη
για αυτό
πρέπει να
υλοποιήσουν
το Serializable (Αυτή
είναι μια
διεπαφή χωρίς
μεθόδους
και
χρησιμοποιείται
για να
σημειώσει
τις κλάσεις
ώστε να μπορούν
να
μεταφερθούν
μέσα στο
δίκτυο).
Πρόκειται για
μια απλή κλάση
που περιέχει
έναν
κατασκευαστή
και μια
μέθοδο που
επιστρέφει
το μοναδικό
προσδιοριστικό
του
αντικειμένου
εκφρασμένου
σαν
αλφαριθμητικό.
Ο πελάτης
περιέχει τις
παρακάτω
κλάσεις
- FactoryClientSolution.
Πρόκειται για
τη λύση της
άσκησης.
- FactoryClient.
Αυτή η κλάση
πραγματοποιεί
τη σύνδεση με
το
διακομιστή,
δημιουργεί
ένα
εργοστάσιο
αντικειμένων
που
καθορίζεται
από το RMIFactory και
έπειτα
δυναμικά
δημιουργεί
δύο
αντικείμενα
StringObject και
εμφανίζει τις
ιδιότητές
τους. Αυτή
είναι η κλάση
που πρέπει να
αλλάξετε.
Αν δεν έχετε κάνει τις Ασκήσεις
9.1 ή 9.2τότε
αλλάξτε το
αρχείο
ασφαλείας
για το RMI ως
εξής:
Τροποποιήστε
το αρχείο
ασφαλείας
που
διαχειρίζεται
την πρόσβαση
σε
αντικείμενα RMI.
Αυτό το
αρχείο μπορεί
να βρεθεί στο
φάκελο /Java ROOT/jre/lib/security/.
Υπάρχουν 2
αρχεία
ασφαλείας,
βρείτε αυτό
με τύπο
πολιτικής (policy type).
Ανοίξτε το με
οποιονδήποτε
διοτθωτή
κειμένου και
αντικαταστήστε
τα
περιεχόμενα
του με
grant { //Allow everything permission
java.security.AllPermission;
};
Αυτό θα
επιτρέψει την
πρόσβαση σε
αντικείμενα RMI.
Για την
άσκηση αυτή
κάντε τα
παρακάτω
βήματα:
- Συμβολομεταφράστε
όλες τις
κλάσεις.
- Δημιουργήστε
τα στελέχη
και τους
σκελετούς
χρησιμοποιώντας
το εργαλείο
rmic που
έρχεται μαζί με
την Java.
- Ξεκινήστε
το μητρώο RMI.
Πρέπει να
ελέγξετε την
υλοποίηση
σας για να
δείτε πως θα
το κάνετε
αυτό. Μερικές
υλοποιήσεις
σας
επιτρέπουν να
το κάνετ
ανοίγοντας
ένα παράθυρο MSDOS
και
πληκτρολογώντας
rmiregistry.
- Ξεκινήστε
τον
διακομιστή
σε ένα
παράθυρο MSDOS.
Κατά την
εκτέλεση
του server
προσθέστε τη
γραμμή -Djava.rmi.server.codebase=file:///διαδρομή
προς τις
κλάσεις, στο
τέλος της
εντολής java. Θα
δείτε
ορισμένα
μηνύματα που
θα σας λένε
ότι ο server
ξεκίνησε και
είναι έτοιμος.
- Εκτελέστε
τον πελάτη σε
ένα άλλο
παράθυρο MSDOS.
Πρέπει να
δείτε δύο
μηνύματα που
δείχνουν ότι
δύο μοναδικά
απομακρυσμένα
αντικείμενα
δημιουργήθηκαν.
- Εκτελέστε
τον πελάτη ξανά
και θα δείτε
δύο
απομακρυσμένα
αντικείμενα
να έχουν
διαμορφωθεί.
- Τερματίστε
τον
διακομιστή
κλείνοντας
το παράθυρο MSDOS.
- Διαβάστε
τον κώδικα
για τα RMIFactory, RMIFactoryImpl,
StringObject και
FactoryClient και
κατανοήστε
τι συμβαίνει.
Προσέξτε τη
σχέση μεταξύ
RMIFactory και StringObject.
- Τροποποιήστε
τον κώδικα
στο FactoryClient για να
δημιουργήστε
δύο
απομακρυσμένα
αντικείμενα
s0 και s1.
- Εκτελέστε
τον
διακομιστή
σε ένα
παράθυρο MSDOS.
- Εκτελέστε
τονπελάτη όπως
στο βήμα 5
παραπάνω. Αν
έχετε γράψει
σωστό
κώδικα, θα
δείτε μηνύματα
ότι δύο
απομακρυσμένα
αντικείμενα
έχουν
δημιουργηθεί.