2017-09-18 4 views
0

Je développe une application Google App Engine. En production, je prévois d'utiliser Google Cloud SQL, mais en développement je voulais utiliser une base de données h2. Il fonctionne très bien lorsque vous utilisez un en mémoire et embeded db (jdbc:h2:mem/dev/jdbc:h2:~/folder/dev), mais pas avec un permis serveur (jdbc:h2:~/folder/dev;AUTO_SERVER=TRUE), il échoue avec l'erreur suivante:Utilisation de la base de données h2 pour le développement local dans Google App Engine

org.h2.jdbc.JdbcSQLException: IO Exception: "java.net.SocketException: Permission denied: Not allowed to issue a socket bind: permission denied."; "port: 0 ssl: false" [90031-168] 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
at org.h2.message.DbException.get(DbException.java:158) 
at org.h2.message.DbException.convertIOException(DbException.java:315) 
at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:193) 
at org.h2.util.NetUtils.createServerSocket(NetUtils.java:156) 
at org.h2.server.TcpServer.start(TcpServer.java:222) 
at org.h2.tools.Server.start(Server.java:455) 
at org.h2.engine.Database.startServer(Database.java:672) 
at org.h2.engine.Database.open(Database.java:544) 
at org.h2.engine.Database.openDatabase(Database.java:222) 
at org.h2.engine.Database.<init>(Database.java:217) 
at org.h2.engine.Engine.openSession(Engine.java:56) 
at org.h2.engine.Engine.openSession(Engine.java:159) 
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138) 
at org.h2.engine.Engine.createSession(Engine.java:121) 
at org.h2.engine.Engine.createSession(Engine.java:28) 
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:305) 
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108) 
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92) 
at org.h2.Driver.connect(Driver.java:72) 
at java.sql.DriverManager.getConnection(DriverManager.java:664) 
at java.sql.DriverManager.getConnection(DriverManager.java:247) 

Si je comprends bien, cela est GAE de Ce qui m'empêche d'avoir un accès facile à la base de données pendant que l'application est en cours d'exécution. Est-il possible de contourner ce problème en mode serveur local uniquement? Je suis curieux de savoir s'il existe une alternative à l'utilisation d'une base de données MySql en mode dev.

Répondre

1

En train d'essayer H2 dans GAE aussi. L'environnement standard est un non pour moi à cause de mem et du disque inscriptible: un maximum combiné de 1Gb avec une instance F4-1G. Si le mode intégré h2 fonctionne, vous devez utiliser Flexible car Standard n'autorise/tmp que pour les opérations d'écriture. Sur l'erreur elle-même, GAE ne permet pas les prises d'écoute donc pas de serveur automatique malheureusement quel que soit le type d'environnement (https://cloud.google.com/appengine/docs/standard/java/sockets/)