EJB

Propaganda
Análise e Projeto
Orientados a Objetos
1º Semestre - 2008
Marcos Mendes
1
EJB – Enterprise JavaBeans
Referência Bibliográfica:
 Enterprise JavaBeans 3.0
Bill Burke & Richard Monson
Editora. Prentice Hall
 Tutorial do J2EE
Bodoff – Green – Haase – Jendrock - Pawlan – Stearns
Editora Campus
 Revista JavaMagazine edições 8, e 47
 Tutorial da Sun sobre JavaEE
http://java.sun.com/javaee/5/docs/tutorial/doc/
2
Aplicações MultiCamadas
Camada
Cliente
Aplicação
Desktop / Web
Camada Web
Camada de
Negócios
Request
HttpServletRequest
Servidor de
Aplicações /
Servidor Web
HTML
XML
JavaScript
Applet
JCA
MainFrame
Servlet
JSP
Response
HttpServletResponse
Aplicações Java
Desktop
Camada EIS
JPA / JDBC
EJB
Bancos de Dados
3
EJB – Enterprise JavaBeans

EJB – Enterprise JavaBean
Componente de software padrão executado no lado servidor (camada
de negócios) que encapsula a lógica que atende às necessidades de
um domínio de negócios. É utilizado na criação de aplicações
corporativas distribuídas desenvolvidas com a tecnologia Java.

Contêiner EJB
É o ambiente responsável por gerenciar o ciclo de vida das instâncias
das classes bean(objetos EJB) dentro de um servidor de aplicações.

Servidor de Aplicações JavaEE
Sistema que deve implementar os seguintes serviços:

Enterprise JavaBeans (EJB) – Contêiner EJB

Java Persistence (JPA)

Java Message Service (JMS)

Java Transaction Service/Java Transaction API (JTS/JTA)

Servlets e JavaServer Pages (JSP) – Contêiner Web

Java Naming and Directory Interface (JNDI)
4
EJB – Enterprise JavaBeans
Disponibiliza também entre outros recursos:

Pool de Instâncias EJB

Pool de Conexões a Bancos de Dados

Controle de Concorrência

Conectividade Remota


Gerenciamento de Segurança
 Autenticação (identificação do usuário)
 Autorização (controle do que um usuário pode acessar)
 Comunicação (criptografia)
Quando usar EJB em suas aplicações



Quando a aplicação deve ser escalável, tanto por possuir um número
crescente de usuários, como a aplicação pode estar distribuída em múltiplas
máquinas.
Quando transações são necessárias para garantir a integridade dos dados.
Quando a aplicação possuir um alto número de clientes. Como a lógica de
negócio fica nos componentes no lado servidor, a manutenção é facilitada.
5
EJB – Enterprise JavaBeans

Os três tipos básicos de Enterprise JavaBeans:

Beans de Entidadade – Entity Beans (JPA-Entity)
São persistentes, representam o modelo persistente de dados. São
gerenciados pelo serviço EntityManager.

Beans de Sessão – Session Beans
Não são persistentes. São freqüentemente utilizados para gerenciar
as interações entre os beans de entidade. Representam um fluxo
de tarefa, um processo de negócio.

Beans baseados em mensagens – Message Driven
Beans
Recebem e processam mensagens assincronamente. São
utilizados na interação com outros aplicativos através de um
serviço de mensagens (JMS).
Não possuem interfaces Local, nem Remota. Normalmente
implementam a interface MessageListener, implementando assim
o método onMessage() onde se localiza a lógica de negócio.
6
EJB – Enterprise JavaBeans

Beans de Sessão – Session Beans

Stateful SessionBean (Beans de sessão com
informações de estado)
Mantém o estado conversacional entre as chamadas de um cliente
para o servidor, o que permite manter dados específicos ao cliente
entre invocações de método. É uma extensão do aplicativo cliente.
Não são mantidos em um pool de instâncias.

Stateless SessionBean (Beans de sessão sem
informações de estado)
Não mantém nenhum estado conversacional entre o cliente e o
servidor. São mantidos em um pool de instâncias. Possuem um
desempenho maior que os beans de sessão com informações de
estado. São utilizados para realizar tarefas que sejam realizadas
em uma única chamada de método.
7
EJB – Enterprise JavaBeans

