"Che cosa caratterizza le applicazioni disegnate per interoperare mediante CORBA? Questo articolo contiene un esempio di applicazione realizzata mediante Orbix della IONA.
CORBA consente l'integrazione agevole di applicazioni che vede una successione di passi procedurali che possono essere sintetizzati e semplificati come di seguito:
1) Scrivere l'interfaccia dell'applicazione lato server per mezzo dell'Interface Definition Language (IDL). L'IDL e' object oriented ed ha il principale compito di definire metodi e strutture dati dei servizi esposti sul bus d'integrazione (Object Request Broker, ORB).
2) Compilare l'IDL generando stub e skeleton, elementi intermedi di utilita' al client ed al server per realizzare la connessione.
3) Realizzare l'applicativo lato server nel linguaggio prestabilito, ad esempio C++ oppure Java. Il lato server deve implementare gli oggetti specificati all'interno dell'IDL.
4) Realizzare il lato client richiedendo i servizi lato server per mezzo della connessione (binding) offerta dall'ORB.
Il seguente esempio, non compilabile per motivi di sinteticita', propone un log distribuito scritto in CORBA.
1) Interfaccia IDL
interface Log {
struct Log_record {
int priority;
long time;
//Messaggio come sequenza di caratteri.
sequence message;
}
// Il servizio consente la scrittura di un record di log.
void log_write(in Log_record log_rec);
}
2) La compilazione avviene mediante il comando Orbix idl specificando il nome del file d'interfaccia. La compilazione IDL crea i file C++ di stub e skeleton.
3) Esempio lato server
// Implementazione del servizio nella classe Log_i.
void Log_i::log_write (const Log_record &log_rec, CORBA::Environment &) {
}
// Implementazione del main.
int main (void) {
// Instanzio il mio oggetto applicativo lato server;
Log_i logger();
// Definisco disponibile il mio oggetto applicativo
CORBA::Orbix.impl_is_ready("Logger");
// Gestione delle eccezioni ed altro.
}
3) Esempio lato client
int main (void) {
// Reference lato client dell'oggetto esposto sull'ORB.
LogRef logger;
// Record da scrivere sul log.
Log_record log_record;
// Connessione all'oggetto esposto sull'ORB;
logger = Log::_bind();
// Valorizzazione della struttura log_record;
...
// Scrivo il mio record sul log remoto invocando il servizio lato server.
logger->log_write (log_record;);
// Gestione delle eccezioni ed altro.
}
"