Tiago Freitas Vinicius Dourado Orientador: Eduardo Manuel de Freitas Jorge Tema: J2EE utilizando EJB
ndice:
1 O que J2EE
2 O que EJB 2.1 O que o EJB possibilita 2.2 Session BEAN
3 JBOSS
4 Primeiro Experimento com EJB 4.1 - Instalando as ferramentas necessrias 4.2 - Estrutura de diretrio 4.3 - Decifrando a Estrutura de diretrio 4.4 - Arquivos de Configurao 4.5 - Decifrando os Arquivos de Configurao 4.6 - Primeiro Exemplo 4.7 - Deploy no JBOSS 4.8 Acessando remotamente o primeiro exemplo
5 Exemplo extra: BEAN que soma dois valores
6 Bibliografia
1 - O que J2EE
J2EE ou JEE (JAVA Enterprise Edition) um conceito em JAVA para aplicaes corporativas. Bastante utilizada aps 1998 para aplicaes WEB, ela tem como caracterstica ser uma aplicao distribuda, ou seja, determinadas partes do seu cdigo podem ser executadas em diferentes mquinas. A distribuio desta aplicao dividida em camadas, com isso, uma aplicao comercial pode ter n camadas. Dentre estas camadas podemos destacar a camada de persistncia, a camada de negcio e a camada de apresentao. A camada de persistncia a parte do programa que ir gravar as informaes no banco. A camada de negcio implementa a regra de negcio do programa. A camada de interface parte do cdigo que interage com o usurio, para esta desenvolvida a parte visual, tambm conhecida como parte grfica, do sistema. Diante da escalabilidade que esta tecnologia proporciona, ela se tornou bastante utilizada para aplicaes WEB. A plataforma tem uma srie de especificaes e APIs como servlets, JSP, JSF, Jakarta Struts, EJB e outros.
2 - O que EJB
O JAVA apresenta vrias possibilidades de desenvolvimento, uma tecnologia se destaca pelo seu poder e robustez, o EJB (Enterprise JAVA Beans). Esta tecnologia indicada para aplicaes que tem n camadas, com bancos de dados distribudos, com vrios servidores que levantam a aplicao. EJB so componentes desenvolvidos em JAVA que rodam em um servidor de aplicao e podem ser acessados remotamente usando JNDI(Java Naming and Directory Interface) e RMI(Remote Method Invocation). Para suportar todo o seu poder, o EJB se tornou um pouco complexo para ser implementado. O que est acontecendo que as empresas esto usando um canho para matar uma mosca. Ou seja, usando um cdigo excessivamente complexo para aplicaes que poderiam ser facilmente solucionadas com outras tecnologias mais simples. Em pequenas aplicaes ainda indicado o uso de tecnologias como servlets e JSP.
2.1 - O que o EJB possibilita
Muito se fala do poder do EJB, mas vamos parar para pensar um pouco sobre o que o torna to poderoso. Ele roda em um servidor de aplicao, deixando transparente para o programador trabalhos como segurana e persistncia. Este contexto reitera a idia de Orientao a Objeto, na qual devemos programar para uma interface, com reutilizao de cdigo, entre outros conceitos. Basicamente, aps o desenvolvimento de um componente EJB, podemos instanci-lo e trabalhar com o mesmo como se este fosse local. O que se pde observar que o aprendizado demorado diante das vrias ferramentas que o EJB apresenta.
2.2 Session BEAN
Existem alguns tipos de BEANS que podem ser desenvolvidos. Discutiremos nos exemplos prticos sobre a SESSION BEAN, ou BEAN DE SESSO. Este utilizado para implementar a regra de negcio de um sistema. O SESSION BEAN pode ser dividido em duas partes, o Stateless e o Stateful. O Stateless um BEAN que no guarda o estado do objeto, com isso ele bastante leve e utilizado para aes individuais. Vale ressaltar que o servidor mantm a instncia de alguns BEANs deste tipo em um pool, com isso, algumas instancias deste BEAN podem suprir as necessidades dos usurios. Nos exemplos prticos desenvolvidos no tutorial, utilizaremos este tipo de BEAN. O outro tipo de BEAN, o Stateful, este guarda o estado dos objetos durante duas operaes, sendo esta sua grande caracterstica, porm, a performance afetada, pois este tipo de BEAN mais de difcil de ser devolvido ao seu pool no servidor.
3 JBOSS
JBoss (pronuncia Djei Boss) um servidor de aplicao de cdigo fonte aberto, baseado na plataforma J2EE, implementado completamente na linguagem de programao Java. Como baseada em Java, JBoss pode ser usado em qualquer Sistema Operacional que suporte Java. http://pt.wikipedia.org/wiki/JBoss 05/2008
Estrutura dos diretrios Jboss
Figura 1: Estrutura de Diretrio de um servidor EJB
Para iniciar o servidor, temos que abrir a pasta jboss, ir na subpasta bin e executar o run.bat. Enquanto o servidor startado, podero ocorrer alguns erros, que so geralmente de conflito de portas. Para solucionar este problema, basta trocar as portas que esto dando conflito nos arquivos .XML do servidor que ficam em server\default\conf. Quando o servidor estiver executando sem erros, poderemos ento acessar a aplicao pelo seguinte diretrio a ser digitado no browser de internet: http://localhost:8080 ou http://localohost:8082. Este o caminho e a porta em que o JBOSS est rodando. Com esta URL, podemos acessar o servidor e fazer algumas configuraes. Aps esta verificao, poderemos utilizar a aplicao que foi alocada no deploy do jboss, precisamos apenas digitar na URL do browser o endereo http://localhost:8082/suaAplicaao, vale lembrar que isto para acessar da mquina local, para acessar da mquina da rede s digitar o seguinte endereo http://IPDaMaquina:8082/suaAplicaao.
4 Primeiro Experimento com EJB:
4.1 - Instalando as ferramentas necessrias
O EJB necessita de um determinado contexto para ser executado. necessrio um servidor que permitir o acesso remoto de seus componentes. Precisa-se tambm de um editor de texto e como estamos falando de um programa em JAVA, precisamos da JDK e do JAVA HOME.
4.2 - Estrutura de diretrio
Um componente EJB deve estar inserido nesta estrutura de diretrio:
Figura 2: estrutura de diretrio de um SESSION BEAN STATELESS
4.3 - Decifrando a Estrutura de diretrio
Na pasta aplicao ficam as classes java e as interfaces de acesso. A classe que contm o mtodo a ser executado chamado de BEAN e deve implementar a Interfece SessionBean com os mtodos da interface e o mtodo a ser executado. Deve ter uma interface remota que estende de javax.ejb.EJBHome com a assinatura apenas do mtodo create() inicialmente. Deve haver tambm uma outra interface para cada BEAN, que ser a chamada remota do mtodo, esta interface estender de javax.ejb.EJBObject e ter a assinatura dos mtodos a serem acessados remotamente. Na pasta META-INF ficam os descritos .XML da aplicao, o ejb-jar.xml e jboss.xml.
O EJB utiliza de arquivos XML para descrever a aplicao. So nestes arquivos que configuraremos nossos BEANs, quais so suas interfaces de acesso, onde est o mtodo a ser executado, entre outras configuraes. So nestes arquivos que dizemos qual servidor utilizaremos, e quais os BEANs ele deve executar. Os arquivos de configurao so os XML's da aplicao. No jboss.xml, utiliziremos, basicamente, na tag <session>, as tags <ejb-name> e <jndi-name>, que guardam o nome do nosso EJB e o nome que o JNDI dar a ele. No ejb-jar.xml onde descrevemos a nossa aplicao. Dentro da tag <session> utilizaremos <ejb-name> para dizer o nome do EJB, a tag <home> para informar a interface home, a tag <remote> para informar a interface remota, a tag <ejb-class> para informar o BEAN em si, a tag <session-type> diz qual o tipo de BEAN de sesso que utilizaremos e a tag <transaction-type> para adicionar o BEAN no conteiner.
4.6 - Primeiro Exemplo
Criar um projeto java (neste experimento, utilizaremos o ECLIPSE) Criar uma pasta chamada aplicacao Criar uma pasta chamada META-INF Adicionar ao projeto um jar que est em .../JBOSS/clientechamado jbossall- client.jar atravs do caminho Project Properties JARs ADD External JARs Criar uma classe que implementa SessionBean, adicione os mtodos da interface mais os mtodos particulares. EX: Como todo experimento que se preze, iniciaremos com um HelloWorld package aplicacao;
private static final long serialVersionUID = 1L; private SessionContext sessionContext;
public AloMundoBean(){}
public void ejbActivate() throws EJBException, RemoteException {}
public void ejbPassivate() throws EJBException, RemoteException {}
public void ejbRemove() throws EJBException, RemoteException {}
public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {}
public void ejbCreate() throws CreateException {}
//mtodo particular, este mtodo que deve ser invocado remotamente public String aloMundo(){ return "Alo Mundo BEAN"; }
}
Criar a primeira interface, que ser a classe que permitir o acesso remoto. Esta interface deve extender de javax.ejb.EJBObject e ter as assinaturas dos mtodos particulares. EX: Esta interface deve ter a assinatura do mtodo AloMundo, em nosso experimento: package aplicacao;
import java.rmi.*;
public interface AloMundo extends javax.ejb.EJBObject{
public String aloMundo() throws RemoteException;
}
Criar a segunda interface que ser a interface home, esta deve estender de javax.ejb.EJBHome e ter a assinatura do mtodo create(). Esta interface que criar uma instncia do bean em sua mquina. package aplicacao;
public interface AloMundoHome extends javax.ejb.EJBHome{
public AloMundo create() throws CreateException, RemoteException;
}
4.7 - Deploy no JBOSS
Para efetuarmos o deploy de um componente BEAN, precisamos transformar esta nossa estrutura de diretrio em um .jar e copiar este arquivo gerado na pasta JBOSS / server / default / deploy, para, s ento, podermos acessa-lo remotamente. Isto j foi muito custoso para os programadores. Atualmente, podemos simplesmente exportar o nosso projeto como um .jar direto para a pasta deploy. Aps certificar-se que o servidor est startado, podemos comear a acessar o nosso singelo Alo Mundo remotamente.
4.8 Acessando remotamente o primeiro exemplo
No prprio projeto criado para nosso exemplo, podemos criar uma classe com um mtodo main que executar este nosso exemplo inicial. Pode-se constatar no exemplo que devemos iniciar pegando o contexto do servidor, depois fazer o chamado lookUp e executar os mtodos instanciados no servidor. EX: package testes;
No jboss.xml: <session> <ejb-name>Calculadora</ejb-name> <jndi-name>Calculadora</jndi-name> </session>
Aps estes exemplos, fica claro que podemos criar vrios BEANs para nossa aplicao para implementar as regras de negcio. Com a diviso do sistema em camadas, utilizando determinados padres de projeto, podemos extrair bastante do EJB. Alm dos SESSION BEAN, o EJB tem os chamados Entity BEAN, que so utilizados para persistncia de dados em um banco. Este se apresenta como um concorrente de ferramentas como o Hibernate. Este apenas um incio de um aprendizado, mas com este incio, pode-se ter uma noo do que seja EJB.
6 Bibliografia
BOND, Martin. Aprenda J2EE em 21 Dias. Makron, 2003. KURNIAWAN, Budi. Java para a Web com Servlets, JSP e EJB. Cincia Moderna, 2002