Aplicações distribuídas em Java Parte II: Componentes EJB



Documentos relacionados
J530 - Enterprise JavaBeans. Introdução a EJB e Stateless. Session Beans. argonavis.com.br. Helder da Rocha (helder@acm.org)

Java 2 Enterprise Edition RMI-IIOP e Enterprise JavaBeans

Java 2 Enterprise Edition. Plataforma J2EE: fundamentos e introdução prática. Helder da Rocha

Java 2 Enterprise Edition Plataforma J2EE: fundamentos e introdução prática

Introdução a J2EE e servidores de aplicação EJB

J2EE. J2EE - Surgimento

Stateful Session Beans

JAVA PARA WEB E EJB APLICAÇÕES WEB, SERVIDORES DE APLICAÇÃO, CONTAINERS WEB

Objetos e Componentes Distribuídos: EJB e CORBA

Objetos e Componentes Distribuídos: EJB

Aplicações Web com Servlets e JSP

Aplicações Distribuídas Cliente/ Servidor Corporativas

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes

Java para Web & EJB. Teoria, prática e questões Módulo Introdução e Servlets

Enterprise Java Bean. Enterprise JavaBeans

Tutorial J2EE. Aprendendo EJB de uma maneira fácil! Paulo Silveira

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Modelo de Componentes CORBA

Arquitetura de Aplicações J2EE. Jorge Fernandes Outubro de 2003

EJB. Session Beans. J2EE (C. Geyer) Introdução a SessionBean 1

Java 2 Enterprise Edition Uma aplicação J2EE completa

Programação orientada a objetos

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Sumário. Java 2 Enterprise Edition. J2EE (Java 2 Enterprise Edition)

Enterprise JavaBeans. Java Deployment Course. por Jorge H. C. Fernandes DI-UFPE Julho de 1999

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Laboratório EJB e J2EE Uma aplicação completa

UFG - Instituto de Informática

DESENVOLVIMENTO DE SISTEMAS WEB. Lista de Exercícios AV1-01. Luiz Leão

TDC2012. EJB simples e descomplicado, na prática. Slide 1

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

O caminho do inferno está pavimentado de boas intenções. Marx.

J2EE TM Java 2 Plataform, Enterprise Edition

Visões Arquiteturais. Visões Arquiteturais

Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Introdução ao Desenvolvimento de

Prof. Me. Sérgio Carlos Portari Júnior

Java RMI Remote Method Invocation

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Reuso de Software Aula Maio 2012

Java 2 Enterprise Edition Fundamentos básicos de Transações

Desenvolvimento Web TCC Turma A-1

Java RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Java Message Service (JMS)

ALUNO: RONI FABIO BANASZEWSKI

REVISÃO DE CONCEITOS DE ORIENTAÇÃO A OBJETOS

RPC e RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Enterprise Java Beans

Instalação JDK. Joyce França. Professora de Ciência da Computação - IFNMG

TUTORIAL INTEGRAÇÃO SPRING, HIBERNATE E MYSQL

Protótipo de uma ferramenta de apoio para desenvolvimento de sistemas web para WebIntegrator

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

Web Technologies. Tópicos da apresentação

Instalação JDK 10/03/2017

Informática Parte 12 Prof. Márcio Hunecke

Tutorial 1 Configuração Apache Tomcat no NetBeans 8.0 (passo a passo)

SISTEMA DE INFORMAÇÃO GEOGRÁFICA APLICADA À GESTÃO PÚBLICA

Sistemas Distribuídos

INTRODUÇÃO À TECNOLOGIA SERVLETS

Fundamentos da Plataforma Java EE. Prof. Fellipe Aleixo

Message Driven Beans. Apresentação. Introdução Implementação de MDBs Deployment no JBoss Java Messaging Service Exemplo

Autenticação e Controle de Acesso

Transcrição:

Aplicações distribuídas em Java Parte II: Componentes EJB 51 Objetivos Explorar tecnologias usadas para implementar componentes de negócio para servidores de aplicação em Java Introdução a Enterprise JavaBeans (implementação de CORBA Component Model) Conceitos básicos Implementação de serviços distribuído via RMI- IIOP (Modelo RPC): Session Bean Visão geral das outras funcionalidades 2 2003 Helder L. S. da Rocha 5-1

