47
SessionBeans Marco Antonio Arquiteto de Software

SessionBeans

Embed Size (px)

DESCRIPTION

SessionBeans. Marco Antonio Arquiteto de Software. Introdução. Componentes reutilizáveis que processam a regra do negócio. Contém métodos que representam ações (validarCpf, adicionarProduto, listarUsuarios). Seu ciclo de vida se resume a uma sessão. - PowerPoint PPT Presentation

Citation preview

Page 1: SessionBeans

SessionBeansMarco AntonioArquiteto de Software

Page 2: SessionBeans

IntroduçãoComponentes reutilizáveis que processam a regra do negócio.Contém métodos que representam ações (validarCpf, adicionarProduto, listarUsuarios).Seu ciclo de vida se resume a uma sessão.São objetos transientes, pois não são persistidos.

Page 3: SessionBeans

O que é importanteJ2EE é uma especificação bastante completa, prevendo todas as situações possíveis. Na prática, a maioria dessas situações é evitada, pois vamos usar boas práticas de programação, estratégias amplamente difundidas (padrões de projeto).Nosso exemplo será direcionado a uma típica aplicação EJB, sem a imensa maioria dos detalhes que fazem parte da teoria da especificação.

Page 4: SessionBeans

Tipos de session beansStateless – não mantém o valor dos atributos entre chamadas. É compartilhado entre clientes.Statefull – mantém o valor dos atributos entre chamadas. Consome muita memória, pois é criado um objeto para cada cliente. Não recomendado para sistemas corporativos.

Page 5: SessionBeans

Aplicações J2EE• Construir aplicações J2EE de boa qualidade

exige conhecimento de:– Design patterns– Frameworks– Detalhes do funcionamento do AppServer

Page 6: SessionBeans

Aplicações J2EE• Aplicações J2EE geram muito código

(interfaces home, remote, local)• Criar descritores EJB e WEB• Construir classes de apoio e utilitários

Page 7: SessionBeans

Aplicações J2EE• Utilize ferramentas como XDoclet, Ant,

NetBeans, Eclipse• Automatize o máximo que conseguir

Page 8: SessionBeans

Aplicações J2EE• Trabalhar com equipes heterogêneas,

muitas vezes terceirizadas, requer esforço extra para garantir código de boa qualidade

Page 9: SessionBeans

XDoclet• Para automatizar o

processo de desenvolvimento iremos utilizar o XDoclet

• Na figura podemos ver as configurações necessárias

Page 10: SessionBeans

O projeto• Vamos criar

nosso projeto J2EE conforme o exemplo

Page 11: SessionBeans

Projeto de exemplo• O nome do projeto é SistemaBancario• As demais configurações podem ser

conferidas na figura a seguir

Page 12: SessionBeans
Page 13: SessionBeans

New Server• Configuração do

servidor de aplicação

Page 14: SessionBeans

Diretório do JBoss• Informe o diretório

raíz do JBoss

Page 15: SessionBeans

Configuração• Dados sobre

endereço IP, porta do servidor, porta do JNDI e tipo de configuração do servidor

Page 16: SessionBeans

Facets• Mude a versão do Java para 5.0

Page 17: SessionBeans
Page 18: SessionBeans

Projeto cliente• Uma boa maneira de organizar o projeto é a

criação de vários subprojetos• Nesse exemplo serão três:

– SistemaBancario (núcleo da aplicação)– SistemaBancarioCliente (classes do cliente)– SistemaBancarioEAR (dados da aplicação)

Page 19: SessionBeans
Page 20: SessionBeans

Configurações do XDoclet• No menu Window -> Preferences, vamos

configurar algumas propridades do XDoclet

Page 21: SessionBeans
Page 22: SessionBeans

ejbdoclet• Clique na opção

JBoss -> Edit

Page 23: SessionBeans
Page 24: SessionBeans

webdoclet• Clique na opção

JBoss -> Edit

Page 25: SessionBeans

Criação de EJB• O mecanismo

padrão para geração de EJB é o XDoclet

• Por isso é a única opção disponível

