Java / GWT / MySQL: соединение отказано? - PullRequest
6 голосов
/ 01 декабря 2011

Я занимаюсь разработкой веб-приложения GWT и пытаюсь подключиться к базе данных mysql из моей реализации RemoteServiceServlet (для rpc).

Сервер работает, и я могу подключиться к базе данных с компьютера, на котором я работаю. Для тестирования я написал небольшую программу, которая подключается только к базе данных. Это работает:

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

а теперь мой вопрос: почему?

edit: для тестирования я использую режим разработки с плагином 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";
}

но все то же самое, я не могу подключиться к базе данных. Я также попытался выполнить его непосредственно на компьютере, на котором находится база данных, поэтому я развернул его в tomcat (добавил то же разрешение там), но все равно не пошел. Wtf ??

edit4: чтобы подтвердить это, я написал очень простое веб-приложение:

Класс EntryPoint:

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, бла-бла).

edit5: я пытался запустить свое приложение непосредственно на моем сервере, что означает: я установил на сервере инструменты eclipse и gwt и выполнил его там локально в режиме chrome / development. Все та же ошибка. У меня возникает ощущение, что либо у моего mysql / ubuntu неправильные конфиги, либо я делаю что-то не так, по сути. Обычно подключение к базе данных должно быть достаточно простым, да? Я имею в виду, что такое веб-сайт без базы данных ...

edit6: как предложила баба, я попытался установить System.setSecurityManager (нуль);

в моем 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-я включить-удаленный доступ-к-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 ненавидит меня: <</p>

edit8: я попробовал и postgresql, и mysql на другом компьютере (на этот раз win7) и выполнил там мое приложение gwt (до и после редактирования файла политики), но ошибка та же. Это безошибочная вина GWT! Похоже, что gwt devmode нигде не разрешено делать ...

Другой вопрос: в сообщении об ошибке четко указано «java.security.AccessControlException: доступ запрещен (разрешение локального хоста java.net.SocketPermission)», поэтому почему это все еще появляется, когда я изменяю свой файл политики 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)

Я не знаю, что это или важно, но это не моя вина!

Ответы [ 3 ]

6 голосов
/ 05 декабря 2011

Вы установили плагин Google Eclipse с Google App Engine.Создайте новый проект GWT и отмените выбор Google App Engine, а затем повторите попытку.Или удалите все файлы jar, связанные с GAE, из своего пути к классу eclipse.

GAE - это хостинговая среда, предоставляемая Google.У него очень ограниченная среда.Он не позволяет открывать сокетные соединения или читать / записывать файлы.Драйверы базы данных открывают сокетное соединение, и поэтому GAE блокирует его с исключением безопасности.

GWT и GAE - это два отдельных предложения от Google, но Eclipse Plugin - то же самое.К сожалению, предполагается, что вы хотите использовать оба предложения как часть вашего проекта.

4 голосов
/ 03 декабря 2011

Похоже, ваша политика SecurityManager не позволяет вам делать определенные вещи, которые вы делаете.Вы уверены, что ваш файл java.policy применяется?Можете ли вы попытаться вызвать `System.setSecurityManager (null); 'и попытаться подключиться к вашей базе данных?

Если во время вызова setSecurityManager вы получаете исключение SecurityException, мне кажется, что у вас есть SecurityManager.Кроме того, как сказал парень выше меня:

Имейте в виду, что по умолчанию mysql не слушает нелокальные интерфейсы, вам нужно будет открыть их самостоятельно.

Можете ли вы попытаться связаться по указанному выше адресу и указанному выше порту и посмотреть, все ли в порядке?

РЕДАКТИРОВАТЬ:

Чем больше я смотрю на вещи, тем больше я считаю, что этоПроблема конфигурации MySQL.Вы выполняете свой чистый Java-код с той же машины, на которой вы пробовали соединение GWT?Почему ваш чистый Java-код может подключиться, даже если ваш telnet вышел из строя?Можете ли вы проверить это поведение снова?

1 голос
/ 03 декабря 2011

Имейте в виду, что по умолчанию mysql не слушает нелокальные интерфейсы хоста, вам нужно будет открыть их самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...