raiym
raiym

Reputation: 1499

MySQL google app engine at local machine - error

I am programming an local machine with Google App Engine and connect MySql to my project and when I am trying to connect to mysql I have an error. Have any idea? Googling gave only one similar thing: https://dba.stackexchange.com/questions/45029/mysql-exception-after-upgrading-from-java-6-to-java-7

INFO: Dev App Server is now running
java.sql.SQLException: Unable to initialize driver properties due to java.lang.IllegalAccessException: Class com.google.appengine.tools.development.agent.runtime.Runtime can not access a member of class com.mysql.jdbc.ConnectionPropertiesImpl with modifiers "private"
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ConnectionPropertiesImpl.initializeProperties(ConnectionPropertiesImpl.java:2819)
at com.mysql.jdbc.ConnectionImpl.initializeDriverProperties(ConnectionImpl.java:3490)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:823)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:127)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:135)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ru.onekilometre.SQLConnectionProvider.getInstance(SQLConnectionProvider.java:18)
at ru.onekilometre.OnekilometreServlet.doGet(OnekilometreServlet.java:19)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369)
at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352)
at com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:480)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Connection code is:

package ru.onekilometre;

import java.sql.DriverManager;

import com.google.cloud.sql.jdbc.Connection;


public class SQLConnectionProvider {
public static Connection connection;
public static Connection getInstance() throws Exception {

      if (connection != null && !connection.isClosed()) {
        return connection;
      }
     // if (true) {
        //MySQL
        String url = "jdbc:mysql://localhost:3306/onekilometre";
        connection = (Connection) DriverManager.getConnection(url, "raiym", "password");
    /*  } else {
        // Google Cloud SQL
        DriverManager.registerDriver(new AppEngineDriver());
        String instanceName = "somename";
        connection = (Connection) DriverManager.getConnection("jdbc:google:rdbms://" + instanceName + "/NAME_DB");
      }*/
      return connection;
    }

}

Upvotes: 3

Views: 2523

Answers (3)

Hendrik Jan van Randen
Hendrik Jan van Randen

Reputation: 348

I had the same problem with jre1.7.0_25, and resolved it by upgrading to jre1.7.0_45.

Upvotes: 1

Floris
Floris

Reputation: 1123

You should change your connection string from:

"jdbc:mysql://localhost:3306/onekilometre"

to "jdbc:google:rdbms://instance_name/database"

where you replace instance_name with with your Google Cloud SQL instance name and database with your database name. See https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide#connect_and_post. For instance, in my app I have:

"jdbc:google:rdbms://namibiaonthenet:namibiaonthenet/barcodeapp"

App Engine automatically replaces this string to connect to your local MySQL instance if you run on the local server according to the settings you set when going to Project Properties | Google | App Engine | Google Could SQL and then clicking on Configure. Remember to select the Use MySQL instance radio button.

No need to change your connection string each time! If you run locally, your local instance will be used. If you run from the Google servers, the cloud instance will be used.

Upvotes: 2

raiym
raiym

Reputation: 1499

Like Jaochim sad problem was with jre1.7.0_25 I reinstalled to jre1.7.0_21 and it works. Thanks.

Upvotes: 6

Related Questions