: EJB Sistemas Distribuídos Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão
Objetivos Nesta aula iremos apresentar a solução baseada em middleware para programação em um ambiente distribuído usando objetos e componentes.
Plano de Aula Objetos e Componentes Distribuídos: EJB De Objetos a Componentes Essência dos Componentes Componentes e Sistemas Distribuídos Enterprise JavaBeans Modelo de Componentes EJB POJOs e anotações Contêineres EJB
De Objetos a Componentes O CORBA tem um papel fundamental na história dos Sistemas Distribuídos; Ele apresentou uma solução viável para os principais problemas na programação de Sistemas Distribuídos: Heterogeneidade; Portabilidade e operação conjunta de software de sistemas distribuídos; A definição de vários Serviços CORBA também foi fundamental (segurança, confiabilidade, etc); Porém apontamos na aula passada alguns problemas enfrentados pelo desenvolvedor ao usar o CORBA;
De Objetos a Componentes Problemas do Middleware Orientado a Objetos Dependências Implícitas Requisito: Há necessidade clara de não apenas especificar as interfaces oferecidas por um objeto, mas também as dependências desse objeto com relação a outros na configuração distribuída. Interação com o Middleware Requisito: Há uma necessidade evidente de simplificar a programação de aplicações distribuídas para apresentar uma clara separação de preocupações entre código relacionado à operação em uma estrutura de middleware e código associado a aplicação, e de permitir que o programador se concentre exclusivamente neste último. Falta de separação de aspectos relacionados à distribuição Requisito: A separação de aspectos mencionados anteriormente também devem abranger o tratamento dos diversos serviços do sistema distribuído e, quando possível, as complexidades do tratamento de tais serviços devem ficar ocultas do programador. Falta de suporte para distribuição Requisito: As plataformas de middleware devem fornecer suporte intrínseco para a distribuição, para que o software distribuído possa ser instalado e implantado da mesma maneira que um software para uma máquina, com as complexidade de distribuição ocultas ao usuário. Objetos e Componentes Distribuídos
De Objetos a Componentes Esses quatro requisitos levam ao surgimento de estratégias baseadas em componentes para o desenvolvimento de sistemas distribuídos, junto ao surgimento de middleware baseado em componentes, incluindo o estilo de middleware chamado de servidores de aplicação.
Essência dos Componentes Definição de componentes segundo Szyperki: Um componente de software é uma unidade de composição com interfaces especificadas por contratos e somente dependências contextuais explícitas. Importante: Toda dependência contextual deve ser explícita; As dependências também são representadas como interfaces; Um componente de software é especificado em termos de um contrato, o qual inclui: Um conjunto de interfaces fornecidas As interfaces que o componente oferece como serviços para outros componentes; Um conjunto de interfaces exigidas As dependências que esse componente tem em termos de outros componentes que devem estar presentes e conectados a ele para que ele funcione corretamente.
Componentes e Sistemas Distribuídos Diversas tecnologias baseadas em componentes vem surgindo: Enterprise JavaBeans CCM (CORBA Component Model) O Middleware baseado em componentes adiciona suporte significativo para o desenvolvimento e implementação de sistemas distribuídos; Na visão dos middlewares baseados em componentes dois pontos são fundamentais: O conceito de Contêineres (fundamental para Middlewares baseados em Componentes) Suporte para a distribuição.
Contêineres Os contêineres suportam um padrão comum, geralmente encontrado em aplicações distribuídas: Um cliente front-end (frequentemente web) Um contêiner contendo um ou mais componentes que implementam a lógica de negócio/aplicação; Serviços de sistema que gerenciam os dados associados no armazenamento persistente. As tarefas de um contêiner são: Fornecer um ambiente hospedeiro no lado do servidor gerenciado para os componentes; Fornecer a separação de aspectos, isto é os componentes tratam das necessidades da aplicação e o contêiner trata de problemas dos sistemas distribuídos e do middleware.
Contêineres
Contêineres O Middleware que suporta o padrão contêiner e a separação de aspectos por esse padrão é conhecido como servidor de aplicação; Esse estilo de programação distribuída esta sendo amplamente utilizada no ambiente corporativo; Atualmente existem diversos servidores de aplicativos: IBM WebSphere Application Server (EJB) Red Hat Jboss (EJB) Oracle GlassFish (EJB) Apple WebObjects para MacOS Zope Application Server para Python.
Suporte para Distribuição O Middleware baseado em componentes fornece suporte para a distribuição de configurações de componentes; São usados descritores de distribuição (DD) (geralmente em XML), que descrevem completamente como a configuração deve ser implantada em um ambiente distribuído; Lembrando: Os componentes são distribuídos em contêineres; Os contêineres interpretam os DDs, geralmente usando alguma ferramenta associada; Os DDs auxiliam na conexão dos componentes, a fornecer o nível de segurança correto, suporte para transações, etc.
Enterprise JavaBeans EJB é uma especificação de arquitetura de componentes gerenciada no lado do servidor; Os componentes conhecidos como beans do EJB, oferecem suporte direto a arquitetura de três camadas apresentadas anteriormente; O EJB é gerenciado. O Contêiner responde por vários serviços, tais como: Transação, Segurança e Ciclo de Vida; O EJB é uma arquitetura de componente pesada : Sobrecarga de complexidade pelo gerenciamento do contêiner; Tem como objetivo, manter uma forte separação entre as várias funções envolvidas no desenvolvimento de aplicações distribuídas. Objetos e Componentes Distribuídos
Modelo de Componentes do EJB No EJB um bean é um componente que oferece um ou mais interfaces de negócio para clientes; Estas interfaces podem ser remotas ou local; Esta interface de negócio é nossa interface fornecida; As interfaces exigidas são apresentadas através de injeção de dependências; Um bean é representado pelo conjunto de interfaces de negócio remotas e locais, junto a uma classe de bean associada que implementa as interfaces; Inicialmente vamos discutir dois estilos de bean: Bean de Sessão: usam a invocação remota ou local. Bean baseado em mensagem: usam JMS.
POJOs e anotações Programar em EJB ficou mais fácil devido ao uso EJBs POJOs (Plain Old Java Objects objetos Java puros) junto a anotações EJB; As anotações foram introduzidas no Java 1.5 como um mecanismo para associar metadados a pacotes, classes, métodos, parâmetros e variáveis; Por exemplo, anotações são usadas para indicar se as interfaces de negócio de um EJB são Remotas ou Locais: @Remote public interface Pedidos{...} @Local public interface Frete{...} Vamos perceber na implementação que anotações são usadas por todo o EJB.
Contêineres EJB O gerenciamento do EJB como sistema distribuído é feito de forma implícita usando interceptação; Os contêineres fornecem políticas em áreas que incluem: Gerenciamento de Transação; Segurança; Persistência; Ciclo de Vida, etc. Geralmente os contêineres são previamente configurados com as políticas padrões; O Contêiner usa a injeção de dependência, com a qual um agente externo (contêiner) é responsável por gerenciar e solucionar as relações entre um componente e suas dependências (interfaces exigidas).
Contêineres EJB
Dúvidas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva
Próxima Aula Prática de Laboratório: EJB
Referências Sistemas Distribuídos - Conceitos e Projeto, George Coulouris, 4ª Edição - Editora Bookman, 784 páginas.