Page 26: SessionBeans

Session bean• EJB da camada

de negócio• Responsável

pelas regras de negócio da aplicação

Page 27: SessionBeans

EJB• Dados da

classe (projeto, package, nome)

Page 28: SessionBeans

EJB• Dados dos

arquivos de configuração

• Esses nomes serão registrados no JBoss

Page 29: SessionBeans

EJB• Desmarque a

opção “Abstract”• Nosso primeiro

EJB está pronto

Page 30: SessionBeans

Estrutura de arquivos• A única classe que

criamos foi a FachadaContaCorrenteBean

• Todas as demais foram geradas pelo XDoclet de forma automatizada

Page 31: SessionBeans

Servidor• Mude para a perpectiva Java EE• Abra a guia Servers e clique com o botão

direito do mouse no servidor disponível

Page 32: SessionBeans

Projetos• Adicione nosso

projeto no servidor

Page 33: SessionBeans

Configuração de startup• No menu Run -> Open Run Dialog temos as

configurações de memória do servidor• Esse tipo de informação faz parte do tuning

da aplicação (ajuste fino)• Uma alternativa é deixar tudo em branco

Page 34: SessionBeans
Page 35: SessionBeans

Start do servidor

• Clique no botão “Start the server” e acompanhe as mensagens

Page 36: SessionBeans

Arquivos gerados

Page 37: SessionBeans

jndi.properties• Esse arquivo de propriedades indica os

dados do servidor que tem os serviços disponíveis

Page 38: SessionBeans

jndi.properties#java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.provider.url=jnp://localhost:1099java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Page 39: SessionBeans

Cliente• O último passo

é a criação do cliente que irá acessar o serviço criado

Page 40: SessionBeans

Clientepackage net.sistemabancario.negocio.cliente;

import javax.naming.Context;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;

import net.sistemabancario.negocio.FachadaContaCorrente;import net.sistemabancario.negocio.FachadaContaCorrenteHome;

public class FachadaContaCorrenteCliente { public static void main(String[] args) { try { Context ctx = new InitialContext(); Object obj = ctx.lookup(FachadaContaCorrenteHome.JNDI_NAME); FachadaContaCorrenteHome home = (FachadaContaCorrenteHome) PortableRemoteObject.narrow(obj, FachadaContaCorrenteHome.class); FachadaContaCorrente fachada = home.create(); fachada.foo(""); } catch (Exception e) { e.printStackTrace(); } }}

Page 41: SessionBeans

Novo método da fachada/** * @ejb.interface-method view-type = "remote" */public void sacar(String numeroDaConta, Double valorSacado) { System.out.println("Número da conta: " + numeroDaConta); System.out.println("Valor sacado: " + valorSacado);}

Page 42: SessionBeans

Publishing• Quando o status do servidor estiver diferente

de Synchronized você deve publicar a aplicação de novo

Page 43: SessionBeans

Mensagem de deploy• O diretório de deploy do JBoss está listado

logo abaixo

Page 44: SessionBeans

Cliente v2.0package net.sistemabancario.negocio.cliente;

import javax.naming.Context;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;

import net.sistemabancario.negocio.FachadaContaCorrente;import net.sistemabancario.negocio.FachadaContaCorrenteHome;

public class FachadaContaCorrenteCliente { public static void main(String[] args) { try { Context ctx = new InitialContext(); Object obj = ctx.lookup(FachadaContaCorrenteHome.JNDI_NAME); FachadaContaCorrenteHome home = (FachadaContaCorrenteHome) PortableRemoteObject.narrow(obj, FachadaContaCorrenteHome.class); FachadaContaCorrente fachada = home.create(); fachada.foo(""); fachada.sacar(“7594-9”, 350.0); } catch (Exception e) { e.printStackTrace(); } }}

Page 45: SessionBeans

Execução do cliente• Você pode rodar o JBoss dentro do Eclipse

ou direto no console (bem mais rápido, mas sem debug)

Page 46: SessionBeans

Saída no console

Page 47: SessionBeans

Dúvidas?