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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top