sessionbeans marco antonio arquiteto de software

Post on 22-Apr-2015

109 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SessionBeansMarco AntonioArquiteto 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.

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.

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.

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

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

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

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

NetBeans, Eclipse• Automatize o máximo que conseguir

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

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

XDoclet• Para automatizar o

processo de desenvolvimento iremos utilizar o XDoclet

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

O projeto• Vamos criar

nosso projeto J2EE conforme o exemplo

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

conferidas na figura a seguir

New Server• Configuração do

servidor de aplicação

Diretório do JBoss• Informe o diretório

raíz do JBoss

Configuração• Dados sobre

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

Facets• Mude a versão do Java para 5.0

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)

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

configurar algumas propridades do XDoclet

ejbdoclet• Clique na opção

JBoss -> Edit

webdoclet• Clique na opção

JBoss -> Edit

Criação de EJB• O mecanismo

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

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

Session bean• EJB da camada

de negócio• Responsável

pelas regras de negócio da aplicação

EJB• Dados da

classe (projeto, package, nome)

EJB• Dados dos

arquivos de configuração

• Esses nomes serão registrados no JBoss

EJB• Desmarque a

opção “Abstract”• Nosso primeiro

EJB está pronto

Estrutura de arquivos• A única classe que

criamos foi a FachadaContaCorrenteBean

• Todas as demais foram geradas pelo XDoclet de forma automatizada

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

direito do mouse no servidor disponível

Projetos• Adicione nosso

projeto no servidor

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

Start do servidor

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

Arquivos gerados

jndi.properties• Esse arquivo de propriedades indica os

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

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

Cliente• O último passo

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

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(); } }}

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);}

Publishing• Quando o status do servidor estiver diferente

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

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

logo abaixo

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(); } }}

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

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

Saída no console

Dúvidas?

top related