Você está na página 1de 13

Universidade Catlica do Salvador

Desenvolvedores: Bruno Martins


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.

4.4 - Arquivos de Configurao

ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!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 >
<description><![CDATA[Sem Descricao.]]></description>
<display-name>Gerado pelo XDoclet</display-name>
<enterprise-beans>
<!-- Session Beans -->
<session >
<description><![CDATA[]]></description>
<ejb-name>AloMundo</ejb-name>
<home>aplicacao.AloMundoHome</home>
<remote>aplicacao.AloMundo</remote>
<ejb-class>aplicacao.AloMundoBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor >
</assembly-descriptor>
</ejb-jar>



jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
<jboss>
<unauthenticated-principal>nobody</unauthenticated-principal>
<enterprise-beans>
<session>
<ejb-name>AloMundo</ejb-name>
<jndi-name>AloMundo</jndi-name>
</session>
</enterprise-beans>
<resource-managers>
</resource-managers>
</jboss>

4.5 - Decifrando os Arquivos de Configurao

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;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class AloMundoBean implements SessionBean{

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;

import java.rmi.RemoteException;
import javax.ejb.CreateException;

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;

import javax.naming.NamingException;
import java.rmi.RemoteException;
import java.util.Hashtable;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import aplicacao.*;

public class TesteAloMundo {

private InitialContext getContext() throws NamingException {
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");
InitialContext initialContext = new InitialContext(props);
return initialContext;
}

private AloMundoHome getHome() throws NamingException {
return (AloMundoHome) getContext().lookup("AloMundo");
}

public void imprime() {
try {
AloMundo alo = getHome().create();
System.out.println(alo.aloMundo());
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
TesteAloMundo teste = new TesteAloMundo();
teste.imprime();
}

}

5 Exemplo extra: calculadora:

BEAN:
package aplicacao;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class CalculadoraBean implements SessionBean{

public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}

public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}

public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {
// TODO Auto-generated method stub

}

public void ejbCreate() throws CreateException {
// TODO Auto-generated method stub
}

public Integer soma(Integer v1, Integer v2 ){
return v1+v2;
}

}

Interface HOME:
package aplicacao;

import java.rmi.RemoteException;

import javax.ejb.CreateException;

public interface CalculadoraHome extends javax.ejb.EJBHome{

public Calculadora create() throws CreateException, RemoteException;

}

Interface REMOTA:
package aplicacao;

import java.rmi.RemoteException;

public interface Calculadora extends javax.ejb.EJBObject{

public Integer soma(Integer v1, Integer v2) throws RemoteException;

}

Configurao:

No ejb-jar.xml:
<session >
<description><![CDATA[]]></description>
<ejb-name>Calculadora</ejb-name>
<home>aplicacao.CalculadoraHome</home>
<remote>aplicacao.Calculadora</remote>
<ejb-class>aplicacao.CalculadoraBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>

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

Sites:
http://pt.wikipedia.org/
http://www.guj.com.br/

Você também pode gostar