2016-03-28 52 views
0

基本上嘗試通過我的Eclipse的Java Web項目谷歌App Engine的Java中與崩潰 '的AccessControlException:訪問被拒絕......' 異常

清單

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

我連接到我的Cloud SQL資料庫根本無法連接到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) 

搜索整天,字面意思就是t通過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

什麼奇怪的,司機沒有涉及到'Timer'什麼的5.1.38版本的'ConnectionImpl.java:208' - https://開頭github上。 com/mysql/mysql-connector-j/blob/5.1.38/src/com/mysql/jdbc/ConnectionImpl.java#L208 你確定你使用合法的jar嗎? –

+0

你能把我和合法的罐子聯繫起來嗎? @IgorArtamonov – Dinuka

+0

試試這個http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38 –

回答

2

最後!修復!對於那些面臨這個問題的人來說。這是你如何修復它!

步驟1:堅持自己的道德並保持積極的態度(相信我,我知道)

第2步:更新您的谷歌應用程序引擎的SDK到最新版本。從此鏈接檢查最新的SDK =>https://cloud.google.com/appengine/downloads

步驟3:將JDBC驅動程序更新到最新版本。檢查從這個鏈接=>https://dev.mysql.com/downloads/connector/j/

STEP 4最新:下面是你正確的JDBC jar添加到您的項目:複製並粘貼到你的lib文件夾(戰爭/ WEB-INF/lib目錄)。右鍵單擊Eclipse Project,然後單擊Build Path - > Configure Build Path。點擊'添加JAR'並進入你的lib文件夾並選擇你剛纔複製的mysql-connector-java文件。點擊應用並確定。

STEP 5:清理並生成項目

STEP 6:我不知道這是否是必要的,但讓我們做到這一點呢。右鍵單擊您的項目並轉到屬性。

STEP 7:展開'Google'部分並選擇App Engine。確保Google Cloud SQL已啓用(選中)並選擇使用Google Cloud SQL實例單選按鈕。

步驟8:在該單選按鈕的右側,您會看到一個名爲「配置」的鏈接。點擊它並填寫實例名稱,數據庫名稱等字段,然後單擊確定。

步驟9:下面我們前面看到的,你應該看到所謂的配置另一個鏈接旁邊的一個名爲「App Engine的SQL實例」的單選按鈕。點擊配置並填寫實例名稱,數據庫名稱等字段,就像我們之前做的一樣。單擊確定並關閉屬性窗口。

最後一個步驟:清理並重新構建您的項目並運行它。如果您正確執行了所有步驟,那麼您應該連接到所有強大的Google Cloud。

花了太多時間弄清楚這一點,我知道我可以用這個答案簡化別人的一天。祝你好運!

-Dinuka賈亞蘇里亞,未來的Google用戶;)

相關問題