Atualizar Glassfish V2 para JPA 2.0?
-
27-09-2019 - |
Pergunta
Estou tentando usar o Hibernate 3.5.5 com a primavera HibernateJPavendorAdapter no Glassfish V2, mas estou recebendo a seguinte exceção quando o contexto da primavera é inicializado:
java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode;
org.hiberSistenceunitInfo (loghelper.java:39) em org.hibernate.ejb.ejb3configuration.configure (ejb3configaturation.jhibrA:517) em org.nateIrnateNernate. : 73)
O problema é que o Glassfish V2 usa o JPA1.0, que é carregado no servidor de classe antes do hibernate-jpa-2.0-api-1.0.0.final.jar, que é enviado com hibernato. O JPA 1.0 não possui um método GetSharedCachemodel no PersistenceUnitInfo, mas o JPA 2.0 possui.
Existe alguma maneira de atualizar o Glassfish V2 para usar o JPA 2.0 (ou qualquer outra solução para esse problema)?
Saúde,
J
Solução
Você pode tentar colocar o jar JPA 2.0 no /domain/lib/endorsed
dir
Outras dicas
Obrigado pelo feedback pessoal. Colocar o jar jpa em/domain/lib/endossado funcionou para mim.
Contexto...
<sun-web-app error-url="">
<class-loader delegate="false"/>
</sun-web-app>
... não funcionou para mim, embora isso possa ser apenas porque as aulas fazem parte do Javax.
Eu também tentei tirar o JPATEMplate da Spring e usar o JPA @PersistenceContext EntityManager diretamente - isso causou todos os tipos de problemas. Glassfish V2 + Spring + Hibernate não são amigos!
Que eu saiba, não é possível atualizar as bibliotecas JPA Java EE 5 Contêineres, simplesmente substituindo as bibliotecas e usar um Recipiente gerenciado JPA 2.0 EntityManager.
No entanto, deve ser possível usar uma implementação JPA 2.0 com a biblioteca API JPA 2.0 fornecida no nível do aplicativo e usar um Aplicativo gerenciado JPA 2.0 EntityManager.
Para experimentar a segunda abordagem com o Glassfish V2, você precisará desligar a delegação do carregador de classe (para que as bibliotecas de aplicativos sejam usadas primeiro). Isso pode ser configurado em um sun-web.xml
que você vai embalar sob WEB-INF
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN"
"http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">
<sun-web-app error-url="">
<class-loader delegate="false"/>
</sun-web-app>
Glassfish 2.1 não suporta JPA 2, eu baixei a versão JPA 2 e colei no $GLASSFISH_HOME/lib/endorsed/
diretório, e colado para o Commons-loggin1.1.jar, e isso funciona para mim.
Se parece com isso:
/Glassfish/lib/endossado $ ls
ativação.jar
OpenJpa-All-2.0.1.Jar
Commons-logging-1.1.jar
WebServices-api.jar
http://glassfish.java.net/public/comparing_v2_and_v3.html
http://openjpa.apache.org/downloads.html