Session Beans Luiz C. D´Oleron SJCP Jobson Ronan

Slides:



Advertisements
Apresentações semelhantes
Sistemas distribuídos
Advertisements

ARQUITETURA EM CAMADAS
UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS
Sistemas Distribuídos
Exercícios de JSP
Prof. João Bosco M. Sobral
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
DAS Sistemas Distribuídos para Automação Industrial
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Fundação Aplicações de Tecnologias Críticas - Atech
Documentando con Javadoc
Introdução a EJB 3.0 Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Classes e objetos P. O. O. Prof. Grace.
Grupo de Pesquisa em ENGENHARIA DE SOFTWARE
Integração com Banco de Dados
Introdução à Programação Orientada a Objetos com Java
Remote Method Invocation RMI
Stateful Session Beans
Classes, Objetos, Atributos e Métodos JAVA
Conceitos de J2EE para a WEB
PESQUISADOR: CASSIANO DALCIN / 2010 Trabalho de Conclusão de Curso MINISTÉRIO DA EDUCAÇÃO Universidade Tecnológica Federal do Paraná Campus Medianeira.
25 de Novembro de 2004TM 1 J2EE Apresentado por Nuno Nunes.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Hibernate + JBoss Mapeamento O-R em aplicações corporativas Ricardo Cavalcanti Jobson Ronan
Arquitetura das JSP - Aula 2
Entity Beans Marco Antonio Arquiteto de Software Dezembro/2007.
SessionBeans Marco Antonio Arquiteto de Software.
RMI - JAVA.
Conceitos da arquitetura
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Introdução a JEE Marco A. S. Reis Arquiteto de Software Abril/2011.
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Capítulo 9 Arquivos JAR.
Ultimos recursos Jobson Ronan
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Conceitos Básicos e Manipulação de Objetos
JavaServer Faces Rapid Web Application Development em Java Ricardo Cavalcanti Jobson Ronan
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Introdução a JMS e Message-Driven Bean
APLICAÇÃO J2EE – EXEMPLO PRÁTICO Guilherme Amaral Avelino.
Developing Web Applications with JavaServer Faces (Qusay H. Mahmound) Luiza Pagliari Pablo Grigoletti Universidade Federal do Rio Grande do Sul Programa.
Hibernate + JBoss Mapeamento O-R em aplicações corporativas Ricardo Cavalcanti Jobson Ronan
Java EE Message Driven Beans
Programação com Objetos Distribuídos (Vânia R. Sávio Rodenas) 1 Transações com EJB 3.0 Vânia Regina Sávio Rodenas.
1 EJB Enterprise JavaBeans MAC 440/5759 Sistemas de Objetos Distribuídos Prof. Fabio Departamento de Ciência da Computação IME - USP (Boa parte destes.
J2EE 1.4 (EJB 2.1) Ago/2006 Softplan/Poligraph Alessandro Lemser.
Implementando um sistema real com EJB Klissiomara Dias GENTe.
Transações em J2EE Mara Denise Coutinho da Silva Sandra Luzia Cortinovi Universidade Federal do Rio Grande do Sul Instituto de Informática Web e Sistemas.
Camada de Persistência
Feapa Prof Osiel Marlon Disciplina: Engenharia de Software 2009 Curso: Sistemas de Informação.
Sistema Almirante Gabriel Junji Ito Giuliano Diego Barbarra.
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Servidores.
Entity beans BMP Persistência explícita Ricardo Cavalcanti Jobson Ronan
Introdução a JMS e Message-Driven Bean Comunicação Assíncrona Ricardo Cavalcanti Jobson Ronan
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
Fundamentos de EJB Componentes do framework Ricardo Cavalcanti Jobson Ronan
O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aspectos de Segurança Autenticação e Controle de Acesso Ricardo Cavalcanti Jobson Ronan
Aspectos de performance EJB Performance tuning Ricardo Cavalcanti Jobson Ronan
ALUNO: RONI FABIO BANASZEWSKI Model-View-Controller.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Introdução a AOP + SpringAOP Jobson Ronan
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Session Beans Luiz C. D´Oleron SJCP Jobson Ronan

O que são?  São objetos de processo de negócio  Implementam lógica e regras de negócios, algoritmos e workflow  São componentes reusáveis que representam acções  Sua principal diferença dos Entity Beans é o seu escopo de vida  Um Session Bean dura no máximo uma sessão (do cliente)

O que são?  Sessão?  Tempo que o browser está aberto  Tempo que um outro bean usa o session bean  Tempo que uma aplicação remota esta aberta  Session Beans são Objetos transientes  Não tem seu estado armazenado em meio persistente

Tipos de Session Beans  Clientes efetuam um diálogo com o bean (dialogo é a interação do cliente com o bean)  Consiste de uma ou mais chamadas entre cliente e bean  Dura um processo de negocio para o cliente  Os dois tipos de Session Beans implementam diferentes tipos de diálogos  Stateful Session Beans  Stateless Session Beans

Tipos de Session Beans  Stateful Session Beans implementam diálogos que consistem de várias requisições onde certas requisições podem depender de requisições anteriores  Stateless Session Beans implementam dialogos que consistem de apenas um requisição

Stateless Session Beans  Como stateless session beans não mantém informação de estado do diálogo, todas as instâncias do mesmo bean são equivalentes e indistiguíveis  Não importa que chamou o bean no passado, qualquer instância disponível de um session bean pode servir a qualquer cliente  Por este motivo, Stateless Session beans podem ser guardados em um pool, reutilizados, e passados de um cliente para outro em cada chamada de método

Stateless Session Beans  Pool de Stateles Session Beans Cliente Interface remota EJBObject invoke() Pool de Stateles Beans Bean invoke()

Stateless Session Beans  Pela interface javax.ejb.SessionBean, cada Session bean precisa implementar os seguintes métodos  void setSessionContext (SessionContext ctx) Associa o bean com o contexto da sessão O contexto pode ser usado para obter referências para o interceptador remoto e local do bean, se necessário Guarde a referência em uma variável de instância //... private SessionContext ctx; void setSessionContext(SessionContext ctx) { this.ctx = ctx } //...

Stateless Session Beans  void ejbCreate() Realiza a inicialização do bean. Pode ser vazio.  void ejbRemove() Chamado antes de liberar recursos e ser removido da memória. Pode ser vazio.  void ejbPassivate() Não implementado por Stateless Session Beans. Deixe vazio.  void ejbActivate() Não implementado por Stateless Session Beans. Deixe vazio.

Stateless Session Beans  javax.ejb.SessionContext  Usado para obter o contexto de execução do Session Bean  Extende javax.ejb.EJBContext com dois metodos getEJBLocalObject(): retorna a referência para o interceptador local (gerado pelo container) getEJBObject(): retorna a referência para o interceptador remoto (que é objeto Remote)  Estes métodos podem ser usados quando desejar passar a referência de seu objeto remoto para algum método.

Ciclo de vida Bean não existe Pool de instancias equivalentes prontas ejbRemove() Container decide que não precisa mais de tantas instancias metodo() 1: Class.newInstance() 2: ejbSetSessionContext() 3: ejbCreate() Container decide que precisa de mais instancias para servir aos clientes Qualquer cliente chama um método de negócio em qualquer EJBObject

Exemplo  Interfaces Home e Remote package org.citi.pec.ejbs; //imports... public interface Loja extends javax.ejb.EJBObject { public Collection listarProdutos() throws RemoteException; //... } package org.citi.pec.ejbs; //imports... public interface LojaHome extends javax.ejb.EJBHome { public Loja create() throws RemoteException, CreateException; //... } * Compare o create() do EJBHome com o ejbCreate() do Bean

Exemplo  Enterprise JavaBean package org.citi.pec.ejbs; //imports... public class LojaBean implements javax.ejb.SessionBean { private SessionContext sessionContext; public Collection listarProdutos() { System.out.println("LojaBean.listarProdutos()"); // implementação; } public void ejbCreate() throws CreateException { System.out.println("LojaBean.ejbCreate()"); } public void ejbRemove() { System.out.println("LojaBean.ejbRemove()"); } public void ejbActivate() { System.out.println("LojaBean.ejbActivate()"); } public void ejbPassivate() { System.out.println("LojaBean.ejbPassivate()"); } public void setSessionContext(SessionContext ctx) { this.sessionContext = ctx; System.out.println("LojaBean.setSessionContext()"); } Implementação da interface

Exemplo  Deployment Descriptor <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" " Loja org.citi.pec.ejbs.LojaHome org.citi.pec.ejbs.Loja org.citi.pec.ejbs.LojaBean Stateless Container

Exemplo  Deployment Descriptor proprietário (JBoss – jboss.xml) <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" " Loja ejb/Loja

...Tudo isso só para um simples Stateless Session Bean?...Não poderia ser mais simples?

XDoclet  O que é?  É um engine open source gerador de código  Permite programar orientado a atributos em Java (antes do JDK1.5) utilizando tags especiais de JavaDoc  Desenvolvedor trabalha em apenas um arquivo.java por componente

XDoclet  Benefícios:  Não se preocupar com deployment descriptors desatualizados  Normalmente um simples EJB é composto por vários arquivos. Com XDoclet, trabalha-se apenas com um e o resto é gerado.  Incrível redução no tempo de desenvolvimento

Exemplo package org.citi.pec.ejbs; //..imports import javax.ejb.CreateException; /** name="Loja" * display-name="Name for Loja" * description="Description for Loja" * jndi-name="ejb/Loja" * type="Stateless" * view-type="remote" */ public class LojaBean implements SessionBean { private SessionContext ctx; public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException { this.ctx = ctx; } public void ejbRemove() throws EJBException, RemoteException {} public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} /** */ public void ejbCreate() throws CreateException {} /** view-type = "remote" */ public Collection listarProdutos() { //...implementação }

...O resto é gerado  Loja.java /* * Generated by XDoclet - Do not edit! */ package org.citi.pec.ejbs; /** * Remote interface for Loja. at ${TODAY} The XDoclet Team XDoclet ${version} */ public interface Loja extends javax.ejb.EJBObject { public java.util.Collection listarProdutos( ) throws java.rmi.RemoteException; }

...O resto é gerado  LojaHome.java /* * Generated by XDoclet - Do not edit! */ package org.citi.pec.ejbs; /** * Home interface for Loja. at ${TODAY} The XDoclet Team XDoclet ${version} */ public interface LojaHome extends javax.ejb.EJBHome { public static final String COMP_NAME="java:comp/env/ejb/Loja"; public static final String JNDI_NAME="ejb/Loja"; public org.citi.pec.ejbs.Loja create() throws javax.ejb.CreateException,java.rmi.RemoteException; }

...O resto é gerado  ejb-jar.xml <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" " Generated by XDoclet Name for Loja Loja org.citi.pec.ejbs.LojaHome org.citi.pec.ejbs.Loja org.citi.pec.ejbs.LojaBean Stateless Container....

...O resto é gerado  jboss.xml <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" " Loja ejb/Loja

Exemplo  Demostração prática:  Eclipse + JBossIDE (plugin) + XDoclet

Patterns  Session Facade  Aplicar os beneficios do padrão tradicional facade para EJBs  Esconder completamente o modelo dos objetos do servidor da camada do cliente  Implementar um caso de uso por chamada de rede

Patterns  Sem o padrão Session Facade

Patterns  Sem o padrão Session Facade  Problemas Alto overhead da rede Probre concorrencia (Transações longas) Alto acoplamento Pobre reusabilidade Difícil manutenção Pobre separação de papéis

Patterns  Com Session Facade

Patterns  Com Session Facade  Benefícios Baixo overhead da rede Limpa e estrita separação entre lógica de negócio e lógica da camada de apresentação Integridade transacional Baixo acoplamento Boa reusabilidade Melhor manutenção Limpa separação verbo-nome

Conclusões  Stateless Session Beans são os Beans mais simples  Permitem implementar qualquer aplicação distribuída implementável com RMI  Porém, tem seu ciclo de vida controlado pelo container, além de poderem utilizar os serviços fornecidos por este (autenticação, autorização, transações, etc.)  *Não defina atributos de instâncias em Stateless Session Beans!

E mais...  A partir da especificação 2.1 dos EJBs, Stateless Session Beans podem prover interfaces de Web Services para clientes

Referências [1] Ed Roman, Mastering EJB 3, 2002, Capítulo 4 [2] Dale Green. Session Beans. J2EE Tutorial, Sun [3] Linda G. deMichiel et al. Enterprise JavaBeans™ 2.1 Specification. Sun Microsystems, 2003 [4] XDoclet, Doc for RC1.

Exercício (1/3)  Criar um Session Bean Stateless Loja que possui o metodo:  String[] listarProdutos() Retorna uma array de Strings com o nome dos produtos cadastrados no sistema Este produtos podem estar cadastrados staticamente. Ex: Como Atributo

Exercício (2/3)  Criar uma Calculadora remota com metodos:  double somar(double, double)  double multiplicar(double, double)

Exercicio (3/3)  Criar um objeto Produto, com nome e valor  Criar um Session Bean ListaProdutos com o metodo:  Produto[] listarProdutos()  boolean isDisponível(Produto p)