2011-12-01 73 views
6

我正在開發一個GWT Web應用程序,並試圖從我的RemoteServiceServlet實現(對於rpc)連接到一個mysql數據庫。Java/GWT/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 

,現在我的問題:爲什麼?

編輯:測試我使用的開發模式,鉻和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:證實了這一點,我寫了一個非常簡單的Web應用程序:

入口點類:

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; 
    } 

} 

這也不起作用。不在我的機器上,也不在本地主機上(數據庫所在的地方)。同樣的錯誤再次出現(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) 

這樣看來我已經安裝了安全管理器。

此外,我試圖用telnet訪問我的數據庫。起初,我的連接被拒絕,但我改變了我的mysql-綁定地址到我的服務器(192.168.0.106)的IP和這裏遵循的步驟: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. 

看來這是一個錯誤?

另外,我搜索的存取遭拒錯誤,並發現此鏈接: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:我都嘗試PostgreSQL和MySQL另一臺機器上(此時WIN7)和(編輯策略文件後&之前)執行我的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) 

我不知道那是什麼,或者如果它很重要,但它不是我的故障!

+0

您使用的是什麼應用程序服務器? –

+0

你的意思是開發模式?我不使用專用服務器 –

+0

你可以發佈完整的堆棧跟蹤嗎? –

回答

6

您已經安裝Google Eclipse Plugin Google App Engine。創建一個新的GWT項目並確保取消選擇Google App Engine,然後重試。或者,從eclipse classpath中刪除所有與GAE相關的jar文件。

GAE是Google提供的託管環境。它的環境非常有限。它不允許你打開套接字連接或讀/寫文件。數據庫驅動程序打開一個套接字連接,所以GAE會用安全例外來阻止它。

GWT和GAE是Google的兩個獨立產品,但Eclipse插件是相同的。不幸的是,它假定你想把這兩種產品作爲你的項目的一部分。

+0

現在它的工作原理,非常感謝你! –

+0

您的回答成就了我的一天!對你有好感 – Kovags

1

請記住,默認情況下,mysql不會偵聽非本地主機接口,您需要自己打開它們。

+0

但我能夠連接到我的mysql數據庫在Java中...只是不在GWT。 –

+0

首先,忽略GWT並使用連接到數據庫的單個servlet創建一個簡單的Web應用程序;將其安裝到您的容器中並測試它是否正確連接。如果確實如此,請繼續使用GWT。如果沒有,問題出在你的servlet容器上。 –

4

聽起來像你的SecurityManager策略不允許你做某些你正在做的事情。你確定你的java.policy文件被應用了嗎?你可以嘗試調用`System.setSecurityManager(null);'並嘗試連接到你的數據庫?

如果在調用setSecurityManager的過程中出現SecurityException,那麼在我看來你有一個SecurityManager。此外,如我上面的傢伙說:

請記住,默認情況下,MySQL不聽非本地主機 接口,則需要打開他們自己。

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

編輯:

我越是看的東西,我就越相信這是一個MySQL的配置問題。你是否嘗試過使用GWT連接的同一臺機器執行純Java代碼?當你的遠程登錄失敗時,你的純Java代碼如何連接?你能再次驗證那個行爲嗎?

+0

我嘗試了telnet,但發生了一個奇怪的錯誤...結果是在我的edit6。這是否意味着我的MySQL數據庫以某種方式無法訪問?雖然我能夠從普通的Java應用程序中很好地連接到它? –

+0

我可以看到你的mysql是5.1。也許你的GWT在Java測試中使用不同的jdbc驅動程序。 (最新的JDBC就像5.1-18,它可以很好地運行在MySQL 5.5上,不確定是5.1還是應該沒問題) –

+0

mysql數據庫在我的服務器上,我在筆記本上開發。我寫了一個小型的java程序,它創建數據庫和表格,然後填充它們。從我的筆記本電腦完美運行也許我只是重新安裝MySQL /安裝一個MySQL數據庫在其他地方測試 –