Question

Google a présenté un nouveau service - Google Cloud Sql, j'ai décidé de migrer GWT + JPA + mise en veille prolongée + printemps + maven application web à Gae. J'ai donc un problème en commençant mon application localement et sur Gae. J'ai une erreur de création dao haricot causée par ceci:

     [ERROR] Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
[ERROR]     at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:625)
[ERROR]     at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
[ERROR]     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
[ERROR]     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
[ERROR]     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
[ERROR]     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

Il me semblait que j'utilisais JPA-1.0 au lieu de 2.0 JPA-avec mise en veille prolongée (cause JPA 1.0 manque de méthode:

getValidationMode ()

J'ai vérifié mes libs ... everthing est ok - en utilisant JPA 2.0 avec mise en veille prolongée JPA-2.0-api.jar. Mais j'ai trouvé un promlem: Quand j'utiliser mon code sans Gae et j'utilise un autre db everthing est ok. Le fait est que sdk AppEngine comprend son propre JPA et la version 1.0 est (citation d'ici Utilisation de JPA avec App Engine )

L'Assemblée parlementaire paritaire et datastore JARs sont inclus avec le SDK Java App Engine. Vous pouvez les trouver dans le appengine-java-sdk / lib / user / ORM / répertoire. Copiez les fichiers JAR à la guerre / WEB-INF / lib / de votre application.

Lorsque démarrage d'une application, il utilise jpa 1,0 (sans getValidationMode de procédé () dans javax.persistence.spi.PersistenceUnitInfo) à partir appengine sdk au lieu de la mine.

Alors, comment puis-je venir ce problème pour faire mon utilisation de l'application des pots droit? Voici mon persistence.xml aussi:

   <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
      http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

        <!-- A JPA Persistence Unit -->
        <persistence-unit name="PersistenceUnit"
            transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>

            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.connection.url" value="jdbc:google:rdbms://bragininim:test/test"></property>
                <property name="hibernate.connection.driver_class"
                    value="com.google.appengine.api.rdbms.AppEngineDriver"></property>

                <!-- Connection -->
                <property name="hibernate.connection.username" value="****" />
                <property name="hibernate.connection.password" value="****" />

            </properties>
        </persistence-unit>

    </persistence>
Était-ce utile?

La solution

Il y a un problème avec le soutien Hibernate JPA, parce qu'il a utilisé JPA 2.0. Mais Google App Engine ne supporte que la spécification de JPA1.0. J'ai aussi eu même problème, là pour que j'utilisé le soutien Spring Hibernate (au lieu de Hibernate JPA).

Pour votre problème je pense aussi mieux utiliser le support Spring Hibernate.

Autres conseils

Vous devez utiliser une ancienne version de mise en veille prolongée (compatible avec JPA 1). GAE force ces choses sur vous. En fait, je ne savais pas qu'il soutient JPA - Je pensais que JDO est pris en charge.

Je ne comprends pas pourquoi vous définissez le nom d'utilisateur et mot de passe dans le persistence.xml.

Je thougth que vous n'avez pas besoin de ces lettres de créance l'origine application à accéder à DB est limitée de l'administration de la console de Google SQL Cloud, où vous spécifiez autorisé les ID de l'application.

Si vous utilisez Eclipse, je pense qu'un projet GAE pour java seulement copier les pots GAE au WEB-INF \ lib, supprimer les pots JPA de DataNucleus et Geronimo et copiez votre pot Hibernate. Je ne ai jamais essayé cela, je suppose.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top