A tecnologia java pode ser dividida em três grandes grupos: Java SE, Java ME e Java EE. Fazendo um super resumo pode-se dizer que Java SE é são as funcionalidade básicas, aquelas que você viu na faculdade (se fez computação ou algo similar), Java ME é utilizado para fazer aplicações para aparelhos móveis tipo celular, pdas entre outros e Java EE é utilizado quando se deseja fazer aplicações de grande porte.
stateful session beans é um dos componentes que estão disponiveis no Java EE, ou seja, utilizado em geral para aplicações de grande porte. O Objetivo aqui não é escrever um artigo e sim explicar na prática como se faz uso desta funcionalide, portanto não vou entrar em muito detalhes técnicos apenas o necessário para entender onde e como usar.
Quando você desenvolve uma aplicação de grande porte em qualquer linguagem você acaba precisando de uma série de funcionalidades que em geral as linguagens proporcionam de maneira transparente ou quase transparente. Basicamente pode-se dizer que um stateful session bean é uma classe java a qual é executada dentro de um Servidor (Container EJB) que pode adicionar uma série de funcionalidades se necessárias.

Por exemplo: Você Fez um cliente Desktop e deseja executar um processo para gravar dados em um banco de dados, mas esse banco está em um servidor. Os Session Beans (existe outro tipo chamado Stateless) permite que você execute um método de uma classe que está rodando no Servidor, esta caracteristica é chamada de remotabilidade.
Existem outras caracteristicas como Controle Transacional, mas vou falar sobre isso quando falar sobre JPA que é a parte do Java EE que serve para persistir ou gravar informações no banco de dados.
Então, voltando ao stateful session bean. Ele tem uma caracteristica que o diferencia do outro bean (stateless) pois mantém seu estado. Isso quer dizer que o EJB container deverá manter um stateful session bean por cliente e tudo o que estiver dentro dessa classe é mantido por um determinado tempo (que pode ser configurado). Exatamente por este motivo que muitas pessoas tem receio de utilizar pois imagine um sistema com uma quantidade enorme de usuários simultâneos, o EJB Container terá que alocar (e manter alocada) memória suficiente para manter o estado de cada Instância. Então este tipo de session bean deve ser utilizado com cuidado, sempre se deve analisar a quantidade de recurso alocada pois ele mantem seu estado. Uma péssima pratica é por exemplo manter o estado da conexão com o banco aberta, imagine se uma quantidade enorme de usuários resolve fazer isso, sua aplicação dificilmente será escalável.
Um exemplo de simples entendimento para o uso de stateful session bean é um carrinho de compras. Imagine que você tem uma página com uma lista de produtos e o usuário vai selecionando os produtos para comprar, você vai armazendo os mesmos e no final do processo você grava esses dados no Banco. Você pode utilizar um Stateful Session Bean para fazer isso. E é exatamente esse o exemplo que será implementado e disponibilizado aqui.
Desta primeira vez vou mostrar como configurar o ambiente da maneira mais simples possível já que não encontrei nenhum Post por ai que explique de maneira simples. Eu constumo utilizar o Netbeans e neste caso vou ensinar a instalar o GlassFish (É uma versão OpenSource do Sun Application Server 9). Então vamos aos passos:
1. Primeiro você tem que ter a versão 1.5 do JDK, clique no Download do JDK 5.0 Update 10 , selecine o arquivo Windows Offline Installation, Multi-language e instale.
2. Baixar o Netbeans 5.5 simplesmente clique no Download Netbeans IDE e instale.
ps: A versão do GlassFish que vem com o netbeans tá com problema (pelo menos estava) então baixe separado.
3. Baixar o GlassFish na página da Sun. Você deve baixar o Java EE SDK Update 1. Clique no Download simples. Instale. Lembre-se da senha, será necessária mais tarde.
4. Abra o Netbeans (Será necessário configurar o GlassFish). Clique em Tools > Server Manager. Add Server. Sun Java System Application Server. Next. Browse e selecione o diretório onde você instalou o GlassFish, se tudo der certo o Netbeans preencherá as informações abaixo (Domain etc). Apenas clique Finish.
5. Parabéns seu ambiente para desenvolvimento Java EE está pronto. (aaa .. agradeça ao céus, isso nem sempre funciona).
Assista o passo a passo (Foi feito com o Wink )
A apresentação acima não mostra o projeto todo (senão ficava muito grande o arquivo), apenas os passos para você aprender a utilizar as ferramentas que o Netbeans tem para auxiliar na criação de classes, beans, projeto etc.
O bean criado ManterCarrinhoBean está totalmente funcional. Como ele é um stateful ele será criado quando o usuário acessar pela primeira vez e destruido depois que um determinado tempo passar ser ele ser utilizado (isso quem controla é o servidor, não vou entrar em detalhes). Então se você por exemplo criar uma ArrayList privado e adicionar o codigoProduto a cada chamada do método adicionarItem, o array irá sendo incrementado e voilá .. você tem seu carrinho de compras implementado com stateful session beans. Obviamente para ficar um exemplo legal você terá que implementar outras coisas como:
1. classe Produto com Código e Descrição.
2. classe ProdutoItem com um Produto e a quantidade comprada.
3. Um stateless session bean que trará a lista de produtos que você tem na sua loja. Esse pode ser stateless .. explico isso em outro post, apenas copie o código. rs.
4. Um outro managed bean que será utilizado para buscar a lista dos produtos e apresentar ao usuário.
5. Alterar o stateful + managed bean (CarrinhoBO) para poder adicionar e remover itens do carrinho.
6. Modificar o JSF para que sejam apresentados controles para tudo isso.
Você pode baixar o Código Completo aqui.
Existem algumas anotações que você pode utilizar para controlar melhor o seu stateful session bean, elas devem ser colocadas sobre métodos com assinatura void metodo().
@PostConstruct: Executa o método após o container inicializar o objeto;
@PreDestroy: Antes do container destruir o objeto
O container pode ser configurado para passivar e ativar objetos, ou seja, é mais ou menos como a memória virtual de um sistema operacional, o servidor se encarrega de guardar no disco (serializados) objetos pouco utilizados e colocá-los na memória quando forem necessários.
@PrePassivate: Antes do container passivar o objeto
@PostActivate: Após o containier ativar o objeto
Essas anotações podem ser uteis caso você deseje inicializar ou fechar algum tipo de recurso, por exemplo, conexão com um mail server ou algo do tipo.
É isso ai .. espero que tenha sido útil.
3 comments:
Legal Raphael, parabéns pelo primeiro post!
Ass: Daniel - Summa
Ei.. eu não exclui nada .. esse blogger ta louco !!!!
Post a Comment