Aglets Sumário • Download e Instalação • Configuração do Eclipse • Desenvolvimento de Agentes Aglets – Preparação do ambiente • O ambiente Aglets necessita de uma máquina virtual Java para rodar • Para o desenvolvimento de agente também é necessário um kit de desenvolvimento Java – http://java.sun.com/j2se/5.0/download.jsp – Download JDK • Após instalação, a pasta bin do JDK deve ser incluída no PATH do sistema operacional. • O desenvolvimento dos agentes pode ser feito em qualquer editor – Aqui será detalhada a configuração do Eclipse (www.eclipse.org) para permitir a execução e depuração de agentes Aglets - Download • Página: http://aglets.sourceforge.net • Download: – Binários: • http://prdownloads.sourceforge.net/aglets/aglets-2.0.2.jar – Fontes: • http://prdownloads.sourceforge.net/aglets/aglets-2.0.2-src.jar – Manual do Usuário: • http://prdownloads.sourceforge.net/aglets/manual.pdf Aglets - Instalação • Descompactar aglets-2.0.2.jar (Ex: c:\aglets) Scripts de instalação e execução Arquivos de configuração Bibliotecas Onde devem residir os agentes desenvolvidos • Pelo prompt de comando – Ir à pasta bin – Executar: ant – Executar: ant install-home Aglets - Execução • Editar arquivo cnf/aglets.props – Descomentar linha: • aglets.secure=false – Isso permite que agentes acessem arquivos e executem outras operações que não seriam permitidas • Pelo prompt de comando – Ir à pasta bin – Executar: agletsd -f ..\cnf\aglets.props Eclipse – Criar Projeto • Criar um projeto Java • Usar pasta de instalação do Aglets como pasta do projeto Eclipse – Criar Projeto • Usar a pasta public como Output Folder • Isso faz com que as classes compiladas pelo Eclipse sejam colocadas automaticamente no lugar certo • Projeto Criado Eclipse – Rodar Tahiti • Project Properties • Java Build Path • Libraries • Add Class Folder • Selecionar a pasta lib Eclipse – Rodar Tahiti • Menu Run, Run... • Criar nova Configuração • Nome: Aglets • Project: Aglets • Main Class: com.ibm.awb.launcher.Main Eclipse – Rodar Tahiti • Ainda na mesma tela • Arguments • Program Arguments: “-f C:\aglets\cnf\aglets.props” • VM Arguments: “-Daglets.home=C:\aglets” • Run Eclipse – Criando Agentes • Para criar agentes, é preciso primeiro configurar uma pasta para os fontes do agente • Project Properties • Java Build Path • Source • Add Folder • Criar e selecionar a pasta src Eclipse – Criando Agentes • Opcionalmente, pode-se adicionar os fontes do Aglets ao Eclipse, para que a documentação associada fique disponível • Project Properties • Java Build Path • Libraries • aglets-2.2.2.jar • Source attachments • Edit Programando Agentes • Agentes são criados estendendo-se a classe Aglet • Alguns métodos dessa classe, que podem ser sobrescritos, são invocados pelo ambiente para indicar eventos – – – – void onCreation(Object init) void run() void onDisposing() boolean handleMessage(Message message) void onCreation(Object init) • Este método é chamado logo após o agente ter sido criado • O parâmetro init contém um possível argumento passado ao agente na hora da criação, ou null void run() • Este método é chamado quando um agente é: – Criado (após onCreation) – Enviado para outro computador (após chegar) – Chamado de volta para o computador de onde foi criado (após chegar) – Reativado (devido a uma chamada a deactivate) void onDisposing() • Este método é chamado quando o agente estiver prestes a ser destruído, devido a uma chamada ao método dispose. boolean handleMessage(Message message) • É chamado sempre que uma mensagem chega ao agente • O parâmetro message possui: – Um atributo kind (String) que identifica o tipo da mensagem – Parâmetros opcionais • O método deve retornar false caso a mensagem recebida não seja suportada. Neste caso uma exceção ocorrerá em quem mandou a mensagem Criando Agentes • Agentes podem ser criados pela interface do Tahiti, ou programaticamente • Para criá-los pelo Tahiti, basta informar a classe (incluindo nome de package) • A opção Add to List adiciona o agente à lista de favoritos Criando Agentes • Para criar agente via programação, devese fazer da seguinte forma: AgletProxy proxy = null; AgletContext context = getAgletContext(); try { proxy = context.createAglet(null, "classe.do.Agente", <parâmetro>); } catch (Exception e) { e.printStackTrace(); } AgletProxy • É através de proxies que se interage com agentes • A classe AgletProxy oferece (entre outros) os seguintes métodos – Object sendMessage(Message msg) • Envia uma mensagem, e espera – void dispose() • Destrói o agente – AgletProxy dispatch(URL address) • Manda o agente para o endereço indicado Como fazer os agentes se encontrarem • Para fazer com que um agente possa enviar mensagens a outro é preciso primeiramente obter o proxy dele. • Quando se cria um agente, isso é fácil. O proxy já é retornado quando se efetua a criação Como fazer os agentes se encontrarem • Quando os agentes não tem uma relação de “parentesco”, pode-se guardar o proxy do agente no AgletContext, associando-o a uma String AgletContext context = getAgletContext(); context.setProperty("XPT0", getProxy()); Como fazer os agentes se encontrarem • Outros agentes podem recuperar este proxy, lendo a propriedade do AgletContext AgletContext context = getAgletContext(); AgletProxy p = (AgletProxy) context.getProperty("XPT0");