3.6. Bulgular ve Yorum
3.6.4. Faktör Analiz Bulguları…
Cada entidade, ao juntar-se ao sistema, tem acesso a um conjunto de primitivas que lhe permitem gerir a sua integração em grupos e a criação de novos grupos. Essas primitivas permitem também gerir o comportamento das entidades dentro de cada um dos grupos a que pertence, partindo sempre a sua invocação de uma entidade. Através das primitivas disponíveis, é possível controlar o modo de operação e estado da entidade dentro de cada um dos grupos a que ela pertence. O modelo define as seguintes primitivas:
• para a criação de eliminação de grupos: create() / destroy(); • para a entrada e saída de um grupo: join() / leave();
• para observar a constituição de um grupo: membership(); • para alterar o estado de uma entidade num grupo: set_mode().
Criação de um grupo
create(in : criador_id,nome_grupo,tipo_grupo,tipo_acesso,max_membros,[lista_param];out :
identi f icador)
Esta primitiva desencadeia o processo de criação do grupo. Após a sua chamada é devolvido um identificador de grupo, que é a identificação atribuída pelo sistema ao novo grupo. A implementação garante que esta é única. Os restantes argumentos definem a configuração e o atributos do grupo, em particular no que se refere à sua política de filiação:
• identi f icador: identificador único atribuído ao grupo pela implementação;
• criador_id: identificação da entidade que cria o grupo; esta entidade não passa a pertencer automaticamente ao grupo; para tal a aplicação deverá invocar explici- tamente a primitiva de filiação no grupo;
• nome_grupo: nome simbólico atribuído ao novo grupo ao nível da aplicação; • tipo_grupo: identifica o tipo de grupo a ser criado (IMPLICIT ou EXPLICIT); • tipo_acesso: identifica a política de filiação que irá ser assumida pelo grupo; exis-
tem configuradas as seguintes políticas de acesso11 de novos membros: FREE: entrada sem restrições;
11Todas as políticas de acesso existentes pressupõem a existência de um tempo limite de espera ("ti-
meout"); se entretanto não for possível chegar a um resultado, a filiação do candidato a membro não é aceite, sendo retornada essa informação ao cliente.
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
BY_ONE: qualquer um dos membros do grupo deve validar o pedido de filiação
do novo membro;
MAJORITY: a entrada do novo membro deve ser "votada" favoravelmente pela
maioria dos membros do grupo;
BY_LIST: a lista de possíveis membros12, é criada e passada como argumento,
na list_param, só podendo tornar-se membro quem estiver na lista;
BY_CREATOR: caso particular da validação, em que o acesso deve ser validado
pelo criador, que neste caso deve ser membro do grupo;
• max_membros: permite configurar o número máximo de membros que o grupo poderá possuir, se for atribuído um valor negativo significa que o grupo não tem limite de participantes;
• lista_param: esta lista de parâmetros é opcional e dependente do tipo de grupo. No caso de criação de grupo implícito, este parâmetro é utilizado para a passa- gem do conjunto de atributos e seus valores que caracterizam a formação do novo grupo, sendo este conjunto utilizado para validar a filiação de novos membros13. No caso dos grupos explícitos este parâmetro é vazio (null).
Ao criar um grupo, por invocação da primitiva create, é criado um novo grupo com um identificador único atribuído pelo sistema. Este novo grupo, no caso dos grupos explícitos, não possui inicialmente nenhum membro, podendo estes serem posterior- mente filiados, por invocação da primitiva join. No caso de se tratar de um grupo implícito, após a sua criação, este tem como seus membros todas as entidades elemen- tares que verifiquem o conjunto de valores de atributos, definido para o grupo.
Após a sua criação, um grupo passa a ter definido um representante, que é identifi- cado e associado ao grupo e que é configurado de acordo com os parâmetros passados na invocação da primitiva create. O representante de grupo actua como o gestor de grupo, sendo através dele que as interacções com o grupo são efectuadas.
Eliminação de um grupo
destroy(in : identi f icador, nome_grupo,aviso,[mensagem])
Esta primitiva "destrói" um grupo existente, removendo o seu registo das estruturas do sistema e eliminando o grupo enquanto entidade computacional, o que se traduz na eliminação do representante de grupo. Somente membros do grupo podem desenca- dear a sua eliminação. Os argumentos permitem definir qual o esquema de notificação de encerramento que se pretende adoptar:
12Os membros são identificados pelo identificador que lhes foi atribuído quando do registo no sis-
tema.
13Nos grupos implícitos todos os membros devem possuir o mesmo conjunto de valores de atributos,
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
• identi f icador: identificação do grupo a remover;
• nome_grupo: nome simbólico que foi atribuído ao grupo ao nível da aplicação; • aviso: indica o tipo de notificação que os membros do grupo devem receber,
quando da eliminação do grupo, tendo diversas possibilidades:
NO_NOTIFICATION: não é enviado qualquer tipo de informação explícita aos
membros indicando que o grupo irá ser eliminado, sendo da responsabi- lidade destes lidar com o facto de surgir um erro, ao tentarem aceder ao grupo, ou as possíveis operações em curso sobre o grupo falharem;
NOTIFICATION: é desencadeado um aviso de eliminação de grupo ao seus
membros, sendo da responsabilidade destes lidar com essa informação;
NOTIFICATION_ACK: é feita uma notificação da destruição do grupo aos seus
membros, ficando-se a aguardar que estes saiam do grupo antes de se pro- ceder à eliminação deste;
• mensagem: mensagem a enviar para os membros do grupo no caso de encerra- mento do grupo do tipo NOTIFICATION.
De salientar que no caso de aviso ser do tipo NOTIFICATION ou NO_NOTIFICATION a eliminação do grupo é imediata, sendo as operações em curso sobre o grupo canceladas. No caso NOTIFICATION_ACK o grupo só é elimi- nado após todos os membros terem saído ou seja o grupo estar vazio14, não sendo possível a entrada de mais membros no grupo após a operação de destroy.
Na situação de eliminação sem notificação (NO_NOTIFICATION) os membros do grupo não recebem informação directa sobre a eliminação do grupo. Os membros dos grupos eliminados deste modo, só detectam que ocorreu uma eliminação quando, ao efectuarem operações sobre o grupo, estas falharem.
As notificações de encerramento de um grupo desencadeiam um evento que é "sen- tido" por todos os seus membros activos. Na situação em que o membro se encontrava temporariamente "desligado", ao tornar-se activo, este procede à actualização dos seus grupos, removendo da sua estrutura a informação referente aos grupos que entretanto tenham sido eliminados, sendo este processo desencadeado de forma automática.
Entrada de uma entidade num grupo
join(in : entidade_id,grupo_id,in f o;out : entrada)
Esta primitiva permite a uma entidade do sistema pedir uma filiação explícita num grupo cujo identificador é passado como argumento. A entrada no grupo obedece à
14De modo a evitar bloqueios, é atribuído um tempo máximo pre-definido, de espera para a saída por
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
política de acesso configurada quando da criação do grupo; no caso de confirmação positiva, é desencadeado o processo de actualização da constituição do grupo. Os argumentos desta primitiva são:
• entidade_id: identificação da entidade que se pretende filiar; • grupo_id: identificação do grupo;
• in f o: informação fornecida pela entidade; este campo pode ser utilizado para passar informação específica da aplicação, sendo da responsabilidade desta o tra- tamento dessa informação;
• entrada: valor retornado, com indicação do resultado da entrada; no caso de en- trada com sucesso, é retornada a identificação atribuída à entidade nesse grupo.
Saída de uma entidade de um grupo leave(in : entidade_id,grupo_id)
Esta primitiva desencadeia o processo de saída de um membro do grupo indicado, actualizando a constituição do grupo, sendo os argumentos idênticos aos da primitiva
join:
• entidade_id: identificação da entidade que pretende sair (identificação dentro do grupo);
• grupo_id: identificação do grupo;
Obtenção da constituição de um grupo
membership(in : grupo_id;out : [lista_membros])
A chamada desta primitiva, por parte de um membros do grupo, retorna a lista dos identificadores de todos os membros, assim como o estado de actividade actual de cada um deles no grupo indicado.
• grupo_id: identificação do grupo;
• lista_membros: lista com os membros do grupo (identificação e estado de activi- dade15), retornado pela primitiva.
Esta primitiva retorna a lista de todos os membros que se encontram filiados no grupo, ou seja que efectuaram com sucesso uma operação de join ao grupo. O estado de actividade de cada um dos membros reflecte o facto destes se encontrarem online (activo) ou offline (desligado).
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
Modificação do estado de uma entidade num grupo set_mode(in : entidade_id,grupo_id,modo)
Esta primitiva possibilita, a uma entidade, alterar o seu estado de actividade e o modo como é vista dentro do grupo indicado. Os membros do grupo podem alte- rar o seu estado dentro dos grupos a que pertencem, por exemplo podem desligar-se (passando ao estado designado por OFFLINE), indicando assim que o grupo passa a assumir que o membro se encontra "desligado", ou seja não acessível embora se man- tenha filiado no grupo. Os argumentos são os seguintes:
• entidade_id: identificação da entidade cujo estado se pretende modificar; • grupo_id: identificação do grupo;
• modo: estado de actividade para o qual a entidade deve transitar:
ONLINE: neste modo a entidade está disponível para interacção com os restan-
tes membros;
OFFLINE: neste modo a entidade está indisponível e não acessível para comu-
nicações no grupo especificado.