Aplicação Web Completa: Angular Twitter Bootstrap Spring MVC, Data e Security

Olá, tudo bem?

Hoje veremos como fazer uma aplicação Java web completa utilizando Spring, Angular, JQuery, Twitter Bootstrap, Tiles, Maven, Tomcat, JPA/Hibernate.

A aplicação feita neste post será a base do outro post que vou escrever, e por causa disso, será feito um passo a passo mostrando como preparar o ambiente para o projeto visto aqui hoje.  Apesar de utilizar o Linux como meu sistema operacional, pouco ou nada muda com relação às configurações de outros sistemas operacionais.

Diversas pessoas pediram por um post utilizando o Spring em uma aplicação completa, afinal todas as aplicações vistas aqui foram utilizando tecnologia JEE oficial (JSF, EJB, JPA). Neste post veremos uma aplicação utilizando o framework Spring com os seguintes módulos: Spring MVC, Spring Data e Spring Security. Veremos também como fazer internacionalização usando SpringMVC e aplicaremos templates com Tiles.

O banco de dados a ser utilizado é o Postgre, mas para utilizar o MySQL bastaria adicionar o jar o MySQL e alterar o arquivo de configuração ao banco de dados. Durante o post essas configurações que devem ser alteradas para se utilizar o MySQL serão destacadas.

É possível encontrar o código fonte na última página do post e, para agradar a todos, haverão diversos modos para baixar o código fonte. Nesse post veremos mais a parte do código Spring/JPA e alguns trechos das páginas JSP destacando o Angular e o Bootstrap, lembrando que o código completo das JSPs, classes e configurações é possível baixar na última página sem qualquer restrição. [=

O que veremos aqui:

Página 02: Montando ambiente
Página 03: Criando o projeto
Página 04: Entendendo o “pom.xml”, “log4j.xml” e o “context.xml”
Página 05: Criando os XMLS do Spring e da aplicação
Página 06: Tiles – Template de Páginas da Aplicação
Página 07: Criando o Modelo da Aplicação
Página 08: Utilizando o SpringData como Repositório (DAO); criar o Serviço dos Usuários
Página 09: Utilizando o SpringData como Repositório (DAO); criar o Serviço dos Contatos
Página 10: Criando os Controllers
Página 11: Utilizando Restful com SpringMVC
Página 12: Entendendo o Login, SpringMVC Interceptor e as Regras de Segurança
Página 13: Primeiro contato com Angular.js e o SpringMVC
Página 14: Utilizando o binding do Angular.js em um HTML table
Página 15: Internacionalização i18n com Spring
Página 16: Entendendo o papel Twitter Bottstrap
Página 17: Executando a aplicação

Sem mais delongas, vamos começar.

Review do Livro: Instant PrimeFaces Starter

Olá, tudo bem?

Fui convidado a escrever um review sobre o livro Instant Primefaces Starter – Packtpub.

Esse livro é um material excelente, em inglês apenas, para aqueles que procuram uma aplicação completa com JSF, EJB e JPA. O que eu realmente gostei desse livro é que o código da aplicação é compatível para acesso de usuários originados PC e mobile.

Esse livro detalha como ter uma aplicação com o código para ser acessado por diversos tipos de clientes, e ao mesmo tempo responsivo para os diversos tipos de aparelhos.

Esse livro não ensina sobre o Primefaces, mas como aplicar seus componentes no seu projeto.

Creio que a única coisa que não gostei desse livro é que é fácil encontrar código não identados. Acaba dificultando um pouco a leitura e o entendimento do código.

O código aplicado no livro tem boas práticas de programação quando falamos de JSF e JPA.

Se você está procurando um livro que tenha uma aplicação JEE completa, com um código que tenha boa prática de programação e tenha uma boa interface tanto para mobile quanto para PC, esse é o livro!

Espero que vocês gostem.

Até mais.

OBS.: O livro é em inglês apenas.

EasyCriteria 3.0 – Novas funcionalidades

Olá, tudo bem?

É com muita felicidade que anuncio mais uma versão do EasyCriteria. E essa versão agora é para facilitar e ampliar e muito a utilização do framework (caso você não conheça e queira conhecer mais sobre o EasyCriteria clique aqui).

São 2 features e um enorme refactor nessa nova versão que o EasyCriteria até mereceu mudar a versão principal do framework de 2 para 3.

Vamos lá:

Extreme Refactoring

Houve uma refatoração no código onde foi reduzida a complexidade do código, aplicado padrões, atributos como “final” para melhorar alocação de memória e dependências do pom.

Versão 3.0
cobertura_30

Versão 2.2
cobertura_22

Note houve uma diminuição na complexidade ciclomática dos pacotes (mais sobre o teste de complexidade aqui). Apenas o pacote de utils que houve um singelo aumento da complexidade mas ainda assim com redução do número de linhas.

Joins Inifinitos! o/

Pode parecer coisa simples e básica, mas essa era, até essa versão, o maior desafio. Agora é possível fazer quantos joins forem necessários. Veja o código abaixo:

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Person.class);

easyCriteria.innerJoin("dogs.toys.manufacturer");

easyCriteria.andEquals("dogs.toys.manufacturer.name", "ACME");

easyCriteria.orderByDesc("dogs.toys.name");

Analisando a consulta acima é possível perceber que agora é possível fazer todos os joins desejados para as diversas funcionalidades já existentes. Veja que o método “andEquals” está atravessando os relacionamentos existentes na Entity Person.

É possível ver também que até a ordenação agora aceita os diversos tipos de join.

O que simplificará também a API do EasyCriteria, pois agora não será necessário chamar nenhum outro método que tenha Join em seu nome para criar um “where”. O método andJoinEquals (ou qualquer outro que tenha Join no nome fazendo condição, ex.: andJoinGreaterThan, andJoinStringIn, …) está deprecated e marcado para remoção em futuras versões.

