Category Archives: Português

JUDCon 2013 Brasil

Olá, tudo bem?

Disponibilizo abaixo o material que utilizei na apresentação da JUDCon 2013.

São duas apresentações, JSF e EJB + JPA.

lectures

Até mais. \o_

uaiHebert no JUDCON Brasil 2013

Olá, tudo bem?

Estou passando para avisar que estarei palestrando na JUDCon 2013.

capa

http://www.jboss.org/pt_BR/events/JUDCon/2013/brazil

Encontro vocês por lá! \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

Lançado meu primeiro livro: JSF Eficaz

Pessoal, bom dia.

É com imensa alegria que anuncio que meu primeiro livro foi lançado:

capa

Ele cobre diversos assuntos sobre o JSF, e tem 200 páginas.

Caso alguém se interesse: http://www.casadocodigo.com.br/products/livro-jsf-eficaz

Até a próxima. \o_

Obrigado DZone

O pessoal da DZone me mandou um pacote muito legal de presente.

Esse pacote foi enviado para as pessoas que mais contribuíram para o site deles, e eu fui considerado uma dessas pessoas! \o/

DZone gif

DZone gif

EasyCriteria 2.0 – JPA Criteria tem que ser simples

Olá, tudo bem?

Muito tempo se passou desde meu último post, mas não estava parado durante esse tempo.

