Frage

Als Google den neuen Dienst Google Cloud SQL vorstellte, entschied ich mich, die Webanwendung gwt + jpa + hibernate + spring + maven auf gae zu migrieren. Ich habe also ein Problem beim Starten meiner App lokal und auf gae. Ich habe einen Fehler beim Erstellen der Dao-Bean, der durch Folgendes verursacht wird:

     [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)

Es schien mir also, dass ich jpa-1.0 anstelle von jpa-2.0 mit Ruhezustand verwendete (weil jpa 1.0 keine Methode hat:

getValidationMode ()

Ich habe meine Bibliotheken überprüft ... alles ist in Ordnung - mit jpa 2.0 mit hibernate-jpa-2.0-api.jar. Aber ich habe ein Problem gefunden: Wenn ich meinen Code ohne Gae verwende und eine andere Datenbank verwende, ist alles in Ordnung. Tatsache ist, dass appengine sdk einen eigenen JPA enthält und die Version 1.0 ist (Zitat von hier Verwenden von JPA mit App Engine )

Die JARs für JPA und Datenspeicher sind im App Engine Java SDK enthalten. Sie finden sie im Verzeichnis appengine-java-sdk / lib / user / orm /. Kopieren Sie die JARs in das Verzeichnis war / WEB-INF / lib / Ihrer Anwendung.

Wenn eine Anwendung gestartet wird, verwendet sie jpa 1.0 (ohne Methode getValidationMode () in javax.persistence.spi.PersistenceUnitInfo) von appengine sdk anstelle von meiner.

Wie kann ich dieses Problem lösen, damit meine App die richtigen Gläser verwendet? Hier ist auch meine persistence.xml:

   <?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>

War es hilfreich?

Lösung

Es gibt ein Problem mit der JPA-Unterstützung für den Ruhezustand, da die JPA 2.0-Spezifikation verwendet wurde.Google App Engine unterstützt jedoch nur die JPA1.0-Spezifikation.Ich hatte dort auch das gleiche Problem, da ich die Spring Hibernate-Unterstützung (anstelle von Hibernate JPA) verwendet habe.

Für Ihr Problem halte ich es auch für besser, die Spring Hibernate-Unterstützung zu verwenden.

Andere Tipps

Sie sollten eine ältere Version des Ruhezustands verwenden (kompatibel mit jpa 1).GAE zwingt Ihnen diese Dinge auf.Eigentlich wusste ich nicht, dass es JPA unterstützt - ich dachte, nur JDO wird unterstützt.

Ich verstehe nicht, warum Sie Benutzername und Passwort in der Datei persistence.xml definieren.

Ich denke, dass Sie diese Anmeldeinformationen nicht benötigt haben, da der App-Zugriff auf die Datenbank durch die Konsolenverwaltung von Google SQL Cloud eingeschränkt ist, in der Sie die zulässigen App-IDs angeben.

Wenn Sie Eclipse verwenden, kopiert ein GAE-Projekt für Java die GAE-Jars einfach in WEB-INF \ lib. Entfernen Sie die JPA-Jars aus DataNucleus und Geronimo und kopieren Sie Ihr Hibernate-Jar. Ich habe das wohl nie versucht.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top