Olá, tudo bem?
Disponibilizo abaixo o material que utilizei na apresentação da JUDCon 2013.
São duas apresentações, JSF e EJB + JPA.
Até mais. \o_
Olá, tudo bem?
Disponibilizo abaixo o material que utilizei na apresentação da JUDCon 2013.
São duas apresentações, JSF e EJB + JPA.
Até mais. \o_
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! [=
Pessoal, bom dia.
É com imensa alegria que anuncio que meu primeiro livro foi lançado:
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_
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/
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_
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:
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.
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:
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.
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:
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_