jueves, 27 de marzo de 2008

Programación pesimista, programación orientada a excepciones (anomalías)

Una excepción en java es simplemente una clase que hereda de la clase java.lang.Exception que extiende a su vez de la clase java.lang.Throwable así que empezamos echando un vistazo a el API de Throwable: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html
Como se comenta en la descripción de la clase:
Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement.
Se puede apreciar que las clases que herendan de Throwable son Error y Exception. Mientras que si lanzamos un error no hay que declarlo en la definición del método, si lanzamos una exception si hay que declarlo:





Aunque no estamos obligados a declarar el error en la definición del método lo podríamos haber hecho de las siguientes maneras:
  • public void pruebaLanzaError() throws Error
  • public void pruebaLanzaError() throws Throwable
Pero en este caso si invocamos el método desde otra parte de nuestro código si estamos obligados a hacernos cargo de este error:



Si entendemos la excepción como un comportamiento anómalo de nuestro programa (o parte de programa), podemos tener en cuenta todos las anomalías de nuestro programa como pueden ser: objetos nulos, valores negativos ...
y actuando en consecuencia es decir lanzando excepciones concretas respondiendo a comportamientos anomalos concretos.

jueves, 24 de enero de 2008

Script linux para recorrer directorio y cambiar nombre a archivos

Bueno parecía más difícil de lo que al final fue:

la función para recorrer directorios es la muy famosa ls, la salida que da se lo pasamos a un bucle while y en cada iteración hacemos un cp ___ ____

Al pasarle variables al script las recogemos por el orden de entrada es decir si ejecutamos el script
# hola.sh Manolo
pues dentro del script accedemos a la variable Manolo con $1 ya que $0 es el nombre del script="hola.sh"

así me ha quedado a mi:

ls $2 |
while read name
do
echo "nombre: $name Extension:$1 Directorio: $2"
cp $2/$name $2/$1$name
done

y la llamada
cambiarNombre.sh Miniatura_ /prueba

y tendría el resultado de anteponer la palabra "Miniatura_" a el nombre de los archivos existentes en el directorio prueba

miércoles, 16 de enero de 2008

Obtener un string con el mensaje (stacktrace) de una excepción

Exception ex = new Exception("something went wrong");
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
System.out.println("stacktrace = " + stacktrace);

Conseguido en
http://www.jguru.com/faq/view.jsp?EID=571084

martes, 13 de noviembre de 2007

linux script copias seguridad

estos scripts se activan desde el archivo crontab


copidatabases.sh (mysql)

#!/bin/sh
fecha=$(date +%y-%m-%d-%H-%M)
DIRECTORIO_INICIAL=/var/lib/mysql
DIRECTORIO_FINAL=$1

mkdir $DIRECTORIO_FINAL/$fecha
for a in `ls $DIRECTORIO_INICIAL`
do
fname=`echo $a | tr A-Z a-z`

echo $DIRECTORIO_INICIAL/$a $DIRECTORIO_INICIAL/$fname
/usr/bin/mysqldump -u ADMIN --password=nickel $fname>$DIRECTORIO_FINAL/$fecha/$fname.sql
done;
exit 0

copi.sh (directorios a incluir y tar)
#!/bin/sh
DIAS=$3
DIRECTORIO_INICIAL=$1
DIRECTORIO_FINAL=$2
fecha=$(date +%y-%m-%d-%H-%M)
find $DIRECTORIO_INICIAL -mtime -$DIAS \! -type d | cat > $DIRECTORIO_FINAL$fecha.txt
tar -cv -T $DIRECTORIO_FINAL$fecha.txt -f $DIRECTORIO_FINAL$fecha.tar

jueves, 8 de noviembre de 2007

cache de explorer no busca actualizacion de informacion

En herramientas>opciones de internet
pestaña general, información relativa a archivos temporales de internet> configuración
Comprobar: automaticamente

o eso o mandar un parametro en el get que sea por ejemplo la hora

miércoles, 24 de octubre de 2007

enum con propiedades, para controlar los mensajes al usuario

http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html

public enum ReflectionMensaje {
ILEGAL_ACCESO("ilegal acceso al metodo: "),
METODO_INEXISTENTE("No existe el metodo: "),
EXCEPCION_INVOCACION("excepcion de invocacion en el metodo: ");

private final String mensaje; // in kilograms

ReflectionMensaje(String m) {
this.mensaje = m;
}

public String toString() {
return mensaje; //To change body of overridden methods use File | Settings | File Templates.
}
}

jueves, 18 de octubre de 2007

configure log en jboss

hay que editar el archivo server/default/conf/log4j.xml
e incluir nuevas categorias

<category name="oracle.adf">
<priority value="WARN"/>
</category>