j2ee 1.4 (ejb 2.1) ago/2006 softplan/poligraph alessandro lemser
TRANSCRIPT
![Page 1: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/1.jpg)
J2EE 1.4 (EJB 2.1)Ago/2006Softplan/PoligraphAlessandro Lemser
![Page 2: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/2.jpg)
TópicosIntrodução - Componentes - Tecnologias - Servidor de Aplicação - Publicação
Camadas - Apresentação - Lógica - Persistência
EJBs - O que são - Requisitos - Como acessar - Tipos de EJB
Servicos de MiddlewareEmpacotamento
![Page 3: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/3.jpg)
IntroduçãoJ2EE - Java 2 Enterprise Edition É um padrão de industria para o desenvolvimento de aplicações do lado servidor portáveis, robustas, escaláveis e seguras.
Visa reduzir o custo e a complexidade de desenvolver serviços distribuídos, oferecendo um conjunto de APIs para dar suporte às tarefas que são comuns a este tipo de ambiente.
![Page 4: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/4.jpg)
Introdução Componentes → Componentes Cliente: rodam na máquina do usuário (Swing, Applet). → Componentes WEB: JSP e Servlet que rodam em servidores. → Componentes EJB: Rodam em servidores.
![Page 5: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/5.jpg)
IntroduçãoTecnologias envolvidas
Existem várias tecnologias envolvidas na arquitetura. As mais visíveis num primeiro contato são:
• JSP/Servlets
• EJB
• JNDI (Java Naming and Directory Interface)
• JAX-RPC (Web Services)
• JavaMail
• JDBC
![Page 6: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/6.jpg)
IntroduçãoTecnologias envolvidas
Outras tecnologias utilizadas:
• JAAS (Java Authorization & Authetication Services)::login e controle de acesso a recursos
• JTS (Java Transaction Services)::serviço de transação distribuído compatível com Corba
• JTA (Java Transaction API):: API de programação java para transações distribuídas
• JMS (Java Message Service) :: protocolo para troca de mensagens
• Outras...
![Page 7: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/7.jpg)
IntroduçãoServidor de Aplicação :: Container
Para que a arquitetura funcione, é necessário a existência de um servidor de aplicação compatível com a especificação J2EE.
O servidor de aplicação fornece vários serviços de forma implícita como gerência de transações, segurança, gerenciamento de recursos e persistência.
Adicionalmente, é comum que os servidores de aplicação ofereçam serviços de Clustering e/ou balanceamento de carga.
O JBOSS é um exemplo de servidor de aplicação que oferece os serviços acima citados e possui ainda um container WEB integrado, o Tomcat.
![Page 8: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/8.jpg)
IntroduçãoPublicação
Uma aplicação J2EE precisa ser “publicada” (deploy) corretamente no servidor.
Os componentes que fazer parte da arquitetura, JSP/Servlets, EJBs e outros, devem ser “empacotados” e então publicados no servidor.
O servidor de aplicação precisa conhecer os componentes e suas características para poder gerenciá-los.
EJBs e componentes WEB possuem descritores de distribuição (Deployment Descriptors). Este componentes podem ser configurados de maneira declarativa.
![Page 9: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/9.jpg)
Introdução
JBOSS
TOMCAT(Container WEB)
Container EJB
JTA, JMS,DataSources, ...
Segurança,Clustering,
Balanc. carga
Deployment
fin.ear
sac.ear
meu.ear
cli.war
![Page 10: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/10.jpg)
CamadasJ2EE 1.4 / EJB2.1
![Page 11: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/11.jpg)
CamadasDesenvolvimento em camadas
A diferença entre passar horas ou minutos inspecionando um código para realizar uma alteração, pode depender exclusivamente da maneira como os componentes e suas responsabilidades foram arranjadas.
A formatação dos dados para que os mesmos façam sentido para o usuário faz parte da camada de apresentação.
Aplicar ou não de uma taxa de juros sobre um determinado valor ou se o usuário tem desconto devido ao tempo de relacionamento, é responsabilidade da camada de negócio.
O armazenamento dos dados resultante de operações são de responsabilidade da camada de persistência.
![Page 12: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/12.jpg)
Camada de Apresentação
“Refere-se aos componentes que criam e interagem as interfaces com seus usuários” (Grabrick & Weiss, 2002).
Em um cenário J2EE, a camada de apresentação para a WEB é composta de JSPs e Servlets.
Têm a finalidade de apresentar ao usuário uma interface para interagir com o modelo. Suas responsabilidades se resumem a formatar a informação de uma maneira coerente para o usuário e, em algum momento, preparar os dados informados para enviar a camada de lógica de negócios . Padrões relacionados: FrontController, BusinessDelegate, DTO, View Helpers, Intercepting Filter.
Camadas
![Page 13: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/13.jpg)
Camada de lógica de negócios
É a responsável por implementar a funcionalidade da aplicação.
Abstrai da camada de apresentação o acesso a camada de modelo.
Processa a lógica da aplicação. No caso dos EJBs, os métodos deste podem ser entendidos como um serviço que o componente disponibiliza.
Se esta camada for distribuída, a mesma lógica pode servir a diversas aplicações.
Camadas
![Page 14: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/14.jpg)
Cliente desktop
Lógica da aplic.
Cliente WEB Cliente Palmtop
Lógica da aplic. Lógica da aplic.
Base de dados
Conexões JDBC
Aplicação em camadas com lógica não distribuída.
Servidor do bando de dados
Camadas
![Page 15: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/15.jpg)
HTTPHTTP
RMIIIOP
Servidor de aplicação
Base de dados
Lógica da aplicação (Conatiner EJB)
Cliente desktop
Cliente WEB Cliente Palmtop
Conexões JDBC
Container WEB
Aplicação em camadas com lógica distribuída.
Servidor do bando de dados
Camadas
![Page 16: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/16.jpg)
Camada de persistência
Responsável pelo acesso ao meio de armazenamento das informações.
Abstrai da camada de lógica negócios o conhecimento sobre como e onde os dados são armazenados.
Atualmente as aplicações realizam um mapeamento das classe do modelo orientado a objeto para o modelo das bases de dados relacionais (mapeamento objeto-relacional).
Pode ser usado para persistência: Entity Beans*, Hibernate, iBatis, TopLink, JDBC usando padrão DAO.
* Entity Beans no J2EE 1.4 possui sérias deficiências. Na versão Java EE 5 estas deficiências são resolvidas pela Java Persistence API (EJB3).
Camadas
![Page 17: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/17.jpg)
Camadas
![Page 18: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/18.jpg)
EJBsJ2EE 1.4 / EJB2.1
![Page 19: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/19.jpg)
EJB Um Enterprise JavaBean (EJB) é um componente que fica no servidor que pode ser publicado em um ambiente multicamada distribuído (ROMAN, 2002).
A grosso modo, uma classe que é gerenciada por um container e que oferece métodos para que várias aplicações os chamem.
Formam o núcleo de uma aplicação distribuída.
Os EJBs são objetos CORBA. Portanto, são acessíveis via IIOP (Internet Inter-ORB Protocol) mesmo em clientes escritos em outras linguagens.
São sempre desenvolvidos em Java usando RMI-IIOP (modelo de programação Java que gera objetos CORBA).
![Page 20: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/20.jpg)
EJB Um Enterprise Javabean não é um tipo de “Javabean especial”.
Os EJBs precisam ser gerenciados pelo container e possuem um ciclo de vida definido. Existe um conjunto de regras para que eles possam ser executados.
Existem atualmente três tipos de EJB: Session Bean, Message Driven Bean e Entity Bean.
Os Session Beans estão divididos em Stateless e Statefull.
Não se instancia um EJB, mas sim, localiza-se a interface remota e chama-se seus métodos de negócio!
![Page 21: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/21.jpg)
EJBpublic class Banco {
public void transferir(Conta cUm, Conta cDois, double valor) { boolean acessoOK = verificaPermissaoAcesso(); if( !acessoOK ) { throw new SemPermissaoException(“sem permissao”); }
//abre transacao com banco
try { efetueTransferencia( cUm, cDois, valor ); //commit e fecha transação } catch (SaldoInsufienteException ex) { //rollback e fecha transação throw ex; } }
}
Classe Java simples que realiza transferências que deseja se tornar um EJB...
![Page 22: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/22.jpg)
EJB
public class Banco {
public void transferir(Conta cUm, Conta cDois, double valor) { boolean acessoOK = verificaPermissaoAcesso(); if( !acessoOK ) { throw new SemPermissaoException(“sem permissao”); } //abre transacao com banco
try {
efetueTransferencia( cUm, cDois, valor ); //commit e fecha transação
} catch (SaldoInsufienteException ex) { //rollback e fecha transação throw ex; } }
}
Classe Java simples que realiza transferências que deseja se tornar um EJB...
Antes de mais nada, é necessário realizar umas verificações de segurança, devido a natureza da operação
![Page 23: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/23.jpg)
EJB
public class Banco {
public void transferir(Conta cUm, Conta cDois, double valor) { boolean acessoOK = verificaPermissaoAcesso(); if( !acessoOK ) { throw new SemPermissaoException(“sem permissao”); } //abre transacao com banco
try { efetueTransferencia( cUm, cDois, valor ); //commit e fecha transação
} catch (SaldoInsuficienteException ex) { //rollback e fecha transação throw ex; } }
}
Classe Java simples que realiza transferências que deseja se tornar um EJB...
Não está aqui, mas é necessário iniciar uma transação!
![Page 24: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/24.jpg)
EJB
public class Banco {
public void transferir(Conta cUm, Conta cDois, double valor) { boolean acessoOK = verificaPermissaoAcesso(); if( !acessoOK ) { throw new SemPermissaoException(“sem permissao”); } //abre transacao com banco
try { efetueTransferencia( cUm, cDois, valor ); //commit e fecha transação
} catch (SaldoInsuficienteException ex) { //rollback e fecha transação throw ex; } }
}
Classe Java simples que realiza transferências que deseja se tornar um EJB...
Realiza efetivamente a transferência entre contas e encerrar a transação.
![Page 25: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/25.jpg)
EJB
public class Banco {
public void transferir(Conta cUm, Conta cDois, double valor) { boolean acessoOK = verificaPermissaoAcesso(); if( !acessoOK ) { throw new SemPermissaoException(“sem permissao”); } //abre transacao com banco
try { efetueTransferencia( cUm, cDois, valor ); //commit e fecha transação
} catch (SaldoInsuficienteException ex) { //rollback e fecha transação throw ex; } }
}
Classe Java simples que realiza transferências que deseja se tornar um EJB...
...se as coisas não forem bem, é necessário desfazer a operação com rollback e fechar a conexão.
![Page 26: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/26.jpg)
EJB Para se tornar um Session Bean e atender à chamadas remotas
nossa classe devem atender aos seguintes requisitos*:1. Implementar a Interface javax.ejb.SessionBean e implementar os
métodos requeridos pela mesma.2. Criar uma interface, que será conhecida como a interface remota,
que deve estender a interface javax.ejb.EJBObject. Esta interface deve conter a assinatura dos métodos que a classe Banco deseja disponibilizar.
3. Criar uma outra interface, que será conhecida como home, que deve estender a interface javax.ejb.EJBHome. Com esta interface se obtém a interface remota.
4. Criar dentro do diretório META-INF, dois arquivos XML: ejb-jar.xml e jboss.xml. O último é particular do JBOSS. Cada servidor de aplicação define seu arquivo. Nestes arquivos devemos colocar informações a respeito de nosso EJB.
5. Empacotar o arquivo dentro de um JAR e publicar no servidor de aplicação.
*Na especificação EJB3 o processo é extremamente simplificado.
![Page 27: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/27.jpg)
EJBpublic class BancoBean implements SessionBean {
public void transferir(Conta cUm, Conta cDois, double valor) { try { efetueTransferencia( cUm, cDois, valor ); } catch (SaldoInsufienteException ex) { throw ex; } } //metodos da interface SessioBean public void setSessionContext(SessionContext sc) {} public void ejbRemove() {} public void ejbCreate() {} public void ejbActivate() {} public void ejbPassivate() {}
}
![Page 28: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/28.jpg)
EJBpublic class BancoBean implements SessionBean {
public void transferir(Conta cUm, Conta cDois, double valor) { try { efetueTransferencia( cUm, cDois, valor ); } catch (SaldoInsufienteException ex) { throw ex; } } //metodos da interface SessioBean public void setSessionContext(SessionContext sc) {} public void ejbRemove() {} public void ejbCreate() {} public void ejbActivate() {} public void ejbPassivate() {}
}
Método de negócio que será disponibilizado para clientes remotos...
Para onde foi o controle de segurança e de transação???
![Page 29: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/29.jpg)
EJBpublic class BancoBean implements SessionBean {
public void transferir(Conta cUm, Conta cDois, double valor) { try { efetueTransferencia( cUm, cDois, valor ); } catch (SaldoInsufienteException ex) { throw ex; } } //metodos da interface SessioBean public void setSessionContext(SessionContext sc) {} public void ejbRemove() {} public void ejbCreate() {} public void ejbActivate() {} public void ejbPassivate() {}
}
Estes métodos são requeridos pela especificação.ejbPassivate e ejbActivate só fazem sentido para Statefull...
![Page 30: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/30.jpg)
EJBpublic interface BancoEJB extends EJBObject {
void transferir(Conta cUm, Conta cDois, double valor) throws RemoteException;
}
...a interface remota:
Na interface remota, estamos prometendo que o SessionBean associado a ela irá disponibilizar exatamente este método para clientes do mundo inteiro que tenham permissão para realizar a operação.
![Page 31: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/31.jpg)
EJBpublic interface BancoHome extends EJBHome {
BancoEJB create() throws RemoteException, CreateException;
}
...a interface home:
A interface home “cria” nossa interface remota, trazendo o Stub para o cliente.
![Page 32: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/32.jpg)
EJB[src] [br] [...] [META-INF] ejb-jar.xml jboss.xml
...XMLs
Os arquivos devem ficar dentro do diretório META-INF e devem dizer ao container “ o que nós temos pra ele...”.
![Page 33: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/33.jpg)
ejb-jar.xml
EJB
![Page 34: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/34.jpg)
jboss.xml
EJB
<jndi-name> indica o nome JNDI com que este EJB vai ser localizado. Pode ser qualquer coisa desde que não se repita..
![Page 35: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/35.jpg)
Empacotamento...
EJB Para a publicação no JBOSS, as classes junto com os arquivos XML devem ser empacotados em um arquivo JAR.
Gere o JAR e coloque o arquivo dentro do diretório [JBOSS_HOME]/server/default/deploy e inicie o servidor.
Durante o deploy, o servidor deve validar o JAR para ver se está de acordo com a especificação.
![Page 36: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/36.jpg)
Como acessar o EJB?
EJBJNDI Associa um nome para a recursos computacionais.
Os recursos podem ser localizados de maneiras mas simples através de seu nome lógico.
Pense em um sistema de arquivos ou no sistema DNS.
É constituído de contextos: “java:/comp/env” é o contexto raiz para o JNDI. Um sub-contexto pode ser criado, como por exemplo o “br.com.softplan.curso.ejb” ou “a/b/meuContexto”.
JNDI fornece uma interface uniforme para acesso á vários sistemas de nomes e diretórios: LDPA, FileSistem, CORBA, RMI, Windows Registry
![Page 37: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/37.jpg)
Como acessar o EJB?
EJB
![Page 38: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/38.jpg)
Como acessar o EJB?
EJB
Pode ficar dentro de um arquivo chamado jndi.properties.
Quando o InitialContext é criado dentro do próprio servidor, essa codificação não é necessária.
![Page 39: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/39.jpg)
Como acessar o EJB?
EJBSe trata de uma referência remota em uma linguagem intermediaria.
É preciso fazer um narrow para a classe Java que desejamos obter.
![Page 40: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/40.jpg)
EJBSession Bean
Modelam processos de negócio (ROMAN, 2002).
Evitam que o cliente tenha acesso direto a camada de persistência.
Podem ou não manter seu estado / suas informações.
São divididos em Stateless Session Bean e Statefull Session Bean.
![Page 41: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/41.jpg)
EJBStateless SessionBean
Podem possuir interfaces remotas (EJBObject, EJBHome) ou locais (EJBLocalObject, EJBLocalHome).
Os servidores de aplicação mantêm um pool de Statless SessionBean, e este pode crescer ou decrescer de acordo com a carga do servidor.
Pode estar em dois diferentes estados: não existente ou pronto.
Um Stateless SessionBean deve implementar os seguintes métodos, além dos definidos na interface Remote e/ou Home:
- void ejbCreate();- void ejbRemove();- void ejbActivate(); //útil apenas para Statefull- void ejbPassivate(); //útil apenas para Statefull- void setSessionContext(SessionContext ctx);
![Page 42: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/42.jpg)
EJBCiclo de vida
Não existente
pronto Métodos de negócio
ejbRemove()Class.newInstance()setSessionContext()ejbCreate()
![Page 43: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/43.jpg)
EJBStatefull SessionBean
Podem possuir interfaces remotas (EJBObject, EJBHome) ou locais (EJBLocalObject, EJBLocalHome).
Mantêm seu estado entre chamadas de métodos do usuário (carrinho de compras).
Os servidores de aplicação podem PASSIVAR um Statefull Session Bean e, quando necessário ATIVAR o mesmo.
Um Stateless SessionBean deve implementar os mesmos métodos de um Statefull, porém, para este são úteis os métodos:
- void ejbActivate(); - void ejbPassivate();
![Page 44: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/44.jpg)
EJB<<interface>>
javax.ejb.EJBObject<<interface>>
javax.ejb.SessionBean <<interface>>
javax.ejb.EJBHome
public salve(Cliente cliente) { dao.salve(cliente);}//demais métodos obrig.
ClienteBean
Void salve(Cliente cliente) throws RemoteException;
<<interface>ClienteEJB
ClienteEJB create() throws RemoteException, CreateException;
<<interface>>ClienteHome
ejb-jar.xml
O container irá verificar se o bean está respeitando a especificação!
![Page 45: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/45.jpg)
EJB<<interface>>
javax.ejb.EJBLocalObject<<interface>>
javax.ejb.SessionBean <<interface>>
javax.ejb.EJBLocalHome
void salve(Cliente cliente) { dao.salve(cliente);}//demais métodos obrig.
ClienteBean
void salve(Cliente cliente);
<<interface>ClienteLocalEJB
ClienteEJB create() throws CreateException;
<<interface>>ClienteLocalHome
ejb-jar.xml
O container irá verificar se o bean está respeitando a especificação!
![Page 46: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/46.jpg)
EJBMessage Driven
Modelam processos assíncronos. Respondem a eventos.
Agem somente quando recebem uma mensagem.
Não mantêm estado e não precisam de interfaces remotas nem locais.
Precisam estar registrados em um servidor de mensagens que atenda ao protocolo JMS – Java Message Service.
Podem estar registrados em tópicos (Topic) ou filas (Queue).
Mensagens enviadas para Queue são consumidas por ao menos um consumidor, já para Topic a mensagem é consumida por todos (broadcast).
![Page 47: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/47.jpg)
EJBMessage Driven
MOMMeuMDB
+ onMessage(Message msg);
Cliente
Publica uma mensagem...
Registra-se
É notificado
![Page 48: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/48.jpg)
EJBMessage Driven
MOMMeuMDB
+ onMessage(Message msg);
Cliente
Publica uma mensagem...
Registra-se
É notificado
public MeuMDB implements MessageDrivenBean, MessageListener {
public void onMessage(Message m) { ObjectMessage om = (ObjectMessage) m; Order myOrder = (Order) om.getObject();
//inicia processo de compra }
/*Outros métodos requeridos pelainterface MessageDrivenBean/*
}
![Page 49: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/49.jpg)
EJBEntity Beans
São os componentes responsáveis pela persistência dos objetos. Realizam um mapeamento 1 para 1 com uma tabela no banco de dados.
Chamar ejbCreate em um Entity Bean, significa criar um novo registro numa tabela do banco de dados.
Chamar ejbRemove em um Entity Bean, significa remover um registro existente de uma tabela do banco de dados.
A persistência dos dados pode ser gerenciada pelo Container (CMP) (implícita) ou pode ser gerenciada pelo próprio Bean (BMP) explícita.
![Page 50: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/50.jpg)
EJBEntity Beans Na especificação 2.1 esse tipo de EJB possui muitas deficiências com relação ao EJBQL, performance e questões de OO.
Era necessário uso de diversas estratégias para se conseguir performance como o Entity Bean, incluindo alguns padrões de projeto criados para contornar problemas deste tipo.
Na Softplan usa-se o Hibernate para realizar o mapeamento objeto-relacional.
Em um cenário futuro, talvez o Entity Bean seja incorporado ao framework da softplan.
![Page 51: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/51.jpg)
Serviços de MiddlewareJ2EE 1.4 / EJB2.1
![Page 52: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/52.jpg)
EJBServiços de MiddlewareEm uma aplicação comercial distribuída, é necessário um controle eficiente dos recursos utilizados pelo componentes.
Serviços implícitos
A aplicação não precisa conter código de acesso a recursos externos (transações e segurança, por exemplo). Os recursos necessários são declarados externamente (XML).
Serviços explícitos
Você escreve código na aplicação para acessar uma determinada API para acessar banco de dados ou realizar controle de segurança.
![Page 53: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/53.jpg)
EJB
Extraído do material da www.argonavis.com.br
![Page 54: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/54.jpg)
EJB
Extraído do material da www.argonavis.com.br
![Page 55: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/55.jpg)
EmpacotamentoJ2EE 1.4 / EJB2.1
![Page 56: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/56.jpg)
EJB• Um componente EJB deve ser empacotado em um arquivo JAR (Java Archive) para ser publicado no servidor de aplicação como já foi visto...
• Se a aplicação tiver componentes WEB, a estrutura da aplicação WEB deve ser empacotada em um arquivo WAR (Web Archive).
Estes arquivos, o JAR e o WAR, “devem” ser empacotados em um único arquivo chamado EAR (Enterprise Archive).
O EAR gerado deve conter um arquivo descritor da aplicação distribuída chamado application.xml, dentro de um diretório chamado META-INF.
![Page 57: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/57.jpg)
EJB<application> <display-name>Curso</display-name>
<module> <ejb>curso.jar</ejb> </module>
<module> <web> <web-uri>curso.war</web-uri> <context-root>curso</context-root> </web> </module>
</application>
EJBs e demais classes da aplicação distribuída.
Caso exista módulo WEB
![Page 58: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/58.jpg)
EJB
No código do EJB o DataSource é localizado via seu nome JNDI.
Deve ser informado ao JBOSS um arquivo XML que forneça informações sobre a conexão para a criação de um DataSource.
No diretório [JBOSS_HOME]/docs/examples/jca existem vários exemplos para vários banco.
<datasources>
<local-tx-datasource>
<jndi-name>CURSODS</jndi-name> <connection-url>jdbc:oracle:thin:@server15:1521:derbades</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>sidercon</user-name> <password>sistemas</password>
</local-tx-datasource>
</datasources>
![Page 59: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/59.jpg)
...concluindo• Em uma aplicação EE, os EJBs formam o seu núcleo e provêm acesso remoto à seus serviços.
• O servidor de aplicação têm um papel fundamental no fornecimento e gerenciamento dos recursos disponíveis.
• Java EE 5 traz consigo a especificação EJB3, que simplifica bastante o trabalho de codificação de EJBs.
![Page 60: J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser](https://reader035.vdocuments.com.br/reader035/viewer/2022062400/5706384d1a28abb8238f6946/html5/thumbnails/60.jpg)
...concluindo
WEB Tier(Struts, JSF)
Business Tier(Session/Message Driven Beans)
DB Tier(Oracle, DB2 ...)
Persistence Layer(Hibernate, Entity Beans)
SPW (Struts + EJB + Hibernate 3)