Servidores de aplicação Servidores de aplicação OO, também chamados de Component Transaction Monitors [2], oferecem ambientes para operação de componentes (rodando em containers) e diversos serviços de middleware Servidores de aplicação que suportam EJB oferecem vários serviços de middleware implícito*, entre eles Controle de transações Autenticação e autorização Gerenciamento de recursos Persistência Nos servidores EJB esses serviços são configurados através de arquivos XML (que podem ser gerados por aplicações) Os serviços também podem ser usados de forma explícita * Cuja configuração não requer o uso de programação 3 Java 2 Enterprise Edition J2EE é Uma especificação para servidores de aplicação que define padrão de suporte a componentes e serviços Um pacote de APIs e ferramentas para desenvolver componentes que rodam nesses servidores É objetivo da plataforma J2EE reduzir o custo e a complexidade de desenvolver serviços multi-camada Servidores de aplicação compatíveis com a especificação J2EE oferecem Suporte à arquitetura de componentes EJB Suporte a serviços Web, servlets e JSP Suporte a serviços de middleware explícito e implícito 4 2003 Helder L. S. da Rocha 5-2

"Arquitetura de componentes"? É um contrato entre o fornecedor e o usuário Permitem que os fornecedores construam componentes compatíveis com uma classe de servidores: reuso! Permite que os usuários substituam componentes existentes por outros similares: flexibilidade! Servidores de aplicações são usuários de componentes Cada servidor utiliza componentes que obedecem à determinada arquitetura de componentes Plug & Play Um componente pode ser "plugado" no servidor de aplicações e passar a funcionar imediatamente. Analogia Se CD-Player é servidor de aplicações, o CD é componente 5 Containers J2EE Um container é a interface entre o componente e as funções de baixo nível da plataforma onde roda É uma espécie de Sistema Operacional para objetos Antes que um componente EJB ou Web possa ser executado em um container J2EE ele precisa ser implantado (deployed) no container O container é responsável por chamar os métodos (callback) que controlam o ciclo de vida dos componentes O container também é quem serve de interface para que o componente utilize serviços de middleware implícito declarados nos seus arquivos de configuração A plataforma J2EE define três tipos de containers Container EJB Container Web Container Cliente 6 2003 Helder L. S. da Rocha 5-3

Arquitetura em Camadas Camada do Cliente Aplicação CORBA Aplicação Java Cliente de Web Service Browser Páginas HTML e applets Servidor J2EE Camada Web Camada de Negócios Camada de dados (EIS) 7 Componentes da camada Web Servlets Classes pré-compiladas que processam requisições HTTP e devolvem respostas HTTP de qualquer tipo Ideais para a geração de conteúdo dinâmico que não é enviado para o browser como texto (imagens, vídeos, arquivos ZIP, Flash, etc.) Usados como controladores em aplicações JSP JavaServer Pages (JSP) Páginas de texto contendo Java embutido que operam como servlets Compiladas após a instalação ou durante a execução Ideais para gerar páginas de texto, HTML e XML (porta de comunicação para Web Services) 8 2003 Helder L. S. da Rocha 5-4

Componentes da camada de negócio Enterprise JavaBeans (EJB) Formam o núcleo de uma aplicação distribuída Recebem e processam dados de clientes e enviam (transparentemente) à camada de armazenamento Recuperam dados da camada de dados, processam e enviam para clientes Enterprise JavaBeans são objetos CORBA* Acessíveis via IIOP*, podem ser chamados por clientes CORBA (mesmo clientes escritos em outras linguagens) EJBs sempre são escritos em Java São desenvolvidos usando RMI sobre IIOP: modelo de programação Java que gera objetos CORBA * Indiretamente, e se acessíveis via interface remota. Um EJB não precisa ter interface remota. 9 Três tipos de enterprise beans Session Beans Modelam processos de negócio. São ações, verbos. Fazem coisas: acessam um banco, fazem contas, Podem manter ou não estado não-persistente Processar informação, comprar produto, validar cartão Entity Beans Modelam dados de negócio. São coisas, substantivos. Representam informações em bancos de dados Mantêm estado persistente Um produto, um empregado, um pedido Message-driven beans Modelam processos assíncronos. Respondem a eventos. Agem somente quando recebem uma mensagem Não mantêm estado 10 2003 Helder L. S. da Rocha 5-5

