2009-10-30 12 views
26

Sé que App Engine tiene su propio almacén de datos. Esto es ideal para la mayoría de los casos y bastante fácil de usar. Sin embargo, tenemos una base de datos MySQL que usamos para varias aplicaciones y no todas están basadas en la Web. Queremos utilizar App Engine por muchos motivos, pero nos gustaría que App Engine acceda a nuestra base de datos MySQL. La documentación que he encontrado no indica claramente si puedo hacer esto o no. ¿Alguien lo ha hecho o tiene indicadores de documentos que muestran cómo hacerlo?¿Puedo usar una base de datos MySQL con una aplicación de App Engine?

Respuesta

9

La respuesta simple es: NO.

La forma de acceder a su MySQL sería mediante la exposición de una interfaz de servicio web a la misma.

+0

gracias por su respuesta, ¿se refería a los servicios web SOAP y RESTful aquí? – Dev

19

No puede crear una conexión de red directa a su base de datos. El overview page describe las principales restricciones que le impedirían usar Mysql, la principal en este caso son las "conexiones de red arbitrarias". Solo puedes hacer llamadas http desde el motor de la aplicación.

La JVM se ejecuta en una "caja de arena" asegurada ambiente para aislar su aplicación para el servicio y la seguridad. La zona de pruebas garantiza que las aplicaciones solo puedan realizar acciones que no interfieran con con el rendimiento y la escalabilidad de otras aplicaciones. Por ejemplo, una aplicación no puede generar subprocesos, escribir datos en el sistema de archivos local o hacer conexiones de red arbitrarias. Una aplicación tampoco puede usar JNI u otro código nativo . La JVM puede ejecutar cualquier código de bytes Java que opere dentro de las restricciones de la zona de pruebas .

+0

Realmente me gustaría saber cómo esta respuesta merece un voto negativo, especialmente un año después del hecho. –

+0

Esto ya no es cierto. Consulte Google Cloud SQL: https://code.google.com/apis/sql/docs/developers_guide_java.html –

+3

@lukas tenga en cuenta que todavía no puede conectarse a bases de datos MySql externas, como el OP deseado. Está limitado a conectarse a las bases de datos alojadas de App Engine. Además, en este momento no puedes conectarte a tu base de datos alojada en la nube desde fuera de App Engine. –

1

Sí, pero no es el normal, mediante la creación de un servicio web o una simple página PHP que actúa como intermedio y pasando los datos en json o xml.

0

Todavía estoy en la fase de aprendizaje de todo esto, pero estoy bastante seguro de que puede hacer esto ahora algunas de las formas:

  • Enlace Aplicaciones scripts para App Engine y utilizar el JDBC y tinta a Google
  • tienda su base de datos SQL en Google Cloud Storage
  • Conectar Aplicaciones Scripts a través de secuencias de comandos de cálculo
  • utilizar su nube SQL

"Google Apps Script tiene la capacidad de realizar conexiones a bases de datos a través de JDBC con el servicio Jdbc. El soporte actual se extiende a MySQL, Microsoft SQL Server y Oracle. Apps Script facilita la conexión a bases de datos alojadas en Google Cloud SQL, pero también funciona con otras plataformas de hospedaje en la nube e incluso con bases de datos locales."https://developers.google.com/apps-script/jdbc

(origionally de App Engine Question)

3

El uso de un MySQL instancia local durante el desarrollo:.

import com.google.appengine.api.rdbms.AppEngineDriver; 
    public static void makeConnection() { 
     try { 
      if (conn == null || !conn.isValid(0)) { 
       String url = "localhost/databasename"; 
       String username = "root"; 
       String password = "password"; 
       DriverManager.registerDriver(new AppEngineDriver()); 
       String urlForConnection = "jdbc:mysql://" + url; 
       conn = DriverManager.getConnection(urlForConnection, username, password); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

// in web.xml 
    <filter> 
     <filter-name>_ah_DevSocketFilter</filter-name> 
     <filter-class>com.google.appengine.api.socket.dev.DevSocketFilter</filter-class> 
     <init-param> 
      <param-name>use-native-sockets</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>_ah_DevSocketFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

El uso de la nube



    DriverManager.registerDriver(new AppEngineDriver()); 
       c = DriverManager.getConnection("jdbc:google:rdbms://instance_name/guestbook"); 

+0

gracias por proporcionar el código, este código funciona con la instancia Local MySQL durante el desarrollo Quiero saber si es posible conectar una base de datos mysql externa (no una instancia MySql en la nube) con enging de la aplicación (durante la producción) – Dev

+0

No. Puede usar google cloud sql solamente . Esto es por razones de seguridad (simplemente no le dan acceso a sus servicios web). Pero puede conectar google cloud sql con algún cliente de desctope como mysql workbench para administrar google cloud sql en su mashine – makkasi

+0

gracias por su respuesta @makkasi. – Dev

Cuestiones relacionadas