2016-03-28 1 views
0

В основном пытаются подключиться к Cloud SQL базы данных с помощью моего Eclipse, Java Web ProjectGoogle App Engine в Java падает с 'AccessControlException: доступ запрещен ...' Exception

Контрольный

1) Updated my Google App Engine SDK to the latest 1.9.34 version

2) Updated my JDBC com.mysql.jdbc.Driver to the latest 5.1.38 version

3) Added the JDBC Driver to the build path

I не может подключиться вообще Google Cloud SQL и аварий с этой ошибкой:

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) 
    at java.security.AccessController.checkPermission(AccessController.java:559) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) 
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) 
    at java.lang.Thread.init(Thread.java:391) 
    at java.lang.Thread.init(Thread.java:349) 
    at java.lang.Thread.<init>(Thread.java:445) 
    at java.util.TimerThread.<init>(Timer.java:499) 
    at java.util.Timer.<init>(Timer.java:101) 
    at java.util.Timer.<init>(Timer.java:146) 
    at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:208) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:191) 
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283) 
    at java.sql.DriverManager.getConnection(DriverManager.java:571) 
    at java.sql.DriverManager.getConnection(DriverManager.java:233) 
    at com.dinuka.myapp.servlets.PlanServlet.doPost(PlanServlet.java:59) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

Искал весь день и буквально пошел т по каждому связанному с ним вопросу о Stackoverflow. Я собираюсь вытащить свои волосы: D

Вот мой смехотворный простой код для подключения к моей БД. Не могу поверить, что я сделал неправильно:

public class MyServlet extends HttpServlet { 

    @Override 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { 

     String url = null; 
     try { 
      if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) { 
       // Load the class that provides the new "jdbc:google:mysql://" prefix. 
       Class.forName("com.mysql.jdbc.GoogleDriver"); 
       url = "jdbc:google:mysql://app_id:instance_id/data?user=root"; 
      } else { 
       // Local MySQL instance to use during development. 
       Class.forName("com.mysql.jdbc.Driver"); 
       url = "jdbc:mysql://instance-ip:3306/data?user=root"; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return; 
     } 

     PrintWriter out = resp.getWriter(); 
     try { 
      Connection conn = DriverManager.getConnection(url); 
      System.out.println("Connection established"); 
      out.println("Connection established"); 
      try { 
      } finally { 
       conn.close(); 
      } 
     } catch (SQLException e) { 
      out.append(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

} 

Исправьте эту ошибку командой Google! А пока, может кто-то поможет мне пройти через это?

+0

, что странно, версия 5.1.38 драйвера не имеет, что связано с '' Timer' на ConnectionImpl.java: 208' - https: // GitHub. com/mysql/mysql-connector-j/blob/5.1.38/src/com/mysql/jdbc/ConnectionImpl.java # L208 Вы уверены, что используете законную банку? –

+0

Можете ли вы связать меня с законным банком, пожалуйста? @IgorArtamonov – Dinuka

+0

попробуйте это http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38 –

ответ

2

FINALLY! Починил это! Тем, кто сталкивается с этой проблемой. Вот как вы это исправите!

ШАГ 1: Держите нравственная и Оставаться позитивным (Поверьте мне, я знаю)

ШАГ 2: Обновление Google App Engine SDK до последней. Проверьте последнюю версию SDK по этой ссылке =>https://cloud.google.com/appengine/downloads

ШАГ 3: Обновите свой драйвер JDBC до последней версии. Проверьте последний из этой ссылке =>https://dev.mysql.com/downloads/connector/j/

ШАГ 4: Вот как правильно добавить JDBC баночку вашего проекта: Скопируйте и вставьте его в папку Lib (война/WEB-INF/Lib). Щелкните правой кнопкой мыши по проекту Eclipse и выберите «Путь сборки» -> «Настроить путь сборки». Нажмите «Добавить JARs» и перейдите в свою папку lib и выберите файл mysql-connector-java, который вы только что скопировали. Нажмите «Применить» и «ОК».

ШАГ 5: Очистить и построить свой проект

ШАГ 6: Я не знаю, если это необходимо, но давайте делать это в любом случае. Щелкните правой кнопкой мыши на своем проекте и перейдите в «Свойства».

ШАГ 7: Разверните раздел «Google» и выберите «Двигатель приложений». Удостоверьтесь, что Google Cloud SQL включен (отмечен) и выберите Используйте Google Cloud SQL экземпляр.

ШАГ 8: Справа от этого переключателя вы увидите ссылку под названием «Настроить». Нажмите на это и заполните поля своим именем экземпляра, именем базы данных и т. Д. И нажмите «ОК».

ШАГ 9: Ниже кнопки радио мы видели ранее, вы должны увидеть другую ссылку под названием Configure рядом с лейблом под названием "App Engine SQL экземпляр.Нажмите на настройку и заполните поля с именем экземпляра, именем db и т. Д., Как мы это делали раньше. Нажмите «ОК» и закройте окно «Свойства».

ПОСЛЕДНИЙ ШАГ: Очистите и снова создайте свой проект и запустите его. Если вы выполнили все шаги правильно, вы должны быть подключены ко всему могущественному облаку Google.

У меня было слишком много времени, чтобы понять это, и я знаю, что могу упростить чей-то день с этим ответом. Удачи!

-Dinuka Jayasuriya, будущее Googler;)