1 / 47

SessionBeans

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.

zeph-hogan
Download Presentation

SessionBeans

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SessionBeans Marco Antonio Arquiteto de Software

  2. 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. • São objetos transientes, pois não são persistidos.

  3. O que é importante • J2EE é 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.

  4. Tipos de session beans • Stateless – 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.

  5. Aplicações J2EE • Construir aplicações J2EE de boa qualidade exige conhecimento de: • Design patterns • Frameworks • Detalhes do funcionamento do AppServer

  6. 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

  7. Aplicações J2EE • Utilize ferramentas como XDoclet, Ant, NetBeans, Eclipse • Automatize o máximo que conseguir

  8. Aplicações J2EE • Trabalhar com equipes heterogêneas, muitas vezes terceirizadas, requer esforço extra para garantir código de boa qualidade

  9. XDoclet • Para automatizar o processo de desenvolvimento iremos utilizar o XDoclet • Na figura podemos ver as configurações necessárias

  10. O projeto • Vamos criar nosso projeto J2EE conforme o exemplo

  11. Projeto de exemplo • O nome do projeto é SistemaBancario • As demais configurações podem ser conferidas na figura a seguir

  12. New Server • Configuração do servidor de aplicação

  13. Diretório do JBoss • Informe o diretório raíz do JBoss

  14. Configuração • Dados sobre endereço IP, porta do servidor, porta do JNDI e tipo de configuração do servidor

  15. Facets • Mude a versão do Java para 5.0

  16. 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)

  17. Configurações do XDoclet • No menu Window -> Preferences, vamos configurar algumas propridades do XDoclet

  18. ejbdoclet • Clique na opção JBoss -> Edit

  19. webdoclet • Clique na opção JBoss -> Edit

  20. Criação de EJB • O mecanismo padrão para geração de EJB é o XDoclet • Por isso é a única opção disponível

  21. Session bean • EJB da camada de negócio • Responsável pelas regras de negócio da aplicação

  22. EJB • Dados da classe (projeto, package, nome)

  23. EJB • Dados dos arquivos de configuração • Esses nomes serão registrados no JBoss

  24. EJB • Desmarque a opção “Abstract” • Nosso primeiro EJB está pronto

  25. Estrutura de arquivos • A única classe que criamos foi a FachadaContaCorrenteBean • Todas as demais foram geradas pelo XDoclet de forma automatizada

  26. Servidor • Mude para a perpectiva Java EE • Abra a guia Servers e clique com o botão direito do mouse no servidor disponível

  27. Projetos • Adicione nosso projeto no servidor

  28. 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

  29. Start do servidor • Clique no botão “Start the server” e acompanhe as mensagens

  30. Arquivos gerados

  31. jndi.properties • Esse arquivo de propriedades indica os dados do servidor que tem os serviços disponíveis

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

  33. Cliente • O último passo é a criação do cliente que irá acessar o serviço criado

  34. Cliente package 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(); } } }

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

  36. Publishing • Quando o status do servidor estiver diferente de Synchronized você deve publicar a aplicação de novo

  37. Mensagem de deploy • O diretório de deploy do JBoss está listado logo abaixo

  38. Cliente v2.0 package 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(); } } }

  39. Execução do cliente • Você pode rodar o JBoss dentro do Eclipse ou direto no console (bem mais rápido, mas sem debug)

  40. Saída no console

  41. Dúvidas?

More Related