Novo livro lançado: JPA Eficaz: As melhores práticas de persistência de dados em Java

Pessoal, bom dia.

É com muita alegria que gostaria de compartilhar que meu novo livro acabou de ser lançado.

JPA Eficaz: As melhores práticas de persistência de dados em Java

JPA-Eficaz-ebook_large

Ele aborda diversos assuntos do JPA, desde os conceitos básicos como analisando o persistence.xml a como fazer controle de concorrência.

Aqui é possível fazer o download de todo o sumário do livro: https://s3.amazonaws.com/casadocodigo/jpa-eficaz/sumario.pdf

São 173 páginas com códigos detalhados, explicações do conceito do JPA com exemplos que se aplicam ao nosso dia a dia.

Uma lista de discussão do livro já foi criada e é livre para qualquer participar: https://groups.google.com/d/forum/jpa-eficaz

Para comprar o livro, basta vir aqui: http://www.casadocodigo.com.br/products/livro-jpa-eficaz

E aguardem que até o final do ano, mais um mini livro de um assunto ainda não detalhado aqui no blog. ;)

My new Book – Effective JPA is out! (portuguese only)

Hello, how are you?

I am very happy to announce that my new book was published today, and it can be found in here: http://www.casadocodigo.com.br/products/livro-jpa-eficaz

JPA-Eficaz-ebook_large

It talks about JPA spec and good practices, BUT Portuguese only. [=

I wish that, before the end of this year, I will be able to write a new post. It is about a subject that was not talked about so detailed in this blog. I hope you guys like it! ;)

See you guys soon! o_

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.

Complete Web Application: Angular Twitter Bootstrap Spring MVC, Data and Security

Hello, how are you?

Today we will see how to create a complete Java web application using Spring, Angular, JQuery, Twitter Bootstrap, Tiles, Maven, Tomcat, JPA/Hibernate.

The project that will be done here in this post will be used in another post that I will write, because of this future post, in this post will be described a detailed environment configuration. I will be using linux as my operational system (OS), but almost nothing will change if you use Windows or other OS.

I received a lot of emails asking for a post using Spring in a full web application, all the applications already posted here were using JEE technology (JSF, EJB, JPA). In this post we will see a project using Spring framework with the following modules: Spring MVC, SpringData e Spring Security. We will see how to do internationalization (i18n) with SpringMVC and templates with Tiles framework.

Postgre will be the database used here, but if you want use it with MySQL just add the MySQL jar to the project and change some configuration. In this post will be displayed both Postgre and MySQL configurations.

It is possible to find the source code of this project in the last page of this post, and to make everybody happy, 3 downloading ways will be available in the end of the post. In this post we will focus in the Spring/JPA code and some of the JPS code highlighting the Angular and Bootstrap libraries, all the JSP code, classes and configurations can be downloaded in the last page.

What we will see in here:

Page 02: Environment Setup
Page 03: Creating the project
Page 04: Understanding the “pom.xml”, “log4j.xml” and the “context.xml” files
Page 05: Creating the Spring and the project XMLs
Page 06: Tiles – Page templates
Page 07: Project Model Classes
Page 08: Using SpringData as Repository (DAO); creating User Service
Page 09: Using SpringData as Repository (DAO); creating Contact Service
Page 10: Creating the Controllers
Page 11: Using Restful approach with SpringMVC
Page 12: Understanding the Login, SpringMVC Interceptor and the Security Rules
Page 13: First Contact with Angular.js and the SpringMVC
Page 14: Using Angular.js bind in a HTML table
Page 15: Internationalization (i18n) with Spring
Page 16: Understanding the Twitter Bootstrap role
Page 17: Running the project

Let us get started!

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.

Book Review: Instant PrimeFaces Starter

Hello, how are you?

I have been invited to write a review for the book: Instant PrimeFaces Starter – Packtpub.

This book is an excellent material to those that want a full web application JSF + EJB + JPA. What I loved about this book is the code that works to web and mobile clients.

It details the code about how to get a code working with different type of clients, what is necessary to do if we want a responsive application.

This book does not teach about Primefaces, but teaches how to apply its components into your code.

I believe that the only thing that I did not like about this book is about the code indentation. Sometimes there are some code aligned in a straight line and that makes harder to read the code.

The code has good practices of development when we talk about JSF and JPA.

If you are looking for a book that has a full JEE application, with a code that is written with good practices and can be accessed by browsers of pcs and mobiles, this is the right book to buy.

I hope you guys like it,

See you later.

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 3.0 – New Features

Hello, how are you?

It is with a great joy that I announce a new version of the EasyCriteria framework. This new version will make easier and increase the framework utilization (click here if you do not know nothing about the EasyCriteria framework).

2 new features and a huge refactoring are present in this new version, these features/refactoring deserve a new major version in the framework. The new version is now 3.0.

Let us see what is new:

Extreme Refactoring

This refactoring was done to reduce the code complexity, to apply more code patterns, using “final” attribute to make a better memory use and changing “pom.xml” dependences.

Version 3.0
cobertura_30

Version 2.2
cobertura_22

Notice in the pictures above that the Cyclomatic complexity has been reduced a lot (click here to know more about Cyclomatic complexity). Just the “utils” package that had a small increase of complexity but it had some lines removed.

Multiple Joins! o/

It might look that multiple joins are something easy, but until this version, it was the major feature to be released. Now it is possible to do all the joins that you want, take a look at the code below:

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");

Looking at the code above it is possible to see that it is possible to do “joins” for every method in the framework. Notice that the “andEquals” method is crossing all possible relationships in the entity Person.

The orderBy method also supports multiple joins.

This change will make the EasyCriteria API simpler, now it will not be necessary to call any method with Join in the name to create a “where”. The andJoinEquals method (or any other method with the word “Join” that creates a condition, e.g.: andJoinGreaterThan, andJoinStringIn), is deprecated and will be removed in future versions.

Count

This method allows doing a count in the query result. Take a look at the code below:

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

The code above would count all Person found in the database. But, what about the complicated queries… would it do the count?

The query below would work without problems:

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();

Notice in the code above that it is possible to do a count and with the same object execute the query.

One important thing to notice is that the count method ignores the values defined in the methods setFirstResult and setMaxResults. To do a count with firstResult and maxResults it would be necessary to do a SubQuery, and this is not supported yet.

100% of Coverage

This project still with 100% of coverage in the unit tests with OpenJPA, EclipseLink and Hibernate, JUnit and the Cobertura framework.

I hope that this tool will be really useful to you.

To use it with maven, just add to the pom:

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

To manually download it, click here: http://uaihebert.com/wp-content/uploads/EasyCriteria/EasyCriteria-3.0.0_2013-08-02.jar

See you later.