Componentes de um aplicativo que utiliza SessionBean.

Interfaces Remota e/ou Local



Interface remota
Anotada com @javax.ejb.Remote
Define quais os métodos que um cliente tem permissão para invocar.
Interface local
Anotada com @javax.ejb.Local
Define quais os métodos que um outro EJB pode invocar dentro da
mesma JVM.
Classe do Bean
Anotada com @javax.ejb.Sateless ou @javax.ejb.Stateful
Contém a lógica de negócio, implementando os métodos descritos nas
interfaces remota e/ou local e opcionalmente as interfaces de negócio.

Cliente Remoto
Aplicação que se conecta ao servidor EJB. Por meio da API JNDI, ele
localiza a interface remota do EJB a ser utilizado e através da referência
dessa interface aciona os métodos remotos do componente EJB.
8
Instalação e configuração do JBoss



Baixe o JBoss no site
http://jboss.com/products/jbossas/downloads
Para Windows, baixe o arquivo jems-installer-1.2.0.GA.jar e
execute-o.
Na tela de configuração do tipo de instalção, selecione a opção
EJB3.
9
Instalação e configuração do JBoss




Nas demais telas, apenas clique em next, selecionando assim as
opções padrão.
Para iniciar o servidor, basta executar o arquivo de lote run.bat
na pasta bin do diretório de instalação. Para encerrar o servidor,
pressione <Ctrl><C> no prompt de comandos onde o servidor
está sendo executado ou execute o arquivo de lote
shutdown.bat com a opção -S.
Acesso o endereço http://localhost:8080 para verificar a
instalação.
É aconselhável que se crie uma variável de ambiente
JBOSS_HOME contendo o caminho do diretório de instalação
do JBoss.
10
EJB – Enterprise JavaBeans

Construção da aplicação exemplo usando JBoss


Crie um novo projeto Java e adicione no classpath os arquivos
jboss-ejb3x.jar e ejb3-persistence que se encontram na pasta:
%JBOSS_HOME%/client/
Torne a classe modelo.Aluno serializável. Pois os objetos dessa
classe irão trafegar pela rede.

Crie no pacote negocio.ejb a Interface Remota AlunoRemote.

Adicione o projeto que contém a classe modelo.Aluno no buildpath.
package negocio.ejb;
import javax.ejb.*;
Interface Remota
import modelo.Aluno;
@Remote
public interface AlunoRemote {
public int incluir(Aluno a);
}
11
EJB – Enterprise JavaBeans
Crie no pacote negocio.ejb a classe do bean AlunoBean
package negocio.ejb;
import modelo.Aluno;
Classe do Bean
import javax.persistence.*;
import javax.ejb.*;

@Stateless
public class AlunoBean implements AlunoRemote {
@PersistenceContext(unitName = "teste")
private EntityManager em;
public int incluir(Aluno a) {
em.persist(a);
return a.getId();
}
}
12
EJB – Enterprise JavaBeans
Crie no pacote cliente a classe ClienteAlunoEJB
package cliente;
import modelo.*;
import negocio.ejb.*;
Cliente
import javax.naming.*;
import java.util.*;

Remoto
public class ClienteAlunoEJB {
public static void main(String[] args) {
Configuração do Contexto JNDI
(dependente do servidor)
try {
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.naming.NamingContextFactory");
prop.put(Context.PROVIDER_URL, "localhost:1099");
InitialContext jndiContext = new InitialContext(prop);
Object ref = jndiContext.lookup("AlunoBean/remote");
AlunoRemote refBean = (AlunoRemote) ref;
13
EJB – Enterprise JavaBeans
Aluno a = new Aluno();
a.setNome("José");
a.setRa(987654321);
a.setMs1(7.5);
a.setMs2(6.0);
int id = refBean.incluir(a);
System.out.println("Id do aluno inserido " + id);
} catch (NamingException ex) {
ex.printStackTrace();
}
}
}
14
EJB – Enterprise JavaBeans

Implantação da aplicação.
Os arquivos Aluno.class, AlunoBean.class,
AlunoRemote.class e o persistence.xml serão empacotados
em um arquivo .jar e implantados no diretório de deploy do
servidor JBoss.
Para se executar a aplicação, algumas configurações deverão
ser efetuadas previamente:

Criação de uma Fonte de Dados para o Banco MySQL.

Criação do arquivo persistence.xml.

Criação de um arquivo de build (build.xml) para automatizar
a implantação através do aplicativo Apache Ant.
15
EJB – Enterprise JavaBeans

Configure o JBoss para fazer conexão com o MYSQL.
 Crie o arquivo testedb-ds.xml na pasta
%JBOSS_HOME%/server/default/deploy
<?xml version="1.0" encoding="UTF-8"?>
Configuração da
<datasources>
Fonte de Dados
<local-tx-datasource>
<jndi-name>TesteDS</jndi-name>
<connection-url>
jdbc:mysql://localhost:3306/uniban
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>admin</password>
</local-tx-datasource>
</datasources>

Copie o driver JDBC do MySQL para a pasta
%JBOSS_HOME%/server/default/lib
16
EJB – Enterprise JavaBeans
Crie o arquivo persistence.xml na pasta META-INF em
seu projeto.
Configuração do
persistence.xml
<persistence>

<persistence-unit name="teste">
<jta-data-source>java:/TesteDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto"
value="update"/>
</properties>
</persistence-unit>
</persistence>
17
EJB – Enterprise JavaBeans

Crie o arquivo build.xml na pasta raiz do seu projeto.
Criação do
arquivo de build
<?xml version="1.0"?>
<project name="ExemploAlunoEJB" default="ejbjar" basedir=".">
<property environment="env"/>
<property name="src.dir" value="${basedir}"/>
<property name="jboss.home" value="${env.JBOSS_HOME}"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
<!-- Local onde estão as classes persistentes -->
<property name="modelo" value="/JavaProg/ProjetoJPA/modelo"/>
18
EJB – Enterprise JavaBeans
<!-- Construção do classpath -->
<path id="classpath">
<fileset dir="${jboss.home}/server/default/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${jboss.home}/server/default/deploy/ejb3.deployer">
<include name="*.jar"/>
</fileset>
<fileset dir="${jboss.home}/server/default/deploy/jboss-aop-jdk50.deployer">
<include name="*.jar"/>
</fileset>
<fileset dir="${jboss.home}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${modelo}">
<include name="*.class"/>
</fileset>
<pathelement location="${build.classes.dir}"/>
</path>
<property name="build.classpath" refid="classpath"/>
19
EJB – Enterprise JavaBeans
<!-- Prepara o diretório de build -->
<target name="prepare" >
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.classes.dir}/modelo"/>
<copy file="${modelo}/Aluno.class" todir="${build.classes.dir}/modelo"/>
</target>
<!-- Compila os arquivos de código fonte -->
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}"
destdir="${build.classes.dir}"
debug="on"
deprecation="on"
optimize="off"
includes="**">
<classpath refid="classpath"/>
</javac>
</target>
20
EJB – Enterprise JavaBeans
<!-- Cria o arquivo jar e o implanta no servidor de aplicações-->
<target name="ejbjar" depends="compile">
<jar jarfile="build/alunoEJB.jar">
<fileset dir="${build.classes.dir}">
<include name="modelo/*.class"/>
<include name="negocio/ejb/*.class"/>
</fileset>
<fileset dir="${basedir}/">
<include name="META-INF/persistence.xml"/>
</fileset>
</jar>
<copy file="build/alunoEJB.jar" todir="${jboss.home}/server/default/deploy"/>
</target>
<!-- Executa o cliente -->
<target name="run.client" depends="ejbjar">
<java classname="cliente.ClienteAlunoEJB" fork="yes" dir=".">
<classpath refid="classpath"/>
</java>
</target>
</project>
21
EJB – Enterprise JavaBeans





Abra uma janela do prompt de comando.
Mude o diretório corrente para a pasta raiz do seu projeto.
Implante a aplicação digitando o comando.
> ant
Inicie o servidor de aplicações JBoss executando o arquivo
run.bat na pasta %JBOSS_HOME%/bin
Execute o cliente remoto digitando o comando
> ant run.client
22
EJB – Enterprise JavaBeans

Exemplo de Aplicação Swing com EJB
SessionBean e JPA-Entity
23
Download