2011-12-01 46 views
6

Tôi đang phát triển một ứng dụng web GWT và đang cố gắng kết nối với cơ sở dữ liệu mysql từ triển khai RemoteServiceServlet của tôi (đối với rpc).Java/GWT/MySQL: kết nối bị từ chối?

Máy chủ chạy và tôi có thể kết nối với cơ sở dữ liệu từ máy tôi làm việc. Đối với mục đích thử nghiệm, tôi đã viết một chương trình nhỏ chỉ kết nối với cơ sở dữ liệu. Đây hoạt động:

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

Nhưng theo đường cùng thất bại trong ứng dụng GWT của tôi với khoảng 100 dòng stack trace, đây là "nguyên nhân":

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 

và bây giờ câu hỏi của tôi: tại sao?

chỉnh sửa: để thử nghiệm tôi sử dụng phương thức phát triển với chrome và gwt Plugin

edit2: một phần của mã nơi nó bị treo:

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

với stacktrace sau:

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: Tôi đã thêm quyền vào tệp /Library/Java/.../security/java.policy của mình:

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

nhưng vẫn như cũ, tôi không thể kết nối với cơ sở dữ liệu. Tôi cũng đã cố gắng thực hiện nó trực tiếp trên máy tính, nơi db là, vì vậy tôi triển khai nó trong tomcat (thêm cùng một sự cho phép có), nhưng vẫn không đi. Wtf ??

edit4: để khẳng định điều này, tôi đã viết một ứng dụng web rất đơn giản:

EntryPoint lớp:

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

từ xa Dịch vụ Interface:

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

} 

Dịch vụ từ xa Async Interface:

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 Implementation:

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

} 

điều này không có tác dụng. Không phải trên máy tính của tôi, và không phải trên localhost (trong đó db là). Lỗi tương tự xuất hiện một lần nữa (AccessControlException bla bla).

edit5: Tôi đã cố thực thi ứng dụng của mình trực tiếp trên máy chủ, có nghĩa là: tôi đã cài đặt các công cụ nhật thực và gwt trên máy chủ và thực hiện nó cục bộ ở chế độ chrome/development. Vẫn là lỗi tương tự. Tôi có cảm giác rằng mysql/ubuntu của tôi có cấu hình sai hoặc tôi đang làm điều gì đó sai, về cơ bản. Thông thường, phải khá dễ dàng để kết nối với cơ sở dữ liệu, phải không? Ý tôi là, trang web không có cơ sở dữ liệu là gì ...

edit6: như baba đề xuất, tôi đã cố gắng đặt System.setSecurityManager (null);

trong RemoteServlet của tôi ngay trước khi kết nối với cơ sở dữ liệu.Nó ném lỗi sau (viết tắt):

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) 

vậy có vẻ như tôi có một SecurityManager cài đặt.

Ngoài ra, tôi đã cố truy cập cơ sở dữ liệu của mình bằng telnet. Lúc đầu, kết nối của tôi bị từ chối nhưng tôi đã thay đổi địa chỉ mysql-ràng buộc tôi vào IP của máy chủ của tôi (192.168.0.106) và làm theo các bước ở đây: http://ubuntu-commands.blogspot.com/2008/11/how-do-i-enable-remote-access-to-mysql.html

Và khi tôi telnet 192.168.0.106 3306 bây giờ, những biểu tượng kỳ lạ xuất hiện:

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. 

Dường như đây là lỗi?

Ngoài ra, tôi đã tìm kiếm lỗi AccessDenied và tìm thấy liên kết này: http://code.google.com/p/gwt-examples/wiki/project_MySQLConn#Tomcat_Setup_Notes mô tả chính xác lỗi tôi đang gặp phải, mặc dù tôi sử dụng Devmode để phát triển. Mặc dù làm theo các bước này không giúp được gì (tôi đã chỉnh sửa tập tin mặc định /Library/.../security/java.policy)

edit7: Tôi đã cài đặt postgresql và thiết lập một cơ sở dữ liệu rất đơn giản chỉ để kiểm tra kết nối. Nếu không có GWT nó hoạt động tốt, GWT lại tạo ra cùng một lỗi. Vì vậy, nó không phải là lỗi của cấu hình mysql của tôi. Tôi đã chơi một chút với tệp chính sách java, không có phản ứng. GWT ghét tôi: <

edit8: Tôi đã thử cả postgresql và mysql trên máy khác (lần này là win7) và thực thi ứng dụng gwt tại đó (trước & sau khi chỉnh sửa tệp chính sách), vẫn lỗi. Đây là lỗi GWT không thể nhầm lẫn! Có vẻ như devmode gwt không được phép làm anyting, ở bất kỳ đâu ...

Một câu hỏi khác: lỗi nêu rõ "java.security.AccessControlException: truy cập bị từ chối (java.net.SocketPermission localhost resolve)", vậy tại sao hiện điều này vẫn xuất hiện khi tôi sửa đổi tập tin chính sách java của tôi để kết nối, giải quyết trên các cổng cần thiết? Có vẻ như điều đó hoàn toàn không có hiệu lực! Tôi thậm chí đã cố gắng cấp AllPermission, không có hiệu lực hoặc.

