Γ. Ρήγας Ιατρική Πληροφορική Διδάσκων: Δ.Ι. Φωτιάδης

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δημιουργία Ιστοσελίδων σε HTML και FrontPage Πρόγραμμα Αναμόρφωσης Προπτυχιακών Σπουδών Κεντρικό Γραφείο Υποστήριξης Εκπαιδευτικού Έργου Αλέξανδρος Λεκατσάς.
Advertisements

Υλοποίηση Συστήματος Ψηφοφορίας με τη χρήση Java RMI
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΡΑΔΟΣΕΙΣ ΜΑΘΗΜΑΤΟΣ «ΔΙΚΤΥΑ ΕΛΕΓΧΟΥ» ΟΚΤΩΒΡΙΟΣ 2004.
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
29/11/2004Εισαγωγή στο OpenMP1 OpenMP Αθήνα, Νοέμβριος 2004 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
1/12/2003Εισαγωγή στο OpenMP1 OpenMP Αθήνα, Νοέμβριος 2003 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
24/11/2003Message Passing Interface (MPI)1 Αθήνα, Νοέμβριος 2003 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Web Services Υπηρεσίες διαδικτύου
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 19 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1.
JAVA και SQL Δαμιανός Χατζηαντωνίου
Αντικείμενα, Κλάσεις και Μέθοδοι
Ε ΝΤΟΠΙΣΜΟΣ Κ ΙΝΟΥΜΕΝΩΝ Α ΝΤΙΚΕΙΜΕΝΩΝ ΠΑΡΟΥΣΙΑΣΗ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗΣ ΕΡΓΑΣΙΑΣ Βόγκλης Κωνσταντίνος Τσίπουρας Μάρκος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Κεφάλαιο 11.2 Sockets.
Υπηρεσίες δικτύων επικοινωνίας
Message Passing Interface (MPI) Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων Αθήνα, Δεκέμβριος 2002.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
ΕΠΙΚΟΙΝΩΝΙΑ ΑΝΘΡΩΠΟΥ-ΜΗΧΑΝΗΣ Παρουσίαση της LessTif  Μαραγκός ΘοδωρήςΑ.Μ. 557  Καρκάνης ΗλίαςΑ.Μ. 539.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Εισαγωγή στη JAVΑ (μέρος Α’)
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
Network Inference Μπαλάφα Κασιανή - Αδριανή Πλασταρά Κατερίνα.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Data Types, Variables, and Arithmetic.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Σύνοψη 1 Αρχές διαδικτύου 1.1 Αναδρομή – εισαγωγή
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής.
Τεχνολογία Λογισμικού (Software Engineering) Ενότητα – Σχεδιασμός Λογισμικού Κεφάλαιο – Αρχιτεκτονικός Σχεδιασμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java.
Εισαγωγή στη C# Μαρίνος Θεμιστοκλέους Ανδρούτσου 150 Γραφείο 206 Τηλ Ώρες Γραφείου: Τετάρτη 5-6 μμ.
Εισαγωγή στον Προγ/μό Η/Υ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κατανεμημένα Συστήματα
Wrapper Classes, Abstract Classes and Interfaces
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Κεφάλαιο 7 Διαδικτύωση-Internet
ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ (ΕΡΓΑΣΤΗΡΙΟ)
Γιώργος Θάνος Παρασκευή 5 Δεκεμβρίου 2008
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΕΙΣΑΓΩΓΗ ΣΤΗ UML ΕΙΣΑΓΩΓΗ ΣΤΗ UML.
Εισαγωγή στη Java (Μέρος Α’)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό (στη γλώσσα Java)
Διάλεξη #10: Εκτέλεση Java χωρίς το BlueJ
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (στη γλώσσα Java)
Μεταγράφημα παρουσίασης:

Γ. Ρήγας Ιατρική Πληροφορική Διδάσκων: Δ.Ι. Φωτιάδης CORBA Γ. Ρήγας Ιατρική Πληροφορική Διδάσκων: Δ.Ι. Φωτιάδης

Τι είναι η CORBA η CORBA είναι ένα σύνολο πρωτοκόλλων και μηχανισμών που επιτρέπει στις εφαρμογές να επικοινωνούν μεταξύ τους αδιαφορώντας για το που βρίσκονται ή ποιος τις έχει σχεδιάσει (transparency)

