- Polis Educacional
Transcrição
- Polis Educacional
Daniel Berti Fonseca RA 0310096 - 8º semestre INTEGRAÇÃO DE SISTEMAS CORPORATIVOS COMPLEXOS COM JAVA EE Jaguariúna 2006 Daniel Berti Fonseca RA 0310096 - 8º Semestre INTEGRAÇÃO DE SISTEMAS CORPORATIVOS COMPLEXOS COM JAVA EE Monografia apresentada à disciplina Trabalho de Graduação, do curso de Ciência da Computação da Faculdade de Jaguariúna, sob orientação do Prof. Ms. Peter Jandl Jr., como exigência graduação. Jaguariúna 2006 1 para conclusão do curso de FONSECA, Daniel Berti. Integração de Sistemas Corporativos Complexos com Java EE. 2006. Monografia (Bacharelado em Ciência da Computação) – Curso de Ciência da Computação da Faculdade de Jaguariúna, Jaguariúna. RESUMO Existe hoje um número imenso de sistemas heterogêneos e com diferentes aplicações sendo utilizados por empresas ou instituições. Com o surgimento de novas tecnologias e com a necessidade de integração entre sistemas diferentes, surge a importância da utilização de padrões abertos no desenvolvimento de aplicações para tentar simplificar uma tarefa que a princípio é extremamente complexa. Existem plataformas que visam facilitar o desenvolvimento de aplicações distribuídas e integração entre sistemas, entre estas plataformas destacam-se o Sun Java Enterprise Edition (todo baseado na tecnologia Java) e o .NET (de propriedade da Microsoft). Apesar de compartilharem o mesmo propósito, ambas as plataformas possuem características distintas em diferentes aspectos. Após pesquisa, verificouse que a plataforma da Sun com certeza leva grande vantagem sobre o rival .NET, principalmente por sua independência de plataforma ou fornecedor, porém cada caso é um caso, e a escolha de qualquer uma destas plataformas com certeza deve estar relacionada a uma serie de fatores que devem ser levados em consideração e cabe a cada empresa ou instituição definir a que melhor se adequa à sua realidade. Palavra-Chave: INTEROPERABILIDADE, INTEGRAÇÃO DE SISTEMAS. 2 LISTA DE SIGLAS Java EE - Java Enterprise Edition JSP - Java Server Pages EJB - Enterprise Java Beans EIS - Enterprise Information System API - Application Programming Interface JDBC - Java Database Connectivity JCA - Java Connector Architecture XML - Extensible Markup Language HTML - Hyper Text Markup Language ERP - Enterprise Resource Planning RMI - Remote Method Invocation CORBA - Common Object Request Broker Architeture SOAP - Simple Object Access Protocol HTTP - HyperText Transfer Protocol MDB - Message Driven Beans CCI - Common Client Interface JMS - Java Message Service kM - Knowledge Management CRM - Custom Relationship Management EAI - Enterprise Application Integration WSDL - Web Services Description Language UDDI - Universal Description, Discovery and Integration CLS - Common Language Specification CLR - Common Language Runtime XHTML - Extensible HyperText Markup Language 3 LISTA DE FIGURAS Figura 1 - Modelo de Divisão em Camadas ------------------------------------------- 10 Figura 2 - Java EE Containeres ---------------------------------------------------------- 12 Figura 3 - Interações da camada web -------------------------------------------------- 13 Figura 4 - Acesso a componentes EJB ------------------------------------------------- 16 Figura 5 - Arquitetura de Conectores --------------------------------------------------- 22 Figura 6 - Comparativo Java EE e .NET ----------------------------------------------- 28 4 SUMÁRIO RESUMO ----------------------------------------------------------------------------------------- 2 LISTA DE SIGLAS ----------------------------------------------------------------------------- 3 LISTA DE FIGURAS --------------------------------------------------------------------------- 4 1. INTRODUÇÃO ------------------------------------------------------------------------------- 6 2. ARQUITETURA JAVA EE----------------------------------------------------------------- 9 2.1 Containeres Java EE ------------------------------------------------------------11 2.2 A Camada web ------------------------------------------------------------------- 12 2.2.1 Tecnologias envolvidas --------------------------------------------- 13 2.2.2 Java servlets ----------------------------------------------------------- 14 2.2.3 Java server pages ---------------------------------------------------- 14 2.3 A Camada de negócio ---------------------------------------------------------- 14 2.3.1 Lógica de negócio ---------------------------------------------------- 15 2.3.2 Componentes de negócio ------------------------------------------ 16 2.3.3 Tipos de componentes EJB ---------------------------------------- 17 3. INTEGRAÇÃO COM DEMAIS SISTEMAS EXISTENTES ----------------------- 20 3.1 Tipos existentes de integração de sistemas ------------------------------ 20 3.2 Tecnologias de integração em um sistema Java EE ------------------- 21 3.2.1 JCA ----------------------------------------------------------------------- 21 3.2.2 JMS ----------------------------------------------------------------------- 23 3.2.3 JDBC --------------------------------------------------------------------- 23 4. ARQUITETURA TECNOLÓGICA DOS SISTEMAS DE INFORMAÇÃO EMPRESARIAIS -------------------------------------------------------------------------------- 24 4.1 Modelos atuais -------------------------------------------------------------------- 25 4.2 A Integração de sistemas através de Web Services -------------------- 25 5. SUN JAVA EE X MICROSOFT .NET -------------------------------------------------- 28 5.1 Segurança -------------------------------------------------------------------------- 29 5.2 Independência de fornecedor ------------------------------------------------- 30 5.3 Interoperabilidade ---------------------------------------------------------------- 30 5.4 Web services ---------------------------------------------------------------------- 31 5.5 Maturidade ------------------------------------------------------------------------- 32 5.6 Migração para futuras plataformas ------------------------------------------- 32 5 5.7 Escalabilidade --------------------------------------------------------------------- 33 5.8 Performance ----------------------------------------------------------------------- 33 6. CONCLUSÃO -------------------------------------------------------------------------------- 34 7. REFERENCIAS BIBLIOGRÁFICAS ---------------------------------------------------- 35 6 1. INTRODUÇÃO Quais as vantagens e desvantagens da utilização da tecnologia Java EE (Java Enterprise Edition) na Integração de Sistemas Corporativos Complexos e no desenvolvimento de aplicações distribuídas? O que as grandes empresas visam quando investem no desenvolvimento de aplicações em ambiente distribuído ou mesmo na implementação de novos serviços são principalmente a redução de custo e o aumento no desempenho de seus negócios e em conseqüência disto, o aumento de capital. Geralmente, estas aplicações ou serviços devem combinar sistemas ou informações já existentes (informações acumuladas ao longo de toda a vida de uma empresa) com novas funcionalidades ou novas funções de negócio. A maioria das informações destas empresas, geralmente estão concentradas em um ou mais banco de dados ou mesmo em sistemas legados. BALL; CARSON; HAASE; JENDROCK; EVANS (2004, p.1) O grande desafio de se desenvolver este tipo de aplicação está em como integrar uma nova aplicação ou um novo serviço com os diversos sistemas já existentes. Para alcançar este objetivo são necessários padrões que permitam o acesso da aplicação a estes sistemas já existentes e que em muitas vezes, envolvem tecnologias heterogêneas. A plataforma Java EE surge com o objetivo de padronizar e simplificar a criação de aplicações corporativas. Para isso, propõe um modelo onde os componentes Java EE (páginas JSP (Java Server Pages), Servlets, EJB's (Enterprise Java Beans), etc) podem fazer uso dos serviços por ela fornecidos, os quais simplificam em muito sua implementação e possibilitam assim que a maioria do tempo de projeto seja gasto buscando a solução do problema proposto e não em implementação. Ela disponibiliza serviços que se destinam a suprir as necessidades de aplicações empresariais distribuídas, isto é, aquelas que necessitam da flexibilidade de disponibilizar acesso à sua lógica de negócio e dados para diferentes tipos de 7 dispositivos clientes (navegadores, dispositivos móveis, aplicações desktop, etc) ou para outras aplicações residentes na mesma empresa ou fora desta. As aplicações distribuídas normalmente são compostas de uma camada cliente, que implementa a interface com o usuário, uma ou mais camadas intermediárias, que são responsáveis por processar toda a lógica do negócio e provêem serviços à camada cliente, e outra, chamada de EIS (Enterprise Information System), formada por sistemas legados e bancos de dados. A infra-estrutura oferecida por esta plataforma possibilita que estas camadas, possivelmente localizadas em máquinas diferentes, possam se comunicar remotamente e juntas comporem uma única aplicação. Um diferencial significativo na arquitetura foi a iniciativa de enfatizar a utilização de padrões de projetos. Estes padrões possibilitam o projeto de soluções mais rapidamente e com qualidade e visa principalmente flexibilidade, organização e reaproveitamento de código, o que resulta em maior produtividade, qualidade e facilidade de manutenção das aplicações desenvolvidas. Os desenvolvedores contam ainda com os chamados Java BluePrints que são boas práticas de desenvolvimento e modelos de soluções para problemas comuns encontrados no desenvolvimento de aplicações. Nos últimos anos, a plataforma Java EE vem transformando o mercado de computação empresarial distribuída. Este grande sucesso se dá pelo fato de que ela foi toda desenvolvida como um padrão aberto de desenvolvimento, ou seja, não fica dependente de uma plataforma e isso assegurou que muitos dos fornecedores de soluções para computação voltassem seus olhos para gama de possibilidades que a ela podia oferecer. A plataforma caracteriza-se por ser altamente escalável, extensível e flexível, e que preserva os investimentos em tecnologia e ainda, a definição de API’s (Application Programming Interface) de acesso em Java permite que produtos de outras empresas que sejam compatíveis com a plataforma Java, entre elas podemse citar a Oracle e IBM, sejam facilmente utilizados em sistemas Java EE, com a vantagem de ser possível migrar para produtos concorrentes sem reescrever a aplicação, ou ser possível utilizar dois ou mais produtos concorrentes na mesma aplicação. SINGH; STEARNS; JOHNSON (2004, p.23) Estas API’s fornecem suporte a várias funcionalidades entre elas a conexão com banco de dados relacionais através de JDBC (Java Database Connectivity), 8 integração com outros sistemas já existentes através da tecnologia JCA (Java Connector Architecture) e ainda fornece suporte ao desenvolvimento de Web Services fazendo uso das API’s de processmento XML (eXtensible Markup Language) e de outros protocolos de comunicação padrões para troca de informações entre aplicações. Existem várias tecnologias disponíveis no mercado que prometem atender as necessidades das empresas quanto a soluções para o desenvolvimento de aplicações distribuídas e por sua vez na integração de sistemas. Entre elas está o Microsoft .NET, porém a plataforma da Sun vem ganhando a preferência dos desenvolvedores por suas características e principalmente por sua independência de plataforma. O objetivo deste trabalho é caracterizar os problemas e dificuldades da integração de sistemas coorporativos complexos, avaliar as alternativas existentes no mercado para a integração de sistemas, estudo detalhado da arquitetura Java EE e analisar as vantagens e desvantagens frente à plataforma.NET da Microsoft. Como todo o trabalho está voltado ao estudo das tecnologias utilizadas para a integração de sistemas coorporativos e focando principalmente na plataforma Java e relacionando as alternativas existentes no mercado que atendem a estes propósitos, o cronograma de estudos foi dividido em tópicos de forma que gradativamente venha-se a obter o conhecimento sobre a arquitetura das tecnologias estudadas e suas aplicações. Voltando para a utilização de padrões abertos na integração de sistemas, a primeira parte das etapas de estudo é adquirir conhecimento sobre a arquitetura, componentes, API’s e um breve estudo sobre as camadas que podem compor uma aplicação distribuída. Na segunda etapa, dedica-se a um estudo aprofundado das camadas que fazem parte de uma aplicação Java EE, entre elas as camadas web e EJB. A terceira etapa destina-se ao estudo das formas de integração existentes e ao estudo das API’s que compõe a plataforma e que se destinam a fornecer suporte a integração de aplicações Java com demais sistemas existentes. Na última etapa, serão relacionadas algumas das alternativas existentes no mercado quanto a integração de sistemas e desenvolvimento de aplicações distribuídas e fazer um estudo comparativo entre a plataforma da Sun e o Microsoft 9 .Net quanto a aplicações distribuídas, Web Services e na integração com demais sistemas indicando as vantagens e desvantagens de cada plataforma. 2. ARQUITETURA JAVA EE A plataforma Java EE foi desenvolvida para suportar aplicações distribuídas multicamadas tanto do lado do cliente quanto do servidor. As aplicações são configuradas da seguinte forma: uma camada para fornecer uma interface ao usuário, uma camada responsável por fornecer serviços para o cliente e a lógica de negócio para algumas aplicações e uma outra camada responsável pelo gerenciamento de dados. No modelo de desenvolvimento em camadas, toda a lógica da aplicação é distribuída entre os componentes do sistema de acordo com a sua função. Os componentes que fazem parte da plataforma podem ser instalados em máquinas diferentes dependendo da camada a qual o componente pertence. Estes componentes consistem basicamente de classes Java que são capazes de comunicar-se com outros componentes do sistema. A principal diferença entre um componente Java EE e um componente Java padrão, é que um componente Java EE tem que ser desenvolvido seguindo as especificações impostas pela plataforma e os mesmos são executados e administrados pelo servidor Java EE. BALL; CARSON; HAASE; JENDROCK; EVANS (2004, p.2) A plataforma fornece uma clara divisão, tanto lógica quanto física, de uma aplicação em camadas. O particionamento de uma aplicação em camadas permite uma maior flexibilidade de escolha da tecnologia apropriada para uma determinada situação. Múltiplas tecnologias podem ser utilizadas para fornecerem o mesmo tipo de serviço possibilitando escolher a que melhor se adeqüa baseado nas características do problema em questão. Na Figura 1 é apresentada uma visão das camadas que podem fazer parte de uma aplicação distribuída Java EE. 10 Figura 1 - Modelo de Divisão em Camadas Camada cliente: É responsável por interagir e apresentar os dados aos usuários e por se comunicar com outras camadas da aplicação. Em geral é a única parte da aplicação com a qual o usuário tem contato. A camada cliente comunica-se com outras camadas através de interfaces bem definidas. Camada web: É quem recebe e processa as requisições dos usuários através de um web container. É responsável por realizar todo processamento web, como hospedar páginas HTML (Hyper Text Markup Language), executar servlets e formatar páginas JSP a serem apresentadas pelos navegadores. Também pode ser responsável pelo controle do fluxo da aplicação e por processar parte da lógica de negócio da aplicação, incluindo o gerenciamento de conexões com banco de dados e conectores para acesso a recursos legados. 11 Camada de Negócio: Camada responsável pelo processamento dos componentes EJBs ou seja, pelo processamento dos componentes responsáveis pelas funções ou regras de negócio. Esta camada fornece serviços, implementados por um EJB container, para os EJBs. Alguns deles são: controle de transação, mecanismos de segurança, persistência, dentre outros. Estes serviços disponíveis facilitam a vida do programador, que fica livre da obrigação de ter que tratá-los, podendo se concentrar mais na implementação das funcionalidades inerentes ao seu negócio. Quando esta camada está presente, a lógica de negócio (toda ou parte desta) pode passar a ser implementada nos componentes de negócio distribuídos, ficando a camada web assim mais voltada à exibição dos dados. Camada de banco de dados e sistemas de informação legados: Tipicamente nesta camada estão incluídos sistemas gerenciadores de banco de dados, ERP’S (Enterprise Resource Planning) e quaisquer sistemas legados. Com o apoio da API JCA, esta camada provê uma infra-estrutura de software que mapeia dados e recursos de aplicações existentes dentro de projetos Java EE de forma padronizada. 2.1 Container Java EE Os componentes criados numa aplicação Java EE devem ser instalados em seu container apropriado. Um container é um ambiente de execução padronizado que fornece serviços específicos a um componente. Assim, um componente pode esperar que em qualquer plataforma Java EE implementada por qualquer fornecedor estes serviços estejam disponíveis. Sun Microsystems (http://java.sun.com/javaee/5/docs/tutorial/doc/, Mar. 2006) Um container também pode administrar serviços não configuráveis como, por exemplo, o ciclo de vida de componentes EJB e Servlets, recursos de conexão de banco de dados, persistência dos dados e acesso as API’s da plataforma. Um web container, por exemplo, destina-se a processar componentes web como servlets, JSP's, HTML's e Java Beans. 12 Um EJB container destina-se a fornecer a infra-estrutura necessária para a execução de componentes de negócio distribuídos. Um EJB é um componente de software que estende as funcionalidades de um servidor permitindo encapsular lógica de negócio e dados específicos de uma aplicação. Tal componente pode ser acessado de maneiras diferentes, por exemplo, através de RMI (Remote Method Invocation), CORBA (Common Object Request Broker Architeture) ou SOAP (Simple Object Access Protocol), o que possibilita que este seja utilizado por qualquer tecnologia que provê suporte a um destes padrões de comunicação. A plataforma Java EE permite uma arquitetura flexível sendo que tanto o web container quanto o EJB container são opcionais como demonstra a Figura 2. Figura 2 - Java EE Containeres 2.2 A Camada web Em uma aplicação Java EE, a camada web é responsável por tornar a lógica de negócio acessível por toda a rede. A camada WEB administra todas as comunicações de uma aplicação com os clientes web, invocando a lógica de negócio e transmitindo dados requisitados através de chamadas. Esta camada trabalha com conteúdos HTML ou XML e ela pode gerar e servir este tipo de conteúdo. Enquanto a lógica de negócio normalmente é implementada 13 em componentes EJB, ela também pode em certos casos ser implementada na camada web. A Figura 3 exibe a interação entre a camada web e as demais camadas que podem fazer parte de uma aplicação. Sun Microsystems (http://java.sun.com/javaee/5/docs/tutorial/doc/, Abr. 2006) Figura 3 – Interações da camada web As principais funções da camada web dentro de uma aplicação Java EE são: - Administrar a interação entre os clientes web e a lógica de negócio da aplicação. - Gerar conteúdo dinâmico em diversos formatos de dados, entre eles HTML, XML, imagem, som e vídeo. - Traduzir chamadas HTTP e repassá-las de modo que a camada de negócio entenda e apresente os resultados no conteúdo web. - Implementar a lógica de negócio (enquanto muitas aplicações distribuídas concentram a lógica de negócio em componentes EJB, algumas aplicações podem conter algum tipo de lógica de negócio dentro da camada web). 2.2.1 Tecnologias envolvidas 14 Uma aplicação web nada mais é do que uma coleção de componentes da camada web, conteúdo e informações de configuração e que opera como se fosse uma única unidade funcional. A especificação da plataforma define dois tipos de tecnologias para componentes web. Estas tecnologias são os Servlets e páginas JSP. Estes dois componentes são executados pelo container web. 2.2.2 Java servlets Um Servlet é um programa que estende a funcionalidade de um web server, gerando conteúdo dinâmico e interagindo com os clientes, utilizando o modelo request/response. Os servlets não são restritos ao modelo HTTP de request/response, onde na realidade são pequenas aplicações de servidores, mas o modelo HTTP é o modelo mais comumente utilizado. 2.2.3 Java server pages Uma página JSP é uma página que possui uma estrutura fixa somada com algum tipo de linguagem de marcação para incluir outro tipo de texto ou lógica embarcada. Esta estrutura fixa normalmente é toda baseada em HTML. A linguagem de marcação que tem como função gerar algum tipo de conteúdo dinâmico pode apresentar-se das seguintes formas: scripts ou tags customizadas. Páginas JSP podem especificar conteúdo dinâmico por qualquer meio textual, mas elas são primeiramente utilizadas para criar conteúdo estruturado baseado em HTML, XML, XHTML (eXtensible HyperText Markup Language). As páginas JSP diferenciam-se dos servlet’s por seu modelo de programação. 2.3 A Camada de negócio Em aplicações Java EE multicamadas, a camada de negócio especifica a lógica de negócio e fornece serviços como a administração de transações, controle de concorrência e segurança. 15 A tecnologia de componentes EJB fornece um modelo de componentes distribuídos que habilita aos desenvolvedores concentrar-se na solução dos problemas envolvendo regras de negócio e deixar que a plataforma administre os serviços de baixo nível. Os componentes EJB são um link fundamental entre os componentes da camada web e dados críticos de negócio armazenados na camada de sistemas de informação e banco de dados. SINGH; STEARNS; JOHNSON (2002 p.129-75). 2.3.1 Lógica de negócio Quando falamos de lógica de negócio, estamos nos referindo a uma porção de procedimentos e métodos que são usados para administrar funções de negócio específicas. O conceito de orientação a objetos nos habilita decompor todas estas funções e métodos e distribuí-las entre vários componentes conhecidos como objetos de negócio. Estes objetos devem atender aos seguintes requisitos: - Manutenção de Estado Objetos de negócio normalmente devem manter seu estado durante chamadas de métodos (Persistência). - Operar com dados compartilhados Componentes devem fornecer controle de concorrência e níveis apropriados para o isolamento do acesso aos dados compartilhados. - Participação em transações Uma transação poder ser definida como uma série de tarefas que precisam ser completadas como uma unidade, ou seja, se caso uma das tarefas falhar, todas as outras devem ser canceladas. - Fornecer acesso remoto aos dados Os clientes devem conseguir acessar os serviços fornecidos pelos componentes de modo remoto - um objeto de negócio deve fornecer serviços genéricos ao cliente como suporte a transações, segurança, acesso remoto, etc. 16 - Controle de Acesso Os controles oferecidos por um objeto de negócio devem oferecer algum tipo de serviço de autenticação, ou seja, um mecanismo que permita que certos usuários tenham acesso a serviços protegidos. - Reutilização Os componentes de negócio devem ser reutilizados por componentes diferentes da mesma aplicação ou de aplicações diferentes. 2.3.2 Componentes de negócio Os componentes EJB facilitam o desenvolvimento uma vez que eles tratam automaticamente a segurança, persistência, transação dentre outros serviços. Dessa forma o desenvolvedor não precisa se preocupar com a implementação programática desses serviços, a não ser que realmente deseje. Por ter essas facilidades, rapidamente o EJB tornou-se um padrão para desenvolvimento de aplicações corporativas distribuídas e multicamadas.Os componentes EJB não são acessados diretamente pelo cliente, como ocorre em RMI. A aplicação cliente requisita o acesso ao Container que por sua vez faz a chamada ao objeto EJB.O gerenciamento do ciclo de vida do Bean, o controle transacional, pooling, dentre outros aspectos são gerenciados pelo Container EJB. A tecnologia EJB é, portanto, um modelo de componentes do lado servidor (Figura 4) e por ser um modelo de componentes, ele deve seguir algumas regras durante o seu desenvolvimento. Existem interfaces responsáveis por tarefas definidas, regras de herança, dentre outros aspectos que devem ser seguidas durante a implementação de componentes EJB. 17 Figura 4 – Acesso a componentes EJB 2.3.3 Tipos de componentes EJB A especificação Enterprise Java Beans define três tipos de componentes: - Session Beans Os Session Beans são componentes de negócio. A lógica de negócio dos componentes EJB encontram-se nestes componentes. Existem dois tipos de Componentes Session Bean, o Stateless Session Bean e o Stateful Session Beans. O Stateless é um componente de negócio que não mantém conversação com o usuário, não há garantia que chamadas sucessivas de métodos remotos vão ser feitas no mesmo objeto. O Stateful é um componente que mantêm estado, com ele temos a garantia que chamadas sucessivas de métodos remotos feitas por um mesmo cliente serão processadas por um mesmo objeto. Os componentes EJB Session Beans usam um protocolo de invocação remota (RMI ou RMI-IIOP) para receber solicitações de aplicações clientes. Esses protocolos exigem uma comunicação síncrona e bloqueante, ou seja, o cliente deve ficar em espera enquanto o servidor realiza o processamento e envia a resposta ao cliente. - Entity Beans Entity Beans são componentes que representam entidades de negócio, como Cliente, Fornecedor, Gerente. Os dados das entidades se encontram em base de dados, e os componentes são responsáveis por realizar o mapeamento entre objetos de negócio e o banco de dados. Esses componentes facilitam o desenvolvimento uma vez que eliminam a necessidade do programador desenvolver código de persistência. O Container realiza a persistência e faz com que o desenvolvedor se concentre na lógica de negócio. - Message-Driven Beans Message-Driven Beans são componentes ativados assíncronamente através de mensagens JMS (Java Message Service). Os componentes Message-Driven Beans 18 escutam uma determinada fila de mensagens e realizam algum processamento quando recebem algum dado da fila de mensagens. O modelo de troca de mensagens funciona, simplificadamente, da seguinte forma: O cliente envia mensagens para uma estrutura que as armazena. Os componentes Message-Driven Beans processam conteúdos oriundos de uma fila de mensagens. Quando uma mensagem é recebida o Container se encarrega de entregá-la ao componente, que executa o código de negócio. Vantagens do uso de Enterprise Java Beans em aplicações distribuídas Invocação remota de métodos Com a invocação remota de métodos podemos ter diversos clientes remotos nas mais diversas localidades. Load Balancing Podemos ter diferentes servidores, e a cada chamada do cliente podemos balancear a carga entre os diversos servidores disponíveis. Fail-over Quando um desses servidores der problema, devemos passar a chamar automaticamente outro servidor transparentemente para o cliente. Transações O conceito de transação é muito importante para EJB. Com o conceito de transações, é possível acessar diversas base de dados e executar uma série de modificações, caso algum erro ocorra durante o processamento de alguma das tarefas solicitadas todo o processo é cancelado e o sistema volta ao estado inicial. Clustering Para podermos ter tolerância à falhas, devemos replicar a aplicação entre os diversos servidores. Threading 19 O desenvolvedor de componentes EJB não precisa se preocupar com aspectos multitheading da aplicação. Como tratar diversos clientes? Como evitar deadlock entre as threads? Como sincronizar os objetos? Essas perguntas não devem ser respondidas pelo desenvolvedor uma vez que o Container é responsável pelo tratamento dessas questões. Segurança Pode-se definir a segurança de um componente EJB simplesmente por configuração (segurança declarativa). Caching O servidor de aplicações faz caching de componentes de Entidade de forma a otimizar o acesso ao banco de dados. 20 3. INTEGRAÇÃO COM DEMAIS SISTEMAS EXISTENTES A integração com os demais sistemas existentes é um ponto importante a se considerar dentro de uma aplicação distribuída. Estes sistemas normalmente podem ser banco de dados relacionais, ERP’s, algum sistema de processamento de transações de um mainframe e outros sistemas legados. 3.1 Tipos existentes de integração de sistemas Dentro do conceito de integração de sistemas, podemos destacar três tipos de integração: - Integração de aplicações - Integração de Dados - Integração de Sistemas Legados Integração de Aplicações Este tipo de integração consiste em integrar uma ou mais aplicações existentes de modo que compartilhem informações. Integração de Dados Uma aplicação distribuída normalmente contém mais de um sistema de banco de dados. Estes sistemas de banco de dados podem ser relacionais, orientados a objetos, hierárquicos, baseados em fila, entre outros. A integração de dados foca na integração dos dados já existentes, com as aplicações distribuídas. Integração legada Integração legada envolve integrar novas aplicações distribuídas com aplicações ou sistemas que já estão em operação há algum tempo. 21 3.2 Tecnologias de integração em um sistema Java EE Para tentar solucionar os problemas de integração com sistemas legados, a plataforma Java EE fornece as seguintes tecnologias para integração: 3.2.1 JCA A JCA é a arquitetura padrão para a integração de produtos e aplicações Java EE com sistemas heterogêneos. A JCA permite que fornecedores de sistemas de informação forneçam um adaptador para cada um de seus sistemas. Devido a este adaptador seguir a especificação da JCA, ele pode ser inserido em um servidor Java EE de modo que forneça a infra-estrutura necessária para a integração com qualquer sistema destes fornecedores. Um servidor Java EE, devido ao seu suporte a arquitetura de conectores, pode conectar-se a múltiplos sistemas de informações. O servidor Java EE e os adaptadores EIS contribuem para manter todos os sistemas de baixo nível como controle de transações, segurança, administração de conexões transparentes aos componentes da aplicação. Isto permite que o desenvolvedor foque nos componentes de negócio e na lógica sem se preocupar com os mecanismos de baixo nível que estão envolvidos em uma integração de sistemas. Através de contratos, a arquitetura de conectores estabelece padrões para acesso a sistemas legados. A JCA define dois tipos de contratos (conforme nos mostra a Figura 5): contratos de nível de sistema e de aplicação. Os contratos de nível de sistema existem entre o servidor de aplicações Java EE e um adaptador. Já os contratos de nível de aplicação existem entre um componente de uma aplicação e o adaptador. Os contratos de nível de aplicação determinam a API de cliente que o componente da aplicação utiliza para o acesso aos sistemas de informações. SINGH; STEARNS; JOHNSON (2004, p.175-200) 22 Figura 5 – Arquitetura de Conectores A arquitetura de conectores não necessita que um componente de aplicação utilize uma API de cliente específica. A API do cliente pode ser uma CCI (Common Client Interface), a qual é uma API para acesso a vários sistemas de informação heterogêneos, ou pode ser uma API específica para um determinado tipo de adaptador e ao sistema de informação que ele dá suporte. Há vantagem em usar a CCI, principalmente porque os desenvolvedores podem construir suas ferramentas voltadas para esta API. Embora a CCI seja o alvo principal para os desenvolvedores de ferramentas e para distribuidores de sistemas de informação, isto não desencoraja os fornecedores a usarem as API’s JDBC. Um fornecedor de sistemas de informação normalmente irá combinar JDBC com CCI usando a API JDBC para acessar banco de dados relacionais e CCI para acessar sistemas legados Os contratos de nível de sistema definem a interoperabilidade padrão entre servidores de aplicação JAVA EE e sistemas legados. Desenvolvendo-se componentes que consigam aderir a estes contratos, um servidor de aplicação e um sistema legado sabem que se conectar é uma operação imediata de conectar-se a um adaptador. 23 Os fornecedores de sistemas de informação ou adaptadores implementam parte dos contratos de nível de sistema nos adaptadores, o qual é uma biblioteca de sistema específica para cada sistema de informação. Como exemplo de adaptador, podemos citar um que se conecta a um sistema ERP, ou a um sistema de processamento de transações de um mainframe. Há também uma interface entre o adaptador e seu sistema de informação. Esta interface é específica para o sistema e ela pode ser uma interface nativa ou de algum outro tipo. A arquitetura de conectores não define esta interface e sim os serviços que o servidor de aplicações Java EE deve fornecer. Estes serviços como gerenciamento de transações, segurança e pool de conexões, são esboçados nos três contratos de nível de sistema: Connection management contract, Transaction management contract, Security contract os quais o servidor de aplicações deve implementar. 3.2.2 JMS A JMS (Java Message Service) é a API Java padrão definida para o sistema de troca de mensagens em ambiente distribuído. Ela é uma API comum que pode ser usada em diversos sistemas de troca de mensagens. Uma aplicação Java usa a API JMS para se conectar a um sistema de troca de mensagens distribuída. Uma vez conectado, a aplicação faz uso dos recursos fornecidos pela API para criar mensagens e se comunicar com mais de uma aplicação. Uma aplicação cliente, chamada cliente JMS, usa a API para acessar mensagens assíncronas providas pelo sistema de mensagens. 3.2.3 JDBC Os sistemas de gerenciamento de banco de dados relacionais são a formas mais comuns de amazenamento de dados. Muitas aplicações utilizam a API JDBC para acessar banco de dados relacionais para administrar a persistência de dados de suas aplicações. 24 4. ARQUITETURA TECNOLÓGICA INFORMAÇÃO EMPRESARIAIS DOS SISTEMAS DE As empresas hoje em dia estão sujeitas às várias forças internas e externas, tais como: os clientes, fornecedores, parceiros, revendedores, acionistas, governos, colaboradores. Estas forças condicionam e potenciam necessariamente o negócio da empresa, a qual tem de saber responder adequadamente. Para satisfazer a gestão da cadeia de produção ou de fornecimento, as empresas adotam sistemas designados de ERP que dão suporte às áreas de produção, armazenamento, distribuição e logística. Para satisfazer a gestão da cadeia de vendas, as empresas adotam sistemas designados por CRM’s (custom relationship management) que suportam as áreas de venda, pré e pós-venda, apoio ao cliente, apoio aos vendedores, etc. Para satisfação dos requisitos internos da gestão dos colaboradores, as empresas adotam sistemas clássicos de gestão de recursos humanos, gestão de projetos, e gestão de competências. Por fim, para satisfação dos requisitos dos acionistas, auditores financeiros e imposições fiscais, as empresas adotam sistemas de gestão financeira e de contabilidade, gestão de aplicações financeiras, etc. SILVA (2001, p.3) Existem dois componentes fundamentais que permitem unificar e integrar todo o conhecimento e os vários processos de negócio da empresa. São ele o KM (knowledge management), responsável por captar, manter e difundir o conhecimento; e o EAI (Enterprise Application Integration), responsável pela integração dos vários sistemas de informação da empresa. As organizações de sucesso são aquelas que conseguem de forma sustentada e continuada manter e otimizar o seu negócio pela conjugação destes diferentes sistemas de informação. Existem dois aspectos cruciais, que atualmente começam a dar os primeiros passos. São eles: - Integração interna: Integração entre os vários sistemas de informação (entre o ERP e o CRM, entre o ERP e o sistema financeiro) 25 - Integração externa: Integração dos processos de negócio entre a organização e as outras entidades envolvidas, quer sejam clientes, parceiros, fornecedores, ou outras. 4.1 Modelos atuais Os processos de negócio entre empresas têm sido tradicionalmente suportados pelos seguintes mecanismos ou tecnologias: Interações telefônicas ou fax: Caracterizadas por não apresentarem qualquer integração com os sistemas de informação empresariais, pelo conseqüente consumo intensivo de recursos humanos, e erros vários de inconsistência ou duplicação de informação. Interações baseadas em EDI: Caracterizadas por permitirem transações ponto-a-ponto entre sistemas de informação de diferentes organizações, mas apresentando problemas ao nível dos custos elevados de implementação e de manutenção; utilização de tecnologias proprietárias e tecnicamente ultrapassadas. Interações baseadas na Web (Web Services): Caracterizadas por uma não integração estreita e automática entre os sistemas de informação empresariais e correspondentemente, estes mecanismos devem ser vistos como uma ligeira evolução relativamente às interações baseadas em telefone e fax. 4.2 A Integração de sistemas através de Web Services A integração entre sistemas desenvolvidos em plataformas heterogêneas de hardware e software é uma necessidade crescente no mundo de desenvolvimento de soluções e-business. As grandes empresas possuem inúmeros sistemas construídos em diferentes combinações de plataforma ou linguagem. Do ponto de vista financeiro, não é viável que esses sistemas sejam substituídos sempre que 26 novas tecnologias surgem no mercado, e sim que estas novas aplicações possam interagir eficientemente com as existentes. Esse é um grande desafio que a tecnologia em Web Services tem a vencer. SILVA (2001, p.4-12) Web Services é uma nova onda tecnológica que traz consigo novos conceitos e diversas promessas. Diferentemente das ondas passadas, o contexto tecnológico nunca foi tão propício a mudanças, principalmente devido ao amadurecimento do desenvolvimento de software componentizado e ao avanço da padronização de soluções web. As primeiras iniciativas de utilização são no sentido de integrar sistemas desenvolvidos em plataformas de hardware e software distintas. Esses sistemas podem ser internos a uma empresa ou na fronteira de relacionamento entre empresas parceiras. Totalmente baseado em padrões abertos de grande aceitação no mercado, independente de linguagem, de plataforma e de fornecedor, para o desenvolvimento, existem duas grandes plataformas relacionadas à infra-estrutura: Java EE e .Net. Fica a cargo de cada empresa escolher a que melhor se adequa a sua infraestrutura. A plataforma .Net é encampada pela Microsoft enquanto que a Java EE, pelos demais fornecedores de tecnologia do mercado como BEA Systems, IBM, Oracle, Sun e HP. Um conjunto de novas tecnologias serve de base para a revolução que se anuncia, destacando-se: XML, SOAP, WSDL (Web Services Description Language) e UDDI (Universal Description, Discovery and Integration). 27 5. SUN JAVA EE X MICROSOFT.NET Abaixo, segue uma comparação entre as duas plataformas: Microsoft .NET e Sun Java EE. Porém, é necessário cautela quanto a qualquer comparação entre as duas plataformas, pois, apesar de criadas para propósitos semelhantes, a plataforma da Microsoft é uma plataforma relativamente nova, enquanto que a da Sun já está no mercado há mais tempo. Java EE é uma especificação para o desenvolvimento de aplicações distribuídas. Existem mais de 50 fornecedores de ferramentas, servidores, etc. para facilitar o desenvolvimento de milhares de classes, estruturas e tipos de dados. Entre estes fornecedores incluem-se as grandes do mercado como IBM, BEA, Sun, Oracle entre outras, que tem facilitado o desenvolvimento de aplicações e fornecendo meios simplificados de acesso a dados através de JDBC, Java Connector Architecture e suporte a XML e Web Services. SDS Consulting (http://www.sdsconsulting.com, Nov.2006) Devido a isso, existe um grande número de pessoas envolvidas a dar suporte e desenvolverem softwares para a especificação Java EE, cooperação e competição nunca foram tão proveitosas. A cooperação é derivada da própria especificação e a competição cresce com as organizações empenhadas em criar os melhores produtos a preços mais acessíveis. Já a plataforma. NET consiste em várias tecnologias que permitem o desenvolvimento de sistemas distribuídos. Para este propósito, a Microsoft incorporou o XML em quase todos os aspectos de comunicação e armazenamento de dados. O acesso aos dados tem sido bastante simplificado através de um mecanismo chamado ADO. NET, e eles criaram e aperfeiçoaram a programação para web chamada ASP. NET. No .NET, componentes individuais podem ser construídos utilizando-se diversas linguagens de programação. Fornecendo uma série de funcionalidades comuns chamadas de CLS (Common Language Specification) o.NET permite que estes componentes venham a funcionar bem amanhã. Esta série de funcionalidades compreende mais de 6600 classes, tipos e estruturas de dados. A CLS opera na Common Language Runtime (CLR), um ambiente de execução similar à máquina Virtual Java. 28 A plataforma da Sun foi criada para facilitar o desenvolvimento e reduzir erros em sistemas de software distribuídos. Ela foi criada tirando proveito de métodos de engenharia de software como incorporar padrões de projeto diretamente nos componentes pertencentes a plataforma. Desenvolvedores são encorajados a desenvolver componentes de fácil manutenção em Java. Estes componentes podem ser reutilizados em outras aplicações uma vez que a Máquina Virtual Java facilita a portabilidade entre plataformas. A plataforma Java EE é toda baseada na tecnologia Java e esta já conhecida por sua escalabilidade, desempenho e baixo custo de manutenção. .NET também foi criado para facilitar o desenvolvimento de software. Para este fim, a API do Windows já está consolidada e muito mais fácil de usar. .NET também incorporou tipos de dados unificados chamados Common Type System (CTS), os quais ajudam o desenvolvimento onde múltiplas linguagens estão envolvidas. Na Figura 6 podemos ter uma visão comparativa da estrutura das duas plataformas. SDS Consulting (http://www.sds-consulting.com, Nov.2006) Figura 6 – Comparativo Java EE e .NET 5.1 Segurança É difícil comparar Java EE e.NET do ponto de vista da segurança. Ambas as plataformas seguem os padrões X.509 e Kerberos. Porém, olhando mais de perto, 29 podemos considerar que o .NET é uma tecnologia relativamente nova se comparada ao Java , o qual já vem sendo usado em ambiente distribuído a algum tempo. Quanto à segurança, também devemos considerar as linguagens primárias de cada plataforma: Java e C#. As duas linguagens foram criadas com a segurança em mente, e ambas têm meios similares de focar o assunto, porém, não há diferenças significativas. O C# é sempre compilado para código nativo ou uma linguagem intermediária que será interpretada para código nativo antes da execução. Java é interpretado para bytecodes através da Máquina Virtual Java. A diferença mais significativa é que o .NET força a segurança através de um sistema baseado em evidências que determina se um código é seguro ou não baseado de onde ele veio. Java conta com o modelo de segurança sandbox utilizando verificações de segurança em tempo de execução. A última diferença a ser notada é de que a Sun encoraja os sistemas open source e a especificação da Máquina Virtual Java é disponível já a Microsoft, mantém os componentes da CLR fechados. Desta forma , podemos dizer que a Sun tem segurança open source enquanto que a Microsoft tem segurança obscura. 5.2 Independência de fornecedor A portabilidade é o aspecto mais atrativo na plataforma JAVA EE devido ao grande número de fornecedores disponíveis. Atualmente, há cerca de 37 fornecedores JAVA EE licenciados e no mínimo 17 servidores de aplicação. Este grande número de fornecedores permite que encontremos dentre eles aquele que melhor se ajusta às necessidades por um preço competitivo. Devido a isso, ele também nos dá a opção de negociação, pois mudar para um outro fornecedor é sempre uma alternativa a ser estudada. Atualmente, com o. NET, há somente uma opção de sistema operacional, o Microsoft Windows, e você tem de pagar a quantia estipulada pela Microsoft para obter as licenças requeridas 5.3 Interoperabilidade 30 Muitos dos sistemas distribuídos são construídos seguindo as tendências da indústria em determinada época. Dois bons princípios a se considerar quando sistemas serão usados por cinco ou dez anos são interoperabilidade e portabilidade. Interoperabilidade consiste na habilidade de um sistema trabalhar com outros sistemas. Devido a Microsoft ter incorporado o XML por todo o .NET, sistemas que já usam o XML há 5 ou 10 anos podem agora trabalhar com sistemas .NET desenvolvidos hoje. O Java EE também fornece interfaces XML similares às que são usadas no .NET. Ele também fornece a arquitetura de conectores para uma integração limpa com sistemas legados. Portabilidade consiste em mover uma aplicação de um sistema operacional para outro. Como as aplicações Java fazem uso da Java Virtual Machine , torna-se possível migrar aplicações para sistemas diferentes sem a necessidade alterações significativas. O .NET encara a questão da portabilidade de um ponto de vista diferente. Em vez de mover a aplicação de um sistema operacional para outro, .NET considera a mudança de uma linguagem para outra. O recurso que habilita esta mudança é a CLR (Common Language a Runtime), qual fornece interoperabilidade e independência de linguagem. Similar à Máquina Virtual Java, a CLR fornece uma camada de execução entre a linguagem de programação e o código nativo do sistema operacional. Dessa forma, uma aplicação.NET pode ser constituída de uma série de linguagens diferentes e no futuro, os desenvolvedores estarão aptos a escolher sua linguagem de programação favorita se ela for suportada pelo.NET. 5.4 Web services O foco de um Web Service é a Interoperabilidade. Um Web Service JAVA EE deve estar apto a conversar com um Web Service .NET. Grandes empresas como a Oracle, já estão fazendo testes de interoperabilidade com Web services .NET para assegurar que os dois sistemas possam trabalhar em conjunto. Quanto à implementação de um Web Service, ambas as plataformas dão suporte a padrões de Web Services como: Simple Object Access Protocol (SOAP), Web Services Description Language (WSDL), e Universal Description, Discovery, and Integration (UDDI). Um Web Service é descrito utilizando –se a WSDL e enviado 31 como uma mensagem SOAP. Um consumidor pode obter informação sobre um serviço via um registro UDDI. Uma vez que estes passos foram seguidos, o consumidor pode usar o serviço da tecnologia que ele preferir - Java, C#, Perl, etc. Sempre que um padrão para obter algum tipo de informação é seguido, o Web Service responderá apropriadamente. Este é um grande passo, porém, é uma tecnologia ainda nova e novos padrões começarão a surgir.Microsoft e Sun com certeza estarão envolvidas nas definições destes padrões, e o mais importante, suas plataformas terão que suportálos de alguma forma. 5.5 Maturidade A maturidade de uma plataforma de desenvolvimento pode ter uma grande influência no sucesso de um sistema. Maturidade traz estabilidade, um grupo de desenvolvedores e uma base de conhecimentos sobre problemas comuns associados à plataforma em questão. O núcleo Java EE foi liberado em 1997. Quase dez anos se passaram e vários sistemas distribuídos foram desenvolvidos, e mais de 50 organizações te licença Java EE. Dessa forma, a arquitetura Java EE teve muito tempo para amadurecer. Alem disso, muitos desenvolvedores tem documentado suas melhores práticas na forma de padrões de projeto. Apesar de tudo, o .NET é surpreendentemente robusto para uma plataforma tão nova. Isto de deve ao fato de que muito do ambiente coorporativo da Microsoft em utilização é baseado no .NET, e ele vêm sendo utilizado internamente ao longo dos últimos anos. A Microsoft também forneceu uma versão beta de sua plataforma durante 18 meses para ajudar a revelar aos desenvolvedores as exclusividades associadas ao .NET. 5.6 Migração para futuras plataformas Quando consideramos a mudança para uma outra plataforma, devemos considerar o que acontecerá com os sistemas legados. Normalmente a plataforma Java EE fornece uma boa quantidade de ferramentas definidas pela especificação 32 JCA para tratamento de sistemas legados. Através destas ferramentas, aplicações Java EE podem comunicar-se com sistemas mais antigos. .NET possui a CLR e a melhorada estrutura orientada a objetos do VB.NET que muda drasticamente a maneira de desenvolvimento que havia no passado. Esta mudança implica que qualquer mínimo trecho de código que tenha sido escrito em versões mais antigas do Visual Basic terá que ser atualizadas no VB.NET. Felizmente, existem ferramentas para auxiliar em todo o processo de transição. 5.7 Escalabilidade Como sistemas se tornam mais aceitáveis e ganham mais usuários com o passar do tempo, a infra-estrutura original pode não estar apta a suportar crescimento. Java EE possui a tecnologia de load-balancing embutida. Dessa forma, um cluster de máquinas pode colaborar administrando facilmente tanto a carga como o número crescente de usuários do sistema. Outro ponto interessante é que a arquitetura Java EE não é limitada a plataforma, podemos ter uma máquina com Solaris, uma com Linux e outra com Windows 2000 todas elas colaborando em um cluster. .NET também foi desenvolvido com a escalabilidade em mente, porém nos deixa amarrados à plataforma Windows. 5.8 Performance Quando consideramos a arquitetura distribuída, dois lugares óbvios onde a performance do sistema pode ser melhorada são com certeza o acesso aos dados e a velocidade do programa. Tanto o Java EE quanto o .NET fornecem a habilidade de manter processos de negócio alocados em memória e dessa forma reduzir o tráfego no banco de dados, e dessa forma aumentar a performance de acesso aos dados. Relacionando a velocidade dos programas, aplicações Java são geralmente mais rápidas que suas equivalentes nativas. .NET também incorporou um otimizado sistema de compilação em tempo real para produzir códigos que normalmente rodam mais fácil do que as linguagens equivalentes 33 6. CONCLUSÃO É fato a importância da utilização de padrões abertos no desenvolvimento de aplicações tendo em vista as constantes mudanças e evoluções proporcionadas pelas áreas de tecnologia e informática. A utilização destes padrões (destaque para o XML) em conjunto com plataformas que os suportam, proporcionam um caminho mais simples para o desenvolvimento de aplicações distribuídas complexas e também na integração entre sistemas distintos. Entre estas plataformas, Java EE e .NET destacam-se perante as demais alternativas do mercado. É certo que as duas plataformas possuem propósitos semelhantes, porém, a plataforma Java EE leva grande vantagem sobre a plataforma da Microsoft principalmente pela sua maturidade e independência de fornecedor, porém uma série de fatores devem ser levados em consideração antes de optar por uma ou outra plataforma. A responsabilidade ficará a cargo de cada organização optar por aquela plataforma que melhor se adequa à sua estrutura atual. 34 7. REFERÊNCIAS BIBLIOGRÁFICAS Ball, Jennifer; Carson, Debbie Bode; Evans, Ian; Haase, Kim; Jendrock, Eric. The Java EE 5 Tutorial, Sun MicroSystems, 2004 Microsoft. “What Is.NET?”. [Internet http://www.microsoft.com/net/ recuperado em 03/11/2006] SUN Microsystems. “JAVA EE Tutorial”. [Internet http://java.sun.com/javaee/5/docs/tutorial/doc/ recuperado em 27/10/2006] Stearns, Beth ; Johnson, Mark ; Singh, Inderjeet. Designing Enterprise Applications. Addison Wesley, 2002 Silva, Alberto Rodrigues. Web Services: Próximos passos na globalização da computação distribuída. 2002 [Internet http: //berlin.inescid.pt/alb/static/papers/2002/ e-portugal-2002-albertosilva.pdf recuperado em 04/11/2006] SDS Consulting. “NET or J2EE? A Management Perspective” [Internet http://www.sds-consulting.com/J2EE_NET_Manager.pdf recuperado em 29/11/2006] 35