Tiếp theo, tôi thấy "gwt-log.txt", trong đó liệt kê một lỗi trong quá trình tải:

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) 

Tôi không biết đó là gì hoặc nếu điều quan trọng, nhưng nó không phải là của tôi lỗi!

+0

bạn đang sử dụng máy chủ ứng dụng nào? –

+0

bạn có nghĩa là chế độ phát triển? Tôi không sử dụng máy chủ chuyên dụng –

+0

bạn có thể đăng bài theo dõi ngăn xếp hoàn chỉnh không? –

Trả lời

6

Bạn đã cài đặt Plugin Eclipse Eclipse với Máy ứng dụng của Google. Tạo một dự án GWT mới và đảm bảo bạn bỏ chọn Google App Engine, sau đó thử lại. Hoặc, xóa tất cả các tệp jar liên quan đến GAE khỏi đường dẫn lớp eclipse của bạn.

GAE là môi trường lưu trữ do Google cung cấp. Nó có một môi trường rất hạn chế. Nó không cho phép bạn mở các kết nối socket hoặc đọc/ghi các tập tin. Trình điều khiển cơ sở dữ liệu mở ra một kết nối socket, và do đó GAE chặn nó với một ngoại lệ bảo mật.

GWT và GAE là hai dịch vụ riêng biệt của Google, nhưng Plugin Eclipse giống nhau. Thật không may, nó giả định bạn muốn sử dụng cả hai dịch vụ như là một phần của dự án của bạn.

+0

bây giờ nó hoạt động, cảm ơn bạn rất nhiều! –

+0

Câu trả lời của bạn đã làm cho ngày của tôi! Vibes tốt cho bạn – Kovags

1

Hãy nhớ rằng theo mặc định mysql không nghe giao diện không cục bộ, bạn sẽ cần tự mở chúng.

+0

Nhưng tôi có thể kết nối với mysql db của tôi trong Java ... chỉ không có trong GWT. –

+0

Đầu tiên, bỏ qua GWT và tạo một ứng dụng web đơn giản với một servlet đơn lẻ kết nối với cơ sở dữ liệu; cài đặt nó vào thùng chứa của bạn và kiểm tra rằng nó kết nối đúng cách. Nếu có, hãy tiếp tục với GWT. Nếu không, vấn đề là với thùng chứa servlet của bạn. –

4

Âm thanh với tôi như chính sách SecurityManager của bạn không cho phép bạn thực hiện một số nội dung bạn đang thực hiện. Bạn có chắc chắn rằng tệp java.policy của bạn được áp dụng không? Bạn có thể thử gọi `System.setSecurityManager (null); ' và cố gắng kết nối với db của bạn?

Nếu trong khi gọi đến setSecurityManager, bạn sẽ nhận được một SecurityException có vẻ như với tôi rằng bạn có một SecurityManager tại chỗ. Ngoài ra, như anh chàng ở trên tôi đã nói:

Hãy nhớ rằng theo mặc định mysql không nghe giao diện không localhost , bạn sẽ cần tự mở chúng.

Bạn có thể thử telnet đến địa chỉ trên và cổng trên và xem mọi thứ có ổn không?

CHỈNH SỬA:

Tôi càng xem xét nhiều thứ, tôi càng tin rằng đó là vấn đề về cấu hình MySQL. Bạn có thực thi mã Java thuần túy của mình từ cùng một máy mà bạn đã thử kết nối GWT không? Làm thế nào đến mã Java thuần túy của bạn có thể kết nối trong khi thậm chí telnet của bạn không thành công? Bạn có thể xác minh lại hành vi đó không?

+0

Tôi đã cố gắng telnet nhưng một lỗi lạ xảy ra ... kết quả là trong edit6 của tôi. Điều này có nghĩa là db mysql của tôi bằng cách nào đó không thể truy cập? Mặc dù tôi có thể kết nối với nó chỉ tốt từ một ứng dụng Java bình thường? –

+0

Tôi có thể thấy mysql của bạn là 5.1. Có thể GWT của bạn sử dụng trình điều khiển jdbc khác với thử nghiệm Java của bạn. (JDBC mới nhất giống như 5.1-18 và nó hoạt động tốt với MySQL 5.5, không chắc chắn với 5.1 nhưng nên được tốt) –

+0

db mysql là trên máy chủ của tôi, và tôi phát triển trên máy tính xách tay của tôi. Tôi đã viết một chương trình java nhỏ, tạo ra cơ sở dữ liệu, các bảng, và sau đó điền chúng. Hoạt động hoàn hảo từ máy tính xách tay của tôi. Có lẽ Ill chỉ cần cài đặt lại mysql/cài đặt một db mysql ở một nơi khác để kiểm tra –

Các vấn đề liên quan