Count

Esse método permite fazer um count no resultado da query. Veja o código abaixo:

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Person.class);
System.out.println(easyCriteria.count());

O código acima exibiria o total de Pessoas cadastradas no banco de dados. Mas, seria possível fazer algo mais avançado?

A query abaixo funcionaria sem problemas:

List<String> names = new ArrayList<String>();
names.add("John");
names.add("Mary");

EasyCriteria<Manufacturer> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Manufacturer.class);
easyCriteria.setDistinctTrue();
easyCriteria.innerJoin("products.sellers");
easyCriteria.andStringNotIn("products.sellers.name", names);
easyCriteria.setFirstResult(0);
easyCriteria.setMaxResults(50);

System.out.println(easyCriteria.count());
List<Manufacturer> manufactures = easyCriteria.getResultList();

Note no código acima que com o EasyCriteria é possível realizar um “count” e com o mesmo objeto realizar a consulta necessária.

É importante ressaltar que: o método count ignorará os valores definidos em setMaxResults e setFirstResult. Atualmente para utilizar esse tipo de count com maxResults e firstReslt seria necessário realizar uma subquery e atualmente isso não é feito pelo framework.

100% de cobertura

E o projeto ainda continua com 100% de cobertura em testes unitários com OpenJPA, Hibernate e EclipseLink utilizando JUnit e o plugin Cobertura.

Espere que a ferramenta seja bastante útil a todos vocês.

Para utilizar basta adicionar a dependência no POM:

<dependency>
    <groupId>uaihebert.com</groupId>
    <artifactId>EasyCriteria</artifactId>
    <version>3.0.0</version>
</dependency>

Ou fazer o download do jar aqui: http://uaihebert.com/wp-content/uploads/EasyCriteria/EasyCriteria-3.0.0_2013-08-02.jar

Até mais pessoal. o_

EasyCriteria – Novas funcionalidades

Olá pessoal, tudo bem?

Venho aqui falar da nova versão do EasyCriteria.

Para quem não conhece o EasyCriteria, ele facilita a utilização da Criteria Nativa do JPA.

A JPQL:

select p from Person p

Seria transformada no seguinte código em Criteria do JPA:

CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class);
Root<Person> root = criteriaQuery.from(Person.class);
criteriaQuery.select(root);
TypedQuery<Person> query = entityManager.createQuery(criteriaQuery);
query.getResultList();

Veja quanta linhas para uma simples rotina. Como resolver esse problema?

Basta utilizar o framework chamado EasyCriteria:

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(entityManager, Person.class);
easyCriteria.getResultList();

Veja como ficou fácil utilizar Criteria com JPA. As vantagens do EasyCriteria são diversas:

  1. Permite portabilidade: Você pode trocar entre as seguintes implementações Hibernate, EclipseLink e OpenJPA sem problemas.
  2. 100% de cobertura nos testes. test coverage
  3. Facilidade na utilização: EasyCriteria tem como princípio exportar o mínimo de API possível para o usuário. O desenvolvedor precisaria apenas utilizar a Interface EasyCriteria para realizar todas as operações.
  4. Boa ferramenta para iniciantes em JPA, pois a API tem seus métodos bem explicados e fáceis de utilizar.
  5. Está no repositório do Maven.

E o que existe de novidades na nova versão?

A primeira novidade é o conceito de Criteria Transfer Object (CTO). Agora é possível criar um objeto na view, sem a necessidade do EntityManager, para carregar todas as informações relacionadas a pesquisa e aplicar na consulta.

Veja como funcionaria o conceito de CTO abaixo:

public void controllerMethod(Integer id){
   EasyCriteria easyCTO = EasyCriteriaFactory.createEasyCTO();
   easyCTO.andEquals("id", id);

   myDAO.deactivateCar(easyCTO);
}
// and in the method
public void deactivateCar(EasyCriteria easyCTO){
    EasyCriteria<Car> easyCriteria = EasyCriteriaFactory.createQueryCriteria(entityManager, Car.class, easyCTO);
    Car car = easyCriteria.getSingleResult();
    car.deactivateCar();
}

Agora é bem simples e fácil montar sua query onde já existem os parâmetro e depois enviá-las para a camada de negócio/repositório. [=

E a outra novidade é permitir a comparação por LowerCase:

boolean toLowerCase = true;

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Person.class);
easyCriteria.andEquals(toLowerCase, "name", "MARY");

Essa estava sendo também uma das funcionalidades mais pedidas pelos usuários do framework. Se você quiser uma funcionalidade também, basta pedir. [=

Para fazer o download manual, é possível baixá-lo aqui: https://code.google.com/p/easy-criteria/downloads/detail?name=EasyCriteria-2.2.2_2013-07-16.jar&can=1&q=#makechanges

Para baixar pelo Maven, basta adicionar a dependência abaixo:

<dependency>
	<groupId>uaihebert.com</groupId>
	<artifactId>EasyCriteria</artifactId>
	<version>2.2.2</version>
</dependency>

Espero que as novas funcionalidades possam agradar a vocês.

Até a próxima! o_

EasyCriteria no Maven

Pessoal, bom dia.

É com muito prazer que venho anunciar que o EasyCriteria foi adicionado ao repositório do Maven.

Para utilizá-lo basta adicionar a seguinte configuração no pom do seu projeto:

<dependency>
	<groupId>uaihebert.com</groupId>
	<artifactId>EasyCriteria</artifactId>
	<version>2.1.0</version>
</dependency>

Simples e fácil. A versão 2.1.0 foi lançada para atender ao requisitos da publicação no Maven.

Espero que vocês gostem dessa novidade! [=

http://easycriteria.uaihebert.com