La librería log4j nos permite gestionar los logs de una aplicación Java. Os recomiendo el tutorial Log4j para Creación de Eventos de Log.
Con log4j podemos "trocear" los ficheros de log cuando llegan a un tamaño máximo definido. El tutorial Log4j describe cómo se configura esta opción.
martes, 8 de enero de 2013
jueves, 22 de noviembre de 2012
Incluir en una web cualquier tipo de fuente
El artículo lo podemos encontrar en el blog El gran artista universal.
jueves, 15 de noviembre de 2012
Acceso a ficheros XML desde Java
Librería JAX (Java API for XML)
La librería JAX (Java Api for XML Processing) es una implementación del DOM para Java y nos permite manipular ficheros XML. Está incluída en la versión 1.4.2 y posteriores de Java.
Existe un artículo muy completo sobre la utilización de JAX en La Tasca de Xela.
lunes, 12 de noviembre de 2012
JDBC para Access sin DSN
Hasta ahora, para acceder a una base de datos Access desde Java había que crear un ODBC de la siguiente forma:
Esta solución es válida para cualquier ODBC, no solo para Access. Para acceder a una hoja de cálculo Excel haríamos lo siguiente:
Información extraída de Apuntes de Java.
- Herramientas Administrativas > Administrador de Orígines de ODBC > Crear un nuevo Origen
- Desde el JDBC, escribir como URL el nombre del DSN.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String accessDB = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\mi_proyecto\mi_bd.mdb";
Connection conn = DriverManager.getConnection(accessDB, "", "");
Esta solución es válida para cualquier ODBC, no solo para Access. Para acceder a una hoja de cálculo Excel haríamos lo siguiente:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String hojaExcel = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\mi_proyecto\hoja_excel.xls;"
+ "DriverID=22;READONLY=false";
Connection conn = DriverManager.getConnection(hojaExcel, "", "");
Información extraída de Apuntes de Java.
jueves, 7 de junio de 2012
Enlaces con las redes sociales en tu página web
Debido al gran auge de la web 2.0, hoy en día es imprescindible que nuestra página web cuente con un botón para poder compartir contenidos en las principales redes sociales. A continuación se describen de forma muy breve como implementar rápidamente los botones "share" de Facebook, Twitter y Google +1 en nuestra web. Para opciones avanzadas, consultar los enlaces correspondientes.
Facebook
Este botón se ha implementado mediante la etiqueta <a>, especificando en su atributo share_url la dirección del sitio web que se quiere compartir:
Twitter
El boton de twitter se crea insertando el código HTML que se genera con el asistente de creación de botones de Twitter que está en el enlace de arriba.
Google también dispone de un asistente para crear su botón Google +1. Puedes acceder a él a través del enlace anterior.
Información extraída de Desarrollo web.
https://developers.facebook.com/docs/share/
Este botón se ha implementado mediante la etiqueta <a>, especificando en su atributo share_url la dirección del sitio web que se quiere compartir:
<a href="" name="fb_share" share_url="http://raulbcneo.blogspot.com.es" type="icon">
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"></script>
https://twitter.com/about/resources/buttons#follow
TwittearEl boton de twitter se crea insertando el código HTML que se genera con el asistente de creación de botones de Twitter que está en el enlace de arriba.
Google +1
http://www.google.com/webmasters/+1/button/
Google también dispone de un asistente para crear su botón Google +1. Puedes acceder a él a través del enlace anterior.
Información extraída de Desarrollo web.
lunes, 4 de junio de 2012
Backups incrementales con rsync
Vamos a ver un ejemplo de backup incremental con rsync, sincronizaremos el directorio /home/destino con el directorio /home/origen:
$ rsync -avvbP --delete --backup-dir=/home/BACKUP/$(date +%y-%m-%d_%H.%M) /home/origen/ /home/destinoLa opción --delete indica que se deben eliminar de destino los ficheros que fueron eliminados de origen.
La opción --backup-dir indica que se deben copiar en el directorio /home/BACKUP/'fecha' los ficheros de destino que van a ser actualizados antes de sobreescribirlos con los nuevos cambios.
Supongamos que destino y origen estaban sincronizados con rsync antes de realizar cambios en origen. Si modificamos el fichero /home/origen/prueba.txt y ejecutamos el comando anterior, rsync guardará el fichero /home/destino/prueba.txt en /home/BACKUP/'fecha' y luego copiará prueba.txt de origen a destino.
Problemas al hacer rsync de un dispositivo EXT3 a un dispositivo FAT32
Extraído del blog de Juan Salvador Sánchez
Tratando de hacer un backup con rsync de una unidad en EXT3 a un disco duro USB en FAT32 he podido apreciar que en el backup siempre faltan archivos y que rsync siempre copia de nuevo todo el contenido incluso cuando no ha habido cambios.
La razón de todo esto está relacionada con el formato FAT32. Por un lado en FAT no es posible tener en el mismo directorio dos carpetas con el mismo nombre. Esto tampoco es posible en EXT3 pero al ser esta case sensitive te permite tener una carpeta "pruebas" y otra "PRUEBAS" en el mismo directorio. El resultado al tratar de copiar ambas carpetas al disco FAT32 es que la primera se copia correctamente pero la segunda es excluida de la copia. Optar por nombres distintos en las carpetas es la solución además de una práctica recomendada.
En cuanto a que rsync, siempre hace un volcado completo incluso cuando los archivos no han cambiado, se debe a que en FAT32 para almacenar la fecha en la que se ha modificado un archivo se dispone de una precisión máxima de solo 2 segundos. Esto hace que no coincida la fecha exacta de EXT3 con la fecha aproximada de FAT32, y dado que Rsync se basa en la comparación de estas fechas para determinar si el archivo ha sido modificado o no desde la última copia, decide volver a hacer el backup.
Para estos casos Rsync cuenta con dos soluciones. La primera por medio del parámetro --size-only, con el que solo considerará que deben copiarse de nuevo aquellos archivos que han cambiado su tamaño, pero no su fecha. Y la segunda y más recomendable por medio del parámetro --modify-window=1, que permite especificar un margen de tolerancia entre fechas, en este caso de 1 segundo.
En tal caso quedaría como sigue:
$ rsync -avvbP --modify-window=1 --delete --backup-dir=/media/USB/BACKUP/$(date +%y-%m-%d_%H.%M) /home/origen/ /media/USB/destino En estos casos se recomienda que el disco duro USB esté en formato EXT3, con lo que no solo no hará falta nada de todo esto sino que además el backup mantendrá intactos los permisos.
viernes, 1 de junio de 2012
Suscribirse a:
Entradas (Atom)