DESENVOLVIMENTO WEB COM JSF E OS ESCOPOS VIEW, REQUEST, SESSION, APPLICATION E CONTROLE DE TRANSAÇÕES COM EJB Vinicios Fernandes de Lima¹, Willian Barbosa Magalhães¹ ¹Universidade Paranaense (Unipar) Paranavaí – PR – Brasil [email protected] [email protected] Resumo. O presente trabalho aborda as tecnologias utilizadas na produção de softwares para a WEB, com o objetivo de proporcionar uma visão do desenvolvimento ágil e produtivo utilizando a tecnologia Java juntamente com o framework JSF (Java Server Faces) e EJB (Enterprise Java Beans), apresentando os escopos view, request, session e application do JSF. Para tal foi realizada uma pesquisa utilizando-se de livros, artigos, apostilas e sites da internet. Com o desenvolvimento do trabalho foi possível observar que o framework JSF, é uma ferramenta robusta proporcionando um desenvolvimento mais ágil e garantido um maior gerenciamento da aplicação. 1. Introdução Desenvolver aplicações WEB (World Wide Web) utilizando a tecnologia Java não é uma tarefa fácil, entretanto há um suporte muito grande, onde muitos profissionais criam bibliotecas chamadas de frameworks que auxiliam o desenvolvimento com a tecnologia. Atualmente frameworks são indispensáveis para o desenvolvimento de uma aplicação de pequeno, médio ou grande porte, contribuindo principalmente para uma maior produtividade e consistência da estrutura da aplicação, implicando em um produto de alta qualidade para o usuário final. A maioria dos frameworks utiliza como padrão de desenvolvimento o MVC (model – view - controller). O MVC é um conceito de engenharia de software, que recomenda a divisão de um software em três partes diferentes. O model que está associado ao trabalho atual que a aplicação administra, regra de negócio, lógica e funções. A view, é coesa a exibir os dados ou informações, saída de dados para tela, e o controller está designado a controlar as duas camadas anteriores exibindo a interface correta ou executando algum trabalho complementar [Gonsalves, 2007]. 2. Metodologia Este artigo foi desenvolvido por meio de consultas realizadas em sites, livros, artigos, e apostilas disponibilizadas na internet. 3. Desenvolvimento 3.1 Java Server Faces Java Server Faces é o framework proeminente em termos de programação em Java server-side (lado do servidor), cumprindo boa parte das suas promessas, desenvolvendo aplicações mais robustas e flexíveis sem misturar o código de modelo com o de visão. Com uma gama de componentes extensíveis tornando possível o uso de novas tecnologias [Geary, 2007]. O framework incorpora características MVC para WEB e de um modelo de interfaces gráficas baseado em eventos. Por basear-se no padrão de projeto MVC, uma de suas principais vantagens é a clara divisão entre a visualização e regras de negócio. A característica do MVC é repartir a aplicação em três camadas: model, view e controller: [Pitanga, 2004]. Model é responsável por representar os objetos de negócio, manter o estado da aplicação e fornecendo ao controlador o acesso aos dados. A visualização representa a interface com o usuário, sendo responsável por definir a forma como os dados serão apresentados e encaminhar as ações dos usuários para o controlador. Já a camada de controle é responsável por realizar a ligação entre o modelo e a visualização, além de decifrar as ações e as traduzir para uma operação sobre o modelo, onde são realizadas mudanças e, então, gerar uma visualização apropriada [Pitanga, 2004]. O controller é composto por um servlet denominado FacesServlet, por arquivos de configuração e por um conjunto de manipuladores de ações e observadores de eventos. O FacesServlet é responsável por receber requisições da WEB, redirecioná-las para o model e então remeter uma resposta. Os arquivos de configuração são responsáveis por realizar associações e mapeamentos de ações e pela definição de regras de navegação. Os manipuladores de eventos possuem a finalidade de receber os dados da camada de visualização, acessar o modelo, e então devolver o resultado para o FacesServlet [Pitanga, 2004]. Finalmente, a view é composta por component trees (hierarquia de componentes UI), tornando possível unir um componente ao outro para formar interfaces mais complexas, responsável pela entrada e saída das informações do software [Pitanga, 2004]. A Figura 1 a seguir mostra a arquitetura do Java Server Faces baseada no modelo MVC. Figura 1 - Arquitetura JSF baseada no modelo MVC Fonte: [Pitanga, 2004 p.2]. 3.2. Escopos Os managed beans são objetos básicos de uma aplicação JSF. Suas principais tarefas são fornecer dados que serão exibidos nas telas, receber os dados enviados nas requisições e executar tarefas de acordo com as ações dos usuários [K19, 2013]. Um managed bean pode ser definido de duas maneiras. A primeira maneira é criar uma classe Java e registrá-la no arquivo faces-config.xml. A segunda forma é criar uma classe Java com a anotação @ManagedBean do pacote javax.faces.bean. Essa anotação só pode ser utilizada a partir da versão 2.0 do JSF, é a mais utilizada atualmente [K19, 2013]. Utilizando a anotação @ManagedBean por padrão o JSF assumirá que o nome do managed bean é o nome da classe com a primeira letra minúscula, além disso, o escopo request será assumido como padrão, entretanto o tempo de vida de uma instância afeta principalmente a durabilidade dos dados que ela armazena, por isso podemos escolher qual o tipo de escopo utilizar em cada managed bean. A seguir será realizada uma breve abordagem dos escopos request, view, session e application. 3.2.1 Request No escopo request, as instâncias dos managed beans são criadas durante o processamento de uma requisição assim que forem necessárias e descartadas no final desse mesmo processamento. Desta forma os dados não são mantidos de uma requisição para outra [K19, 2013]. O JSF utiliza como padrão o escopo request quando managed beans são registrados usando essa anotação. Mesmo sendo o padrão, podemos deixar explícita a escolha do escopo request através da anotação @RequestScoped. A Figura 2 mostra como funciona o escopo request. Figura 2 - Representação gráfica do escopo request Fonte: [K19, 2013 p.150]. 3.2.2 View O escopo view foi adicionado no JSF 2.0 com a ideia de manter determinados dados enquanto o usuário não trocar de tela. As instâncias dos managed beans em escopo view são eliminadas somente quando há uma navegação entre telas [K19, 2013]. Para escolha do escopo view, deve-se utilizar a anotação @ViewScoped ou a tag managed-bean-scope para alterar do escopo request que é padrão. A Figura 3 representa como funciona o escopo view. Figura 3 - Representação gráfica do escopo view Fonte: [K19, 2013 p.151]. 3.2.3 Session Algumas informações devem ser mantidas durante as requisições de um determinado usuário. Por exemplo, considere uma aplicação que utiliza compra on-line como carrinho de compras. Um usuário faz diversas requisições para escolher os produtos e colocá-los no carrinho. Durante todo esse tempo, a aplicação deve guardar a informação de quais produtos já foram escolhidos. Por esses casos que apareceu o escopo session, onde cada usuário possui um espaço na memória do servidor que é chamado de sessão. Tecnicamente, é possível existir duas ou mais sessões de um mesmo usuário, por exemplo, se ele estiver utilizando dois ou mais navegadores [K19, 2013]. Nos managed beans definidos com o escopo de session as instâncias são criadas quando necessárias durante o processamento de uma requisição e armazenadas na sessão do usuário que fez a requisição [K19, 2013]. As instâncias criadas por esse escopo são eliminadas em duas ocasiões: quando a própria aplicação decide por algum motivo específico apagar a session de um usuário (logout) ou o servidor decide apagar a session de um usuário quando esse usuário não faz requisições por um determinado tempo [K19, 2013]. 3.2.4 Application Quando configurados com o escopo application, as instâncias dos managed beans são construídas no primeiro momento que são usadas e mantidas até a finalização da aplicação [K19, 2013]. Ao oposto dos escopos exemplificados anteriormente, as instâncias dos managed beans anotados com escopo application são compartilhadas na aplicação por todos os usuários. O JSF constrói somente uma instância de cada managed bean em escopo de application [K19, 2013]. Para utilização do escopo application, deve-se utilizar @ApplicationScoped ou a tag managed-bean-scope [K19, 2013]. a anotação Por padrão quando é utilizado application, a instância do managed bean é criada no momento que é utilizada pela primeira vez. Pode-se alterar o comportamento adicionando a propriedade eager na anotação @ManagedBean [K19, 2013]. 3.3 Controle de Transações com Enterprise JavaBeans Enterprise Java Bean (EJB) é a tecnologia Java padronizada para a criação de componentes em uma arquitetura distribuída, escalável, confiável e robusta. Em uma aplicação várias camadas com esse tipo de necessidade arquitetural, comumente utilizase EJBs para a camada de negócios. Para executar uma aplicação que emprega EJBs é necessário um servidor de aplicação, o qual é chamado de contêiner [Devmedia, 2013]. Enterprise Java Beans possui dois componentes para apresentar os serviços ao cliente, são o Session Bean Stateless e o Session Bean Stateful [Devmedia, 2013]. Session Bean Stateless normalmente destinam-se a executar operações individuais não guardando o estado para cada chamada do método. Não é especifico do cliente e em qualquer momento pode ser usado uma instância de um Stateless Session Bean. Não é um tipo de sessão pesada, pois o servidor de aplicação mantem algumas instâncias preparadas para receber requisições de seus clientes [Devmedia, 2013]. Session Bean Stateful ao contrario do Stateless esse tipo de sessão foi desenvolvida para ser utilizada especificadamente pelo cliente. Sua principal característica é guardar as operações realizadas enquanto a sessão do cliente estiver ativa. Esse modelo de escopo por ser mais robusto e utilizar mais recursos do servidor, possui uma pequena desvantagem em relação ao Stateless por ser um pouco mais lento, geralmente utilizados para desenvolver carrinhos de compra. 4. Considerações finais O framework JSF além de agilizar o processo de desenvolvimento, contribui para que hajam aplicativos com camadas mais bem definidas e distribuídas, facilitando o entendimento, manutenção do projeto e aumentado a qualidade do produto final. Também foram apresentados os escopos disponíveis no JSF, onde foi possível observar que é necessário tomar cuidado na escolha, pois esta escolha influencia diretamente na performance do sistema. Vale lembrar ainda que existem diversos outros frameworks disponíveis para facilitar o desenvolvimento de aplicativos, porém JSF é o que se destaca no mercado. Referências Gonsalves, Edson (2007). Desenvolvendo Aplicações Web com JSP, Servlets, Java Server Faces, Hibernate, EJB 3 Persistence e Ajax. Rio de Janeiro. Ciência Moderna Ltda. Gonsalves, Edson (2008). Dominando JavaServer Faces e Facelets Utilizando Spring 2.5, Hibernate e JPA. Rio de Janeiro. Ciência Moderna Ltda. Geary, David (2007). Core JavaServe Faces. Rio de janeiro. Alta Books. Pitanga, Talita. JavaServer Faces a mais nova tecnologia para desenvolvimento web. Disponível em:< www.guj.com.br/content/articles/jsf/jsf.pdf > Acesso em: 23 abril de 2013. K19 (s.d.). Desenvolvimento Web com JSF2 e JPA2. Disponível em: <http://www.k19.com.br/cursos/desenvolvimento-web-com-jsf2-e-jpa2> Acesso em: 26 abril 2013. Devmedia (s.d.). Java Magazine 74 - Enterprise Java Beans 3.1. <http://www.devmedia.com.br/artigo-java-magazine-74-enterprise-java-beans-31/15013> Acesso em: 27 maio de 2013.