O post de hoje vem falar sobre a nova versão do Framework chamado EasyCriteria. Ao final deste pequeno post eu conto mais o que estar por vir. [=

Infelizmente um grande problema da Criteria do JPA é sua verbosidade. Por que não facilitar? Foi pensando desse modo que nasceu o framework EasyCriteria e agora a recente versão 2.0.

Para fazer um simples select que busque todas as linhas do banco de dados, o seguinte código seria necessário:

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

Note quanto trabalho para apenas reproduzir a JPQL : select p from Person p.

Agora, veja como o EasyCriteria facilita a construção da mesma Criteria acima:

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

A diferença da versão 1.0 e 2.0 está na redução de métodos e na criação de métodos genéricos que facilitem a utilização do projeto. Para comparar valores com os símbolos =, >, >=, <=, < e outro mais, basta fazer como abaixo:

easyCriteria.andGreaterThan("hairSize", 10.4f); // >

easyCriteria.andGreaterOrEqualTo("height", 11.00d); // >=

easyCriteria.andLessThan("totalBooksOwned", 30L); // <

easyCriteria.andLessOrEqualTo("firstJobDate", firstJobDate); // <=

easyCriteria.andJoinEquals("dogs", "age", 15); // =

easyCriteria.andJoinStringIn("dogs", "name", names); // value in (x, i, z, ...)

easyCriteria.andJoinStringLike("dogs", "name", "%y");

Uma ideia fixa do EasyCriteria é expor o menor número de API possível ao usuário. Visando essa ideia, a API incorporou o “OR” de uma query sem a necessidade expor outras classes.

Veja como fazer um “OR” simples:

select s from Song s where s.id = 1 or s.length = 40 or s.artist = 'Group 1 Crew'
easyCriteria.orEquals("id", 1).orEquals("length", 40).orEquals("artist", "Group 1 Crew");

E também poderia ser feito o seguinte tipo de query:

select s from Song s where (s.id = 1) or (s.id = 2) or (s.length = 40) or (s.artist = 'Group 1 Crew')
easyCriteria.orEquals("id", 1, 2).orEquals("length", 40).orEquals("artist", "Group 1 Crew");

E para casos mais complexos como a query abaixo, também é possível reproduzir com o EasyCriteria:

select s from Song s where (s.totalDownloads = 20 or s.weight = 10.00) and (s.price = 20.00 or s.type = :type)
easyCriteria.orEquals(1, "totalDownloads", 20L).orEquals(1, "weight", 10.00f).orEquals(2, "price", 20.00d).orEquals(2, "type", SongType.PRAISE);

Foi criada a ideia de índice para cada OR, ou seja, o primeiro grupo de OR é composto por totalDownloads e weight, já o seguinte grupo é price e type.

E como valor padrão o índice 1 é sempre utilizado. A criteria acima poderia ser traduzida por:

easyCriteria.orEquals("totalDownloads", 20L).orEquals("weight", 10.00f).orEquals(2, "price", 20.00d).orEquals(2, "type", SongType.PRAISE);

Para uma query que inverta esse quadro, onde AND é separado por OR basta fazer como abaixo:

select s from Song s where (s.id = 1 and s.name = 'Sing Out') or (s.id = 2 and s.name = 'Alive')
easyCriteria.addAndSeparatedByOr(1, "id", 1).addAndSeparatedByOr(1, "name", "Sing Out").addAndSeparatedByOr(2, "id", 2).addAndSeparatedByOr(2, "name", "Alive");

É isso pessoal, espero que vocês gostem da novidade. O framework está longe de se considerar pronto. E para bolar um modo de criar o OR foram queimados muitos neurônios com ajuda do João Neves (http://about.me/joaonevesfilho) e também o Sasaki (http://curriculum.rodrigosasaki.com/).

Aqui é possível ver a página oficial do framework: http://easycriteria.uaihebert.com. E o melhor, é free e open source (http://code.google.com/p/easy-criteria/).

Outra coisa legal é o fato de o projeto ter 100% de cobertura com plugin Cobertura e foi testado com OpenJPA, EclipseLink e Hibernate. É aí que eu peço a sua ajuda, pois foram encontrados bugs em todas implementações citadas. Seria possível você votar para que o bug seja resolvido?

EclipseLink: https://bugs.eclipse.org/bugs/show_bug.cgi?id=386354
OpenJPA: https://issues.apache.org/jira/browse/OPENJPA-2333
Hibernate: https://hibernate.onjira.com/browse/HHH-7985

E o que vem por aí? Em primeiro lugar eu demorei escrever um novo post, pois estou finalizando meu primeiro livro. Se Deus quiser até março ele será lançado.

E em segundo lugar estudei bastante Maven nesse tempo e pretendo lançar um próximo post de um mini livro só sobre ele contendo um básico e aplicações completas. Sim “aplicações” no plural mesmo.

Até a próxima pessoal! \o_

JPA Mini Livro – Primeiros passos e conceitos detalhados

Olá, tudo bem?

Vamos ver hoje sobre JPA: o que é JPA, para que serve o persistence.xml, criar corretamente uma entidade, como realizar desde mapeamentos simples até os mapeamentos complexos de chaves primárias, criar relacionamentos entre as entidades, modos para persistência automática e outros.

O que iremos ver hoje:

  • Página 02: Quais os motivos que levaram à criação do JPA?
  • Página 03: O que é o JPA? O que são as implementações do JPA?
  • Página 04: Para que serve o persistence.xml? E suas configurações?
  • Página 05: Definições de uma “Entity”. O que são anotações Lógicas e Físicas?
  • Página 06: Gerando Id: Definição, Id por Identity ou Sequence
  • Página 07: Gerando Id: TableGenerator e Auto
  • Página 08: Utilizando Chave Composta Simples
  • Página 09: Utilizando Chave Composta Complexa
  • Página 10: Modos para obter um EntityManager
  • Página 11: Mapeando duas ou mais tabelas em uma entidade
  • Página 12: Mapeando Heranças – MappedSuperclass
  • Página 13: Mapeando Heranças – Single Table
  • Página 14: Mapeando Heranças – Joined
  • Página 15: Mapeando Heranças – Table Per Concrete Class
  • Página 16: Prós e Contras dos mapeamentos das heranças
  • Página 17: Embedded Objects
  • Página 18: ElementCollection – Como mapear uma lista de valores em uma classe
  • Página 19: OneToOne (Um para Um) Unidirecional e Bidirecional
  • Página 20: OneToMany (um para muitos) e ManyToOne (muitos para um) Unidirecional e Bidirecional
  • Página 21: ManyToMany (muitos para muitos) Unidirecional e Bidirecional
  • Página 22: ManyToMany com campos adicionais
  • Página 23: Como funciona o Cascade? Para que serve o OrphanRemoval? Como tratar a org.hibernate.TransientObjectException
  • Página 24: Como excluir corretamente uma entidade com relacionamento. Capturar entidades relacionadas no momento da exclusão de um registro no banco de dados.
  • Página 25: Criando um EntityManagerFactory por aplicação
  • Página 26: Entendendo o Lazy/Eager Load
  • Página 27: Tratando o erro: “cannot simultaneously fetch multiple bags”

Apenas uma observação: eu não irei criar o PDF desse post. Pra produzir o material já levo horas na formatação de código, produção de imagens, ajustes do post no blog e sem falar que preciso traduzir para o inglês. Desculpe, mas não existe a possibilidade, por agora, da criação de um arquivo PDF com o conteúdo deste post.

Dois leitores gente boa criaram arquivos para quem quiser fazer o download do post. Estão nos formatos pdf, doc e odt. É possível encontrar os arquivos na última página.

JSF Mini Livro – Dicas, conceitos e boas práticas

Olá, tudo bem?

Este post foi uma tentativa de escrever um artigo para uma revista de Java aqui do Brasil. Infelizmente não deu certo =(.Resolvi postar o artigo aqui! =D

Este artigo irá mostrar dicas, informações e soluções para os desenvolvedores que trabalham dia a dia com JSF 2.0. Serão apresentados conceitos e modos de usar o JSF para aqueles que trabalham com essa tecnologia ou tem interesse em conhecer mais sobre – estudantes, profissionais que trabalham com outros frameworks etc. Utilizar uma ferramenta sem entendê-la pode trazer problemas ao invés de soluções. É preciso entender o funcionamento do JSF, como ele trata cada ação do usuário e como é possível construir um código que otimize a utilização dessa ferramenta.

Serão apresentadas questões técnicas assim como: importar imagens/javascript para dentro das páginas, migrar um projeto JSF da versão 1.2 para a 2.0, utilizar o Ajax que é uma tecnologia de requisições assíncrona, entre outras; procurando abordar o lado teórico que freqüentemente é deixado de lado.

Com o JSF podemos enfrentar um dos maiores problemas da tecnologia web que é a dificuldade de reutilizar um código já escrito. O JSF nos permite reaproveitar páginas, códigos javascript, validações em código Java que são utilizados nas páginas. A reutilização dos códigos diminui o tempo gasto na manutenção das páginas da aplicação, reduz o impacto de mudanças, dentre outras vantagens.

O que será falado no post de hoje:

  • Página 02: Criando um projeto JSF
  • Página 03: Importando CSS/Imagens/JavaScript como biblioteca
  • Página 04: Reutilizando páginas com Facelets
  • Página 05: JSP x Facelets
  • Página 06: Escondendo os comentários da página xhtml
  • Página 07: Evite @SessionScoped. Veja todos os tipos de Escopos
  • Página 08: Evite colocar lógica nas páginas
  • Página 09: Utilize h:outputLink para navegação
  • Página 10: Ajax com JSF 2.0
  • Página 11: Facilitando o desenvolvimento com JSF 2.0
  • Página 12: Migrando do JSF 1.2 para o JSF 2.0
  • Página 13: Recebendo “null” da view
  • Página 14: Quando utilizar “action” ou “actionListener”
  • Página 15: Flash Scope
  • Página 16: Não misturar implementações do JSF
  • Página 17: Internacionalização como boa prática
  • Página 18: O que há de novo no JSF 2.2
Esse post também irá comemorar as mais de 200.000 visitas que o blog já recebeu nesses 2 anos de vida. [=

O “Pai do Java” usa Jelastic

Olá, tudo bem?

Hoje o post será diferente, será um informativo sobre essa ferramenta que tem crescido muito. O Jelastic tem por característica ser um servidor de servidores.

O material do post me foi enviado pelo Judah Johns da Jelastic.

Dr. James Gosling que é conhecido como um “Pai do Java” e tem uma longa carreira no ramo da tecnologia. Formado em no ano 1977 pela faculdade de Calgary, Canadá. Tornou PhD 1983 pela faculdade Carnegie-Mellon com a tese: “The Algebraic Manipulation of Constraints”. Durante muitos anos foi VP & Fellow da empresa Sun. Ele construiu sistemas para captação de informações de satélites, multiprocessadores para Unix, compiladores, sistemas de e-mails e e diversos editores de texto.

Enquanto funcionário da Sun foi líder no projeto NeWS. Ele desenvolveu o design original do Java e codificou o compilador e a máquina virtual. Ele tem contribuído para Real-Time Specification for Java e tem sido pesquisador nos laboratórios da Sun focado em ferramentas para desenvolvimento. Dr. James também trabalhou dentro da Sun em cargos de gerência de produtos para desenvolvedores e usuários. Continuou pouco tempo na Sun após a aquisição da Oracle, depois passou pelo Google e hoje é o líder de desenvolvimento na Liquid Robotics onde ele desenvolve sistemas para Wave Glider, um robô aquático em desenvolvimento.

Lançado EasyCriteria 1.0

Olá, tudo bem?

Este post irá mostrar as novas funcionalidades do EasyCriteria.

O EasyCriteria é uma ferramenta Open Source que facilita a utilização do Criteria do JPA independente da implementação. Atualmente o EasyCriteira tem 100% de cobertura nos testes unitários e é testado com as implementações: Hibernate, OpenJPA e EclipseLink.

Caso você queira entender o conceito do Criteria e como pode ser aplicado ao seu projeto veja esse post: EasyCriteria – Um modo simples de fazer Criteria com JPA.

As novas funcionalidades do EasyCriteria 1.0 são:

  • Condições em Join
  • Paginação de Query

Agora é possível realizar um Join e adicionar parâmetros:

EntityManager em = emf.createEntityManager();
EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(em, Person.class);

easyCriteria.innerJoin("dogs", Dog.class);
easyCriteria.whereJoinEquals("dogs", "name", "Dark");
easyCriteria.whereJoinStringNotIn("dogs", "name", names); // names is a List<String>
easyCriteria.whereJoinStringLike("dogs", "name", "M%");
easyCriteria.whereJoinListIsEmpty("dogs", "cars");
easyCriteria.whereJoinAttributeIsNull("dogs", "nickName");
easyCriteria.whereJoinStringBetween("dogs", "name", "A", "L");

A query também poderá ser paginada:

EasyCriteria<Dog> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Dog.class);
easyCriteria.setFirstResult(0);
easyCriteria.setMaxResults(5);

A nova versão também conta 100% de cobertura de código nos testes unitários.

Clique aqui para fazer o download do código do post de hoje do EasyCriteria. Você poderá testar os métodos do EasyCriteria.

Na página do projeto (http://easycriteria.uaihebert.com/) é possível encontrar toda a documentação.

Qualquer dúvida basta postar abaixo.

Até a próxima! \o_