Domanda

Vorrei aggiungere un metodo all'interfaccia CORBA del mio server esistente.Ciò richiederà la ricompilazione di tutti i client?

Sto usando TAO.

È stato utile?

Soluzione

La ricompilazione dei client non è richiesta (e non dovrebbe esserlo, indipendentemente dall'ORB utilizzato).Come indicato da Adam, le ricerche vengono eseguite in base al nome dell'operazione (un confronto diretto del testo).

Ho fatto quello che stai descrivendo con il nostro sistema basato su ACE/TAO e non ho riscontrato problemi (i server erano in ACE/TAO C++, i client erano ACE/TAO C++, C# utilizzava Janeva di Borland e OmniORBPy).

Altri suggerimenti

Supponendo che client e server comunichino tramite IIOP, non è necessaria alcuna ricompilazione.Un messaggio IIOP contiene il nome dell'interfaccia, il nome del metodo e i parametri.Se nessuna di queste cose è cambiata, tutto dovrebbe rimanere compatibile.L'aggiunta di un altro metodo all'interfaccia non cambierà nessuna di quelle cose esistenti.

D'altra parte, se i tuoi oggetti utilizzano un protocollo diverso o se i client sono in-process con il server e quindi ignorano IIOP, potrebbe essere necessario assicurarsi che tutto venga ricompilato.

Le operazioni (metodi) vengono cercate per nome, quindi è necessario ricompilare solo i client che utilizzano la nuova operazione.

Clienti che utilizzano la colocation (ad es.in esecuzione all'interno dello stesso processo con la colocation abilitata in ORB) deve essere ricompilato.I client remoti possono rimanere gli stessi: come detto in precedenza, i metodi vengono abbinati in base al nome simbolico.

Dipende dall'utilizzo del nuovo metodo idl.Se l'invocazione di Corba è statica (SII), il che significa che il tuo client è collegato allo stub, devi ricompilare uno stub se desideri utilizzare la nuova interfaccia del metodo aggiunto.

Se l'invocazione di corba è dinamica (DII), non è richiesto alcuno stub per il client.Non è richiesta alcuna ricompilazione.In questo caso, il tuo codice cliente dovrebbe essere come:

     remoteObjRef->invoke("methodname", args); // send("methodname", args)

Ho eseguito l'invocazione CORBA DII quattro anni fa e funziona con il client TAO e il servizio corba TAO/Jacorb/IONA.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top