【问题标题】:Java/GWT/MySQL: connection refused?Java/GWT/MySQL:连接被拒绝?
【发布时间】:2011-12-01 01:03:33
【问题描述】:

我正在开发一个 GWT Web 应用程序并尝试从我的 RemoteServiceServlet 实现(用于 rpc)连接到一个 mysql 数据库。

服务器运行,我能够从我工作的机器连接到数据库。出于测试目的,我编写了一个只连接到数据库的小程序。这有效:

Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.106:3306/dbname", "dbuser", "dbpasswd");

但是在我的 gwt 应用程序中,相同的行失败了大约 100 行堆栈跟踪,这是“原因”:

Caused by: java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.106:3306 connect,resolve)
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:408)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:269)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
... 55 more

现在我的问题是:为什么?

编辑:为了测试,我使用带有 chrome 和 gwt 插件的开发模式

edit2:它崩溃的代码部分:

public DataLinkImpl() {
Connection tmpConnection = null;
try {
  Class.forName("com.mysql.jdbc.Driver");
  tmpConnection = DriverManager.getConnection("jdbc:mysql://192.168.0.106:3306/dbname", "dbuser", "dbpasswd");
} catch (ClassNotFoundException e) {
  System.err.println("jdbc driver class not found");
} catch (SQLException e) {
  System.err.println("could not establish database connection");
  e.printStackTrace();
  e.getNextException().printStackTrace();
} finally {
  connection = tmpConnection;
}
}

使用以下堆栈跟踪:

could not establish database connection
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:112)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:120)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:112)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:120)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at de.eikecochu.gwt.awidb.server.DataLinkImpl.<init>(DataLinkImpl.java:23)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
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:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
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:78)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:362)
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.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
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)
Caused by: java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.106:3306 connect,resolve)
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:408)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:269)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
... 55 more
01.12.2011 02:33:09 com.google.appengine.tools.development.ApiProxyLocalImpl log
SCHWERWIEGEND: javax.servlet.ServletContext log: unavailable

java.lang.NullPointerException
at de.eikecochu.gwt.awidb.server.DataLinkImpl.<init>(DataLinkImpl.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
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:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
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:78)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:362)
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.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
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)

01.12.2011 02:33:09 com.google.apphosting.utils.jetty.JettyLogger warn
WARNUNG: /awidb/datalink
java.lang.NullPointerException
at de.eikecochu.gwt.awidb.server.DataLinkImpl.<init>(DataLinkImpl.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
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:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
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:78)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:362)
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.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
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)

edit3:我向我的 /Library/Java/.../security/java.policy 文件添加了权限:

grant {
    permission java.net.SocketPermission "192.168.0.106:3306", "connect,resolve";
}

但还是一样,我无法连接到数据库。我也尝试直接在db所在的机器上执行它,所以我将它部署在tomcat中(在那里添加了相同的权限),但仍然不行。什么鬼??

edit4:为了确认这一点,我编写了一个非常简单的网络应用程序:

入口点类:

package de.eikecochu.gwt.gwttest.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;

public class GWTTest implements EntryPoint {
  private TestServiceAsync testservice = GWT.create(TestService.class);
  @Override
  public void onModuleLoad() {
    Button b = new Button("test");
    RootPanel.get("container").add(b);
    b.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        testservice.echo("test", new AsyncCallback<String>() {
          @Override
          public void onFailure(Throwable caught) {
            RootPanel.get("container").add(new Label("error"));
          }
          @Override
          public void onSuccess(String result) {
            RootPanel.get("container").add(new Label(result));
          }
        });
      }
    });
  }
}

远程服务接口:

package de.eikecochu.gwt.gwttest.client;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

@RemoteServiceRelativePath("testservice")
public interface TestService extends RemoteService {

  String echo(String s);

}

远程服务异步接口:

package de.eikecochu.gwt.gwttest.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface TestServiceAsync {

  void echo(String s, AsyncCallback<String> callback);

}

RemoteServiceServlet 实现:

package de.eikecochu.gwt.gwttest.server;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import de.eikecochu.gwt.gwttest.client.TestService;

