2013-07-20 3 views
3

Я программирую локальную машину с Google App Engine и подключаю MySql к моему проекту, и когда я пытаюсь подключиться к mysql, у меня есть ошибка. Есть идеи? Googling дали только один подобную вещь: https://dba.stackexchange.com/questions/45029/mysql-exception-after-upgrading-from-java-6-to-java-7MySQL движок Google на локальном компьютере - ошибка

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) 

Код цепи является:

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; 
    } 

}

+0

Какую версию версии Java/GAE SDK вы используете? –

+0

jre 1.7.0, gae 1.8.1 – raiym

+0

1.7.0? Не 1.7.0_25 или подобное? –

ответ

2

Вы должны изменить строку соединения с:

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

к "JDBC: Google: RDBMS: // имя_экземпляра/базы данных"

где вы замените instance_name с с именем экземпляра Google Cloud SQL и database с именем вашей базы данных. См. https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide#connect_and_post. Например, в моем приложении у меня есть:

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

App Engine автоматически заменяет эту строку для подключения к локальному экземпляру MySQL, если вы запускаете на локальном сервере, в соответствии с настройками, установленными при переходе к Project Properties | Google | Двигатель приложений | Google Could SQL, а затем нажмите на Configure. Не забудьте выбрать переключатель Use MySQL instance.

Не нужно менять строку соединения каждый раз! Если вы запустите локально, будет использован ваш локальный экземпляр. Если вы запустите с серверов Google, будет использоваться экземпляр облака.

+0

это сработало для меня! Спасибо – raiym

6

Как Jaochim грустная проблема была с jre1.7.0_25 Я переустановил на jre1.7.0 _21 и он работает. Спасибо.

+0

raiym Я застрял с этим решением, я пробовал решение, которое считается ответом, но он не работает, можете ли вы рассказать мне, какой подход сработал для вас? –

+0

привет. Я сдаюсь с mysql и сделал, как Флорис, грустно. Я заплатил экземпляр sql cloud и включил его в проекте Eclipse -> Свойства -> Механизм приложений и включил Google Cloud SQL. Но другой способ (бесплатно) использовать Datastore вместо Google cloud sql. https://developers.google.com/appengine/docs/java/datastore/ – raiym

+1

Это также сработало для меня. Я был на jdk1.7.0_25. Обновление до jdk1.7.0_51 исправлено для меня. – Charles

1

У меня была такая же проблема с jre1.7.0_25, и она была решена путем обновления до jre1.7.0_45.

Смежные вопросы