Elementos Básicos Modelo de Eventos Modelo de Comunicação - ppt carregar
Elementos Básicos Modelo de Eventos Modelo de Comunicação
PublicouLaís Testa Alterado mais de 4 anos atrás
Apresentação em tema: "Elementos Básicos Modelo de Eventos Modelo de Comunicação"— Transcrição da apresentação:
1 Elementos Básicos Modelo de Eventos Modelo de Comunicação
2 Introdução O Modelo de Objeto Aglet
Projetado para se beneficiar das características de agentes em Java, enquanto sobrepujando algumas das deficiências no sistema de linguagem. Um agente móvel é um objeto móvel que tem sua própria thread de controle, é dirigido a evento e se comunica por passagem de mensagem.
3 Elementos Básicos O modelo aglet define um conjunto de abstrações e o comportamento necessário para influenciar a tecnologia de agentes móveis em redes de longa distância, como a Internet, ou em redes locais que sigam a mesma tecnologia.
4 Abstrações Chaves Aglet Proxy Contexto Identificador
5 Aglet Um aglet é um objeto Java móvel que visita hosts habilitados à aglets, em uma rede de computadores
6 Proxy Um proxy é um objeto representante de um aglet, que serve como protetor do aglet, quanto ao acesso direto a seus métodos públicos. Provê transparência de localização para o aglet, isto é, oculta o aglet de sua localização real. Isto significa que um aglet e seu proxy podem estar separados, de modo que um proxy local oculta o afastamento do aglet.
7 Contexto Um contexto é um lugar de trabalho do aglet.
Corresponde aproximadamente ao conceito de "place". O ambiente no qual os aglets operam. O sistema operacional para o aglet. Lugar no qual um aglet pode executar.
8 Contexto É um objeto estacionário que provê o meio para manter e gerenciar aglets rodando em um ambiente de execução uniforme, onde o host é seguro contra aglets maliciosos.
9 Contexto É um nodo em uma rede que pode rodar múltiplas "engines" e cada "engine" pode ter múltiplos contextos.
10 Relação entre Host, "Engine" e Contexto
B "Engine" Processo Servidor Rede
11 Contextos Contextos são nomeados e assim podem ser localizados pela combinação do endereço da sua "engine" ( processo servidor) e de seu nome.
12 Identificador Um identificador é ligado a cada aglet.
É globalmente único e imutável durante o tempo de vida do aglet.
13 Comportamento suportado pelo Modelo Aglet
Conjunto mínimo de operações para criar e gerenciar um ambiente de agentes móveis distribuído: Existem dois modos para a proporcionar vida a um aglet: (a) instanciada a partir de sua criação (creation); (b) copiado de um aglet existente (cloning).
14 Comportamento suportado pelo Modelo Aglet
Para controlar a população de aglets, pode-se destruí-los (disposal). Aglets são móveis em dois diferentes modos: ativamente e passivamente.
15 Abordagem Ativa da Mobilidade
É caracterizada por um aglet migrando ele próprio a partir de seu host corrente para um host remoto. ( "dispatching" = despachando, expedindo)
16 Abordagem Passiva da Mobilidade
Um host remoto puxa um aglet, longe de seu host corrente. ( "retracting" = retirar, recolher )
17 Recursos Quando aglets estão rodando, eles ocupam recursos.
Para reduzir o consumo de recurso, aglets podem dormir temporariamente, liberando o recurso ( "deactivation" ), e mais tarde pode ser trazido de volta ao modo rodando ( "activation").
18 Troca de Informação Múltiplos aglets podem trocar informação para realizar uma determinada tarefa. ( "messaging" )
19 Aglet API Fácil para aprender a usar e suficientemente abrangente e robusta para aplicações reais. A lista seguinte resume as operações fundamentais de um aglet: "creation", "cloning", "dispatching", "retraction", "activation", "deactivation" "disposal".
20 Operações Fundamentais
"Creation" ( NOVO AGLET CRIADO ) Toma lugar em um contexto. É atribuído um identificador ao novo aglet. É inserido dentro do contexto e inicializado. O aglet inicia a execução logo que ele tem inicializado bem sucedidamente.
21 Operações Fundamentais
"Cloning" Produz uma cópia quase idêntica do aglet original, no mesmo contexto. A única diferença é o identificador atribuído e o fato que a execução reinicia no novo aglet. Threads de execução não são clonadas.
22 Operações Fundamentais
"Dispatching" Expedindo um aglet de um contexto a outro, ele será removido do contexto corrente e inserido no contexto destino, onde ele reiniciará a execução (thread de execução não migra). O aglet é "puched" a seu novo contexto.
23 Operações Fundamentais
"Retraction" A retração de um aglet "pull" (puxa) ele a partir do seu contexto corrente e o insere dentro do contexto, no qual a retração foi solicitada.
24 Operações Fundamentais
"Activation" and "Deactivation" A desativação de um aglet corresponde a, temporariamente, a parar sua execução e armazenar seu estado em memória secundária. A ativação de um aglet restaurará ele no mesmo contexto.
25 Operações Fundamentais
"Disposal" O "disposal de um aglet parará sus execução e removerá ele de seu contexto corrente.
26 O Ciclo de Vida de um Aglet
Context A Context B Dispose Dispatch Clone Aglet Aglet Retract Create Deactivate Activate Class File Disk Storage
27 O Modelo de Eventos para Aglets
O modelo de programação aglet é baseado em evento. O modelo permite ao programador "plug in" listerners customizados (especializados) dentro de um aglet. Listeners detém eventos particulares no ciclo de vida de um aglet e permite ao programador tomar uma ação, por exemplo, quando um aglet está sendo despachado.
28 O Modelo de Eventos Existem três tipos de listeners : Clone Listener
Mobility Listener Persistence Listener
29 O Modelo de Eventos Clone Listener Ouve eventos de clonagem.
Customizar este listener para tomar ações específicas quando: (a) um aglet é para ser clonado, (b) quando o clone é realmente criado, ou (c) após a clonagem ter tomado lugar.
30 O Modelo de Eventos Mobility Listener Ouve eventos de mobilidade.
Usa-se este listener para tomar ação quando: (a) um aglet é despachado para outro contexto; (b) um aglet é "retracted" de um outro contexto; (c) o aglet, realmente, chega em um novo contexto.
31 O Modelo de Eventos Persistence Listener
Ouve para eventos persistentes. Permite ao programador tomar ação quando: (a) um aglet é para ser desativado, ou (b) após ele ter sido ativado.
32 Relacionamento entre um Aglet e seus Listeners
CloneListener Clone Events MobilityListener Mobility Events Persistence Events PersistenceListener
33 O Modelo de Comunicação Aglet
Aglets se comunicam por passagem de messagem. A facilidade de passar mensagem permite aglets a criar e trocar mensagens em modos flexíveis. Por default, um aglet não manipula mensagens concorrentemente.
34 O Modelo de Comunicação Aglet
Isto significa que todas as mensagens são manipuladas uma-a-uma. São componentes do modelo de comunicação: - Aglet , AgletProxy - Message - Future Reply - Reply Set
35 O Modelo de Comunicação do Aglet
Aglet/Aplication Message Message Proxy Aglet Reply Reply
36 O Modelo de Comunicação Aglet
Message. Uma mensagem é um objeto trocado entre aglets. É permitido a passagem de mensagem assícrona, bem como, a passagem de mensagem síncrona entre aglets. Passagem de mensagem pode ser usado por aglets para colaborar e trocar informação em um modo acoplado fracamente.
37 O Modelo de Comunicação Aglet
Future replay É usado em envio de mensagem assíncrono, como uma manipulação que permite o sender de uma mensagem receber um reply assincronamente.
38 O Modelo de Comunicação Aglet
Reply Set Um reply set pode conter múltiplos reply futuros e é usado para obter resultados quando também torna-se disponíveis. Com este objeto, o sender pode também escolher para obter o primeiro resultado e ignorar respostas subsequentes.
39 Aglet Package – The Aglet API
É um pacote Java consistindo de classes e interfaces. Mais notadamente com as classes: - Aglet - AgletProxy - AgletContext - Message - FutureReply - AgletID
40 Aglet Package – The Aglet API
Usa-se para criar e operar aglets. Contém métodos: - inicializar um aglet - manipular mensagens - despachar ou expedir um aglet - desativar ou ativar - retirar ou recolher (retracting) - clonagem - desfazer-se de um aglet (disposing)
41 API Aglet Simples Flexível
É um pacote Java consistindo de classes e interfaces. Nome completo do pacote: com.ibm.aglet
42 Classe Aglet É a classe-chave da API.
Classe abstrata que o desenvolvedor usa como classe base para criar agltes customizados. Métodos para controlar seu próprio ciclo de vida: cloning, dispatching, deactivating, e disposing o próprio aglet
43 Classe Aglet Métodos para serem sobrepostos em suas subclasses pelo programador do aglet e provê o programador com os necessários "ganchos" para customizar o comportamento do aglet.
44 Classe Aglet Esses métodos são invocados pelo sistema quando certos eventos tomam lugar no ciclo de vida de um aglet.
45 Classe Aglet Método dispatch: causa um aglet mover do host local ao host de destino, que é dado como argumento. Método Deactivate: permite um aglet ser armazenado em memória secundária.
46 Classe Aglet Método clone gera uma nova instância do aglet, a qual tem o estado do aglet original. A classe Aglet é tambme usada para acessar os atributos associados com um aglet. O objeto AgletInfo, o qual pode ser obtido por getAgletInfo(), contém os atributos embutidos do aglet, tais como seu tempo de criação e o código-base.
47 Classe Aglet Como também seus atributos dinâmicos, tais como seu tempo de chegada e o endereço do seu contexto corrente. Como criar um aglet customizado ? 1. Importar o pacote aglet, que contém todas definições da API Aglet
48 Classe Aglet Seja definir uma classe aglet MyFirstAglet, que herda da classe Aglet. import com.ibm.aglet.*; public class MyFirstAglet extends Aglet { // Put os métodos do aglet aqui }
49 Classe Aglet O aglet precisa fazer inicializações específicas quando ele é criado: sobrepor seu método onCreation(). public void onCreation(Object init) { // Fazer alguma inicialização aqui ... }
50 Classe Aglet Quando um aglet é criado ou quando ele chega em um novo contexto, é dado a ele, sua própria thread de execução através de uma invocação de sistema de seu método run().
51 Classe Aglet Esta invocação é um meio de dar ao aglet um grau de autonomia. O método run() é chmado toda vez que o aglet chega em ou é ativado em um novo contexto. O método run() torna-se o principal ponto de entrada para a thread de execução do aglet.
52 Classe Aglet Sobrepondo-se esse método, podemos customizar o comportamento autônomo do aglet. public void run( ) { // Fazer alguma coisa aqui. ... }
53 Classe Aglet Pode-se usar o método run() para deixar o aglet "dispatch" ele próprio para um contexto remoto. O aglet chama seu método dispatch com a URL do host remoto como argumento.
54 Classe Aglet A URL deve especificar o host e os nomes de domínio do contexto-destino e o protocolo (ATP) usado para tranferir o aglet na rede. ATP : Agent Tranfer Protocol, desenvolvido para agentes móveis na Internet. A URL pode conter o nome do contexto remoto (se mais do que um contexto é suportado no servidor remoto).
55 Classe Aglet Se nenhum nome de contexto é especificado, o aglet se moverá para o contexto default. dispatch(new URL("atp://some.host.com/context"));
56 Classe Aglet O que acontece quando dispatch() é executado ?
O aglet desaparece da máquina-fonte e reaparece, com o mesmo estado do objeto, na máquina-destino especificada. Primeiro, a serialização do objeto é usada para preservar a informasção de estado do aglet.
57 Classe Aglet Serialização é a representação sequencial em bytes do aglet. Depois, o resultado da serialização é passado à camada de transferência, a qual traz o aglet (byte code e informação de estado) sobre a rede. Finalmente, os bytes transferidos são deserializados, para remontar o estado do aglet. ( ver a figura seguinte )
58 Transferência de um Aglet
State 1 Byte Code Host Host Sending Receiving 2 State 3 Byte Code Host Host
59 Interface AgletProxy AgletProxy é uma interface componente da API Aglet. Age como o manuseador de um aglet e provê um modo comum de acessar o aglet.
60 Interface AgletProxy Porque um aglet tem diversos métodos públicos que não podem ser acessados diretamente, por outro aglet, por razões de segurança, qualquer aglet que deseje se comunicar with outros aglets, deve primeiro obter o proxy e então interage através desta interface.
61 AgletProxy O AgletProxy age como um objeto-escudo que protege o aglet de aglets maliciosos. Quando invocado, o objeto AgletProxy consulta o gerenciador de segurança para determinar se o contexto de execução corrente é permitido executar o método requisitado.
62 AgletProxy Um outro papel do AgletProxy é prover o aglet com transparência de localização. Se o aglet reside em um host remoto, o proxy direciona os requsts ao host remoto e retorna o resultado ao host local.
63 AgletProxy Criando-se um aglet é uma maneira de se obter um proxy.
O método AgletContext.createAglet retornará o proxy do aglet criado recentemente. Outros métodos que retornam proxy são:
64 AgletProxy AgletContex.retractAglet AgletProxy.clone
AgletProxy.dispatch Outras maneiras de obtenção de proxies de aglets existentes:
65 AgletProxy O aglet pode obter seu próprio proxy por usar Aglet.getProxy(). Pode-se recuperar uma enumeração de proxies em um contexto por chamar AgletContext.getAgletProxies.
66 AgletProxy Pode-se obter um proxy para um dado identificador de aglet via o método AgletContext.getAgletProxy(). Pode-se obter um aglet proxy via passagem de mensagem. Um objeto AgletProxy pode ser colocado dentro de um objeto Message como um argumento e enviado ao aglet localmente ou remotamente.
67 AgletProxy Pode-se colocar um objeto AgletProxy dentro dema propriedade de contexto, por usar o AgletContext.setProperty e compartilhar o objeto proxy. O framework dos Aglets provê uma implementação do AgletProxy interface, assim o programador não necessita implementar esta interface.
68 Interface AgletContext
Um contexto de aglet é o equivalente de um ambiente de execução do aglet. Um aglet funciona a maior parte de sua vida em um contexto do aglet. Ele é criado em um contexto. Ele "dorme" lá. Ele "morre" lá.
69 Interface AgletContext
Quando um aglet viaja em uma rede, ele se move de um contexto ao outro. O contexto é um ambiente de execução uniforme para aglets em um mundo heterogêneo.
70 Interface AgletContext
Um aglet usa a interface AgletContex para obter informação sobre seu ambiente e enviar mensagens ao ambiente, que inclui outros aglets correntemente ativos naquele ambiente.
71 Interface AgletContext
Provê meios para manter e gerenciar aglets rodando em um ambiente, onde o host é seguro contra aglets maliciosos. A classe Aglet tem um método para ganhar acesso a seu contexto corrente: contex = getAgletContext();
72 Interface AgletContext
Com acesso ao contexto, o aglet pode criar novos aglets: context.createAglet( ... ); E pode retract (pull) aglets localizados remotamente, dentro do contexto corrente: context.retractAglet(remoteContextURL, agletID);
73 AgletContext O aglet pode também recuperar uma lista (enumeração) de proxies de seus aglets membros presentes no mesmo contexto: proxies = context.getAgletProxies(); Uma implementação da interface AgletContext é provida pelo pacote Aglet.
74 Classe Message Aglets se comunicam por trocar objetos da classe Message. Um campo de string nomeado "kind" distingue mensagens. O campo é estabelecido quando a mensagem é criada.
75 Classe Message O segundo parâmetro do construtor da mensagem é um argumento opcional. Message myName = new Message("my name", "Jacob"); Message yourName = new Message("your name ?");
76 Simple Messaging Message Handler SendMessage() Aglet Proxy
77 Diagrama de Colaboração para Criação de Aglet
createAglet() Aglet() onCreation() Run()
78 Diagrama de Colaboração para Clonagem de Aglet
run() run() onCloning() Original onCloned() onClone() Clone run()
79 Diagrama de Colaboração para Aglet Dispatch
run() Origem dispatch() onDispatching() onArrival() Destination run()
80 Diagrama de Colaboração para Aglet Retraction
retractAglet() Local onArrival() run() run() Remote onReverting()
81 Persistência Deactivate Activate Aglet Context
82 Diagrama de Colaboração para Liberar um Aglet
dipose() onDispose() run()
83 Classe Message Tendo criado os objetos-mensagens, pode-se enviá-los para um aglet por invocar um dos seguintes métodos definidos no AgletProxy: Object sendMessage(Message msg) FutureReply sendFutureMessage(Message msg) Void sendOnewayMessage(Message msg)
84 Classe Message O objeto mensagem é passado como um argumento ao método handleMessage do aglet.. handleMessage é o método que manipula as mensagens chegando.
85 Classe Message Este método deve retornar true se uma dada mensagem é manipulada; de outro modo, deve retornar false. O transmissor saberá, então, se o aglet realmente manipulou a mensagem. No exemplo seguinte, o aglet reconhecerá e responderá a mensagens 'hello':
86 Classe Message Método no aglet:
public boolean handleMessage(Message msg) { if (msg.sameKind("hello")) { doHello(); // Respond to the 'hello' message ... return true; // Yes, I handled this message. } else return false; // No, I did not handle tjis }
87 Classe Message Somente do yourName, espera-se recebr um valor de retorno: proxy.sendMessage(myName); String name = (String)proxy.sendMessage(yourName);
88 Classe Message No método handleMessage, distinguimos entre as mensagens myName e yourName, por testar o campo "kind" das mensagens chegando.
89 Classe Message De myName extraimos o argumento-name e para yourName é estabelecido o valor de retorno ( sendReply() ). Lembre que myName e yourName são variáveis do tipo Message.
90 Classe Message public boolean handleMessage(Message msg) {
if (msg.sameKind("my name")) { String name = (String)msg.getArg(); // gets the name ... return true; // Yes, I handled this message. } else if (msg.samekind("your name ?")) { msg.sendReply("Yina"); // Return your name ... return true; // Yes, I handled this message. } else return false; // No, I did not handle tjis }