public class TestServiceImpl extends RemoteServiceServlet implements
    TestService {
  private static final long serialVersionUID = 1L;

  private final Connection connect() {
    String driver = "com.mysql.jdbc.Driver";
    String dblink = "jdbc:mysql://192.168.0.106:3306/";
    String dbname = "dbname";
    String dbuser = "dbuser";
    String dbpass = "dbpass";
    try {
      Class.forName(driver).newInstance();
    } catch (InstantiationException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    Connection conn = null;
    try {
      conn = DriverManager.getConnection(dblink + dbname, dbuser, dbpass);
    } catch (SQLException e) {
      System.err.println("mysql connection error: ");
      e.printStackTrace();
    }
    return conn;
  }

  @Override
  public String echo(String s) {
    Connection c = connect();
    return s;
  }

}

这也不起作用。不在我的机器上,也不在 localhost(数据库所在的位置)上。再次出现同样的错误(AccessControlException bla bla)。

edit5:我尝试直接在我的服务器上执行我的应用程序,这意味着:我在服务器上安装了 eclipse 和 gwt 工具,并在 chrome/development 模式下在本地执行它。还是同样的错误。我感觉要么我的 mysql/ubuntu 有错误的配置,要么我做错了什么,从根本上说。通常,连接到数据库应该很容易,是吗?我的意思是,什么是没有数据库的网站...

edit6:按照爸爸的建议,我尝试设置 System.setSecurityManager(null);

在连接到数据库之前在我的 RemoteServlet 中。它抛出以下错误(缩写):

java.security.AccessControlException: access denied (java.lang.RuntimePermission setSecurityManager)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252)
at java.lang.System.setSecurityManager0(System.java:273)
at java.lang.System.setSecurityManager(System.java:264)

看来我安装了 SecurityManager。

另外,我尝试使用 telnet 访问我的数据库。起初,我的连接被拒绝,但我将我的 mysql-bind 地址更改为我的服务器的 ip (192.168.0.106) 并按照此处的步骤操作:http://ubuntu-commands.blogspot.com/2008/11/how-do-i-enable-remote-access-to-mysql.html

当我现在telnet 192.168.0.106 3306时,出现了奇怪的符号:

