Pagina Principale   Moduli   Lista dei namespaces   Gerarchia delle classi   Lista in ordine alfabetico   Lista dei composti   Lista dei files   Membri dei namespaces   Membri dei composti   Membri dei files   Esempi  

ObjectManager

Enti coinvolti nella realizzazione di un agente di tipo ObjectManager. Continua...


Files

file  objectmanager-server.cc
 Codice di attivazione di un ObjectManager (oggetto CORBA di tipo fbfs::ObjectManager_i).

file  ObjectManager_i.cc
 Implementazione dei metodi della classe fbfs::ObjectManager_i.

file  ObjectManager_i.h
 Definizione della classe fbfs::ObjectManager_i.

file  Properties.h
 Definizione della classe fbfs::Properties.


Composti

class  fbfs::ObjectManager_i
class  fbfs::Properties

Funzioni

void validate ()
 Eseguito in single user mode prima dell'avvio del servizio si occupa di leggere lo stato degli Storage che gestisce, di portarli in uno stato consistente e di inizializzare la struttura Repository, che contiene una lista degli oggetti gestiti. Continua...


Descrizione Dettagliata

Enti coinvolti nella realizzazione di un agente di tipo ObjectManager.


Documentazione delle funzioni

void fbfs::ObjectManager_i::validate ( ) [private]
 

Eseguito in single user mode prima dell'avvio del servizio si occupa di leggere lo stato degli Storage che gestisce, di portarli in uno stato consistente e di inizializzare la struttura Repository, che contiene una lista degli oggetti gestiti.

Definizione alla linea 44 del file Validate.cc.

00044                                    {
00045     TempRepository tr;
00046     
00047     // PRIMA FASE: Query a tutti gli Storage registrati (nella struttura servers) del
00048     // loro contenuto.
00049     // Creazione della struttura TempRepository, mappa che associa ad ogni Id di oggetto
00050     // l'elenco delle terne <ServerOspitante, Obj_prop, Obj_ts> che rapprenentano ogni
00051     // copia dell'oggetto negli Storage.
00052     for(Servers::iterator it = servers.begin(); it != servers.end(); it++) {
00053         // Per ogni Storage faccio quanto segue:
00054         // - Lo contatto; se non riesco a raggiungerlo lo elimino dalla lista.
00055         // - Eseguo una get_dir e metto aggiorno la struttura tr.
00056         try {
00057             URI uri((*it).c_str());
00058             CORBA::Object_var obj = utils::NameServer::get_object(orb, uri);
00059             fbfs::Storage_var server = fbfs::Storage::_narrow(obj);
00060             if(CORBA::is_nil(server))
00061                 throw NotFound();
00062             
00063             Obj_infoList *list = server->list(cert);
00064             for(int i=0; i<list->length(); i++) {
00065                 Obj_info &info = (*list)[i];
00066                 string name(info.id.name);
00067                 InstanceInfo instance;
00068                 instance.server = (*it);
00069                 instance.prop = info.prop;
00070                 instance.ts = info.ts;
00071                 tr[name].push_front(instance);
00072             };
00073         } catch (...) {
00074             // In caso di errore --qualunque esso sia-- elimino il server dall'elenco.
00075             servers.erase(it);
00076         };
00077     };
00078     // Qui la struttura TempRepository è completa.
00079 
00080     // SECONDA FASE: Validazione della struttura TempRepository (con eventuali operazioni
00081     // sugli storage per riportare la consistenza) e creazione della struttura Repository.
00082     // Procedo come segue:
00083     // - Per ogni oggetto nel TempRepository, invoco una procedura che lo convalidi, occupandosi
00084     //   di rendere consistenti le istanze.
00085     // - Aggiungo ogni oggetto valido nella struttura Repository rep, con l'elenco dei server
00086     //   che lo forniscono.
00087 
00088     rep = Repository();
00089     for( TempRepository::iterator i = tr.begin(); i != tr.end(); i++ ) {
00090         Servers s = validate( (*i).first, (*i).second );
00091         if(s.size() != 0)   
00092             rep[(*i).first] = s;
00093     };
00094 }


Generato il Thu Feb 15 13:25:10 2001 per A Simple Distributed Object Repository with CORBA & C++. da doxygen1.2.3 scritto da Dimitri van Heesch, © 1997-2000