Por que Enterprise JavaBeans? (1) Sistemas de objetos distribuídos têm em comum uma arquitetura que consiste de Cliente O objeto remoto Um stub que representa o objeto remoto no cliente Um esqueleto, que representa Interface Remota o cliente no servidor Stub O cliente conversa com o stub pensando tratar-se do próprio objeto Rede Interface Remota Objeto Remoto Esqueleto O esqueleto conversa com o objeto remoto que pensa que é o cliente quem fala com ele O stub e o objeto remoto implementam a mesma interface! Fonte da ilustração: [4] Ed Roman, Mastering EJB 2 11 Por que EJB? (2) Desenvolver um sistema distribuído não é simples. Exige se concentrar em aspectos da aplicação que nada tem a ver com o problema de negócio a ser solucionado Exige a observação de condições que geralmente são menos importantes ou dispensáveis em aplicações locais É preciso se preocupar com A performance, que pode sofrer abalos em rede Os custos de uma possível ampliação da capacidade A segurança dos dados, controle de acesso, permissões Transações: tarefas poderão falhar no meio do caminho Integridade dos dados: clientes irão acessá-los simultaneamente O que acontecerá se parte do sistema sair do ar? Mas esses são problemas de qualquer sistema distribuído Será que precisamos implementar tudo isto? Não! Use middleware! 12 2003 Helder L. S. da Rocha 5-6

