Suena fácil, no? Lo cierto es que algunos estamos acostumbrados a visual studio y cuando queremos abrir un proyecto existente solo buscamos el archivo “proyecto.prj” o “solucion.sln” si se trata de una solución.
Pues bien, en Eclipse no tenemos un archivo que represente el proyecto, la carpeta en sí es nuestro proyecto.
Pero entonces, como demonios agregamos un proyecto existente a nuestro workspace? La solución la encontre aquí.
Basta con “Importar” la carpeta de nuestro proyecto mediante File->Import->Existing Project y seleccionar la carpeta del proyecto.

Hace como 2 días mi teclado númerico dejo de funcionar en Ubuntu 9.04 (Jaunty) sin previo aviso, que yo recuerde no modifiqué configuración alguna. Supongo que sucedió debido a alguna actualización.
Bueno, para resolverlo basta con desmarcar la casilla de “Pointer can be controlled using the keyboard” en System->Preferences->Keyboard en la pestaña de Mouse Keys.

En smartgwt utilizo RPC para la comunicación etre el cliente y el servidor. El paso de errores(Excepciones) del servidor hacia el cliente no se da por sí solo. Con ello me refiero a que si tenemos un método que arroje una excepción de tipo java.lang.Exception, lo cual no es lo recomendado, no podrá ser vista (leída) en el cliente -a pesar de que implementa la interfaz Serializable-
Por ejemplo, si tenemos el siguiente código en el servidor (que comunmente usamos para conectar a la BD):

public String helloException() throws Exception{
    Connection cn=DriverManager.getConnection("non-existent-driver");
    ...
}

y lo invocamos en el cliente

service.helloException (new AsyncCallback<String> () {
          public void onFailure (Throwable caught) {
              ...
              SC.warn("Error: "+ caught.getMessage(), null);
          }
          public void onSuccess (String result) {
              ...
          }
});

si sucede algún error, caught.getMessage() nos mostrara el mensaje “The call failed on the server; see server log for details”. Lo cual no nos dice absolutamente nada, más que algo falló en el servidor. Ahora revisemos el log para ver que sucedió.

[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type ‘java.sql.SQLException’ was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.

Bueno, al menos ahora sabemos que ocurrió un SQLException, pero no podemos ver el detalle del mensaje.
Para ello necesitamos crear nuestra propia Excepcion serializable de la siguiente forma

public class UnknownException extends Exception implements IsSerializable {
    public UnknownException(){
    }
    public UnknownException(String message) {
        super(message);
    }
}

y modificamos el codigo en el servidor para que nos quede de la siguiente manera

public String helloException() throws UnknownException{
    try{
        Connection cn=DriverManager.getConnection("non-existent-driver");
        ...
    }catch(Exception exc){
        throw new UnknownException(exc.getMessage());
    }
}

de esta manera caught.getMessage() nos regresará el mensaje “No suitable driver found for non-existent-driver”, lo cual nos da una pista más clara de qué sucedió.
No necesariamente queremos mostrar estos mensajes al usuario, pero a la hora de debuguear nuestro código también tendremos acceso al mensaje de la excepción, cosa que antes no sucedía.

Finalmente, aunque nos requiera más trabajo, deberíamos crear nuestras propias excepciones.

Seguir

Get every new post delivered to your Inbox.

Únete a otros 195 seguidores