Τι είναι η CORBA Είναι το ακρωνύμιο για το Common Object Request Broker Architecture Τα τελευταία χρόνια αποτελεί ένα από τα standards στη βιομηχανία για κατανεμημένη επικοινωνία Βασίζεται στην ιδέα των κατανεμημένων αντικειμένων Σχεδιασμένη ώστε να επιτρέπει την ολοκλήρωση πολλών αντικειμένων σε ετερογενή περιβάλλοντα

Περιεχόμενα CORBA Βασικά IDL ORB, POA, BOA,… IIOP Java και CORBA CORBA & XML

Ιστορική Αναδρομή Η CORBA 1.1 παρουσιάστηκε το 1991 από τον OMG και οριοθετήθηκε το (Interface Definition Language), IDL και τα (Application Programming Interfaces) API, τα οποία υλοποιούν την αλληλεπίδραση των αντικειμένων πελάτη/εξυπηρετητή (client/server) μέσα σε μια συγκεκριμένη εξυπηρέτηση μιας (Object Request Broker), ORB. Η CORBA 2.0, που εμφανίστηκε τον Δεκέμβριο του 1994, καθορίζει αληθινή ενδολειτουργία καθορίζοντας πως ORBs από διαφορετικούς εκδότες μπορούν να ενδοεπικοινωνούν. Βρισκόμαστε στην έκδοση 3.0.2

State of the Art Πρωτόκολλα και πλατφόρμες κατανεμημένων αντικειμένων που έχουν παρουσιαστεί μέχρι σήμερα είναι τα εξής: CORBA (OMG) DCE DCOM/ActiveX (Microsoft) Java/RMI (SUN) Ορισμένες πιο σύγχρονες προσεγγίσεις αποτελούν τα: .net (Microsoft) J2EE (SUN)

Γενικά Η CORBA, είναι η απάντηση του OMG στην ανάγκη της ενδολειτουργίας, στο πλαίσιο του ραγδαίου πολλαπλασιασμού του αριθμού των προϊόντων υλικού και λογισμικού που είναι διαθέσιμα σήμερα. Το πρωτόκολλο CORBA περιγράφει την υποδομή και την αρχιτεκτονική με βάση την οποία ετερογενείς εφαρμογές μπορούν να χρησιμοποιούν για να επικοινωνούν μεταξύ τους. Χαρακτηριστικά: Open Standard Ανεξάρτητο κατασκευαστών (OS, Language,…) Βάση της αρχιτεκτονικής: IDL, Interface Definition Language (OMG Spec) ORB, Object Request Broker Standard IIOP Protocol

Remote Object Invocation Στην CORBA, η επικοινωνία μεταξύ των Clients και των Servers ακολουθεί ένα μοντέλο object-oriented RPC-style. CLIENT Client Stub Wire Protocol Server Stub SERVER NETWORK Middle layer Bottom layer Top layer Reply (result) Request (args)

Object Implementation CORBA γενικά Η διαφάνεια είναι η κεντρική ιδέα της CORBA ‘Τοποθεσία’ – δυνατότητα να επικαλεστεί (invoke) ένα αντικείμενο χωρίς να ενδιαφέρεται για το που το αντικείμενο βρίσκεται στο δίκτυο Γλώσσα προγραμματισμού – ελευθερία στο να κατασκευάζεις το interface σε οποιαδήποτε γλώσσα Client Stub Code (proxy) O R B Object Implementation Stub Code (skeleton)

CORBA objects Τα αντικείμενα CORBA έχουν 3 βασικά χαρακτηριστικά : Τα CORBA objects μπορούν να γραφτούν σε οποιαδήποτε γλώσσα για την οποία υπάρχει IDL αντιστοιχία.

Αρχιτεκτονική CORBA Υπάρχουν πολλές ευκολίες που παρέχουν μια αρχιτεκτονική για distributed object-oriented computing. H CORBA αποτελείται από 5 βασικά στοιχεία: ORB (Object Request Broker) IDL (Interface Definition Language) DII (Dynamic Invocation Interface) IR (Interface Repositories) ΒOA ή POA (Object Adapters)

CORBA - Αρχιτεκτονική

Αρχιτεκτονική CORBA client machine server machine ORB TCP Socket library Client stub (proxy) ORB(s)(orbxid) & implementation repository Object Object skeleton Object adapter Server

