(HINWEIS: Ja, es gibt einige doppelte Fragen zu diesem Thema. Allerdings sind diejenigen, die aktuell sind, ein paar Jahre alt ... Damals, als Google App Engine nur JPA 1.0 und das proprietäre NoSQL unterstützte Datastore: Es lohnt sich, erneut zu besuchen, dass aktuellere JPA-Standards und MySQL unterstützt werden.)
Ich experimentiere mit Cloud SQL in einem Google App Engine-Java-Projekt und verwende JPA als Persistenzframework. Googles FAQ ist etwas zwiespältig bezüglich der Verwendung eines Verbindungspools mit Cloud SQL ... es könnte sich lohnen, wenn die Kosten für die Erstellung einer neuen Verbindung die Kosten für die Überprüfung und Wiederverwendung einer bestehenden Verbindung übersteigen.
Ich gehe davon aus, dass meine Anwendung eine große Anzahl von sehr kurzlebigen Datenbankoperationen schnell ausgibt, also scheint sie zum Anwendungsfall für das Verbindungs-Pooling zu passen. Darüber hinaus bin ich noch viel beunruhigt darüber, dass meine Verbindungen aufgrund einer Kontingentobergrenze abgelehnt werden, als wenn ich eine Anforderungssperre für ein paar Sekunden habe, die auf einen Verbindungspool wartet, um frei zu werden. Basierend auf früheren Erfahrungen mit Google App Engine-Laufzeitkontingenten würde ich Cloud SQL nicht als brauchbaren Dienst ohne Verbindungspooling betrachten.
Das Problem besteht darin, dass JPA im Allgemeinen über JNDI an einen Verbindungspool angehängt wird und JNDI nicht von Google App Engine unterstützt wird. Wie nutzen die Leute dann einen Verbindungspool mit Google App Engine und Cloud SQL? Gibt es eine Möglichkeit, einen Verbindungspool programmgesteuert an eine JPA-EntityManagerFactory anzuhängen, ohne JNDI? Oder müssen Sie auf JPA verzichten und Ihre Persistenzschicht mit manueller JDBC oder einem anderen Persistenz-Framework (z. B. JDO) schreiben?
Soweit es darauf ankommt, versuche ich derzeit EclipseLink als JPA-Provider und Tomcat DBCP für das Verbindungs-Pooling zu verwenden (ich habe in andere StackOverflow-Fragen , dass Tomcat DBCP mit den Threading-Beschränkungen von App Engine funktioniert. Ich bin offen für andere Anbieter oder Persistenzmechanismen (zB nativen Hibernate, JDO, etc) ... aber ich würde lieber mit JPA-Standards bleiben und würde wahrscheinlich Cloud SQL insgesamt weitergeben, wenn es rein manuelle JDBC benötigt, um mit Verbindung zu arbeiten Pooling.
Ich kann sehen, dass dies eine alte Frage ist, aber falls jemand hier auf der Suche nach einer Antwort landet, benutze ich Spring und Apache BasicDataSource auf App Engine mit Cloud SQL und es funktioniert gut.
Tags und Links java jpa mysql google-app-engine google-cloud-sql