Você Já Tem a Implementação de JPA Necessária
Tenho respondido a diversas postagens em fóruns, e-mails, mensagens instantâneas e telefonemas recentemente referentes ao uso do Hibernate no ambiente do IBM® WebSphere® Application Server. Como há muito interesse neste tópico, achei que ajudaria àqueles que ainda não tiveram a oportunidade de me perguntar pessoalmente documentar essas informações aqui.
Especificamente, estou fazendo referência ao uso de Hibernate JPA no ambiente do WebSphere Application Server. Há também o modelo de programação original Hibernate, ao qual faço referência como Hibernate "Classic". Como o modelo de programação Hibernate clássico não faz parte do conjunto Java™ EE 5, não é tão pertinente para esta conversa. Há diversas iterações deste artigo que documentam como é possível utilizar o modelo de programação Hibernate "Classic" no ambiente do WebSphere Application Server. Esse uso é basicamente como qualquer outra estrutura de utilitário. É possível empacotá-lo como uma biblioteca (compartilhada) e usá-lo a partir de seu aplicativo, mas não é uma parte integral do tempo de execução geral do servidor de aplicativos.
Este artigo focará o uso de Hibernate JPA no ambiente do WebSphere Application Server -- ou melhor, por que usar Hibernate JPA já que o WebSphere Application Server já fornece uma implementação de JPA líder de mercado?
JPA é a Java Persistence API. É a estrutura de persistência padrão apresentada primeiramente como parte da família EJB™ 3.0 de especificações em Java EE 5. Para Java EE 6, JPA 2.0 é graduado para seu próprio JSR. Em seu núcleo, JPA é um recurso de Mapeamento de Objeto/Relacional (O/R), mas evoluiu para incluir diversos outros recursos. Como JPA é uma parte integrante do conjunto Java EE, seus recursos são integrados de forma integral ao contêiner EJB e ao contêiner da Web, assim como gerenciamento de transações, gerenciamento de conexões com o banco de dados e gerenciamento da segurança. Muitas tecnologias foram alimentadas na criação de JPA, como EJB CMP, JDO e Hibernate. Não é de se admirar, então, que tantos usuários existentes de Hibernate desejam continuar a usar essa estrutura no ambiente do WebSphere Application Server.
O uso continuado de Hibernate é possivelmente um objetivo válido, já que ir de um modelo de programação (clássico) para outro (JPA) consome tempo e recursos. Se existir justificação insuficiente para fazer esse investimento, então ficar com o que funciona é o ideal e possivelmente até incentivado.
Mas se estiver planejando migrar para JPA padrão e desfrutar desses benefícios, então, há diversas razões consideráveis para migrar de Hibernate "Classic" para a solução WebSphere JPA.
Soluções e Vantagens do WebSphere JPA
Soluções WebSphere Application Server JPA são desenvolvidas no projeto Apache OpenJPA :
- O WebSphere Application Server V6.1 Feature Pack para EJB 3.0 primeiramente incluía JPA e era baseado no fluxo de serviço OpenJPA 1.0.x.
- O WebSphere Application Server V7 fornecia a pilha Java EE 5 integral, incluindo uma implementação de JPA baseada no fluxo OpenJPA 1.2.x.
- Mais recentemente, o WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API 2.0 foi introduzido e é baseado no fluxo OpenJPA 2.0.x.
Todas essas entregas utilizam os mesmos binários que estão disponíveis a partir do site de download do OpenJPA e você pode estar assegurado que quaisquer aplicativos escritos com relação ao Apache OpenJPA continuarão a ser executados sem modificação no ambiente do WebSphere Application Server.
É claro que o WebSphere Application Server também tem recursos adicionais além da entrega base do OpenJPA por meio de pontos de plugue definidos para fornecer uma solução JPA muito completa e muito rica.
- Facilidade de uso
A solução WebSphere JPA é totalmente integrada às ofertas do WebSphere Application Server. Se seu ambiente usa uma das soluções do pacote de recurso ou o WebSphere Application Server v7, a solução JPA está pronta para ser usada sem configuração ou pacote adicional necessário.
Devido a essa solução JPA integrada (Figura 1), o WebSphere Application Server é capaz de fornecer extensões funcionais aos binários base do OpenJPA. Algumas das áreas que foram aprimoradas são extensões do IBM DB2® (especificamente otimizações de integração e bloqueio de pureQuery), desempenho, suporte para configuração e administração, suporte para segurança, suporte estendido para rastreamento e criação de log e suporte ao idioma nacional para criação de log de mensagens.
Figura 1. Arquitetura WebSphere JPA
As soluções WebSphere Application Server JPA permitem que provedores de JPA alternativos sejam instalados e usados com o tempo de execução do WebSphere Application Server. Por exemplo, o uso de Hibernate JPA é possível, mas nenhuma extensão do WebSphere Application Server estará disponível com o provedor de Hibernate JPA. Além disso, o pacote da solução Hibernate JPA não é trivial (consulte Recursos). Os resultados, portanto, são que o WebSphere Application Server suporta o uso de provedores de JPA alternativos, mas há inconveniente para essa abordagem.
- Custos de suporte mais baixos
A solução WebSphere JPA completa tem serviço e suporte integrais para produto IBM, o que significa que quaisquer problemas descobertos serão abordados por meio de canais normais de suporte. A maioria dos membros da equipe de desenvolvimento de JPA são committers ativos no projeto Apache OpenJPA. Problemas serão registrados em log e resolvidos com o projeto Apache OpenJPA. Essas atualizações serão então entregues de forma conveniente como parte do processo de suporte normal do WebSphere.
Outra grande vantagem de uma solução WebSphere JPA é suporte de compatibilidade de release para release. É importante que migrar de um release do WebSphere Application Server para o próximo - incluindo versões integrais e feature packs – seja o mais fácil possível e toda tentativa seja feita para tornar a migração de JPA sem problemas também. Caso uma nova especificação JPA ou Java EE force que mudanças incompatíveis sejam feitas no produto, documentação e "opções de restauração" para obter o comportamento anterior são geralmente fornecidas. Devido à arquitetura de pacote flexível de OpenJPA, o WebSphere Application Server pode substituir qualquer comportamento não conforme de OpenJPA para tornar a experiência do WebSphere Application Server consistente de release para release.
Se você usar um provedor de JPA alternativo, como o Hibernate JPA, então o suporte do WebSphere Application Server para no ponto de plugue definido para o provedor de JPA alternativo. Quaisquer problemas descobertos no provedor de JPA alternativo (como mapeamentos de objetos, interação com o banco de dados, interesses no desempenho, etc.) precisarão ser abordados com esse provedor. Isso pode envolver o uso de seus fóruns para suporte ou o estabelecimento de um contrato externo de serviço. Claramente, não é uma conveniência.
- Melhor desempenho
Só para registrar, as comparações de desempenho podem ser enganosas. Quaisquer referências de desempenho desenvolvidas e promovidas por um provedor de JPA -- mesmo as chamadas referências "independentes" de JPA que são postadas na Web -- tendem a favorecerem um provedor de JPA com relação aos outros. Incluir interesses de licenciamento e esses tipos de referências de JPA pode ser confuso.
Por essas e outras razões, a IBM geralmente considera referências padrão de mercado. SpecJEnterprise, por exemplo, leva diversos aspectos do servidor de aplicativos em consideração, mas com foco na estrutura persistência. Estima-se que 75-80% da referência de SpecJEnterprise depende da camada de persistência (ou seja, do provedor de JPA). A comparação de SpecJEnterprise 1Q2010 mostra claramente a liderança do WebSphere nesse espaço, com resultados semelhantes apresentados para 2Q2010 e posterior.
A IBM compara constantemente a solução WebSphere Application Server JPA com relação a outras por operações primitivas (criar, recuperar, atualizar, excluir), executando referências do segmento de mercado, ou por outros métodos. Muitas variações são medidas para assegurar que a solução WebSphere JPA continue a liderar no desempenho, assim como maximizar a experiência e o benefício geral do WebSphere Application Server.
Os resultados são que continuar com a solução WebSphere JPA em vez de ir para Hibernate JPA (ou qualquer outro provedor de JPA) faz sentido para os negócios, faz sentido para o desenvolvimento e faz sentido em geral. Facilidade de uso, custo mais baixo, melhor desempenho e uma experiência transparente não somente maximiza os benefícios recebidos do WebSphere Application Server, mas também ajuda a maximizar os resultados de seus esforços de desenvolvimento.
Aprender
-
Usando Spring e Hibernate com o WebSphere Application Server
-
JSR-000220
Enterprise JavaBeans 3.0 specification
-
JSR-000317
Java Persistence 2.0 specification
-
Linhas de comentário: Uma atualização da API Java Persistence 2.0
-
Projeto Apache OpenJPA
-
Using third-party persistence providers
-
Alternate JPA Providers in WebSphere Application Server
(PDF 545 KB)
-
SPECjEnterprise2010
-
First Quarter 2010 SPECjEnterprise2010 Results
-
WebSphere no IBM developerWorks
Obter produtos e tecnologias
-
WebSphere
Application Server
-
WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API 2.0
-
WebSphere Application Server Feature Pack para EJB 3.0
Discutir
-
Fórum: JPA
and websphere 7
-
Blog: WebSphere and Java Persistence

Kevin Sutter é um Engenheiro de Software Senior no grupo de desenvolvimento do WebSphere Application Server. Atualmente, ele lidera a implementação da Java Persistence API para WebSphere. Kevin é também um administrador de código e um membro do PMC no projeto Apache OpenJPA. As funções passadas de Kevin incluem liderança e arquitetura de soluções WebSphere para a J2EE Connector Architecture (JCA) e ObjectGrid (estrutura de cache).