Java中的Google应用程序引擎因“AccessControlException:拒绝访问…”异常而崩溃

Java中的Google应用程序引擎因“AccessControlException:拒绝访问…”异常而崩溃,java,mysql,google-app-engine,jdbc,google-cloud-sql,Java,Mysql,Google App Engine,Jdbc,Google Cloud Sql,基本上是通过EclipseJavaWeb项目连接到我的云SQL数据库 检查表 1将我的Google App Engine SDK更新为最新的1.9.34版本 2将我的JDBC com.mysql.JDBC.Driver更新为最新的5.1.38版本 3将JDBC驱动程序添加到构建路径 我根本无法连接到Google Cloud SQL,并因以下错误而崩溃: java.security.AccessControlException: access denied ("java.lang.RuntimeP

基本上是通过EclipseJavaWeb项目连接到我的云SQL数据库

检查表

1将我的Google App Engine SDK更新为最新的1.9.34版本

2将我的JDBC com.mysql.JDBC.Driver更新为最新的5.1.38版本

3将JDBC驱动程序添加到构建路径

我根本无法连接到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)

请修复这个错误,谷歌团队!同时,有人能帮我度过难关吗?

终于!修好了!给任何一个面对这个问题的人。下面是你如何修复它的

第一步:保持你的道德,保持积极相信我,我知道

步骤2:将您的Google App Engine SDK更新为最新版本。从此链接检查最新SDK=>

步骤3:将JDBC驱动程序更新为最新版本。检查此链接的最新版本=>

步骤4:以下是如何正确地将JDBCJAR添加到项目中:复制并粘贴到lib文件夹war/WEB-INF/lib。右键单击Eclipse项目,然后单击构建路径->配置构建路径。单击“addjars”并转到lib文件夹,选择刚才复制的mysql连接器java文件。单击应用并确定

步骤5:清理并构建您的项目

第六步:我不知道这是否必要,但我们还是这样做吧。右键单击项目并转到属性

步骤7:展开“谷歌”部分并选择应用程序引擎。确保选中了启用Google Cloud SQL并选择使用Google Cloud SQL实例单选按钮

步骤8:在单选按钮的右侧,您将看到一个名为“配置”的链接。单击它,用实例名、数据库名等填充字段,然后单击OK

步骤9:在我们前面看到的单选按钮下面,您应该看到另一个名为configure的链接,旁边是一个名为“appenginesqlinstance”的标签。单击configure并像以前一样用实例名、数据库名等填充字段。单击“确定”并关闭“属性”窗口

最后一步:清理并重新构建项目并运行它。如果您正确地遵循了所有步骤,那么您应该连接到功能强大的谷歌云

我花了太多时间才弄明白这一点,我知道我可以用这个答案简化别人的一天。祝你好运


-Dinuka Jayasuriya,未来的谷歌人

终于!修好了!给任何一个面对这个问题的人。下面是你如何修复它的

第一步:保持你的道德,保持积极相信我,我知道

步骤2:将您的Google App Engine SDK更新为最新版本。从此链接检查最新SDK=>

步骤3:将JDBC驱动程序更新为最新版本。检查此链接的最新版本=>

步骤4:以下是如何正确地将JDBCJAR添加到项目中:复制并粘贴到lib文件夹war/WEB-INF/lib。右键单击Eclipse项目,然后单击构建路径->配置构建路径。单击“addjars”并转到lib文件夹,选择刚才复制的mysql连接器java文件。单击应用并确定

步骤5:清理并构建您的项目

第六步:我不知道这是否必要,但我们还是这样做吧。右键单击项目并转到属性

步骤7:展开“谷歌”部分并选择应用程序引擎。确保选中了启用Google Cloud SQL并选择使用Google Cloud SQL实例单选按钮

步骤8:在单选按钮的右侧,您将看到一个名为“配置”的链接。单击它,用实例名、数据库名等填充字段,然后单击OK

步骤9:在我们前面看到的单选按钮下面,您应该看到另一个名为configure的链接,旁边是一个名为“appenginesqlinstance”的标签。单击configure并像以前一样用实例名、数据库名等填充字段。单击“确定”并关闭“属性”窗口

最后一步:清理并重新构建项目并运行它。如果您正确地遵循了所有步骤,那么您应该连接到功能强大的谷歌云

我花了太多时间才弄明白这一点,我知道我可以用这个答案简化别人的一天。祝你好运


-Dinuka Jayasuriya,未来的谷歌人

奇怪的是,5.1.38版的驱动程序在ConnectionImpl.java:208上没有任何与计时器相关的东西-你确定你在使用legit jar吗?你能把我链接到legit jar吗@伊格拉塔莫诺夫特,很遗憾,是的,错误仍然出现@IgorArtamonovon同一行?208?奇怪的是,5.1.38版的驱动程序在ConnectionImpl.java:208上没有任何与计时器相关的东西-你确定你在使用legit jar吗?你能把我链接到legit jar吗@伊格拉塔莫诺夫特,很遗憾,是的,错误仍然出现@IgorArtamonovon同一行?208?
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();
        }
    }

}