Μια κλήση του client προς το αντικείμενο ORB (1/3) Ένας μηχανισμός ο οποίος παρέχει διαφάνεια όσον αφορά την τοποθεσία του αντικειμένου, την επικοινωνία και την ενεργοποίηση Το software το οποίο κατασκευάζει τις προδιαγραφές οι οποίες ορίζονται από το πρωτόκολλο CORBA. Η “καρδιά” της CORBA. Μια κλήση του client προς το αντικείμενο ORB Client Object Implementation IDL

ORB (2/3) Αποτελεί το πυρήνα της CORBA Είναι υπεύθυνο για την επικοινωνία μεταξύ αντικειμένων και clients ανεξάρτητα με το που αυτά βρίσκονται και τι τύπου είναι (heterogeneity and distribution transparency) Συγκεκριμένα επιτελεί τις εξής λειτουργίες: Να βρει το αντικείμενο με βάση την κλήση του client. Να προετοιμάσει το αντικείμενο ώστε να δεχθεί την κλήση Να μεταφερθούν τα δεδομένα που δημιουργήθηκαν από την κλήση του client

ORB (3/3) Και ο client και το αντικείμενο είναι απομονωμένα από το ORB εξαιτίας ενός IDL interface. Όλες οι κλήσεις διαχειρίζονται από τον ORB Το ORB υλοποιείται σαν ένα σύνολο από βιβλιοθήκες που παρέχουν βασικές υπηρεσίες επικοινωνίας Τα αντικείμενα CORBA διαφορετικών ORBs από διαφορετικούς κατασκευαστές πρέπει να επικοινωνούν μεταξύ τους με βάση το πρωτόκολλο IIOP (Internet Inter-ORB Protocol)

IDL IDL IDL IDL ORB ORB NETWORK Client Client Object Implementation Object Implementation IDL IDL IDL IDL ORB ORB NETWORK Μια κλήση από έναν client για ένα Object μέσο Δικτύου

IDL - Interface Definition Language Τα αντικείμενα CORBA πρέπει να οριστούν με interfaces με μια ειδική γλώσσα την IDL. Η IDL ορίζει του τύπους των αντικειμένων και όχι την υλοποίησή τους. Από τον ορισμό IDL ένα αντικείμενο ‘λέει’ στον client ποιες λειτουργίες παρέχει και πως μπορούν να κληθούν. Μερικές γλώσσες που έχουν αντιστοιχία με IDL είναι οι εξής: C, C++, SmallTalk, Java,Lisp

