Sistemas Distribuídos e Paralelos Objectos e Componentes Distribuídos Ricardo Mendão Silva Universidade Autónoma de Lisboa [email protected] November 19, 2014 Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 1 / 53 Outline 1 Introdução 2 Objectos distribuídos 3 Dos objectos aos componentes 4 Caso de estudo: Enterprise JavaBeans Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 2 / 53 Introdução Uma solução de middleware completa deve apresentar uma abstracção tanto ao nível de programação de alto-nível, como ao nível do sistema distribuído. Neste capítulo vamos abordar duas das mais importantes abstracções na programação, nomeadamente: Objectos distribuídos Componentes distribuídos Para além da análise teórica, vamos ainda abordar um caso prático: Enterprise JavaBeans Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 3 / 53 Introdução Middleware de objectos distribuídos A característica chave dos objectos distribuídos é que permitem adoptar um modelo de programação totalmente orientado aos objectos, escondendo toda a complexidade dos sistemas distribuídos. Neste panorama as entidades são representadas por objectos. Os objectos comunicam maioritariamente utilizando o método de invocação remota de métodos. Porém, outros métodos como eventos distribuídos são também utilizados. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 4 / 53 Introdução Middleware de objectos distribuídos Esta abordagem simplista apresenta um conjunto de benefícios: O encapsulamento herdado das soluções baseadas em objectos é uma mais valia nos sistemas distribuídos. A abstracção de dados permite separar completamente o uso do objecto da sua implementação, permitindo que os programadores preocupem-se simplesmente em invocar os métodos fornecidos, ignorando totalmente os detalhes de implementação. Esta abordagem permite assim soluções dinâmicas e extensíveis, introduzindo, por exemplo, novos objectos ou substituir objectos por outros. Exemplo de soluções: Java RMI e CORBA. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 5 / 53 Introdução Middleware de componentes distribuídos As soluções baseadas em componentes têm sido desenvolvidas para resolver uma série de limitações que têm vindo a ser detectadas nos sistemas baseados em objectos distribuídos, nomeadamente: Dependências implícitas: As interfaces dos objectos não descrevem as dependências da implementação do objecto, tornando os sistemas baseados em objectos difíceis de desenvolver e gerir, principalmente para os third-party. Complexidade de programação: A programação de objectos distribuídos leva à necessidade de dominar vários detalhes de baixo nível associados com a implementação do middleware. Falha na separação dos detalhes da distribuições: Os programadores têm o dever de considerar detalhes como segurança, gestão de falhas e concorrência, o que não conseguem se não tiverem conhecimento da distribuição do sistema. Sem suporte de instalação: Os middlewares orientados a objectos fornecem pouca ou nenhuma informação sobre a instalação e configuração dos objectos. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 6 / 53 Outline 1 Introdução 2 Objectos distribuídos 3 Dos objectos aos componentes 4 Caso de estudo: Enterprise JavaBeans Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 7 / 53 Objectos distribuídos Os middleware orientados a objectos são desenhados para fornecer o nível de programação orientada a objectos e, como tal, trazer os benefícios da mesma para a programação distribuída. Os programadores deste tipo de sistemas têm ao seu dispor não só uma abstracção mais rica, mas também os princípios da orientação a objectos, ferramentas e técnicas, tais como UML. Por exemplo, o CORBA OMG incluí suporte para a norma UML. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 8 / 53 Objectos distribuídos Os objectos distribuídos fornecem uma abstração baseada nos princípios orientados a objectos. Os principais exemplos de middlewares que seguem esta lógica são o Java RMI, analisado anteriormente, e o CORBA.. Apesar de ambas as soluções partilharem bastante em comum, existe uma diferença importante: O uso de Java RMI está limitado à linguagem Java, enquanto que o CORBA é uma solução multi-linguagem permitindo objectos escritos numa variedade de linguagens interoperarem. (Ex: C++, Python, Java, etc...). Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 9 / 53 Objectos distribuídos Diferenças entre objectos e objectos distribuídos Objectos Referências para objectos Interfaces Objectos Distribuídos Referências para objectos remotos. Interface remotas. Acções Acções distribuídas. Excepções Excepções distribuídas. Garbage collection Garbage collection distribuído. Ricardo Mendão Silva (UAL) Descrição dos objectos distribuídos As referências para objectos remotos são únicas e globais, podendo ser passadas por parâmetro. Fornecem uma especificação abstracta dos métodos que podem ser invocados no objecto remoto (uso de IDL). Iniciadas pela invocação de um método, resultando possivelmente numa cadeia de invocações. Excepções adicionais geradas pela natureza distribuída do sistema, incluinda mensagens perdidas ou falhas nos processos. Garante que um objecto continua a existir desde que uma referência ou uma referência remota para o objecto exista.Requer um algoritmo de garbage collection distribuído. Sistemas Distribuídos e Paralelos November 19, 2014 10 / 53 Objectos distribuídos Complexidade acrescida Para além das diferenças entre objectos e objectos distribuídos, os SD adicionam um nível de complexidade superior, nomedamente: Comunicação entre objectos: Um middleware de objectos distribuídos deve oferecer um ou mais mecanismos para que os objectos comuniquem no ambiente distribuído. Estes mecanismos são normalmente implementados via invocação remota, mas existem outras técnicas, por exemplo, baseadas na comunicação indirecta, que também são utilizadas. CORBA fornece um sistema de eventos e notificações implementados como serviços no topo do middleware. Gestão do tempo de vida: A gestão do tempo de vida aborda a criação, migração e eliminação de objectos, com cada etapa a ter de lidar com a questão distribuída. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 11 / 53 Objectos distribuídos Complexidade acrescida (continuação) Activação e desactivação: Num sistema não distribuído é assumido que os objectos estão activos durante todo o tempo de execução. Num sistema distribuído isto não pode ser assumido, uma vez que o número de objectos pode ser muito vasto, o que seria um desperdício de recrusos garantir a disponibilidade de todos simultaneamente. Para além disso, os nós "donos" dos objectos podem eles próprios não estarem disponíveis. Persistência: Os objectos tipicamente têm um estado que é importante manter independentemente dos ciclos de activação e desactivação ou mesmo de falhas do sistema. Como tal, os middleware orientados a objectos distribuídos devem oferecer gestão de persistência para o estado dos objectos. Seviços adicionais: Uma framework deste género deve ainda suportar uma série de serviços considerados importantes no âmbito dos sistemas distribuídos, tais como serviço de nomes, segurança e tolerância a falhas. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 12 / 53 Outline 1 Introdução 2 Objectos distribuídos 3 Dos objectos aos componentes 4 Caso de estudo: Enterprise JavaBeans Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 13 / 53 Dos objectos aos componentes Introdução Os middleware baseados em objectos distribuídos têm sido largamente utilizados nos mais variados cenários, incluindo os abordados no 1o capítulo: finanças, banca, jogos, saúde, educação, etc... As técnicas incorporadas no CORBA e plataformas similares, provaram a sua eficiência em resolver pontos chave dos sistemas distribuídos: heterogeneidade, portabilidade, interoperabilidade dos softwares, segurança e fiabilidade. No entanto, uma série de questões têm surgido, o que levou ao desenvolvimento do que se conhece por abordagens baseadas em componentes. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 14 / 53 Dos objectos aos componentes Problemas nos middlewares orientados a objectos As abordagens baseadas em componentes surgiram de modo a resolver os problemas nas abordagens orientadas a objectos, nomeadamente: Dependências implícitas Como sabemos, os objectos distribuídos fornecem os seus métodos via interfaces, que abstraem completamente a implementação. Ao invocar cada método remoto, não existe conhecimento sobre o código que é executado e se esse código recorre ele próprio a outras chamadas remotas,ou seja, se tem dependências externas, sejam de serviços de nomes, controlo de concorrência, etc. Ao desconhecer estes detalhes, torna-se impossível garantir uma configuração segura do sistema como um todo, substituir um objecto por outro, ou ainda integrar com desenvolvimentos e terceiros. Requisito. Daqui existe um claro requisito no que toca não só à especificação das interfaces oferecidas por um objectos, mas também das dependências que esse objecto tem de outros objectos numa configuração distribuída. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 15 / 53 Dos objectos aos componentes Problemas nos middlewares orientados a objectos (continuação) Interacção com o middleware As plataformas de middleware baseadas em objectos, estão implementadas de uma forma que utilizam inúmeros processos de baixo nível que garantem a operação e manutenção do middleware ao longo do seu tempo de vida, como por exemplo, código para criar e gerir as referências de objectos, para gerir os ciclos de vida dos objectos, as políticas de acesso, etc.. Requisito Existe a necessidade clara de simplificar a programação das aplicações distribuídas, apresentando uma separação limpa entre código da aplicação (lógica de negócio) e código de gestão do middleware. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 16 / 53 Dos objectos aos componentes Problemas nos middlewares orientados a objectos (continuação) Falha na separação das preocupações da distribuição Quando se programa para sistemas distribuídos temos de nos preocupar não só com as questões funcionais da aplicação, mas também com questões não funcionais, tais como segurança, transacções, coordenação e replicação. Nas abordagens por objectos, estes pontos são alcançados com a inserção das chamadas apropriadas para cada serviço do sistema. Este método obriga a que os programadores conheçam muito bem os detalhes dos serviços e ferramentas disponíveis, aumentando a complexidade da programação distribuída. Requisito: A separação abordada no ponto anterior deve ser estendida aos serviços, abstraindo, sempre que possível, a complexidade em lidar com estes. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 17 / 53 Dos objectos aos componentes Problemas nos middlewares orientados a objectos (continuação) Sem suporte de implantação Apesar dos middlewares orientados a objectos, como CORBA ou RMI, possibilitarem configurações arbitrárias de objectos, não existe qualquer suporte na implantação dos mesmos, tendo esse passo que ser manualmente realizado. Esta questão torna-se critica quando o número de objectos envolvidos é grande, levando facilmente a que ocorram erros básicos. Requisito: As plataformas de middleware devem fornecer ferramentas que permitam a implantação do sistema distribuído, de forma fácil e transparente, tal como se de uma aplicação local se tratasse. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 18 / 53 Dos objectos aos componentes Problemas nos middlewares orientados a objectos (continuação) Com base nos quatro problemas apontados nos slides anteriores, surgiu o conceito de abordagens baseadas em componentes e, como resultado, middlewares baseados em componentes. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 19 / 53 Dos objectos aos componentes Componente Definição: Um componente de software é uma unidade de composição com interfaces contractualmente especificadas, com todas as dependências de contexto explicitas. Os componentes de software são como os objectos, na perspectiva em que ambos encapsulam unidades de composição. No entanto, os componentes especificam explicitamente, para além das interfaces, as suas dependências para com outros componentes, ao contrário dos objectos. As dependências são também representadas como interfaces. Um componente é especificado em forma de contrato, incluindo: um conjunto de interfaces fornecidas - as interfaces que o componente oferece como serviços aos outros componentes. um conjunto de interfaces requeridas - as dependências que este componente tem em relação aos outros componentes. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 20 / 53 Dos objectos aos componentes Componente Exemplo TinyOS - Arquitectura do Software Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 21 / 53 Dos objectos aos componentes Componente As interfaces podem ser de vários tipos. No geral, as abordagens baseadas em componentes oferecem dois estilos de interfaces, nomeadamente: interfaces com suporte para invocação remota de métodos, tal como CORBA e Java RMI. interfaces com suporte para eventos distribuídos. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 22 / 53 Dos objectos aos componentes Componente A programação de sistemas baseados em componentes assenta sobre o desenvolvimento de componentes e a sua composição. O objectivos é suportar um estilo de programação totalmente modular, permitindo conjugar diferentes componentes, de diferentes modos, desenvolvendo serviços mais sofisticados. Migrar do desenvolvimento de software para o assemblamento de software Com este estilo de desenvolvimento e estruturação de software, torna-se mais simples: a disponibilização/integração de/com código de terceiros. adaptar a configuração de sistemas em runtime, substituindo módulos, desde que disponham das mesmas interfaces. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 23 / 53 Dos objectos aos componentes Componentes e sistemas distribuídos Uma série de middlewares baseados em componentes têm surgido, sendo os mais populares o Enterprise JavaBeans (que vamos analisar mais à frente) e o CORBA Component Model (CCM). Estes sistemas não só suportam os conceitos abordados anteriormente, como também introduzem suporte para o desenvolvimento de sistemas distribuídos e respectiva implantação. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 24 / 53 Dos objectos aos componentes Componentes e sistemas distribuídos Container O conceito de containers é totalmente central nos middleware baseados em componentes. Os containers suportam um padrão comum, frequentemente encontrado neste tipo de middleware, que consiste em: um cliente front-end; um ou mais componentes que implementam a aplicação ou a lógica do negócio; um conjunto de serviços responsáveis pela gestão dos dados nas bases de dados persistentes. Assim, a função do container é a de fornecer um ambiente de gestão de componentes do lado do servidor, resolvendo um dos problemas das soluções orientadas a objectos, com os componentes a lidarem com as questões da aplicação e o container a lidar com as questões do sistema distribuído, do middleware e com todos os processos não-funcionais. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 25 / 53 Dos objectos aos componentes Componentes e sistemas distribuídos Container O container encapsula vários componentes. O acesso directo aos componentes é vedado, sendo que as invocações são interceptadas e processadas garantindo que as devidas propriedades do SD são mantidas. Middlewares com suporte de containers são conhecidos como Servidores Aplicacionais Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 26 / 53 Dos objectos aos componentes Suporte para implantação Os middleware baseados em componentes fornecem suporte para a configuração da implantação (deployment) dos componentes. As releases de software são empacotadas como arquitecturas de software, ou seja, incluindo os componentes e as suas inter-ligações, juntamente com a descrição da implantação, que define detalhadamente como a configuração deve ser implantada no ambiente distribuído. Note-se que os componentes são implantados nos containers, sendo estes responsáveis por interpretar os descritores da implantação, de modo a garantir as políticas requeridas pelo sistema (segurança, fiabilidade, etc.). Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 27 / 53 Dos objectos aos componentes Suporte para implantação Deste modo, um determinado container incluí um conjunto de componentes que requerem a mesma configuração em termos de sistema distribuído. Os descriptores de implantação são normalmente definidos em XML e incluem informação suficiente para garantir que: os componentes estão correctamente ligados utilizando os protocolos apropriados e com o devido suporte do middleware. o middleware é configurado para garantir determinado nível de suporte à configuração do componente. o sistema distribuído associado é configurado para fornecer determinado nível de segurança, suporte de transacções, fiabilidade, etc. Os middleware fornecem ainda ferramentas para interpretar os descriptores de implantação e garantir a correcta implantação numa determinada arquitectura física. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 28 / 53 Outline 1 Introdução 2 Objectos distribuídos 3 Dos objectos aos componentes 4 Caso de estudo: Enterprise JavaBeans Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 29 / 53 Caso de estudo: Enterprise JavaBeans Os desafios em desenvolver aplicações corporativas As aplicações corporativas apresentam diversos desafios, tais como portabilidade, reutilização, interoperabilidade e integração aplicacional. Desde a sua génese, o Java tinha tido, maioritariamente, maior foco nas aplicações cliente, não apostando na resolução dos problemas do lado do servidor. O desafio era então desenvolver aplicações servidor capazes de responder aos requisitos das corporações. Para isso era necessário o desenho de componentes pequenos e transparentes na localização que, operando em conjunto, respondessem aos requisitos. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 30 / 53 Caso de estudo: Enterprise JavaBeans Os desafios em desenvolver aplicações corporativas A computação empresarial está em constante mudança, tanto em termos de hardware como de software. Novas aplicações são constantemente requisitadas, garantindo, no entanto, interoperabilidade com os sistemas antigos. Não é viável deitar todo o esforço e dinheiro gasto no desenvolvimento de software que com os anos torna-se legacy, substituindo todo o sistema. É por isso importante desenvolver novos módulos possíveis de integrar nas aplicações já existentes, mesmo que desenvolvidas em linguagens de programação antigas. Hoje em dia, os software de servidor permitem que uma corporação repense a sua infraestrutura, não só para as necessidades actuais, mas também para a capacidade de crescimento e integração de novas funcionalidades. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 31 / 53 Caso de estudo: Enterprise JavaBeans Os desafios em desenvolver aplicações corporativas As aplicações corporativas são complexas e em muitos casos estão distribuídas por múltiplos domínios. As aplicações dos dias de hoje requerem tempos de resposta cada vez mais rápidos para preencher os requisitos dos utilizadores. Para além disso, a interoperabilidade com outros ambientes (hardware, software e rede) é cada vez mais importante nos ambientes corporativos e, como tal, um enorme desafio. Nesse âmbito, as arquitecturas de sistemas corporativos têm sofrido uma evolução bastante grande, que se iniciou com a arquitectura cliente-servidor (two-tier), seguindo para uma arquitectura three-tier e mais tarde web-based. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 32 / 53 Caso de estudo: Enterprise JavaBeans Introdução A arquitectura JEE (Java Enterprise Edition) é um conjunto de especificações, standards, frameworks e guias que fornecem capacidades Java nos servidores corporativos. O Enterprise JavaBeans (EJB) é o coração da arquitectura JEE. As restantes APIs são utilizadas como serviços pela API EJB. Existem inúmeras implementações de JEE, tais como o BEA’s WebLogic Server, IBM’s WebSphere ou o JBoss (open source). JEE oferece aplicações corporativas com alto nível de abstracção. Não oferece somente portabilidade das aplicações-servidor baseadas em componentes, como também oferece um conjunto de serviços que suportam todos os aspectos da infraestrutura. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 33 / 53 Caso de estudo: Enterprise JavaBeans Porquê EJB? A arquitectura EJB permite que as aplicações corporativas sejam portáveis ao correrem em servidores aplicacionais compatíveis com JEE. As aplicações EJB podem ser particionadas de um modo mais reutilizável, flexível e expansível. Os EJBs são componentes altamente reutilizáveis e representam a próxima geração no progresso do Java, permitindo desenvolver aplicações capazes de suportar aplicações corporativas críticas.. Os EJBs permitem assim que o desenvolvimento da lógica de negócio seja transversal a todas as aplicações corporativas e entre diferentes plataformas. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 34 / 53 Caso de estudo: Enterprise JavaBeans Porquê EJB? O modelo EJB é baseado em Java RMI, que permite a separação da execução de componentes entre múltiplos tiers. Esta separação permite maior flexibilidade na implementação e alta escalabilidade. O RMI permite o acesso a componentes remotos, como se estes fossem locais. Para além disso, a inclusão na infraestrutura de um service provider permite gerir e oferecer uma série de serviços aos EJBs implantados. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 35 / 53 Caso de estudo: Enterprise JavaBeans Porquê EJB? - Resumo Simplicidade Oferece uma série de serviços já pré-adicionados que facilitam no desenvolvimento das aplicações. Portabilidade Aplicações EJB podem ser instaladas em qualquer servidor que suporte JEE. Reutilização O EJB é construído em blocos altamente reutilizáveis. Particionamento A separação da lógica de negócio da sua apresentação permite que as equipas de desenvolvimento de negócio trabalhem independentes das equipas de front-end. Distribuição EJB permite facilmente criar aplicações distribuídas que, independentemente do número de servidores, parecem unificadas aos olhos dos utilizadores. Interoperabilidade A arquitectura EJB permite que os componentes EJB acedam a outros componentes desenvolvidos noutras linguagems, tais como CORBA ou .NET. Integração Um dos objectivos do EJB foi facilitar a integração de aplicações, mesmo com sistemas legacy e nonJava. As especificações JCA (Java Connecter Architecrure) e JMS (Java Message Service) são utilizadas nesse sentido. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 36 / 53 Caso de estudo: Enterprise JavaBeans EJB Objectivos A arquitectura EJB foi desenvolvida com os seguintes objectivos: Ser o standard das arquitecturas baseadas em componentes para o desenvolvimento dos sistemas distribuídos orientados a objectos nas aplicações Java. Tornar mais fácil o desenvolvimento das aplicações corporativas, evitando a necessidade de conhecer transacções de baixo nível e detalhes de gestão de estados, multi-threading, pools de ligações e outras APIs de baixo-nível. Permitir que um EJB seja desenvolvido como um só, mas implantado em múltiplas plataformas sem necessidade de recompilação ou modificação de código. Para endereçar o desenvolvimento, implantação e aspectos de execução do tempo de vida das aplicações corporativas. Para ser compatível com plataformas servidor existentes e com outras APIs Java. Para fornecer interoperabilidade entre EJBs, componentes JEE e aplicações não-Java. Para ser compatível com os protocolos CORBA. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 37 / 53 Caso de estudo: Enterprise JavaBeans Dentro do EJB Geralmente um EJB é constituído por duas interfaces e uma classe: as interfaces home e component e a classe bean. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 38 / 53 Caso de estudo: Enterprise JavaBeans Dentro do EJB A interface home lista os métodos para criar, remover e encontrar EJBs no container. O objecto home representa a implementação do objecto home que é gerado pelo container no momento da implantação. Durante a execução o objecto home vai ser utilizado pelo cliente em conjunto com um serviço de nomes para encontrar o componente e estabelecer a ligação à interface do seu componente. A interface do componente define os métodos do negócio oferecidos pela classe bean. A classe bean não implementa esta interface, mas utiliza uma classe EJBObject que faz a ligação entre as chamadas do cliente e o respectivo objecto bean. O container contem a implementação desta interface e o cliente utiliza-a. A interface componente pode tanto ser local como remota, dependendo da localização do EJB cliente relativamente ao EJB. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 39 / 53 Caso de estudo: Enterprise JavaBeans Dentro do EJB O cliente EJB localiza os containers EJB através do serviço JNDI (Java Naming and Directory Interface). Depois do cliente EJB localizar a referência para a interface home do EJB, pode requerer a interface componente, invocar um método do negócio e o container, por sua vez, invocar o respectivo bean. Os clientes EJB podem ser servlets, JSPs ou simples aplicações Java. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 40 / 53 Caso de estudo: Enterprise JavaBeans EJB Server - JEE Application Server Um EJB Server ou JEE Application Server é o container de topo que aglomera todos os containers e restantes elementos que compõem o ambiente EJB. O EJB Server gere um ou mais EJB containers e fornece o suporte a serviços requeridos, tais como gestão de transacções, persistência e acesso de clientes. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 41 / 53 Caso de estudo: Enterprise JavaBeans EJB Server - JEE Application Server Um EJB Server fornece ainda recursos operacionais, tais como, processos e execução de threads, memória, rede, gestão de recursos, pooling de ligações, caching, load balancing, fail-over, etc., aos containers e elementos nele inseridos. O EJB Server pode fornecer ainda funcionalidades especificas de vendedores, tais como, drivers de BD optimizados, interfaces para sistemas de backend e acessibilidade CORBA. Ex.: BEA’s WebLogic Server, IBM’s WebSphere ou o JBoss (open source). Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 42 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços essenciais Todos os EJB correm dentro de um container, que lhes fornece uma série de serviços de sistema e controla os seus ciclos de vida. Uma vez que o container gere todas as questões ao nível do sistema, os programadores EJB só têm de se preocupar em desenvolver devidamente a lógica de negócio. Em geral os containers JEE definem três tipos principais de serviços, nomeadamente: serviços verticais comuns, serviços horizontais comuns e ferramentas de implantação comuns. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 43 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços verticais comuns Estes serviços são herdados dos containers e não são especificados na API JEE. Contribuem para a performance e aspectos de runtime dos EJBs e dos serviços a estes prestados. Gestão do ciclo de vida Segurança RMI Gestão transacções de Ricardo Mendão Silva (UAL) O container cria e destrói instâncias de bens com base nos requisitos dos clientes. O container pode multiplexar transparentemente uma pool de instâncias entre vários clientes e assim optimizar os recursos. Este serviço garante que apenas utilizadores autorizados acedem aos recursos. O JEE só fornece uma método simples de segurança para os beans e componentes web, sendo que na maioria das vezes são integradas soluções third-party, como LDAP. O container gere a comunicação de modo transparente entre os beans e os outros componentes. Assim, não é necessário implementar sockets, mensagens, empacotar, desempacotar ou outras questões de baixo nível. O programador somente implementa o negócio e ignora a comunicação. O serviço de transacções liberta o programador da preocupação em lidar com transacções complexas, que podem ocorrer em múltiplos beans ou recursos, tais como bases de dados. Assim, se um update ou delete falhar num os elementos, este serviços é responsável por fazer rollback e garantir a integridade dos dados no sistema. Sistemas Distribuídos e Paralelos November 19, 2014 44 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços verticais comuns (continuação) Persistência O serviço de persistência simplifica a ligação entre a aplicação e os tiers de bases de dados. Passivação/Activação Este mecanismo é utilizado pelo container para guardar um bean inactivo no disco e restaura-lo para memória quando invocado. Deste modo é possível servir mais clientes libertando recursos, tais como memória, dinamicamente. Clustering Permite a replicação de EJBs e serviços por múltiplas aplicações servidor, instaladas na mesma máquina ou em máquinas distintas. Clustering envolve o balanceamento de carga de pedidos de serviços e EJBs entre as instâncias replicadas. Para além, disso suporte fail-over. Se uma instância falha, a outra assegura o serviço. Pooling de recur- Suporta a alocação de pools de instâncias, que atribuí aos pedidos sos dos clientes. Quando um instância é libertada, esta volta novamente para a pool. Existem pools, por exemplo, para as ligações JDBC. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 45 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços horizontais comuns Os serviços horizontais são os serviços especificados na arquitectura JEE. São normalmente conhecidos como a API JEE e são fornecidos pelo servidor EJB a todos os containers em execução. A lista de normas JEE é a seguinte: Java Naming and Directory Interface - JNDI Java Database Connectivity (JDBC) Java Server Pages (JSP) Java Servlet Ricardo Mendão Silva (UAL) Fornece um serviço de nomes às interfaces, permitindo que os clientes acedam aos serviços somente por um nome. Fornece acesso a qualquer base de dados relacional. Permite que os programadores e designers web rapidamente desenvolvam e facilmente mantenham páginas web ricas em conteúdo e dinâmicas, o que enriquece qualquer negócio. Fornece aos programadores web um mecanismos simples e consistente para estender as funcionalidades de um servidor web e para aceder a outros sistemas de negócio existentes. Sistemas Distribuídos e Paralelos November 19, 2014 46 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços horizontais comuns (continuação) Java Transaction API (JTA) Java Message Service (JMS) JavaEE Connecter Architecture (JCA) Java API for XML Processing (JAXP) RMI over IIOP (RMI/IIOP) Ricardo Mendão Silva (UAL) A interface Java standard entre o gestor de transacções e as partes envolvidas na transacção. Uma API e framework que permite o desenvolvimento de aplicações baseadas em serviços de mensagens (comunicação indirecta). É o componente chave para integrar aplicações corporativas. Para além de suportar a integração de sistemas, facilita ainda o processo de integrar sistemas existentes com web services e aplicações. Permite às aplicações efectuarem o parse e transformar documentos XML, independentemente dos seus processos de implementação. Atribuí capacidades de Common Object Request Broker Architecture (CORBA) à plataforma JEE. Sistemas Distribuídos e Paralelos November 19, 2014 47 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Serviços horizontais comuns (continuação) Java Authentication and Autorization Security (JAAS) JavaMail JavaBean Activation Framework (JAF) Ricardo Mendão Silva (UAL) Permite que os serviços se autentiquem e força controlo nos acessos dos utilizadores. Fornece uma framework independente de plataforma e de protocolo para construir um serviço de mail e troca de mensagens. Permite que se determine o tipo de dados arbitrários, que se encapsule o acesso a esses dados, que se descubra as operações neste disponíveis e que se instancie o bean para executar determinadas acções. Sistemas Distribuídos e Paralelos November 19, 2014 48 / 53 Caso de estudo: Enterprise JavaBeans EJB Container - Ferramentas de implantação Ferramentas de implantação) Ferramentas de mapeamento de objectos relacionais Ferramentas de monitorização Ricardo Mendão Silva (UAL) São ferramentas utilizadas para compilar e implantar as aplicações JEE. Estas ferramentas desempacotam os pacotes de ficheiros da aplicação e interpretam todas as propriedades de runtime para instalar o EJB e outros componentes das aplicações. Uma série de novas ferramentas que mapeiam dados relacionais presentes numa base de dados aos objectos carregados em memória. São utilizadas para monitorizar as aplicações enquanto estão em execução. Tais ferramentas são fundamentais para verificar o estado da aplicação, permitindo despoletar acções quando ocorrem problemas. Sistemas Distribuídos e Paralelos November 19, 2014 49 / 53 Caso de estudo: Enterprise JavaBeans Funções Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 50 / 53 Caso de estudo: Enterprise JavaBeans Funções O grande objectivo do EJB é manter uma clara separação entre os diferentes papeis necessários no desenvolvimento de um SD, nomeadamente: bean provider - (EJB developer) quem desenvolve a lógica de negócio do componente. aplication assembler - quem assembla a aplicação a partir dos vários blocos, tais como, EJBs, servlets, JSP, applets e clientes Java. O assemblador deve estar primeiro preocupado com as interfaces dos EJBs (home e remote) e com o descriptor de implantação. depoyer - que pega numa determinada aplicação assemblada e garante a sua devida implantação num determinado cenário, considerando os requisitos do cliente e as aplicações existentes. service and container provider - que é especialista nos serviços fundamentais do sistema distribuído, tal como, na gestão de transacções e segurança. system administrator - responsável por monitorizar a implantação em tempo de execução e realizar ajuste para garantir a correcta operação. Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 51 / 53 Sumário Neste capítulo aborda-mos o conceito de objectos e componentes distribuídos, identificando os problemas associados com a primeira abordagem e detalhando em pormenor a segunda. Como objecto de estudo apresentou-se a plataforma Enterprise JavaBeans, englobada na framework Java Enterprise Edition, que os alunos podem explorar através da implementação open-source JBOSS. http://www.jboss.org Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 52 / 53 Questões? [email protected] Ricardo Mendão Silva (UAL) Sistemas Distribuídos e Paralelos November 19, 2014 53 / 53