Criando uma aplicação com JSR-371(MVC 1.0)
Neste artigo criaremos uma aplicação simples para demostrar o uso da API MVC 1.0 (JSR 371) do Java EE 8 juntamente com MongoDB.
Boa Leitura.
Introdução ao MVC 1.0
MVC é um padrão comum em frameworks web, onde este é usado predominantemente para criar aplicativos HTML. Frameworks web podem ser categorizados como Action-Based ou Component-Based. Em Action-Based, as solicitações HTTP são encaminhadas para controladores onde elas são transformadas em ações pelo código da aplicação. Em Component-Based, as solicitações HTTP são agrupadas e normalmente tratadas por framework de Componente, com pouca ou nenhuma interação do código da aplicação. Em outras palavras, um framework baseado em componentes, a maioria da sua lógica do controle é fornecida pelo framework em vez da aplicação.
Esta API se enquadra na categoria Action-Based, ela não se destina a substituição de frameworks baseado em componentes como a JSF, mas simplesmente uma alternativa para a construção de aplicações web para a plataforma Java EE.
Os Objetivos da API:
De acordo com a sua especificação está api propõe os seguintes objetivos:
- Aproveitar as tecnologias Java EE existentes.
- Integrar com CDI e Bean Validation
- Definir um núcleo solido para construir aplicações MVC sem a necessidade suportar todas as funcionalidade em sua primeira versão.
- Explora as camada em cima do JAX-RS com a finalidade de reutilizar suas camadas de Matching e binding.
- Fornece suporte interno para JSP e Facelets.
Não são Objetivos da API:
- Definir uma nova linguagem de visualização(template) e processador.
- Suporte a serviços REST não baseads em JAX-RS.
- Suporte a implementação autônoma do MVC executado fora do Java EE.
- Fornecer suporte interno para views que não fazem parte do Java EE.
Criando o Projeto
Antes de inciarmos a criação do projeto devemos fazer o download do servidor de Aplicação para que o mesmo funcione. Aqui vamos utilizar uma versão especifica do GlassFish que pode ser baixada no seguinte link : http://download.oracle.com/glassfish/5.0.1/nightly/latest-web.zip . Feito isso, podemos da inicio.
Com o Eclipse aberto, vá File -> New → Maven Project irá abrir a seguinte Janela :
clique em Next para ir para a seguinte tela :
clique em Next, na próxima deixe preenchida da seguinte forma e clique em Finish:
com o projeto criado,vá em src/main/webapp, nela apague a pasta WEB-INF. Depois clique com o botão direito do mouse e vá em Properties, navegue até a opção Targeted Runtimes, marque a opção, que no caso vamos utilizar o GlassFish, depois clique em Uninstall Facets… :
ao chegar nesta tela desmaque Dynamic Web Module , altere Java 1.5 para 1.8,marque CDI,Glassfish Web Extensions e JAX-RS e clique em Finish. Abra novamente a mesma tela e maque Dynamic Web Module e mude de 2.3 para 3.1 e clique em Next para configura a proxima tela e a configure como abaixo :
Clique em Finish e depois em OK.
Agora iremos configurar nosso pom.xml, com a seguinte configurações :
Na pasta WEB-INF , configure o beans.xml do CDI da seguinte forma :
Ainda dentro de WEB-INF também crie uma pasta chamada views.
Depois clique em cima do projeto e de “Alt +F5” para fazer update do maven :
Clique em OK e finalizamos a parte de criação projeto, podemos da inicio a codificação de nossas classes .
Criando a Constantes.java
Está classe é bem simples, ela irá somente conter valores constantes, que não serão modificadas. Isso para evitar ter muitas hardCode espalhado por todo o código, assim esse classe irá centralizar tudo de maneira organizada.
Crie uma classe chamada Constantes no package br.com.danieldias.commons, com o seguinte conteúdo :
Criando as Entidades
Crie as classes Pessoa.java e Endereco.java no package br.com.danieldias.model , com o seguinte conteúdo :
A anotação @FormParam, são utilizados para pegar os valores do form do html.
Criando o Repositorio
Agora criaremos uma Inteface chamada MongoDAO ,uma classe chamada PessoaDAO e uma classe que ira criar a fabrica de conexão chamada MongoDBFactory no package br.com.danieldias.persistencia, com os seguintes conteúdos:
A classe PessoaDAO é onde fica todas as operações de CRUD para o MongoDB, nada muito fora do comum, tudo muito simples e fácil compreensão. Repare que estamos usando a classe Constantes aqui no lugar de String para facilitar o entendimento e deixar o código mas limpo.
Agora nossa interface generica:
Criando os Controles
Entramos na parte principal, aqui veremos com a api funciona.
Crie uma nova classe chamada PessoaController no package br.com.danieldias.controller, com o seguinte conteúdo :
O código é semelhante ao que usamos no Spring. Então nessa parte fica bem tranquila de aprender quando a API for lançada oficialmente, é até la vai haver muitas mudanças e melhoramentos.
O @Controller, quando aplicada a uma classe, todos os métodos nele são considerados como controladores. Ao usar a anotação @Controller em um subconjunto de métodos define uma classe hibrida em que certos métodos são controladores e outros são métodos tradicionais do JAX-RS.
O @Path é o endereço que iremos acessar determinada ação para o controlador e acessar outros métodos por outras endereços também, isso é semelhante ao @RequestMapping() do spring.
A class Viewable encapsula informações sobre uma visualização, bem como, opcionalmente, informações sobre como ele deve ser processado. Mais precisamente, uma instância Viewable pode incluir referências a Modelos e Objetos ViewEngine. Comparada ao Spring ela seria como ModelAndView.
Models é a interface que define um mapa entre nomes e objetos. O suporte para a interface Models é obrigatória para todos os view engines, porém podemos usar OPCIONALMENTE o @Named do CDI que é fortemente recomendado para aproveitar a integração CDI e EL existente na plataforma.
Os métodos do controlador que retornam um tipo não-vazio(void) também podem ser decorados com @View como uma forma de especificar um padrão para o controlador. A visualização padrão deve ser usada somente quando tal controlador não vazio retorna um valor nulo.
A anotação @BeanParam é algo novo adicionado na especificação JAX-RS 2.0. Ele permite que você injete uma classe específica de aplicativo cujos métodos de propriedade ou campos são anotados com qualquer um dos parâmetros de injeção, como foi utilizada o @FormParam.
@PathParam permite que você injete o valor de parâmetros de caminho URI nomeados que foram definidos em expressões @Path.
Criando as Views
Agora daremos inicio a criação de 4 páginas para nossa aplicação que são : alterar.jsp, inserir.jsp ,mostrar.jsp que devem ser criada na pasta views que fica dentro de WEB-INF, já a index.jsp deve ser criada em na pasta webapp.
Iniciaremos pela a página mostrar.jsp, onde a mesma terá uma tabela onde os dados serão apresentados, 3 links um para chamar a paǵina alterar.jsp passando um parâmetro que é seu id e um que irá chamar no controle o deletar com parâmetro id e um para estarmos adicionando os dados no formulario inserir.jsp :
Algo importante nesta tela. Aqui os atributos passado devem SER o mesmo que estão no mongoDB, ou seja as colunas tem que ter os mesmo nome. A mesma coisa nesse techo : ${pessoas.jugs.get(0).nome}, aqui estou retornado o primeiro posição no array, se quisermos chamar outra posição fazemos assim : ${pessoas.jugs.get(1).lideres}. A proxima tela é um formulario bem simples com o seguinte conteudo :
e última tela que contem um formulário já preenchido com os valores do banco que podem ser alterados :
agora nossa pagina index.jsp contendo a url para chamar a tela mostrar.jsp e iniciar a aplicação.
por fim iniciar a aplicação devemos criar uma classe que extenda a javax.ws.rs.core.Application e anota-la com @ApplicationPath, essa classe deve ser criada no package br.com.danieldias.application com o seguinte conteúdo :
Rodando a Aplicação
Com tudo pronto, podemos testar a nossa aplicação:
Primeiramente inicie o MongoDB através do prompt/terminal com o seguinte comando : mongod, como na imagem:
Depois rode a aplicação no glassfish , com o botão direito do mouse clique no seu projeto e vá em Run As -> Run on Server, ao inicia a aplicação a página principal será carregada com abaixo :
Clique no link para ser levado a pagina que lista todos os dados, como na imagem :
Clique no link Adicionar, irá ser levado para a tela de formulário:
Ao clicar em Cadastrar Dados, voltará para a tela de listagem dos dados :
Agora clicando em Excluir irá deletar a informação através do ID que foi passado por parâmetro. Em Alterar será levado a tela de alteração de dados e retornara para tela de listagem :
Bem isso é tudo, aqui aprendemos a como fazer uma aplicação utilizado a api MVC1.0 do JEE 8 com MongoDB . O projeto pode ser baixado no meu GitHub.
Outros exemplos da API pode ser encontrados aqui : https://github.com/spericas/ozark/tree/master/test
Para saber mais sobre a API visite os seguintes sites :
mvc-1–0-jsr-para-um-framework-mvc-action-based-na-java-ee-8