Next: Referências Remotas
Up: Distribuição
Previous: O Lado do
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 A
;
- (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: Referências Remotas
Up: Distribuição
Previous: O Lado do
David M. M. de Matos
Thu Jun 29 14:58:09 MET DST 1995