• No results found

Lokale strategier og konsernfaglig samarbeid

In document forhold til Europa. (sider 148-151)

DEL 3 • ARBEID, VELFERD OG MILJØ

10.7 Lokale strategier og konsernfaglig samarbeid

Este mecanismo de comunicação suporta a difusão de eventos para um grupo de en- tidades. Esta comunicação é baseada num modelo de eventos, tal que a ocorrência de um evento permite a difusão de informação para os membros de um grupo que tenham previamente subscrito esse tipo de evento. O principal motivo da escolha de um modelo de eventos prende-se com o facto de um grande número de situações que se pretendem modelar, envolverem elementos de natureza essencialmente reactiva e assíncrona, que devem responder a alterações ocorridas dinamicamente. Os eventos são suportados por um esquema de subscrições e de notificações, como é típico nestes sistemas [EFGK03, TR05].

As entidades produtoras de informação publicam eventos, enquanto as entidades interessadas na informação sinalizam o seu interesse através de uma subscrição do tipo de evento, que é registada pelo sistema. As entidades subscritoras de um dado tipo de evento recebem uma notificação sempre que ocorrer um evento desse tipo, sendo então executado um método de atendimento especificado e que foi configurado para esse evento, quando da subscrição.

Um evento gerado possui, genericamente, o seguinte formato: evento(id_produtor,msg_ev)

• id_produtor: identificação de entidade que desencadeou o evento; • msg_ev: mensagem de evento desencadeada.

A ocorrência de um evento desencadeia um processo de notificação, onde a in- formação que é difundida para os membros do grupo ou seja o conteúdo de msg_ev, possui o formato:

< tipo_evento,atribs >

• tipo_evento: tipo de evento, corresponde a uma identificação que distingue o evento, de entre o conjunto de tipos reconhecidos, ou seja, registados no sistema; • atribs: lista de atributos referentes ao evento, podendo ter a configuração, <

UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS

– nome: nome do atributo;

– valor: valor(es) assumidos pelo atributo.

Este tipo de interacção entre entidades é particularmente importante no âmbito de comunicação com um grupo (comunicação 1-N), ou seja, quando se pretende difundir a mesma informação para um conjunto de entidades de um mesmo grupo e ter uma reacção da parte dos seus membros. Este mecanismo de comunicação é utilizado no caso da comunicação directa (send) quando o destinatário é um grupo e se pretende avisar os seus membros da chegada de informação, sendo estes notificados através de um evento interno do sistema.

Existem duas classes distintas de eventos, os eventos de sistema e os eventos de aplicação. Os primeiros são definidos e utilizados ao nível do próprio sistema, servem como forma de realização de algumas das primitivas definidas no modelo e são auto- maticamente subscritos por todas as entidades quando estas são registadas. Os segun- dos são eventos definidos e configurados pela aplicação, ou seja, é da responsabilidade desta a definição do comportamento/método que deve ser desencadeado quando da ocorrência do evento, bem como a estrutura de notificação do próprio evento (atribs). Os membros que pretendem ser notificados da ocorrência de um tipo de evento de aplicação deverão subscrevê-lo e ter acesso à rotina de atendimento19 que será execu- tada sempre que esse evento ocorrer.

Todos os eventos são disseminados somente dentro de um grupo, ou seja, somente os membros têm acesso aos eventos definidos para o grupo. As entidades exteriores ao grupo não podem subscrever nem ter acesso aos serviços de notificação de eventos específicos do grupo. Como já foi referido, cada membro do grupo pode seleccionar os tipos de eventos cujas notificações pretende subscrever.

O modelo de eventos é suportado pelas primitivas: • advertise / unadvertise / ckeck_adv;

• publish;

• subscribe / unsubscribe.

Estas primitivas permitem estabelecer e gerir as interacções, através de eventos, dos membros de um grupo.

Anúncio de novo tipo de evento

advertise(in : entidade_id,grupo_id,tipo_advertise,tipo_evento,in f o_evento)

Esta primitiva anuncia, no grupo, que determinada entidade do grupo pode vir a "publicar" um evento, ou seja, pode ser geradora desse tipo de evento. Ao executar

UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS

esta primitiva, é efectuada uma actualização de uma estrutura de suporte a eventos no grupo. Esta estrutura, que pode ser consultada por todos os membros, é gerida pelo re- presentante de grupo, uma vez que este é o responsável pela gestão das comunicações no grupo. A estrutura contém informação referente ao evento e à lista dos membros que o subscreveram; no caso de se tratar de um evento de sistema esta lista coincide com a lista de membros do grupo.