eikes-macbook-air:~ eike$ telnet 192.168.0.106 3306
Trying 192.168.0.106...
Connected to eike-server.speedport.ip.
Escape character is '^]'.
=
5.1.58-1ubuntu1(b5|529h~!dYpI\rHP:qKc

ot packets out of orderConnection closed by foreign host.

这似乎是一个错误?

另外,我搜索了 AccessDenied 错误并找到了这个链接:http://code.google.com/p/gwt-examples/wiki/project_MySQLConn#Tomcat_Setup_Notes 尽管我使用 Devmode 进行开发,但它准确描述了我遇到的错误。虽然按照这些步骤没有帮助(我编辑了我的默认 /Library/.../security/java.policy 文件)

edit7:我安装了 postgresql 并设置了一个非常简单的数据库,只是为了测试连接。如果没有 GWT,它可以正常工作,GWT 会再次产生相同的错误。因此,这不是我的 mysql 配置的错。我玩了一下java策略文件,没有反应。 GWT 讨厌我 :

edit8:我在另一台机器(这次是 win7)上尝试了 postgresql 和 mysql,并在本地执行了我的 gwt 应用程序(在编辑策略文件之前和之后),仍然是同样的错误。这无疑是 GWT 的错!似乎 gwt devmode 不允许在任何地方做任何事情......

另一个问题:错误明确指出“java.security.AccessControlException:访问被拒绝(java.net.SocketPermission localhost resolve)”,那么为什么当我修改我的java策略文件进行连接时仍然出现这个问题,解决需要端口?好像完全没有效果!我什至尝试授予 AllPermission,也没有效果。

接下来,我找到了“gwt-log.txt”,其中列出了加载过程中的错误:

Public resources found in...
[WARN] Error processing classpath URL 'file:/C:/Program Files (x86)/eclipse/plugin/com.google.gdt.eclipse.designer.hosted.2_2_2.4.2.r37x201110201837/gwt-dev-designtime.jar'
java.net.URISyntaxException: Illegal character in path at index 16: file:/C:/Program Files (x86)/eclipse/plugins/com.google.gdt.eclipse.designer.hosted.2_2_2.4.2.r37x201110201837/gwt-dev-designtime.jar
at java.net.URI$Parser.fail(Unknown Source)

我不知道那是什么,也不知道它是否重要,但这不是我的错!

【问题讨论】:

  • 你用的是什么应用服务器?
  • 你的意思是开发模式?我不使用专用服务器
  • 你能发布完整的堆栈跟踪吗?
  • 您可能意外地在安全沙箱中运行,套接字需要权限,从技术上讲,它们可以被 JVM 实例拒绝。检查您的主调用并确保运行时通过本地 JVM。 java.sun.com/developer/onlineTraining/Programming/JDCBook/…
  • 您是否尝试过访问localhost 上的数据库?这行得通吗?

标签: java mysql gwt


【解决方案1】:

您已 Google App Engine 一起安装了Google Eclipse 插件。创建一个新的 GWT 项目并确保取消选择 Google App Engine,然后重试。或者,从 eclipse 类路径中删除所有与 GAE 相关的 jar 文件。

GAE 是 Google 提供的托管环境。它有一个非常有限的环境。它不允许您打开套接字连接或读/写文件。数据库驱动程序打开一个套接字连接,因此 GAE 以安全异常阻止它。

GWT 和 GAE 是 Google 提供的两个独立产品,但 Eclipse 插件是相同的。不幸的是,它假定您想在项目中同时使用这两种产品。

【讨论】:

  • 你的回答让我很开心!给你很好的共鸣
【解决方案2】:

在我看来,您的 SecurityManager 政策不允许您做您正在做的某些事情。你确定你的 java.policy 文件被应用了吗?您可以尝试调用“System.setSecurityManager(null);”吗?并尝试连接到您的数据库?

如果在调用 setSecurityManager 期间您收到 SecurityException,在我看来,您有一个 SecurityManager。另外,正如我上面的那个人所说:

请记住,默认情况下 mysql 不会监听非本地主机 接口,您需要自己打开它们。

你可以尝试telnet到上面的地址和上面的端口,看看是否一切正常?

编辑:

我越看东西,我越相信这是一个 MySQL 配置问题。您是否从尝试 GWT 连接的同一台机器上执行纯 Java 代码?为什么即使您的 telnet 失败,您的纯 Java 代码也可以连接?您能否再次验证该行为?

【讨论】:

  • 我尝试了 telnet,但出现了一个奇怪的错误...结果在我的 edit6 中。这是否意味着我的 mysql 数据库无法访问?虽然我可以从普通的 Java 应用程序很好地连接到它?
  • 我可以看到你的 mysql 是 5.1。也许您的 GWT 使用与 Java 测试不同的 jdbc 驱动程序。 (最新的 JDBC 类似于 5.1-18,它适用于 MySQL 5.5,不确定适用于 5.1,但应该没问题)
  • mysql 数据库在我的服务器上,我在笔记本电脑上开发。我编写了一个小型 java 程序,它创建数据库、表,然后填充它们。在我的笔记本电脑上完美运行。也许我只是重新安装mysql/在其他地方安装一个mysql db来测试
【解决方案3】:

请记住,默认情况下 mysql 不会监听非 localhost 接口,您需要自己打开它们。

【讨论】:

  • 但是我可以在 Java 中连接到我的 mysql 数据库...只是不能在 GWT 中。
  • 首先,忽略 GWT,创建一个简单的 Web 应用程序,其中包含一个连接到数据库的 servlet;将其安装到您的容器中并测试它是否正确连接。如果是,请继续使用 GWT。如果不是,则问题出在您的 servlet 容器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2021-03-16
  • 2015-06-21
  • 1970-01-01
  • 2020-01-19
  • 2017-08-08
相关资源
最近更新 更多