Tipos de middleware Temos uma aplicação com vários objetos distribuídos e um servidor que oferece serviços de middleware. E agora? Como acessar os serviços? Serviços podem ser acessados através de uma API Sua aplicação precisará escrever o código para usar a API, por exemplo, JDBC para controlar acesso a bancos de dados, ou JTA para controlar transações, ou APIs de segurança: middleware explícito Serviços podem ser configurados através de interfaces ou arquivos de configuração externos ao código Sua aplicação não precisa conter código algum de acesso a recursos externos. Você declara os serviços que precisa externamente: middleware implícito 13 Middleware explícito Tem que ser implementado em cada método de cada objeto que deseja utilizar o serviço Cliente Stub Serviços CORBA Interface Remota Interface Remota Objeto Distribuído Esqueleto API de Transações API de Segurança API de Banco de Dados Transaction Service Security Service Database Service Rede Esta é a única linha de lógica de negócio public void transferir(conta um, Conta dois, double valor) { // chama API para verificar segurança da requisição // chama API para iniciar a transação // chama API para carregar dados do banco // Subtraia o valor do saldo da conta um e some na conta dois // chama API para guardar dados no banco // chama API para fechar a transação } Fonte da ilustração: [4] 14 2003 Helder L. S. da Rocha 5-7

Middleware implícito Escreva seu objeto para conter apenas lógica de negócio Declare os serviços de middleware que seu objeto precisa em um arquvo separado Rode uma ferramenta que pega o descritor e gera um objeto interceptador de requisições Cliente Stub Interface similar à Remota EJBObject Interface Remota Interface Remota Rede Objeto Distribuído Interceptador de Requisições Esqueleto API de Transações API de Segurança API de Banco de Dados Transaction Service Security Service Database Service public void transferir(conta um, Conta dois, double valor) { // Subtraia o valor do saldo da conta um e some na conta dois } Fonte da ilustração: [4] 15 O que é um Enterprise JavaBean? Um Enteprise JavaBean (EJB) é um componente que pode ser implantado em um servidor de aplicações e utilizar seus serviços de forma declarativa ou não O servidor oferece o container que executa o bean O container gera os interceptadores que isolam o bean dos seus clientes locais ou remotos O deployer (instalador da aplicação) pode configurar os serviços que desejar e o código para chamá-los será gerado nos interceptadores durante a implantação Um enterprise bean é um objeto distribuído, mas não é um objeto remoto Seu interceptador pode ser um. Se for, usa RMI-IIOP. 16 2003 Helder L. S. da Rocha 5-8

Arquitetura de um EJB EJB é objeto que realiza serviço desejado. Não é um objeto remoto RMI Desconhece detalhes de serviços ou rede Interceptadores implementam o código de serviços Ninguém acessa o EJB diretamente Chamadas são delegadas ao EJB pelos interceptadores Acesso via RMI-IIOP ObjetoRemoto operacao() ObjetoLocal operacao() Acesso local Cliente Remoto EJB imprimir() Cliente Local 17 Componentes de um EJB Um EJB é um componente padrão. Deve ser construido de acordo com certas regras rígidas para que possa rodar em um container padrão O componente não é formado por uma única classe. O contrato requer que sejam fornecidos Interfaces públicas (uma para cada tipo de interceptador), por exemplo, uma interface local e/ou uma remota Uma classe contendo a implementação do bean. Ela deve implementar sub-interface de javax.ejb.enterprisebean e ter os mesmos métodos que as interfaces públicas Interface padrão com métodos para construir o bean Um arquivo XML padrão para configurar serviços 18 2003 Helder L. S. da Rocha 5-9

Interfaces padrão do EJB Todo bean implementa a javax.ejb.enterprisebean package javax.ejb; public interface EnterpriseBean { } Na verdade, todo bean implementa uma interface derivada de EnterpriseBean SessionBean extends EnterpriseBean EntityBean extends EnterpriseBean MessageDrivenBean extends EnterpriseBean Cada interface tem métodos próprios que precisam ser implementados em cada bean Além deles, a especificação pode exigir outros 19 Interface do Componente Component interface. Há dois tipos Remote component interface Local component interface Para criar uma interface de componente, é preciso estender interfaces EJBObject ou EJBLocalObject O container criará automaticamente interceptadores locais ou remotos contendo todos os métodos declarados Um bean só precisa de um tipo de interceptador (ou Local ou Remoto) mas pode ter ambos, se necessário Interceptador EJBObject é objeto remoto RMI-IIOP É gerado pelo container e delega chamadas ao bean Interface javax.ejb.ejbobject estende java.rmi.remote Define métodos de negócio remotos expostos pelo bean 20 2003 Helder L. S. da Rocha 5-10

EJBObject, EJBLocalObject e Enterprise Bean javax.ejb.ejbobject examples.hello String hello() String byebye() javax.ejb.ejblocalobject examples.hellolocal String byebye() Gerados pelo Container Hello_EJBObject bean:hellobean String byebye() throws RemoteException { // servicos return bean.byebye() // servicos } Hello_EJBLocalObject bean:hellobean String byebye() { // servicos return bean.byebye() // servicos } delegação java.rmi.remote javax.ejb.enterprisebean javax.ejb.sessionbean implements examples.hellobean String hello() String byebye() ejbactivate() ejbremove() ejbpassivate() ejbcreate() ejbsetsessioncontext(...) 21 Uso típico de interfaces locais e remotas Cliente JMS MOM Cliente HTML Cliente WebService Cliente C++ Remote Cliente Swing Servlet JSP Taglib Remote Message-driven Bean Session Bean Session Bean Local Local Local Entity Bean Entity Bean Entity Bean Entity Bean BD 22 2003 Helder L. S. da Rocha 5-11

EJB Home Construtor usado para que clientes possam adquirir referências a objetos EJB Para obter uma referência a um objeto EJB, cliente chama métodos do EJBHome O EJBHome é responsável por operações do ciclo de vida de um objeto EJB (criar, destruir, encontrar) Objetos EJBHome servem para Construir objetos EJB Encontrar objetos EJB existentes (em Entity Beans) Remover objetos EJB São parte do container e gerados automaticamente Implementam interface Home definida pelo programador 23 EJB(Local)Home e EJB(Local)Objects javax.ejb.ejbhome java.rmi.remote javax.ejb.ejblocalhome examples.hellohome Hello create() Gerados pelo Container examples.hellolocalhome Hello create() Hello_EJBHome Hello create() throws RemoteException, CreateException { // servicos return new Hello_EJBObject() } Hello_EJBLocalHome Hello create() throws CreateException { // servicos return new Hello_EJBLocalObject() } pseudo-código! HelloBean Hello_EJBObject String hello() String byebye().. Hello_EJBLocalObject 24 2003 Helder L. S. da Rocha 5-12

Deployment descriptors Para informar ao container sobre suas necessidades de middleware, deve-se usar um deployment descriptor (arquivo de configuração em XML) Informações de gerência e ciclo de vida (quem é o Home, o Remote, se é Session, Entity ou MDB) Requisitos de persistencia para Entity Beans Configuração de transações Segurança (quem pode fazer o que com que beans, que metodos pode usar, etc.) Pode-se usar uma ferramenta (geralmente a ferramenta do próprio container) para gerar o arquivo 25 Deployment descriptor simples: exemplo <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>hello</ejb-name> <home>examples.hellohome</home> <remote>examples.hello</remote> <local-home>examples.hellolocalhome</local-home> <local>examples.hellolocal</local> <ejb-class>examples.hellobean</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <!-- Configuração de serviços --> <!-- Autorização --> <!-- Transações --> </assembly-descriptor> </ejb-jar> ejb-jar.xml 26 2003 Helder L. S. da Rocha 5-13

EJB-JAR Arquivo JAR que contém tudo o que descrevemos Pode ser gerado de qualquer forma ZIP, Ant, ferramentas dos containers IDEs (NetBeans e deploytool) Uma vez feito o EJB-JAR, seu bean está pronto e é unidade implantável em application server Ferramentas dos containers podem decomprimir, ler e extrair informações contidas no EJB-JAR Depois, ferramentas realizam tarefas específicas do fabricante para gerar EJB Objects, EJB Home, importar seu bean no container, etc. Pode-se ter vários beans em um ejb-jar 27 Estrutura de um EJB-JAR O EJB-JAR é um JAR comum. Não possui uma estrutura especial exceto quanto à localização dos deployment descriptors (padrão e do fabricante). Coloque as classes em seus pacotes a partir da raiz Coloque os deployment descriptors no META-INF aplicacao.jar Arquivo dependente de fabricante META-INF jboss.xml ejb-jar.xml com subpacote Teste.class TesteHome.class TesteBean.class 28 2003 Helder L. S. da Rocha 5-14

Exemplo 1: Componente EJB Session Bean simples (tipo "Hello World") que será implantado com interface remota no servidor JBoss Veja se o Ant e JBoss estão instalados (veja referências) Os arquivos estão em exemplos/mejb2/ Para montar a aplicação usamos o Ant* > ant buildjboss que monta o ejb-jar. Depois é só copiar para o diretório server/default/deploy do JBoss. O ant faz isto também > ant jbossdeploy Para rodar a aplicação cliente (e ver se o EJB funciona) use, mais uma vez, o ant: > ant runjbossclient * Veja que é preciso configurar o arquivo build.properties com informações do seu sistema 29 Estrutura da aplicação build.xml build.properties src examples HelloClient.java HelloBean.java Hello.java HelloHome.java lib java.policy jboss jndi.properties etc ejb-jar.xml jboss jboss.xml Buildfile usado pelo ant. Rode o ant neste diretório para que ele o encontre Arquivo que contém propriedades usadas pelo Ant separadas para facilitar a edição Classe executável que se comunica com o bean O Bean Interfaces EJB Política de segurança usada pelo cliente Configurações do servidor de nomes usado pelo cliente Configuração do EJB Classpath usado - Para compilar: $J2EE_HOME/lib/j2ee.jar - Para rodar o cliente: $JBOSS_HOME/client/*.jar Configuração adicional do EJB para o servidor JBoss 30 2003 Helder L. S. da Rocha 5-15

Classes e interfaces java.rmi.remote javax.ejb.ejbobject javax.ejb.enterprisebean javax.ejb.ejbhome examples.hello String hello() String byebye(string nome) javax.ejb.sessionbean examples.hellobean implements String hello() String byebye(string nome) ejbactivate() ejbremove() ejbpassivate() ejbcreate() ejbsetsessioncontext(...) examples.hellohome Hello create() 31 Deployment descriptors <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>hello</ejb-name> <home>examples.hellohome</home> <remote>examples.hello</remote> <local-home>examples.hellolocalhome</local-home> <local>examples.hellolocal</local> <ejb-class>examples.hellobean</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> </session> </enterprise-beans> </ejb-jar> ejb-jar.xml jboss.xml <jboss> <enterprise-beans> <session> <ejb-name>hello</ejb-name> <jndi-name>hello/hellohome</jndi-name> </session> </enterprise-beans> </jboss> 32 2003 Helder L. S. da Rocha 5-16

Configuração do cliente A aplicação cliente é um cliente RMI-IIOP. É preciso que a aplicação cliente saiba onde está o servidor de nomes do JBoss (serviço COS Naming com driver JNDI fornecido pelo JBoss) Se o arquivo jndi.properties estiver no classpath ele será usado pelo cliente. O arquivo contém URL contendo nome do servidor onde roda o serviço de nomes Driver JNDI (nome da classe a ser usada) e pacotes adicionais (é preciso que o JAR onde essas classes estão esteja no CLASSPATH) O CLASSPATH do cliente deve enxergar As interfaces Remote e Home do bean JARs que contém drivers de serviços usados (JNDI, etc.) Possíveis arquivos de configuração 33 Arquitetura (acesso remoto apenas) HelloClient 4. create() Implementada HelloHome por EJBHome 2. JNDI lookup() 3. Devolve stub 7. delega Hello 6. Container devolve stub* Implementada por EJBObject 5. Container cria EJBObject 8. delega HelloHome (EJBHome_Stub) hello/hellohome 1. Container registra stub HelloBean EJB Container * detalhes como comunicação entre stubs e skeletons foram omitidos 34 2003 Helder L. S. da Rocha 5-17

Detalhes Durante o deployment Objeto EJBHome e interceptador EJBObject são gerados Stubs são gerados. Stub da interface Home é mapeado a nome no servidor JNDI Hierarquias dos objetos gerados pelo container* HelloHome create() Hello byebye() HelloHome_Stub create() { // codigo // java.net } EJBObject delega requisições para o Bean Hello_EJBHome create() { return new Hello_EJBObject() } Hello_Stub byebye() { // codigo // java.net } * Apenas para efeito de ilustração. Implementação exata depende, na verdade, do fabricante Hello_EJBObject bean:hellobean byebye() { bean.byebye() } 35 EARs Um arquivo EJB-JAR pode conter diversos beans que possuem relacionamentos entre si EJB-JARs pouco relacionados e módulos Web podem ser combinados em um único JAR para compartilhar recursos e facilitar a distribuição. Esse JAR tem uma extensão.ear e chama-se Enterprise ARchive Solução ideal para distribuir aplicações Web que dependem de EJBs Modulo Web WAR JSP Servlet JavaBean Modulo EJB EJB-JAR Bean Bean Bean Modulo EJB EJB-JAR Bean Bean Bean META-INF application.xml EAR 36 2003 Helder L. S. da Rocha 5-18

application.xml de um Enterprise ARchive <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'> <application> <display-name>converterear</display-name> <module> <ejb>converter-ejb.jar</ejb> </module> JARs conseguem ver classes uns dos outros <module> <java>utils.jar</java> </module> <module> WAR vê classes dos JARs <web> JARs não vêem classes do WAR <web-uri>converter-web.war</web-uri> <context-root>converter</context-root> </web> </module> </application> 37 Exemplo 2: Componente J2EE Enterprise Neste exemplo montaremos componente EAR fazendo com que JSP chame o Session Bean criado no primeiro exemplo. Este exemplo é mostrado na primeira parte do J2EE Tutorial* só que vamos implantar o componente no JBoss Os arquivos estão em exemplos/sun/ Mais uma vez, automatizamos todo o processo no Ant > ant jboss.deploy que compila tudo, monta o EJB-JAR, o WAR, o EAR e joga no diretório deploy do JBoss. Para rodar o cliente > ant run.jboss.client Para rodar o cliente Web, acesse http://localhost:8080/converter * consulte o tutorial para explicações sobre o código-fonte 38 2003 Helder L. S. da Rocha 5-19

Fontes [1] Bill Shannon. J2EE Specification. Sun Microsystems. http://java.sun.com/j2ee/ [2] Richard Monson-Haefel. Enterprise JavaBeans, 3rd. Edition. O'Reilly, 2001. Uma das mais importantes referências sobre EJB [3] Sun Microsystems. Simplified Guide to the J2EE. http://java.sun.com/j2ee/. White paper com introdução a J2EE. [4] Ed Roman et al. Mastering EJB 2, Chaps. 1 to 3 http://www.theserverside.com/books/masteringejb/index.jsp Contém ótima introdução a middleware, motivação e fundamentos de EJB [5] Rossana Lee. The J2EE Tutorial, Sun Microsystems. http://java.sun.com/j2ee/tutorial/. Roteiro principal dos exemplos e exercícios. Veja também recursos extras para este curso disponibilizados na Web 39 Versão 1.0 2003, Helder da Rocha www. 40 2003 Helder L. S. da Rocha 5-20