Personal tools
You are here: Home gvSIG Projects gvSIG Desktop Documentation Developers documentation org.gvsig.tools 2.1.0 org.gvsig.tools.exception
gvSIG Desktop
gvSIG Desktop

Cached time 11/21/13 11:24:39 Clear cache and reload

 
Document Actions

org.gvsig.tools.exception

by Jose ignacio Yarza last modified 2010-06-01 23:48

Elementos para construir y manejar excepciones en gvSIG

En el paquete org.gvsig.tools.exception se encuentra la base que los componentes de gvSIG utilizan para crear sus propias excepciones.

Las dos clases centrales, que definen los dos tipos básicos de excepción que se pueden crear, son BaseException y BaseRuntimeException. Ambas clases implementan la interfaz IBaseException y extienden respectivamente java.lang.Exception y java.lang.RuntimeException. Por tanto su manejo es similar al de cualquier excepción, y únicamente se requiere que las excepciones que extiendan de ellas incluyan determinados datos y métodos adicionales en sus implementaciones para que puedan incorporar el comportamiento deseado.

TEXTO

El uso de este modelo aporta algunas ventajas como la localización del mensaje, mejora de la trazabilidad, o el paso de información contextual al usuario y, en definitiva, la normalización del uso de excepciones en gvSIG.

Para crear un nuevo tipo de excepción basta con extender BaseException (o BaseRuntimeException). El siguiente ejemplo es una implementación completamente funcional de BaseException.

Ejemplo:

public class DriverException extends BaseException {
    
    // Este código único se utiliza para identificar el tipo de excepción           
    private static final long serialVersionUID = -8985920349210629999L;
    
    // Clave para localización
    private static final String KEY = "Error_in_the_driver_%(driverName)s";

    // Mensaje
    private static final String MESSAGE = "Error in the driver %(driverName)s";
    
    // Miembro/s que contiene/n información contextual propia de cada clase de excepción.
    private String driverName;
    
    // Constructor con información contextual.
    public DriverException(String driverName) {
            super(MESSAGE, KEY, serialVersionUID);
            this.driverName = driverName;
    }
    
    // Constructor con una causa origen, se usa cuando lanzamos una excepción después de capturar otra
    public DriverException(String driverName, Throwable cause) {
    super(MESSAGE, cause, KEY, serialVersionUID);
            this.driverName = driverName;
    }

    // Este es el constructor completo que requiere BaseException.
    public DriverException(String driverName, String message, Throwable cause,
            String key, long code) {
            super(message, cause, key, code);
            this.driverName = driverName;
    }

    // Implementación del método abstracto que devuelve un Map con los valores contextuales a sustituir en el mensaje       
    protected Map values() {
            HashMap values = new HashMap();
            values.put("driverName",this.driverName);
            return values;
    }
}

¿Cuándo utilizar BaseRuntimeException?

Como regla general, si el código cliente puede tratar la excepción o recuperarse de ella de alguna forma razonable, entonces dicha excepción debe extender BaseException. Si, por el contrario, el cliente no puede hacer nada con la excepción, entonces se puede extender BaseRuntimeException, de manera que no hará falta declararla en el API ni capturarla directamente en el código cliente.

Para una explicación más detallada acerca de esta recomendación se puede visitar: http://java.sun.com/docs/books/tutorial/essential/exceptions/runtime.html


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: