UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA ESPECIALIZAÇÃO EM TECNOLOGIA JAVA ALESSANDER FECCHIO - PDF
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA ESPECIALIZAÇÃO EM TECNOLOGIA JAVA ALESSANDER FECCHIO
Download "UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA ESPECIALIZAÇÃO EM TECNOLOGIA JAVA ALESSANDER FECCHIO"
Bruno Klettenberg di Castro
1 UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA ESPECIALIZAÇÃO EM TECNOLOGIA JAVA ALESSANDER FECCHIO JAVA EE 5: DESENVOLVENDO APLICAÇÕES CORPORATIVAS CURITIBA 2006
2 UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA ESPECIALIZAÇÃO EM TECNOLOGIA JAVA ALESSANDER FECCHIO JAVA EE 5: DESENVOLVENDO APLICAÇÕES CORPORATIVAS Trabalho apresentado como requisito para a obtenção de título de especialista em tecnologia Java, da Universidade Tecnológica Federal do Paraná. Orientadora: Prof. Ana Cristina B. Kochem Vendramin. CURITIBA 2006
3 SUMÁRIO 1 Introdução O Java Uma breve história do Java Nomenclatura e versionamento do Java Conceitos fundamentais da estrutura da plataforma Java Java é uma linguagem interpretada Edições do Java Visão geral do Java EE Modelo de desenvolvimento do Java EE Componentes Java EE Clientes Java EE Componentes web Componentes de negócios Outros componentes Containers Java EE Tecnologias empregadas Ambiente de desenvolvimento integrado Utilização de recursos do sistema Aproveitamento do código já desenvolvido Adequação do IDE ao tipo de aplicação a ser desenvolvida Controle de versões Servidor de aplicações MVC Banco de dados MySql PostgreSQL Derby Uma Aplicação prática da tecnologia Java EE Ambiente de desenvolvimento Pré-requisitos Instalação dos software Integração do NetBeans com o SJSAS Criação do banco de dados Conceitos sobre acesso a bancos de dados no Java Configuração do SJSAS Enterprise Java Beans Beans Session beans Statefull beans Stateless beans Interfaces Anotações Container para aplicações cliente Java Web Start Contexto Tipos de arquivo Persistência de dados Facades Uma aplicação simples Session bean Interfaces Aplicação cliente Construção da aplicação com o NetBeans Criação de um projeto Criação do bean Programação do bean e das interfaces Programação da aplicação cliente...58
4 7.4.5 Deploy da aplicação Execução do cliente Prova de Conceito - uma aplicação completa Projeto Diagrama de casos de uso Diagrama de seqüência Arquivos de configuração Módulo EJB Criação dos entity beans Entidade Entidades para chaves primárias Criação dos session beans Persistência Interfaces Completando a aplicação EJB Acesso aos EJB num cliente desktop Listagem Inclusão Pesquisa Atualização Exclusão Criação de usuários Acesso ao EJB numa aplicação web Documentação Conclusão...87 Referências...89 Apêndice A - Script para criação das tabelas no banco de dados...91 Apêndice B - Módulo EJB...93 Apêndice C - Módulo cliente desktop Apêndice D - Módulo aplicativo web...119
5 LISTA DE FIGURAS Figura 1: O aparelho Star 7 [JAVA NET]...9 Figura 2: Versões de Duke - o mascote Java [JAVA NET]...10 Figura 3: Esquema básico de programação, compilação e execução de um programa...15 Figura 4: Edições do Java e suas máquinas virtuais...16 Figura 5: Diagrama das camadas do Java EE...18 Figura 6: Tipos de container do Java EE 5 [BALL 2006]...21 Figura 7: Inicialização do SJSAS a partir do NetBeans...32 Figura 8: Mensagem de inicialização do Java DB...33 Figura 9: Mensagem de inicialização do SJSAS...33 Figura 10: Mensagem indicando que o SJSAS foi iniciado...33 Figura 11: Tela principal do ASADMIN...34 Figura 12: Menu para iniciar e parar o Java DB...35 Figura 13: Mensagem de início do Java DB...35 Figura 14: Configurações do banco de dados Maxigroupware...35 Figura 15: Nova conexão criada...36 Figura 16: Componentes disponíveis na conexão com o banco de dados...36 Figura 17: Mensagens de criação das tabelas...37 Figura 18: Step 1 of 2 - Criação do pool de conexões...41 Figura 19: Step 2 of 2 - Propriedades do pool de conexões...41 Figura 20: Novo pool criado...42 Figura 21: Criação de um recurso JDBC...42 Figura 22: Recurso JDBC criado...43 Figura 23: Alteração da porta padrão do container web...45 Figura 24: Acesso de um bean por um cliente remoto...48 Figura 25: Criação de uma aplicação Enterprise no NetBeans...56 Figura 26: Módulos criados pelo assistente Enterprise Application...57 Figura 27: Criação de um session bean no NetBeans...57 Figura 28: Programas criados pelo assistente de session beans...58 Figura 29: Atualização das interfaces...58 Figura 30: Criação de uma classe Java simples...59 Figura 31: Criação de uma nova classe Java...59 Figura 32: Nova classe criada...60 Figura 33: Diagrama de casos de uso...63 Figura 34: Diagrama de seqüência...63 Figura 35: Arquivos de configuração da aplicação enterprise...64 Figura 36: Criação de entidades a partir do banco de dados...65 Figura 37: Escolha do datasource e das tabelas para criação das entidades...66 Figura 38: Nomenclatura e empacotamento das entidades...67 Figura 39: Criação da persistence unit...67 Figura 40: Entidade criadas no projeto...68 Figura 41: Entidades criadas no projeto...69 Figura 42: Criação de session beans...72 Figura 43: Assistente para criação de session beans...73 Figura 44: Empacotamento e escolha das interfaces a serem criadas...73 Figura 45: Session bean e interface criados...74 Figura 46: Regras de navegação da aplicação web...81 Figura 47: Acesso à ferramenta AutoComment...84 Figura 48: Ferramenta AutoComment...84 Figura 49: Geração da documentação...85 Figura 50: Mensagem de sucesso ao gerar a documentação...85 Figura 51: Página inicial da documentação...86
6 LISTA DE SIGLAS API Application Programming Interface CRUD Create, Recover, Update, Delete CVS Concurrent Version System DBCP Database Connection Pool EAR Enterprise Archive EJB Enterprise Java Beans GCS Gerência de Configuração de Software GPL General Public License GUI Graphic User Interface HTML Hyper Text Meta Language IDE Integrated Development Environment J2EE Java 2 Enterprise Edition J2ME Java 2 Micro Edition J2SE Java 2 Standard Edition JAR Java Archive Java EE 5 Java Enterprise Edition 5 JCE Java Cryptography Extension JDBC Java Database Connectivity JDK Java Development Kit JFC Java Foundation Classes JMS Java Message Service JNDI Java Naming and Directory JPA Java Persistence API JSF Java Server Faces JSP Anúncio da tecnologia Java Server Pages JVM Java Virtual Machine JWS Java Web Start LCD Liquid Crystal Display MVC Model-View-Controller PCMCIA Personal Computer Memory Card International Association PDA Personal Digital Assistant SJSAS Sun Java System Application Server UML Unified Modeling Language WAR Web Archive WSDP Java Web Services Developer Pack
7 RESUMO O desenvolvimento de aplicações corporativas utilizando a versão enterprise do Java sempre foi considerada de grande complexidade, entre outros motivos pela grande quantidade e pela extensão de seus arquivos de configuração. Uma vez que a especificação Java deixa em aberto a possibilidade de cada fornecedor implementar suas próprias características aos servidores de aplicação, os arquivos de configuração acabam por não seguir um padrão. A versão enterprise do Java, chamada de Java EE 5, tem por objetivo simplificar o desenvolvimento de aplicações e abstrair os desenvolvedores da complexa configuração dos servidores. O objetivo deste trabalho é demonstrar a utilização da tecnologia Java EE 5 para o desenvolvimento de aplicações corporativas. O documento inclui demonstrações de uso dos principais tópicos relacionados à tecnologia, como persistência de dados, EJB, aplicações cliente desktop e web, bem como a utilização de servidores de aplicação Java. Com isto, espera-se desmitificar a idéia de que o desenvolvimento em Java EE 5 é uma tarefa árdua mesmo para desenvolvedores experientes. Palavras-chave: Java, EJB, enterprise, persistência de dados, servidor de aplicações.
8 8 1 INTRODUÇÃO O Java é considerado como um dos maiores fenômenos da informática em todos os tempos, pela velocidade com que novos recursos são criados e disponibilizados para a comunidade de desenvolvedores e usuários. Nascida inicialmente como uma linguagem de programação para atender a um nicho de mercado, o Java hoje é utilizado em aplicativos de todos os tipos, e também embarcado em milhares de aparelhos ao redor do mundo. É possível encontrá-lo em pequenos aplicativos ou utilitários, complexos sistemas corporativos, ou em processadores de computadores de bordo de automóveis, por causa de sua fantástica flexibilidade. Esta flexibilidade peculiar à linguagem fez com que ela se desenvolvesse muito rapidamente, gerando outras tecnologias dela dependentes, como por exemplo os servidores de aplicação. Se por um lado esta gama de tecnologias ajudou a resolver problemas dos mais diversos, por outro lado criou duas dificuldades aos profissionais de informática: a escolha da melhor tecnologia a ser adotada, e no caso de escolher mais de uma, como integrá-las da maneira mais eficaz. As questões inerentes à integração destes componentes não são fáceis de responder. Muitas empresas, pelos mais diversos motivos, optam por utilizar apenas uma tecnologia para desenvolver toda sua aplicação. Mas nem sempre isto é possível num cenário onde se desenvolvem aplicações que precisam ser executas em ambientes distintos, como web, estações de trabalho e dispositivos móveis. Tem-se então o problema da interoperabilidade. Apesar da padronização Java ser muito rígida, e de tecnologias específicas para um ambiente (como o desktop, também chamado de estação de trabalho) serem capazes de se comunicar com outras (como a internet), nem sempre a comunicação é simples. O objetivo deste trabalho é demonstrar como estas tecnologias podem ser integradas, fornecendo maneiras de criar um ambiente robusto, ágil e seguro para a disponibilização de aplicações corporativas.
9 9 2 O JAVA 2.1 UMA BREVE HISTÓRIA DO JAVA O ano era O local, um pequeno escritório localizado na rua Sand Hill Road, em Menlo Park. Lá, um grupo de treze pessoas liderado por James Gosling, Patrick Naughton e Mike Sheridan isolou-se da Sun Microsystems e trabalhou arduamente num projeto secreto conhecido apenas pelo codinome Green Project [JAVA]. O grupo, conhecido por Green Team, tinha a função de antecipar e planejar o que estava por vir na área da computação. Eles acreditavam que um ponto importante nesta evolução seria a convergência entre computadores e dispositivos pessoais comuns (como geladeiras, por exemplo). O resultado apareceu dezoito meses depois, na forma de um controlador de dispositivos (uma espécie de controle remoto), através do qual um usuário poderia controlar sua geladeira, sua torradeira, sua TV a cabo, e quaisquer dispositivos prontos para a tecnologia. Conforme ilustra a Figura 1, o aparelho desenvolvido, conhecido como *7 (Star 7), era uma handheld wireless, utilizando um processador SPARC, com tela Liquid Crystal Display (LCD) colorida de 5 polegadas touchscreen, rede de 900 MHz, Personal Computer Memory Card International Association (PCMCIA), codecs de áudio e vídeo. O aparelho tinha um novo gerenciamento de energia e, para controlar tudo isso, uma versão do UNIX era executada em menos de 1 MB de RAM inclusive os drivers [JAVA NET]. Figura 1: O aparelho Star 7 [JAVA NET]
10 10 Segundo os responsáveis pelo projeto, o Star 7 também possuía...a new small, safe, secure, distributed, robust, interpreted, garbage collected, multi-threaded, architecture neutral, high performance, dynamic programming language... [JAVA NET] Ou, numa tradução livre:...uma linguagem de programação pequena, segura, distribuída, robusta, interpretada, com memória auto-gerenciada, multi-threaded, de arquitetura neutra, de alto desempenho e dinâmica... Esta linguagem foi batizada de Oak (carvalho, em inglês) - uma árvore que James Gosling podia ver de sua janela, enquanto trabalhava. Um segundo produto nasceu daquela equipe: um cartoon, criado e desenhado por Joe Palrang, chamado Duke (ver Figura 2). Duke era o assistente utilizado para o Star 7, e sua função era ensinar o usuário a utilizar os recursos do equipamento. Com o fim do produto e o tempo passando, acabou se transformando no mundialmente mascote Java [JAVA NET]. Figura 2: Versões de Duke - o mascote Java [JAVA NET] O Star 7 carecia de um nicho de mercado onde poderia ser inserido. Inicialmente, a equipe pensou que uma boa idéia seria controlar vídeo sob demanda através da TV a cabo e para isso, chegou a construir um protótipo. O grande problema era que a indústria de TV a cabo não tinha como oferecer o que o Star 7 podia controlar. Nem mesmo infraestrutura existia e seria caríssimo para que apenas um grupo de empresas a construísse. Ironicamente, o vídeo sob demanda e o controle da televisão digital é hoje uma realidade no mundo, e tanto a Oak como o Star 7 estavam fadados ao desaparecimento. Entretanto, um fato viria a mudar este aparente fracasso para uma das mais estrondosas vitórias do mundo da informática: a internet. A rápida evolução da internet fez com que uma imensa infraestrutura de telecomunicações e transmissão de dados fosse disponibilizada, calcada inicialmente na malha de cabos e fios das empresas de telecomunicações. A infraestrutura que declarou o fim do Star 7, repentinamente fora criada.
11 11 James Gosling, foi novamente incumbido de um projeto, dessa vez de preparar a Oak para a internet. Em 1995, ele conclui seu trabalho, lançando uma nova versão do Oak, rebatizada de Java [WIRED]. Java foi inteiramente desenvolvida para atuar em ambientes heterogêneos, como o da internet. Assim, Java poderia ser executado diretamente nos browsers (navegadores de internet), na forma de applets 1. Os browsers, que antes eram limitados a um conteúdo estático, podiam agora exibir também conteúdo dinâmico. Isso fez com que o Java crescesse como nenhuma outra linguagem de programação cresceu na história da informática, rapidamente sendo alçado à categoria de plataforma [WIKIPEDIA 01]. Dez anos depois, não só a linguagem, mas toda a plataforma evoluiu muito, e alguns números bem interessantes podem mostrar este crescimento [JAVA 01]: 4 milhões de desenvolvedores ao redor do mundo; mais de 700 milhões de computadores; mais de 700 milhões de celulares e outros dispositivos; mais de 1 bilhão de smart cards; impressoras, web cams, jogos, sistemas de navegação de automóveis e muitos outros. Hoje, o Java pode ser encontrado na internet, em computadores, laptops e telefones celulares, e em equipamentos onde as pessoas nem imaginam, como geladeiras, fornos de microondas e cartões de crédito. A linha do tempo da Tabela 1 demonstra sua evolução. Ano Fato 1991 Lançamento do Green Project 1992 Lançamento da linguagem Oak, do Star7 e do Duke 1994 Lançamento do WebRunner, o primeiro navegador a suportar conteúdo dinâmico 1995 Nascimento do Java. Pai: James Gosling. Mãe: Sun Microsystems; Anúncio oficial na SunWorld Lançamento do Java Development Kit (JDK) 1.0; Primeira JavaOne (conferência de desenvolvedores); JavaBeans, Servlets e outras tecnologias anunciadas; Application Programming Interface (API) Java Card anunciada. 1 Um applet é um programa escrito em Java, embutido numa página web (dinâmica ou estática), que é executado na JVM da estação cliente.
12 12 Ano Fato 1997 Lançamento do JDK 1.1; Lançamento do Java Servlet Developers Kit; Anúncio da tecnologia Enterprise Java Beans (EJB); Inclusão da tecnologia Java Foundation Classes (JFC) na plataforma Java Anúncio das JFC/"Project Swing"; Visa lança o primeiro smart card com tecnologia Java Card; Lançamento do Java 2 para Linux; Lançamento da plataforma Java Liberação do código fonte da plataforma Java 2; Anúncio da tecnologia Java Server Pages (JSP); Divisão oficial da plataforma Java 3 edições: Java 2 Standard Edition (J2SE), Java 2 Enterprise Edition (J2EE), Java 2 Micro Edition (J2ME); Liberação da plataforma J2EE; Liberação da plataforma J2SE para Linux Liberação da plataforma J2SE 1.3; Liberação da plataforma J2SE 1.3 para Apple Mac OS X Liberação da Java Web Start Lançamento do JDK 1.4; Lançamento do Java Web Services Developer Pack (WSDP); Lançamento da J2EE 1.4 Beta Lançamento do Java Java 10º aniversário; Aproximadamente 4,5 milhões de desenvolvedores utilizam Java Lançamento do Java Enterprise Edition 5 (Java EE 5), nova versão do J2EE Tabela 1: Evolução da plataforma Java. [JAVA 02] 2.2 NOMENCLATURA E VERSIONAMENTO DO JAVA Como é possível notar na Tabela 1, com o lançamento da versão 5 do Java, houve uma grande mudança em sua nomenclatura, e a compreensão destes nomes e acrônimos torna-se necessária para o completo entendimento da estrutura do Java.
13 13 As edições do Java (discutidas na seção 2.3.2) foram lançadas em 1999, pouco tempo depois do lançamento do Java 2. O próprio nome Java 2 na realidade não se refere à versão 2 do Java, e sim à versão 1.2. Esta estranha alteração de nome foi feita como uma jogada de marketing, para mostrar que a linguagem havia sido radicalmente alterada, da sintaxe de alguns comandos até a estrutura interna da Java Virtual Machine (JVM). Assim, havia o JDK 1.2 e o JRE 1.2 que eram a base do Java 2. Esta diferença entre a versão do software e a versão da linguagem gerava muita confusão. Em 2004, o Java 5 foi lançado, e com ele o novo padrão de nomenclatura, desta vez bem simplificado. A comunidade pôde participar da definição da nomenclatura, e junto com o departamento de marketing da Sun, chegaram à conclusão que o melhor caminho para a simplificação seria simples: tirar o 2 e expandir o acrônimo. Não existe Java 3 e nem o Java 4. A versão passou diretamente da versão 2 para a 5. O motivo é simples: existe um número de versão utilizado internamente pela Sun e existe o nome comercial. A versão utilizada internamente pela Sun atualmente é a 1.5. Para sincronizar a versão interna com a versão comercial, optou-se por retirar a expressão "1." da versão comercial, gerando assim o Java 5. Oficialmente, a partir de junho de 2005, a nova nomenclatura foi adotada, sendo que de imediato, as seguintes alterações foram realizadas: J2SE 6.0 foi chamado de Java SE 6 e J2SE 7.0 será chamado de Java SE 7, quando lançado; J2EE 5.0 foi chamado de Java EE 5; J2ME foi chamado de Java ME, pois não tem um número de versão. Outro ponto importante do versionamento é que versões intermediárias do software não mais serão lançadas, somente serão disponibilizadas versões para correção de erros. Novos recursos e implementações serão sempre lançadas com as versões principais (Java 6, etc). 2.3 CONCEITOS FUNDAMENTAIS DA ESTRUTURA DA PLATAFORMA JAVA Para se entender a plataforma Java, é necessário primeiro conhecer sua estrutura. Por definição, plataforma é um ambiente de hardware ou software no qual um programa é executado [JAVA 03]. Java é uma plataforma apenas de software, sendo executada numa outra plataforma, composta de hardware e software (o sistema operacional, dependente do hardware onde é executado).
14 14 A plataforma Java é composta de duas partes: A JVM, responsável pela execução dos programas; A Java API, conjunto de classes responsáveis por prover os mais diversos recursos, como acessar bancos de dados Java é uma linguagem interpretada O Java segue a filosofia Write Once, Run Everywhere (Escreva uma vez, execute em todos os lugares). Um programa escrito em Java puro pode ser executado em todas as plataformas disponíveis, do desktop ao mainframe. Para que seja executado em todas as plataformas, o programa Java depende da JVM, ou seja, Java é uma linguagem interpretada. O diferencial para as linguagens interpretadas mais conhecidas (como o antigo BASIC), é que a VM não interpreta o programa original. Ao ser compilado, um programa Java gera um código intermediário, que não é um programa fonte, nem um executável. Este código intermediário chamado de byte code é que pode ser interpretado pela VM [JAVA 03]. Como a execução do byte code depende apenas da VM, qualquer sistema operacional que tenha uma VM pode executá-lo sem precisar ser reescrito. Por isto, Java é considerado multi plataforma. O processo pode ser melhor compreendido através da Figura 3.
15 15 Figura 3: Esquema básico de programação, compilação e execução de um programa O fato de ser interpretado, fez com que o Java fosse conhecido como uma linguagem lenta, de baixo desempenho. Atualmente, os avanços da informática e o empenho dos especialistas da Sun em otimizar este componente conseguiram tornar o Java quase tão rápido quanto o C++, embora essa afirmação seja fonte de muitas discussões em listas e fóruns na internet. Existem três tipos de VM: Java Card VM, utilizada em smart cards [JAVA CARD]; KVM, utilizada em dispositivos móveis como celulares e Personal Digital Assistant (PDA) [KVM]; JVM, utilizada em computadores e alguns tipos de dispositivos móveis [JVM]. Cada uma das VMs tem como base uma tecnologia diferenciada, formada por uma ou mais API. Por exemplo: a KVM utiliza a API para dispositivos móveis Edições do Java Uma edição do Java é uma versão da plataforma que contém os recursos necessários para atender um determinado segmento do mercado. Cada edição é formada por dois conjuntos de API. Um deles é chamada de core, sendo o conjunto de bibliotecas que deve ser suportada por todas as implementação compatíveis com a edição. O outro é opcional, sendo fornecido com a edição, e
16 pode ou não ser implementado por uma edição compatível. Opcionalmente, os pacotes adicionais podem se tornar parte do core, se houver demanda do mercado. 16 O objetivo é que as classes que pertencem ao core estejam disponíveis em todos os sistemas operacionais que possam executar o Java. Portanto, se um programa utiliza apenas as classes do core, ele é 100% portável, podendo ser executado em qualquer plataforma. Existem três edições do Java: Java ME: utilizada em dispositivos móveis, normalmente com pequeno poder de processamento, como celulares, PDAs e impressoras, entre outros. Oferece funcionalidades que vão desde criar interfaces simples até protocolos complexos de rede, passando por um robusto modelo de segurança [JAVA ME]; Java SE: utilizada para desenvolver e distribuir aplicativos em desktops e servidores. Com ela também é possível desenvolver software embarcado e para ambientes de real-time. Além disso, contém a base para o Java EE [JAVA SE]; Java EE: utilizada para o desenvolvimento de aplicações corporativas, de grande porte, executadas num servidor. É formada pelo Java SE e um conjunto de bibliotecas complementares, e provê serviços como web services, modelos de componentes, API para gerenciamento e mensagens, entre outros recursos. É a edição utilizada para o desenvolvimento deste trabalho [JAVA EE]. A Figura 4 demonstra as edições do Java, e a JVM utilizada por cada uma delas. Figura 4: Edições do Java e suas máquinas virtuais
17 17 3 VISÃO GERAL DO JAVA EE O Java EE é a edição mais abrangente do Java, pois engloba todas as tecnologias para desenvolvimento em ambientes de servidor e desktop. No desenvolvimento deste trabalho, é utilizado o Java EE 5, nova versão da plataforma corporativa do Java. O grande objetivo dessa versão é simplificar o desenvolvimento de aplicações corporativas, sem entretanto alterar os recursos disponíveis na versão 1.4. As principais alterações do Java EE 5 em relação a sua versão anterior são [JAVA EE]: Uso de annotations (anotações), que insere grande parte das configurações da aplicação dentro do próprio código; A versão 3.0 do EJB foi bastante simplificada; Java Server Faces (JSF), um poderoso framework que possibilita o uso de componentes similares aos de Graphic User Interface (GUI) em aplicações web; Tecnologia de web services simplificada; Java Persistence API, uma camada de persistência objeto-relacional que pode ser utilizada também fora do contexto Java EE MODELO DE DESENVOLVIMENTO DO JAVA EE O Java EE utiliza um modelo de múltiplas camadas para aplicações corporativas. Uma aplicação é dividida em componentes de acordo com sua função, e os componentes podem ser instalados em vários servidores, de acordo com a camada: Componentes da camada cliente são executados na estação cliente; Componentes da camada web são executados no servidor Java EE; Componentes da camada de negócios são executados no servidor Java EE; Componentes da camada de sistemas de informação (normalmente um banco de dados) são executados num servidor próprio. A Figura 5 mostra um diagrama das camadas do Java [BALL 2006].
18 18 Figura 5: Diagrama das camadas do Java EE 3.2 COMPONENTES JAVA EE Aplicações Java EE são formadas por componentes. Componentes são unidades de software funcionais e independentes, cujas classes e arquivos se comunicam com outros componentes. A especificação Java define três componentes [BALL 2006]: Clientes Java EE; Java Servlets e JSP, que são componentes web da aplicação; Enterprise Java Beans, que são componentes de negócios. Cada um destes componentes pode acessar qualquer tecnologia Java disponível no servidor Java EE (ou em um container, se for o caso). Uma descrição dos três componentes é apresentada a seguir Clientes Java EE tipos: Os clientes Java EE são executados na estação de trabalho, e são divididos em dois
19 19 Aplicações desktop, que podem ter uma GUI ou uma interface por linha de comando. Podem interagir com os componentes de negócio, acessando-os direta ou indiretamente (por meio de conexões HTTP); Um conjunto de navegador web e applet Componentes web Os componentes web são executados no servidor (que pode ser um servidor Java EE ou simplesmente um container JSP). Há dois tipos de componentes web: Java Servlets: classes que recebem uma requisição e a processam dinamicamente, gerando conteúdo HTML como saída; JSP: documentos texto plano, que são executados no servidor Componentes de negócios Os componentes de negócio são executados no servidor Java EE, e contêm as regras de negócio da aplicação. Entre outras funções, acessam bancos de dados, processam dados e os reenviam, para os clientes ou para o próprio banco de dados. São os Enterprise Java Beans Outros componentes Existe ainda um outro tipo de componente, chamado Java Bean, que não é considerado um componente Java EE. Normalmente eles são utilizados para controlar o fluxo de dados entre uma aplicação cliente e os componentes no servidor. Java Beans possuem propriedades e métodos get e set para acessá-los. Utilizados desta maneira, são fáceis de implementar, mas devem seguir a especificação Java quanto à nomenclatura utilizada. 3.3 CONTAINERS JAVA EE Cada tecnologia disponível no servidor Java EE deve ser executada em um container. Um container é um pequeno servidor dentro do servidor Java EE, especializado em um determinado serviço. Por extensão, um servidor Java EE pode ser considerado um conjunto de containeres. O mais famoso exemplo de container é o Tomcat, muitas vezes chamado de servidor JSP [TOMCAT]. Na realidade, ele é um container responsável pela execução de Servlets e JSP. Ficou tão conhecido como servidor por ser um bom substituto aos tradicionais servidores Java EE,
20 20 complexos de administrar e grandes consumidores de recursos de hardware. Ele tornou-se o padrão de fato em containeres JSP, sendo utilizado atualmente por grande parte dos servidores Java EE do mercado. Quando uma aplicação é desenvolvida, seus módulos devem ser empacotados e distribuídos para seus respectivos containeres. Empacotamento é o processo pelo qual todos os programas, bibliotecas e arquivos de configuração são colocados num único arquivo compactado chamado package [BALL 2006]. Uma das funções do servidor Java EE é receber o pacote e distribuir cada módulo para seu respectivo container. Uma vez que o container é dependente do servidor Java EE e não da aplicação, um componente pode se comportar de maneiras diferentes, de acordo com a configuração do container. Um exemplo: um EJB distribuído para um servidor Java EE de testes e também para um de produção. Com os servidores configurados para acessar bancos de dados diferentes, o EJB acessaria diferentes informações, sem que precisasse ser alterado. Os tipos de container do Java EE são (ver Figura 6): Container EJB: executa os EJB. O container, por sua vez, é executado dentro do servidor Java EE; Container web: executa JSP e servlets. É executado dentro do servidor Java EE; Container da aplicação cliente: é executado na estação cliente, e é responsável pela execução de aplicações desktop; Container applet: executa os applets carregados em navegadores web, na estação cliente. Normalmente, é formado pelo navegador e um plugin Java.
21 Figura 6: Tipos de container do Java EE 5 [BALL 2006] 21
22 22 4 TECNOLOGIAS EMPREGADAS O que é mostrado a partir deste ponto é uma prova de tecnologia utilizando os principais recursos da plataforma Java EE de maneira integrada. O foco não é a linguagem de programação em si, embora em alguns momentos a discussão de alguns pontos seja necessária. O objetivo principal é demonstrar como realizar a integração entre componentes distribuídos por plataformas tão diferentes, como o desktop e um container EJB. A seguir, são discutidos todas as tecnologias e software necessários à aplicação, e os motivos pelos quais são utilizados neste trabalho. 4.1 AMBIENTE DE DESENVOLVIMENTO INTEGRADO Todo desenvolvedor tem preferência por algum Integrated Development Environment (IDE), seja porque consome menos memória, possui mais recursos, ou porque geram automaticamente quase a totalidade do código. Também existem desenvolvedores que não utilizam IDEs, preferindo editores mais simples, que normalmente não geram código automaticamente. IDE é um aplicativo que agrega várias ferramentas com o único objetivo de desenvolver software. A maioria dos IDE possui ferramentas que permitem: Editar o código fonte e formatá-lo dentro de padrões próprios ou definidos pelo usuário; Automatizar tarefas repetitivas, como gerar os pacotes de distribuição da aplicação; Compilar, executar, testar e depurar o código; Navegar pela estrutura do projeto; Verificar erros de digitação e possíveis erros de compilação, propondo soluções alternativas; Integrar-se com ferramentas externas, como versionadores, servidores de aplicação e utilitários de construção e distribuição; Refactoring (propagação das alterações efetuadas em um componente para todas as suas ocorrências no projeto por exemplo, renomear uma classe); Auditoria e otimização do código, para garantir a aderência a padrões e convenções de mercado;