JPA Implementation Patterns

Posted On 16/07/2009

Arquivado em JPA

Comments Dropped leave a response

111-JavaFXBindingDepois de descobrir a falta de documentação efetiva de como usar o JPA na vida real, Vincent Partington documentou uma série de patterns com o objetivo de ajudar e direcionar os projetistas a elaborem suas camadas de persistencias utilizando o JPA. Segue um resumo abaixo:

Basic patterns

Advanced patterns

Os padrões são muito interessantes e bem práticos…abrindo a cabeça para novas possibilidades de reutilização, manutenção e economia de código. Vale a pena detonar o material =D .

“Não digas: Vingar-me-ei do mal; espera pelo Senhor, e ele te livrará.”  Provérbios 20:22

Comparando implementações JPA

Posted On 20/01/2009

Arquivado em JPA

Comments Dropped leave a response

jbpmandspringiconEste artigo apresenta um post com uma experiência muito interessante, onde o autor do blog idealiza e submete diferentes implementações JPA mais badaladas da atualidade( TopLink, EclispeLink, Hibernate e OpenJPA) a testes de performance. Alem de ler as conclusões finais do autor no artigo, vc ainda pode fazer o download do teste e refazer em seu ambiente.
O teste se resumiu em um simples programa que executava algumas consultas e inserts em um MySQL através da especificação do JPA. Quatro teste foram executados com o mesmo código, somente mudando a implementação dos vendores. Neles foram monitorados os recursos usados pela JVM e contados os números de insert e select executados durante o teste. Veja um resumo :

Number of queries+inserts executed Number of queries executed Number of inserts executed Max mem occupied during the test(Mb) Mem occupied after the test(Mb)
OpenJPA 3928 3530 398 96 61
Hibernate 12687 3080 9607 130 79
Toplink 5720 3740 1980 55 25
Eclipselink 5874 3735 2139 57 25

Para maiores detalhes, veja o artigo completo e faça suas conclusões.

“Até um tolo pode passar por sábio e inteligente se ficar calado.” Provérbios 17:28.

Reference Card JPA

Posted On 22/09/2008

Arquivado em JPA

Comments Dropped leave a response

Hoje foi liberado o download do reference card sobre o JPA. Seguindo a mesma linha dos outros….vale a pena obter mais este ótimo material de referência rápido. Faça donwload aqui.

Provedores de JPA

Posted On 28/05/2008

Arquivado em JPA

Comments Dropped leave a response

Segue um lista completa de provedores para JPA:

Hibernate – Umas da implementações mais maduras (uma vez que ele foi referência para a criação da especificação), provedor oficial do JBOSS, diversas extensões proprietárias e um bom livro de referência.
TopLink – Implementação da oracle, algumas extensões proprietárias, provedor oficial do GLASSFISH e não tem livro de referência.
OpenJPA – Implementação da ASF, aparenta ser um boa opção uma vez que apache sempre tem disponibilizado bons produtos.
JPox – Implementação da empresa Java Persistent Objects, não popular.
Amber – Implementação não popular.

Se fosse indicar alguma eu não teria dúvida de que a implementação do Hibernate é TOP, uma vez que a empresa tem liderado há algum tempo o mercado relacionado com ORM.

Detone seu SGDB com POJINHOS :-) !!

EntityManager em Aplicativos Web Standalone

Posted On 11/04/2008

Arquivado em JEE, JPA

Comments Dropped leave a response

Segue algumas das estratégias que podem ser utilizados na implementação de uma camada de persistência utilizando o JPA em aplicativos web standalone:

1. Abrir e fechar um EntityManager por operação de negocio (quando precisar)

  • Perde o cache de nível 1 chamada de “repeatable read”, ficando somente com o de nível 2.
  • Tem que implementar o equals and hashCode dos pojos usando chave de negócio, uma vez que eles desligados perdem a identidade de persistência.
  • Perde a carga de objetos LAZY, uma vez que quando o pojo é retornado para a camada de visão, ele ja esta desligado(detached) e o contexto de persistência fechado.
  • 2. Abrir e fechar um EntityManager por HttpRequest (Usando Filter Servlet + atributos de ThreadLocal)

  • Perde o cache de nível 1 chamada de “repeatable read”, ficando somente com o de nivel 2.
  • Tem que implementar o equals and hashCode dos pojos usando chave de negócio, uma vez que eles desligados(detached) perdem a identidade de persistência.
  • Mantém a carga LAZY uma vez que quando pojo esta sendo usando para renderizar a camada de visão, o contexto de persistência ainda esta aberta e somente será fechado pela volta da execução do filter.
  • 3. Abrir e fechar um EntityManager por HttpSession (Extendida)

  • Essa estratégia usa um listener de session para criar apenas 1 objeto de contexto de persistência por usuário quando a sessão dele é criada.
  • O cache de nível 1 e 2 é utilizada.
  • Pedidos assíncronos simultâneos de um mesmo usuário ajax transacionais NÃO são executados concorrentemente uma vez que o objeto EntityManager é thread-safe.
  • Não existe a necessidade de implementar equal e hashCode, uma vez que o contexto de persistência mantém a referencia de identidade dos objetos persistentes (obj1==obj2).
  • Pedidos assíncronos simultâneos de um mesmo usuário podem interromper as transações definidas dentro do EntityManager, uma vez que uma consulta descarrega o contexto de persistência no SGDB. (Nesse caso tem que alterar o comportamento padrão do FlushMode podendo aumentar o grau de complexidade da camada de persistência)
  • Exceptions ocorridas dentro do um único contexto de persistência, invalidarão o estado do objeto, tendo a necessidade de criar outro, ou seja problemas se ocorrer durante a utilização do sistema. (Pode ser contornado pela aplicação criando um novo objeto quando o fato acontecer).
  • Camada de Persistência ORM

    Posted On 29/02/2008

    Arquivado em JPA

    Comments Dropped leave a response

    Atualmente não existe dúvidas que o paradigma de programação mais usado na produção de sistemas é o Orientado a Objetos. Em contra partida, o mecanismo de armazenamento persistente mais utilizado ainda são os sistemas de gerenciamento de banco de dados relacional. Este fator (sem entrar em detalhes justificativos) foi que impulsionou o surgimento do conceito do mapeamento objeto-relacional ORM.

    Ao passar dos anos, os frameworks ORM em java foram surgindo dia após dia com o objetivo de oferecer genericamente esta camada intermediária entre a aplicação e o SGBD, minimizando tempo, esforço, custo etc. Fato é que o conceito ORM e as opções de frameworks entraram em proporções enormes, transformando-se de uma simples camada para uma decisão não-trivial e amplamente complexa.

    Veja aqui um ótimo artigo que aborda tais fatos, apresentando importantes informação de como, quando, porque e quais usar ORM usar. Veja aqui algumas opções de frameworks de persistência ORM e não ORM.

    Bons estudos a todos :-)

    Artigos sobre JPA

    Posted On 30/08/2007

    Arquivado em JPA

    Comments Dropped leave a response

    Continuando com uns dos assuntos mais badalado do momento, segue ai mais alguns artigos previamente selecionados com dicas importantes JPA:

    Para aqueles quem tem o interesse comprar um bom livro como referencia completa pode sem receio adquirir o Enterprise JavaBeans 3.0 que tem 6 capítulos (5,6,7,8,9,10) totalmente dedicados para JPA (tanto para containers EJB e aplicativos standalone) que na minha modesta opinião o melhor material que estudei.

    Com o post de JPA anterior + este, tem material de sobra para detonar seu SGBD com OBJETOS JAVA :-)