Cada tipo de evento tem associada uma rotina de tratamento, a que as entidades subscritoras têm que ter acesso e que é executada por estas quando recebem a notifica- ção da ocorrência do tipo de evento.

• entidade_id: identificação da entidade que será a produtora dos eventos do tipo indicado;

• grupo_id: identificação do grupo;

• tipo_advertise: tipo de anúncio que irá ser desencadeado e que indica qual a polí- tica de divulgação da ocorrência do evento, para os membros do grupo:

PASSIVE: esta opção selecciona uma política em que é efectuado um anúncio

passivo do novo tipo de evento, ou seja, é da responsabilidade dos possíveis interessados consultar, através da primitiva check_adv, que tipos de eventos existem disponíveis no grupo;

ACTIVE: esta opção selecciona uma política em que é efectuado um anúncio

activo do tipo de evento, ou seja, é desencadeado um evento de anúncio de evento sendo notificados todos os membros do grupo da ocorrência de um novo advertise, por parte de uma entidade do grupo;

• tipo_evento: identificador do tipo de evento, atribuído pela entidade anunciante; a primitiva advertise lida somente com eventos de aplicação dado que os eventos de sistema são sempre, à partida, "conhecidos" por todos;

• in f o_evento: informação associada ao tipo de evento, com descrição da estrutura da informação associada ao evento, ou seja a lista de atributos com valores não instanciados (< nomeatributo,_ >).

Anúncio de remoção de um tipo de evento unadvertise(in : entidade_id,grupo_id,tipo_evento)

Ao executar esta primitiva, a entidade sinaliza que deixa de ser produtora de even- tos deste tipo. Sendo também removido/desactivado este tipo de evento das estruturas de suporte de eventos no representante do grupo.

UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS

• grupo_id: identificação do grupo;

• tipo_evento: tipo de evento (identificador do evento).

Consulta de tipos de eventos disponíveis

check_adv(in : grupo_id;out : [tipo_evento,entidade_id,metodo_atend]

Os membros do grupo podem consultar informação (na estrutura de suporte de eventos do grupos) sobre os diversos tipos de eventos de aplicação que podem ocorrer dentro do grupo20, através da primitiva check_adv() Assim, podem efectuar uma con- sulta de tipos de eventos que foram anunciados via advertise() e as entidades que os produzem, no grupo indicado. Esta informação encontra-se definida e é gerida pelo representante de grupo. Ao executar esta primitiva, é devolvida a lista de tipos dos eventos anunciados nesse grupo.

• grupo_id: identificação do grupo;

• [tipo_evento, entidade_id, metodo_atend]: lista com os tipos de eventos que foram anunciados para este grupo, as respectivas entidades produtoras e métodos de atendimento declarados.

Subscrição de um tipo de evento

subscribe(in : grupo_id,tipo_evento,metodo_atend)

Os membros do grupo podem subscrever tipos de eventos de aplicação que foram anunciados no grupo. A subscrição de um tipo de evento, por parte de uma entidade elementar, configura a sua estrutura interna de suporte de eventos, associando ao tipo de evento o método de atendimento indicado. Esta configuração permite desencadear o processo de atendimento, quando a entidade é notificada da ocorrência desse tipo de evento.

• grupo_id: identificação do grupo;

• tipo_evento: identificação do tipo de evento que pretende subscrever;

• metodo_atend: identificação do método de atendimento a ser executado pela en- tidade subscritora, quando ocorre esse evento.

UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS

Remoção da subscrição de um tipo de evento unsubscribe(in : grupo_id,tipo_evento)

Esta primitiva desencadeia o processo de cancelamento da subscrição de um tipo de evento, anteriormente subscrito pela entidade nesse grupo.

• grupo_id: identificação do grupo;

• tipo_evento: identificação do tipo de evento que pretende deixar de subscrever.

Publicação de um evento publish(in : grupo_id,evento)

Esta primitiva é invocada pela entidade que pretende notificar os membros do grupo da ocorrência de determinado tipo de evento. O responsável pela notificação dos membros do grupo informa-os da ocorrência do evento. Estes, de acordo com a sua configuração de eventos subscritos, desencadeiam o comportamento respectivo (definido no método de atendimento associado ao tipo de evento).

• grupo_id: identificação do grupo;

• evento: evento ocorrido, que obedece ao formato já referido anteriormente. Este mecanismo de comunicação permite efectuar a difusão de informação dentro de um dado grupo . A difusão é efectuada para todos os membros ligados do grupo e que subscreveram este tipo de evento. No caso dos membros não pretenderem receber um determinado tipo de evento, devem invocar a primitiva unsubscribe() que desactiva o atendimento de eventos desse tipo, actualizando a estrutura de suporte de eventos,

In document forhold til Europa. (sider 148-151)