google for fees engine appengine app google-app-engine google-cloud-sql

google-app-engine - for - google cloud sdk app engine



Java Google App Engine y Google Cloud SQL se ejecutan en un servidor de desarrollo local (5)

He estado investigando una solución a esto toda la semana y, si bien ha habido soluciones a problemas similares, no hay ninguno que aborde y solucione este problema directamente.

He creado un proyecto de aplicación web utilizando Google App Engine y Google Cloud SQL. Al ejecutar la aplicación GAE utilizando el complemento de Google Eclipse y un servidor MySQL local, la aplicación funciona muy bien.

Al ejecutar la aplicación desde la línea de comandos usando: -

sudo /opt/appengine-java-sdk-1.6.1/bin/dev_appserver.sh --jvm_flag=-Drdbms.server=local --jvm_flag=-Drdbms.driver=com.mysql.jdbc.Driver --jvm_flag=-Drdbms.url=jdbc:mysql://localhost:3306/twincam?user=root --port=7070 /home/ben/workspace/Twincam/war

Me sale lo siguiente: -

java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.registerDriver(LocalRdbmsServiceLocalDriver.java:95)

Tengo la ruta de clase que hace referencia al mysql-connector.jar ubicado en /Twincam/war/WEB-INF/lib/mysql-connector-java-5.1.1-bin.jar referenciado por mi biblioteca de usuarios como en el siguiente archivo .classpath y estructura de directorios :-

<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-javadoc.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-sources.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1.jar"/> <classpathentry kind="output" path="war/WEB-INF/classes"/> </classpath>

Actualización: verifiqué los permisos de archivo y todos están configurados en el 664 predeterminado, así que estoy seguro de que este no es el problema.


AFAIK Si está utilizando GAE, no puede usar el controlador JDBC. No sé cómo podría funcionar en eclipse, mientras que la clase Socet está restringida en GAE. Debe usar el controlador GAE interno en lugar de mysql JDBC.

com.google.appengine.api.rdbms.AppEngineDriver

Luego, en eclipse puede configurar la conexión a su db de mysql local, como en el example vea también este example cómo está configurado

Compilar como GWT puro y ponerlo en Tomcat con JDBC, debería funcionar, pero no como una aplicación GAE.


Acabo de instalar Eclipse + GPE4.2 en una máquina nueva usando GAE SDK1.7.5 en Juno Service Release 1 Build id: 20121004-1855 y me vi obligado a copiar el controlador JDBC en appengine-java-sdk-xxx / lib / impl. Inicialmente me había olvidado de esto y pasé aproximadamente 2 días depurando mi código.

Sería bueno si hubiera más información disponible sobre los problemas de la página de GPE. Sería bueno poder Google para más información.


Bueno, después de leer todo escrito para ustedes, y leer otra cosa, finalmente puedo listar mis datos de una tabla de mi instancia de Google SQL Cloud con GAE, ¡solo sigo esta pendiente y funciona! ...

1.- Seguí este ejemplo: [ Uso de Google Cloud SQL con Java SDK de App Engine

pero en el guestbook.jsp agregué esta línea:

<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %>

Luego cambié la conexión de URL a esta, sin nombre de usuario en mi caso.

url = "jdbc:google:rdbms:INSTANCE_NAME/DATABASE_NAME";

También he comentado esta línea.

// Class.forName("com.mysql.jdbc.GoogleDriver");

2.- Como se describe anteriormente, copié mysql-connector.jar y lo coloqué en appengine-java-sdk-xxx / lib / impl.

3.- Configuré el proyecto como se describe aquí Crear una nueva aplicación web con soporte de Cloud SQL

4.- Configuré mi instancia de Google SQL como se describe aquí Configurando el acceso

5.- Finalmente, implementé el proyecto como se describe aquí Cargar su aplicación

Puedo ejecutarlo localmente y también funciona bien.

Bueno, espero que esto ayude, gracias!


La respuesta de Matt me ayudó mucho, creo que esta es una explicación más completa.

Puedo verificar que puede obtener una instancia de MYSQL local para que funcione con Google App Engine en modo de desarrollo, para no incurrir en los próximos costos asociados con la opción Cloud SQL de Google, mientras se desarrolla.

Primero, como Matt dijo, tienes que poner el tarro del conector mysql en APPENGINE_HOME / lib / impl.

Estoy en las ventanas. Hice esto al encontrar primero donde reside mi SDK. En mi proyecto en eclipse en el explorador de paquetes, hago clic con el botón derecho en "App Engine SDK [App Engine - 1.6.4]", selecciono Propiedades en el menú desplegable y en el menú emergente emergente, haga clic en el azul "Configurar SDK ... "enlace.

Esto revela la ubicación de mi App Engine SDK. Vaya a esa carpeta en una ventana del Explorador de Windows, abra lib / impl y coloque en su tarro de conector mysql, copiado de su proyecto de eclipse de GAE. Mi camino fue:

C: / Software / eclipse / plugins / com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37 / appengine-java-sdk-1.6.4 / lib / impl

Siguiendo las instrucciones aquí (https://developers.google.com/eclipse/docs/cloudsql-createapp), se supone que debes dejar tu cadena de conexión de código Java apuntada a prod (jdbc: google: rdbms: // ... en lugar de jdbc: mysql: // ...) PERO debe ingresar a las propiedades del proyecto Eclipse, Google, App Engine, Google Cloud SQL y en "Instancia de SQL de desarrollo (utilizada por el servidor de desarrollo local)" seleccione el botón de opción "Utilizar instancia de MySQL ". La próxima vez que inicie GAE, la cadena de conexión en su código Java se ignorará a favor de su servidor MySQL local.

Asegúrate de que el servicio MySQL se esté ejecutando y estés listo.

Esto me tomó más tiempo para darme cuenta de lo que debería haber hecho. Creo que la clave es de Google Docs, si no comprende / usa esta información, intentará usar una cadena mydql jdbc y se encontrará con errores de permisos de socket porque GAE no puede ir al puerto 3306 a menos que haga lo que describo :

No es necesario que se conecte explícitamente a la instancia de SQL de desarrollo en su código, esto se hace automáticamente cuando ejecuta su aplicación en el servidor de desarrollo. La instancia de SQL de desarrollo para conectarse se pasa automáticamente a su servidor de desarrollo a través de argumentos de VM por GPE en tiempo de ejecución.

(Subí 4 imágenes para ayudar con esta explicación y solo después de terminar, me dice que necesita 10 puntos de reputación para cargar imágenes - jeesh)


Yo tuve el mismo problema.

Lo resolví dejando caer el mysql .jar en appengine-java-sdk-xxx / lib / impl.