next up previous contents index
Next: Referências Remotas Up: Distribuição Previous: O Lado do

Comunicação: Exemplo de uma Invocação

 

Descritas que foram as várias entidades envolvidas no processo de comunicação, o passo seguinte é descrever o próprio processo. O exemplo utilizado vai ser o mesmo de pontos anteriores, tendo agora em atenção os aspectos dinâmicos. Apresenta-se, de seguida, como exemplo de comunicação entre dois contextos, uma invocação remota. O caso descrito corresponde ao da figura 5.6.

  
Figure: Exemplo de comunicação: invocação remota.

A sequência de eventos é a que se segue:

(i)
O objecto A é criado por X no contexto I;
(ii)
X exporta explicitamente o objecto A no contexto I. Como resultado da operação de exportação, é criado um SIF, correspondente ao tipo de A, ao qual vai ficar associado um identificador único, o GID. O GID também vai ficar associado ao envelope de A, juntamente com o LID, formando uma identificação interna com o par <GIDi:LIDi>. Como o objecto é exportado pelo contexto onde existe o par é também a identificação do ponto de comunicação. A exportação envolve a atribuição de um nome que é registado no serviço de nomes, associado à identificação interna de Agif;
(iii)
O objecto Y, residente no contexto II tenta importar um objecto com o mesmo nome do que foi exportado em I. Como resultado da consulta obtém a identificação de A, que lhe vai permitir criar um CIF adequado e o par envelope/representante, em II, correspondentes a A. Passa a existir um canal entre os contextos I e II;
(iv)
O objecto B, previamente existente no contexto II é passado como argumento de uma invocação remota sobre A. Como consequência, é exportado implicitamente pelo contexto II, sem envolver o serviço de nomes. A exportação processa-se de forma idêntica à de A, incluindo a atribuição de um GID a um novo SIF e de um LID a B;
(v)
Para a passagem de uma referência para B de I para II é necessário construir uma descrição do objecto. Isso é feito através do tuplo <GIDi:LIDi,GIDc:LIDc>, em que, neste caso, pelas razões apontadas anteriormente, GIDc = GIDi e LIDc = LIDi. Não é necessário passar na invocação o tipo do objecto, já que ele está implícito no próprio canal de comunicação utilizado;
(vi)
Do lado I, a referência para B é transformada num objecto local, através de uma importação implícita, em tudo análoga à descrita em (iii), se se exceptuar a tradução do nome naquele caso. A importação obedece às regras de manipulação de identificadores e localização de envelopes descritas acima;
(vii)
Depois de criado o envelope e o representate de B têm-se as condições necessárias para prosseguir a invocação a A, que é executada como se de uma chamada local se tratasse, podendo, eventualmente ser feita alguma invocação remota a B (este caso não é discutido, porque se resume a repetir o que já foi dito);
(viii)
A operação invocada remotamente chega ao fim e tem que retornar para II uma referência para C. Tal como na passagem de parâmetros, o que é se passa no retorno é a descrição do objecto, através de um tuplo semelhante ao que foi criado para B. Claramente, C sofreu previamente uma operação de exportação por parte de I;
(xi)
A recepção, por II, do retorno da invocação remota e sua consequente tradução para um envelope local e restantes objectos de suporte, através de operação de importação, conclui a operação remota e a descrição deste exemplo.



next up previous contents index
Next: Referências Remotas Up: Distribuição Previous: O Lado do



David M. M. de Matos
Thu Jun 29 14:58:09 MET DST 1995