sessionbeans marco antonio arquiteto de software

47
SessionBeans Marco Antonio Arquiteto de Software

Upload: internet

Post on 22-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SessionBeans Marco Antonio Arquiteto de Software

SessionBeansMarco AntonioArquiteto de Software

Page 2: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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

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

Page 6: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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

NetBeans, Eclipse• Automatize o máximo que conseguir

Page 8: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

XDoclet• Para automatizar o

processo de desenvolvimento iremos utilizar o XDoclet

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

Page 10: SessionBeans Marco Antonio Arquiteto de Software

O projeto• Vamos criar

nosso projeto J2EE conforme o exemplo

Page 11: SessionBeans Marco Antonio Arquiteto de Software

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

conferidas na figura a seguir

Page 12: SessionBeans Marco Antonio Arquiteto de Software
Page 13: SessionBeans Marco Antonio Arquiteto de Software

New Server• Configuração do

servidor de aplicação

Page 14: SessionBeans Marco Antonio Arquiteto de Software

Diretório do JBoss• Informe o diretório

raíz do JBoss

Page 15: SessionBeans Marco Antonio Arquiteto de Software

Configuração• Dados sobre

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

Page 16: SessionBeans Marco Antonio Arquiteto de Software

Facets• Mude a versão do Java para 5.0

Page 17: SessionBeans Marco Antonio Arquiteto de Software
Page 18: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software
Page 20: SessionBeans Marco Antonio Arquiteto de Software

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

configurar algumas propridades do XDoclet

Page 21: SessionBeans Marco Antonio Arquiteto de Software
Page 22: SessionBeans Marco Antonio Arquiteto de Software

ejbdoclet• Clique na opção

JBoss -> Edit

Page 23: SessionBeans Marco Antonio Arquiteto de Software
Page 24: SessionBeans Marco Antonio Arquiteto de Software

webdoclet• Clique na opção

JBoss -> Edit

Page 25: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

Session bean• EJB da camada

de negócio• Responsável

pelas regras de negócio da aplicação

Page 27: SessionBeans Marco Antonio Arquiteto de Software

EJB• Dados da

classe (projeto, package, nome)

Page 28: SessionBeans Marco Antonio Arquiteto de Software

EJB• Dados dos

arquivos de configuração

• Esses nomes serão registrados no JBoss

Page 29: SessionBeans Marco Antonio Arquiteto de Software

EJB• Desmarque a

opção “Abstract”• Nosso primeiro

EJB está pronto

Page 30: SessionBeans Marco Antonio Arquiteto de Software

Estrutura de arquivos• A única classe que

criamos foi a FachadaContaCorrenteBean

• Todas as demais foram geradas pelo XDoclet de forma automatizada

Page 31: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

Projetos• Adicione nosso

projeto no servidor

Page 33: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software
Page 35: SessionBeans Marco Antonio Arquiteto de Software

Start do servidor

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

Page 36: SessionBeans Marco Antonio Arquiteto de Software

Arquivos gerados

Page 37: SessionBeans Marco Antonio Arquiteto de Software

jndi.properties• Esse arquivo de propriedades indica os

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

Page 38: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

Cliente• O último passo

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

Page 40: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

Publishing• Quando o status do servidor estiver diferente

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

Page 43: SessionBeans Marco Antonio Arquiteto de Software

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

logo abaixo

Page 44: SessionBeans Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

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 Marco Antonio Arquiteto de Software

Saída no console

Page 47: SessionBeans Marco Antonio Arquiteto de Software

Dúvidas?