2011-12-01 18 views
6

Estoy desarrollando una aplicación web GWT y estoy tratando de conectarme a una base de datos mysql desde mi implementación de RemoteServiceServlet (para rpc).Java/GWT/MySQL: ¿conexión rechazada?

El servidor se ejecuta y puedo conectarme a la base de datos desde la máquina en la que trabajo. Para fines de prueba, escribí un pequeño programa que solo se conecta a la base de datos. Esto funciona:

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

Pero las mismas líneas de falla en mi aplicación GWT con alrededor de 100 líneas de seguimiento de la pila, que aquí es la "causa":

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 

y ahora mi pregunta: ¿por qué?

de edición: para las pruebas utilizo el modo de desarrollo con el cromo y el plugin gwt

Edit2: la parte de código en la que se bloquea:

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

con la siguiente StackTrace:

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: Agregué un permiso a mi archivo /Library/Java/.../security/java.policy:

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

pero sigue igual, no me puedo conectar a la base de datos. También traté de ejecutarlo directamente en la máquina donde está el db, así que lo implementé en tomcat (agregué el mismo permiso allí), pero todavía no lo hago. Wtf?

edit4: a confirmar esto, escribí una muy sencilla aplicación web: Clase

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

interfaz de servicio remoto:

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

} 

servicio remoto asíncrono Interfaz:

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 Implementación:

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

} 

esto no funciona bien. No en mi máquina, y no en localhost (donde está el db). El mismo error aparece nuevamente (AccessControlException bla bla).

edit5: Intenté ejecutar mi aplicación directamente en mi servidor, lo que significa que instalé las herramientas eclipse y gwt en el servidor y las ejecuté localmente en modo chrome/development. Todavía el mismo error. Tengo la sensación de que mi mysql/ubuntu tiene configuraciones incorrectas o que estoy haciendo algo mal, fundamentalmente. Normalmente, debería ser bastante fácil conectarse a una base de datos, ¿sí? Quiero decir, ¿qué es un sitio web sin una base de datos ...

edit6: como sugirió baba, traté de configurar System.setSecurityManager (null);

en mi RemoteServlet justo antes de conectar a la base de datos.Lanza el siguiente error (abreviado):

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) 

así que parece que tengo un SecurityManager instalado.

Además, he intentado acceder a mi base de datos con telnet. Al principio, mi conexión fue rechazada, pero he cambiado de dirección mysql-se unen a la ip de mi servidor (192.168.0.106) y siguió los pasos aquí: http://ubuntu-commands.blogspot.com/2008/11/how-do-i-enable-remote-access-to-mysql.html

Y cuando ahora telnet 192.168.0.106 3306, símbolos extraños aparecen:

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. 

Parece que es un error?

Además, busqué el error AccessDenied y encontré este enlace: http://code.google.com/p/gwt-examples/wiki/project_MySQLConn#Tomcat_Setup_Notes que describe exactamente el error que estoy experimentando, aunque utilizo Devmode para desarrollar. Aunque seguir estos pasos no ayudó (edité mi archivo predeterminado /Library/.../security/java.policy)

edit7: Instalé postgresql y configuré una base de datos muy simple para probar la conexión. Sin GWT funciona bien, GWT produce el mismo error nuevamente. Por lo tanto, no es culpa de mi configuración mysql. Jugué un poco con el archivo de políticas de Java, sin reacción. GWT me odia: <

edit8: He intentado tanto PostgreSQL y MySQL en otra máquina (esto win7 tiempo) y se ejecuta mi aplicación GWT localmente (antes & después de editar el archivo de políticas), sigue siendo el mismo error. ¡Esto es inconfundiblemente culpa de GWT! Parece que gwt devmode no tiene permitido hacer anyting, en cualquier parte ...

Otra pregunta: el error indica claramente "java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve)", entonces ¿por qué? ¿Esto todavía aparece cuando modifico mi archivo de política java para conectarme y resolver en los puertos necesarios? ¡Parece que eso no tuvo absolutamente ningún efecto! Incluso intenté conceder AllPermission, sin efecto tampoco.

A continuación, me encontré con el "GWT-log.txt", que enumera un error en el proceso de carga:

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) 

no sé lo que es o si es importante, pero no es mi ¡culpa!

+0

¿Qué servidor de aplicaciones está utilizando? –

+0

te refieres al modo de desarrollo? No uso un servidor dedicado –

+0

¿podría publicar el seguimiento completo de la pila? –

Respuesta

6

Ha instalado Google Eclipse Plugin con Google App Engine. Cree un nuevo proyecto GWT y asegúrese de no seleccionar Google App Engine, y luego vuelva a intentarlo. O elimine todos los archivos jar relacionados con GAE de su classpath de eclipse.

GAE es un entorno de alojamiento provisto por Google. Tiene un ambiente muy restringido. No le permite abrir conexiones de socket o leer/escribir archivos. Los controladores de base de datos abren una conexión de socket, por lo que GAE lo bloquea con una excepción de seguridad.

GWT y GAE son dos ofertas separadas de Google, pero el complemento de Eclipse es el mismo. Desafortunadamente, se supone que desea utilizar ambas ofertas como parte de su proyecto.

+0

ahora funciona, ¡muchas gracias! –

+0

¡Tu respuesta hizo mi día! Buen rollo para ti – Kovags

1

Tenga en cuenta que, de manera predeterminada, mysql no escucha las interfaces que no son de host local, deberá abrirlas usted mismo.

+0

Pero puedo conectarme a mi mysql db en Java ... solo que no en GWT. –

+0

Primero, ignore GWT y cree una aplicación web simple con un solo servlet que se conecte a la base de datos; instálelo en su contenedor y compruebe que se conecta correctamente. Si lo hace, continúe con GWT. Si no es así, el problema es con su contenedor de servlets. –

4

Me parece que su política de SecurityManager no le permite hacer ciertas cosas que está haciendo. ¿Estás seguro de que se aplica tu archivo java.policy? ¿Puedes intentar llamar a `System.setSecurityManager (null); ' e intento de conectarte a tu db?

Si durante la llamada a setSecurityManager recibe una SecurityException, me parece que tiene un SecurityManager en su lugar. Además, como el hombre por encima de mí, dijo:

Tenga en cuenta que, por defecto de MySQL no escucha a los no locales las interfaces, que tendrá que abrirlos a sí mismo.

¿Se puede tratar de telnet a la dirección anterior y al puerto anterior y ver si todo está bien?

EDIT:

Cuanto más veo las cosas, más creo que es un problema de configuración de MySQL. ¿Ejecutas tu código Java puro desde la misma máquina que probaste la conexión GWT? ¿Cómo es posible que su código Java puro se pueda conectar mientras que incluso su telnet falló? ¿Puedes verificar ese comportamiento nuevamente?

+0

Probé con telnet pero ocurre un error extraño ... el resultado está en mi edit6. ¿Esto significa que mi mysql db es de alguna manera inalcanzable? ¿Aunque puedo conectarme a él muy bien desde una aplicación Java normal? –

+0

Veo que tu mysql es 5.1. Tal vez su GWT utilice un controlador jdbc diferente de su prueba de Java. (el último JDBC es como 5.1-18 y funciona bien con MySQL 5.5, no está seguro con 5.1 pero debería estar bien) –

+0

El mysql db está en mi servidor, y lo desarrollo en mi computadora portátil. Escribí un pequeño programa Java, que crea la base de datos, las tablas y luego las rellena. Funciona perfectamente desde mi computadora portátil. Tal vez solo reinstale mysql/install a mysql db en otro lugar para probar –

Cuestiones relacionadas