Παράδειγμα IDL module katytrail { module weather { struct WeatherData { float temp; string wind_direction_and_speed; float rain_expected; float humidity; }; typedef sequence<WeatherData> WeatherDataSeq interface WeatherInfo { WeatherData get_weather( in string site ); WeatherDataSeq find_by_temp( in float temperature

Παράδειγμα IDL (συν.) interface WeatherCenter { register_weather_for_site ( in string site, in WeatherData site_data ); }; Και τα 2 interfaces θα έχουν υλοποιήσεις αντικειμένων.

IDL/Java Mapping module interface struct operation basic types sequence package interface public final class method primitives [] (array of) Ο IDL2Java compiler αντιστοιχεί τους τύπους αριστερά στους τύπους της Java δεξιά. Ο Stub Code (χρησιμοποιείται από τον Client) και ο Skeleton Code (χρησιμοποιείται από τον Object implementation Code) επίσης δημιουργούνται από τον IDL2Java μεταγλωττιστή.

Ο IDL compiler Παίρνει input ένα IDL αρχείο το οποίο είναι γραμμένο σε οποιονδήποτε text editor με όνομα xxxxxx.idl Παράγει το stub και τον skeleton κώδικα στην γλώσσα προγραμματισμού που υποστηρίζει ο compiler (π.χ: Java stub και C++ skeleton) To stub δίνεται στον client σαν ένα εργαλείο που περιγράφει τις λειτουργίες του server, το αρχείο skeleton κατασκευάζεται στον server.

Stubs και Skeletons Κάθε αρχείο κώδικα αντανακλά τις ίδιες λειτουργίες που ορίζονται από το IDL αρχείο. Καλώντας μια διαδικασία από το stub κώδικα (client) θα προκαλέσει την εκτέλεση της μεθόδου στο skeleton αρχείο (server). To stub αρχείο επιτρέπει στον client να μεταχειρίζεται απομακρυσμένα αντικείμενα με την ίδια ευκολία που μεταχειρίζεται τοπικά αρχεία ή αντικείμενα.

Interface Repository Η CORBA ορίζει ένα “πίνακα” με όλα τα interfaces Επιτρέπει δυναμική κατασκευή κλήσεων σε αντικείμενα Μια διεργασία μπορεί runtime να βρει ένα interface Ένας client, χρησιμοποιώντας το IR, πρέπει να μπορεί να εντοπίζει ένα αντικείμενο, να βρίσκει πληροφορίες σχετικά με το interface του, και κατόπιν να κάνει μια κλήση η οποία θα στέλνεται μέσο της ORB

Dynamic Invocation Interface Οι λειτουργίες μπορούν να κληθούν μέσο στατικών ή δυναμικών διαδικασιών χρησιμοποιώντας το Interface Repository. Οι Static Invocation Interfaces, SII ορίζονται κατά τον χρόνο μεταγλώττισης και παρίστανται στην μεριά του client μέσο των stubs Τα DII επιτρέπουν στους clients να χρησιμοποιούν αντικείμενα του server χωρίς να τα έχουν μάθει κατά την διάρκεια της μεταγλώττισης. Επιτρέπουν στον client να βρίσκει (με βάση γνωρίσματα) ένα στιγμιότυπο (instance) ενός CORBA object και να το καλεί φτιάχνοντας δυναμικές κλήσεις.

Dynamic Skeleton Interface Παρόμοια με τα DII, τα server-side δυναμικά skeleton interface επιτρέπουν στους servers να είναι γραμμένοι χωρίς να έχουν skeletons, για τα αντικείμενα τα οποία υλοποιούν. Προτάθηκε για να δημιουργηθεί η διαλειτουργικότητα μεταξύ των ORBs τα οποία χρησιμοποιούν διαφορετικά πρωτόκολλα επικοινωνίας.

Object Adapters Γενικά: Είναι ένας μηχανισμός που υλοποιεί ένα συγκεκριμένη πολιτική ενεργοποίησης για μια ομάδα αντικειμένων Ο κύριος σκοπός ενός CORBA OA είναι να επιτρέψει σε ένα αντικείμενο να γίνει προσβάσιμο στους CORBA clients μέσω του ORB Στόχος του είναι: Κλήση μεθόδων Ενεργοποίηση / Απενεργοποίηση αντικειμένων

Δύο τύποι Object Adapter Basic Object Adapter, BOA: o object adapter που ορίζεται από την 2.2 έκδοση της CORBA και πριν, δεν ήταν καλά ορισμένος με αποτέλεσμα διάφορες εταιρείες που υλοποίησαν το πρωτόκολλο CORBA να εισάγουν διάφορες προεκτάσεις στον ορισμό του. Portable Object Adapter POA: ορίζεται από τις προδιαγραφές CORBA 2.2 – CORBA 3.0, Επιτρέπει καλή επικοινωνία μεταξύ των ORBs Είναι ορισμένο με περισσότερη σαφήνεια από ότι το BOA

POA Είναι ένα CORBA component που κάνει το κώδικα του server να φαίνεται σαν CORBA object στο client Έχει οριστεί έτσι ώστε ο κώδικας του server να μπορεί να γραφτεί ανεξάρτητα του ORB (portability) Παράδειγμα: //υπάρχει δηλωμένη στο IDL Objectld activate_object(in Servant p_servant); //servant: το κομμάτι του object που υλοποιεί τις μεθόδους που μπορεί να καλέσει ο client // Objectld: CORBA object identifier

GIOP Πρόβλημα πολλά διαφορετικά ORBs Λύση: καθορισμός ενός standard Inter-ORB Protocol και ενός ομοιόμορφου τρόπου αναπαράστασης αντικειμένων Αρχικά ορίστηκε το GIOP, ένα framework που όριζε ότι το πρωτόκολλα πρέπει να εκτελείται πάνω από ένα αξιόπιστο πρωτόκολλα μεταφοράς Έτσι ορίστηκε το IIOP πάνω από το TCP

IIOP Internet Inter-ORB Protocol Ένα object oriented πρωτόκολλο το οποίο επιτρέπει κατανεμημένες εφαρμογές να επικοινωνούν μέσο του Internet. Είναι ένα mapping του GIOP, και χρησιμοποιεί το επίπεδο μεταφοράς του Internet, Transmission Control Protocol (TCP) ώστε να στέλνει κλήσεις και να λαμβάνει απαντήσεις. Επίσης χρησιμοποιούσε τα IP και ICMP για να χειρίζεται αποτυχίες

Βήματα για μια CORBA Εφαρμογή Software το οποίο υλοποιεί τις προδιαγραφές της CORBA (ORBIX, VisiBroker, JavaIDL, TAO, Orbacus, etc.) Ορισμός ενός interface χρησιμοποιώντας IDL Υλοποίηση των κλάσεων της CORBA Υλοποίηση του προγράμματος Server Υλοποίηση των προγραμμάτων Client Έναρξη του object location service που παρέχεται από την ORB, τον server και τους client

Υλοποιήσεις CORBA ORB Plus ORBacus ORBexpress ORBit Orbix OrbixWeb PowerBroker RCP-ORB Robin Smalltalk Broker SOMobjects TAO Voyager Java IDL JavaORB JBroker Joe Jorba MICO NEO ObjectBroker ObjectBus ObjectDirector omniORB2 OAK VisiBroker Arachne Bionic Buffalo ChorusORB Component Broker DAIS DIMMA Distributed Smalltalk DOME DynaORB Electra GemORB Harlequin ILU Interbroker JacORB

Παράδειγμα εφαρμογής Το αντικείμενο Grid υποστηρίζει 2 σύνολα από μεθόδους: Get() and set(); και reset()

DCOM IDL CORBA IDL // uuid and definition of IGrid1 [ object, uuid(3CFDB283-CCC5-11D0-BA0B-00A0C90DF8BC), helpstring("IGrid1 Interface"), pointer_default(unique) ] interface IGrid1 : IUnknown { import "unknwn.idl"; HRESULT get([in] SHORT n, [in] SHORT m, [out] LONG *value); HRESULT set([in] SHORT n, [in] SHORT m, [in] LONG value); }; // uuid and definition of IGrid2 [ object, uuid(3CFDB284-CCC5-11D0-BA0B-00A0C90DF8BC), helpstring("IGrid2 Interface"), interface IGrid2 : IUnknown { HRESULT reset([in] LONG value); // uuid and definition of type library [ uuid(3CFDB281-CCC5-11D0-BA0B-00A0C90DF8BC), version(1.0), helpstring("grid 1.0 Type Library) library GRIDLib { importlib("stdole32.tlb"); // uuid and definition of class [ uuid(3CFDB287-CCC5-11D0-BA0B-00A0C90DF8BC), helpstring("Grid Class") // multiple interfaces coclass CGrid { [default] interface IGrid1; interface IGrid2; interface grid1 { long get(in short n, in short m); void set(in short n, in short m, in long value); }; interface grid2 void reset(in long value); // multiple inheritance of interfaces interface grid: grid1, grid2 DCOM IDL CORBA IDL

DCOM server class definition CORBA server class definition #include "grid.h" // IDL-generated interface header file class CClassFactory : public IClassFactory { public: // IUnknown STDMETHODIMP QueryInterface(REFIID riid, void** ppv); STDMETHODIMP_(ULONG) AddRef(void) { return 1; }; STDMETHODIMP_(ULONG) Release(void) { return 1; } // IClassFactory STDMETHODIMP CreateInstance(LPUNKNOWN punkOuter, REFIID iid, void **ppv); STDMETHODIMP LockServer(BOOL fLock) { return E_FAIL; }; }; class CGrid : public IGrid1, public IGrid2 { STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&m_cRef); } STDMETHODIMP_(ULONG) Release(void) { if (InterlockedDecrement(&m_cRef) == 0) { delete this; return 0; } return 1; } // IGrid1 STDMETHODIMP get(IN SHORT n, IN SHORT m, OUT LONG *value); STDMETHODIMP set(IN SHORT n, IN SHORT m, IN LONG value); // IGrid2 STDMETHODIMP reset(IN LONG value); CGrid(SHORT h, SHORT w); ~CGrid(); private: LONG m_cRef, **m_a; SHORT m_height, m_width; #include "grid.hh" // IDL-generated interface header file class grid_i : public gridBOAImpl { public: virtual CORBA::Long get(CORBA::Short n, CORBA::Short m, CORBA::Environment &env); virtual void set(CORBA::Short n, CORBA::Short m, CORBA::Long value, CORBA::Environment &env); virtual void reset(CORBA::Long value, CORBA::Environment &env); grid_i(CORBA::Short h, CORBA::Short w); virtual ~grid_i(); private: CORBA::Long **m_a; CORBA::Short m_height, m_width; }; DCOM server class definition CORBA server class definition

DCOM server implementation CORBA server implementation #include "cgrid.h" STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, void** ppv) { if (riid == IID_IClassFactory || riid == IID_IUnknown) { *ppv = (IClassFactory *) this; AddRef(); return S_OK; } *ppv = NULL; return E_NOINTERFACE; STDMETHODIMP CClassFactory::CreateInstance(LPUNKNOWN p, REFIID riid, void** ppv) { IGrid1* punk = (IGrid1*) new CGrid(100, 100); HRESULT hr = punk->QueryInterface(riid, ppv); punk->Release(); return hr; STDMETHODIMP CGrid::QueryInterface(REFIID riid, void** ppv) { if (riid == IID_IUnknown || riid == IID_IGrid1) *ppv = (IGrid1*) this; else if (riid == IID_IGrid2) *ppv = (IGrid2*) this; else { *ppv = NULL; return E_NOINTERFACE; } STDMETHODIMP CGrid::get(IN SHORT n, IN SHORT m, OUT LONG* value) { STDMETHODIMP CGrid::set(IN SHORT n, IN SHORT m, IN LONG value) { STDMETHODIMP CGrid::reset(IN LONG value) { CGrid::CGrid(SHORT h, SHORT w) { m_cRef = 1; extern HANDLE hevtDone; CGrid::~CGrid () { SetEvent(hevtDone); #include "grid_i.h" CORBA::Long grid_i::get(CORBA::Short n, CORBA::Short m, CORBA::Environment &) { return m_a[n][m]; } void grid_i::set(CORBA::Short n, CORBA::Short m, CORBA::Long value, CORBA::Environment &) { m_a[n][m] = value; void grid_i::reset(CORBA::Long value, CORBA::Environment &) { grid_i::grid_i(CORBA::Short h, CORBA::Short w) { grid_i::~grid_i () { DCOM server implementation CORBA server implementation

DCOM server code CORBA server code DCOM client code CORBA client code HANDLE hevtDone; void main() { // Event used to signal this main thread hevtDone = CreateEvent(NULL, FALSE, FALSE, NULL); hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); CClassFactory* pcf = new CClassFactory; hr = CoRegisterClassObject(CLSID_CGrid, pcf, CLSCTX_SERVER, REGCLS_MULTIPLEUSE , &dwRegister); // Wait until the event is set by CGrid::~CGrid() WaitForSingleObject(hevtDone, INFINITE); CloseHandle(hevtDone); CoUninitialize(); } int main() { // create a grid object using the implementation class grid_i grid_i ourGrid(100,100); try { // tell Orbix that we have completed the server's initialization: CORBA::Orbix.impl_is_ready("grid"); } catch (...) { cout << "Unexpected exception" << endl; exit(1); } DCOM server code CORBA server code #include "grid.h" void main(int argc, char**argv) { IGrid1 *pIGrid1; IGrid2 *pIGrid2; LONG value; CoInitialize(NULL); // initialize COM CoCreateInstance(CLSID_CGrid, NULL, CLSCTX_SERVER, IID_IGrid1, (void**) &pIGrid1); pIGrid1->get(0, 0, &value); pIGrid1->QueryInterface(IID_IGrid2, (void**) &pIGrid2); pIGrid1->Release(); pIGrid2->reset(value+1); pIGrid2->Release(); CoUninitialize(); } #include "grid.hh" void main (int argc, char **argv) { grid_var gridVar; CORBA::Long value; // bind to "grid" object; Orbix-specific gridVar = grid::_bind(":grid"); value = gridVar->get(0, 0); gridVar->reset(value+1); } DCOM client code CORBA client code

XML και CORBA XML: ενοποίηση της πληροφορίας... XML & CORBA  XMI (XML Metadata Interchange) ενοποίηση πληροφορίας και εφαρμογών κάτω από μια ‘κοινή’ πλατφόρμα.

Ερωτήσεις ?