lunes, 19 de abril de 2010

Zip en java: Comprimir archivos y/o directorios

Ejemplo claro y conciso para hacer un archivo zip con las librerias de java. El siguente código sirve también para hacer un archivo zip de un directorio con todo su contenido, el cual es agregado de manera recursiva.

A continuación copio y pego el código tal cual pero agrego el enlace de donde lo recuperé.
import java.io.*;
import java.util.zip.*;

/**
 * Compresses a file or directory into a Zip archive. Users of the
 * class supply the name of the file or directory as an argument.
 */
public class SimpleZip {

   private static ZipOutputStream zos;

   public static void main(String[] args) {
      //User must specify a directory to compress      




if (args.length < 1) {
         System.out.println("Usage: java SimpleZip directoryName");
         System.exit(0);
      }
      //Get the name of the file or directory to compress.      




String fileName = args[0];
      //Use the makeZip method to create a Zip archive.


try {
         makeZip(fileName);
      }
      //Simply print out any errors we encounter.


catch (Exception e) {
         System.err.println(e);
      }
   }

   /**
    * Creates a Zip archive. If the name of the file passed in is a
    * directory, the directory's contents will be made into a Zip file.
    */
   public static void makeZip(String fileName)
         throws IOException, FileNotFoundException
   {
      File file = new File(fileName);
      zos = new ZipOutputStream(new FileOutputStream(file + ".zip"));
      //Call recursion.


recurseFiles(file);
      //We are done adding entries to the zip archive,


//so close the Zip output stream.


zos.close();
   }

   /**
    * Recurses down a directory and its subdirectories to look for
    * files to add to the Zip. If the current file being looked at
    * is not a directory, the method adds it to the Zip file.
    */
   private static void recurseFiles(File file)
      throws IOException, FileNotFoundException
   {
      if (file.isDirectory()) {
         //Create an array with all of the files and subdirectories         
 //of the current directory.
String[] fileNames = file.list();
         if (fileNames != null) {
            //Recursively add each array entry to make sure that we get
           //subdirectories as well as normal files in the directory.
            for (int i=0; i<filenames.length; i++){ 
  recursefiles(new File(file, fileNames[i]));
            }
         }
      }
      //Otherwise, a file so add it as an entry to the Zip file.      
else {
         byte[] buf = new byte[1024];
         int len;
         //Create a new Zip entry with the file's name.         


ZipEntry zipEntry = new ZipEntry(file.toString());
         //Create a buffered input stream out of the file         


//we're trying to add into the Zip archive.         


FileInputStream fin = new FileInputStream(file);
         BufferedInputStream in = new BufferedInputStream(fin);
         zos.putNextEntry(zipEntry);
         //Read bytes from the file and write into the Zip archive.         


while ((len = in.read(buf)) >= 0) {
            zos.write(buf, 0, len);
         }
         //Close the input stream.         


         in.close();
         //Close this entry in the Zip stream.         


        zos.closeEntry();
      }
   }
}

El método que hace toda la magia es makeZip(String fileName) el cual hace un archivo zip de nombre fileName+".zip" del respectivo archivo o directorio.

Agrego aquí el link donde se recupera esta pieza de codigo, además de que hace una explicación de el uso de las librerias zip y gzip en java. Clic aqui (Ahora pide que te registres para poder acceder al artículo). 

Algo con lo que he tenido complicación es en crear un archivo jar usando estas librerías, no he encontrado como hacer un jar que sea reconocido al momento de agregarlo al classpath y ejecutar la aplicación java, si alguien tiene algún ejemplo al respecto le agradecería cualquier comentario.

Pazzzzzz

viernes, 9 de abril de 2010

Google .... un nuevo significado para la red


Buzzeando, googleando, gmail, bloggear, picasa, google maps, google Earth, google docs, google news, google Chrome, google Chrome OS.. ¡google for everything!...

No hace mucho salió la herramienta Buzz de Gmail que hace un intento por socializar Gmail y pretende competir con redes sociales como Facebook y Twitter.

Google, como todos podemos observar poco a poco esta acaparando más y más tópicos y contextos, no solo en la red, sino en otros ámbitos tecnológicos como la telefonía móvil entre otras.

Mi opinión al respecto es que simplemente son herramientas que nos hacen la vida más fácil sin duda, con aplicaciones que podemos usar para cualquier actividad diaria, pero, con tanta información que nosotros mismos dejamos para Google (pensando en Google como una corporación de principios benéficos) que tan difícil puede ser que se pase al lado oscuro y no saque algún provecho de toda la información. Al final de cuentas ahí esta, y no podemos asegurar ni una cosa ni la otra, así que solo el tiempo nos lo podrá contestar, por lo mientras, creo que seguimos en la ruta en que Google se hace más y más importante para nuestras cibernéticas vidas, y así mismo, para nuestras mismas vidas... jaja.

A continuación incluyo algunos comentarios de usuarios que se han planteado este tipo de preguntas rescatados de este foro , que a manera personal me parecieron interesantes puntos de vista.

"El peligro informático de Google (técnico) es exactamente igual que el peligro social de cualquier régimen absolutista, vulgo dictadura: sus objetivos pueden ser muy buenos, pero a la larga se convierten en simple tiranía, como ha ocurrido con Microsoft en otros terrenos. Es muy cómodo, rápido, amplio, una gran ayuda para el que escribe, estudia o simplemente quiere buscar algo. ¡Ojala se mantenga así, pero lo dudo! La tentación del poder es muy grande y comienzan las injusticias económicas o sociales"
Romel H. Zell Madrid

"Google es la única agencia fachada del gobierno de USA adjunta al NSA (Agencia Nacional de Seguridad) que esta produciendo dividendos,no solo del punto de vista financiero sino desde la función con que fue originalmente creada,que no es otra que recopilar información personal de la mayor cantidad de individuos posible tanto dentro como fuera del país. O que creen ustedes que los gigantescos servidores que la operan son gratuitos? solo preguntense donde esta la publicidad que la sostiene? Cuidado!!!!"
Leo Contreras portland

"Llegará hasta su propia destrucción,empezando por fracturarse en varias empresas secundarias. Lo desgraciado del sistema capitalista es que la competencia obliga a expandirse para sobrevivir, y esto termina en un monopolio total en donde los más débiles son absorbidos; de la concentración se pasa al abuso de poder, y de allí a la tiranía. La información es la esencia misma del poder, sin ésta no existiría.¿Ventajas? Para los poderosos todas, para los demás: cero. Los negocios no son filantropía."
Armando Bronca Sydney



Realmente ¿qué pretende Google?, ¿es en realidad una solución  cibernética para todos nuestros problemas? ¿O parte de ese plan maquiavélico para conquistar el mundo? Espero sus opiniones estimados javeros y no javeros.


pazzzz

miércoles, 10 de marzo de 2010

Aplicacion web en CD con jetty y derby. Parte 1: Motivación

Esa ocasión mis amig@s javer@s hablaremos de lo que  se puede considerar un ejemplo de la vida real de las herramientas embebidas para aplicaciones java. Específicamente hablaremos de la creación de un CD con una aplicación Web java que se ejecute de manera completamente autónoma (una aplicación de escritorio es algo un poco mas fácil de lograr, sin embargo esta vez sortearemos el reto de utilizar un servidor de paginas web dinámicas para una aplicación web de java en un ambiente monousuario).

En esta primera parte hablaremos únicamente de la motivación y la mención de las herramientas de las que echaremos mano para lograrlo, dejando para una segunda parte (seguramente muy interesante) un ejemplo de la implementación mas detallado para que puedas probarlo por tu cuenta.

La motivación de llevar a cabo este ejercicio es el buscar la posibilidad de reutilizar nuestros sistemas hechos para un contenedor Web, ya sea Tomcat, Glassfish, etc. El mayor problema de portabilidad de estos sistemas es que forzosamente necesitan dicho contenedor instalado en el sistema para poderse ejecutar. Entonces es un  paso un tanto tedioso si lo que queremos es que nuestro sistema lo pueda utilizar un usuario final en la comodidad de su computadora, sin importar si hay conexión a internet o que tenga los servicios de base de datos o servidor web instalados en su sistema local.

Como comentaba anteriormente, la manera más fácil de llevar a cabo esto es utilizar una aplicación de escritorio. En la actualidad, con java, además de swing tenemos herramientas como JavaFX (de las que después hablaremos seguramente) que sumamente nos facilitan la implementación de sistemas de escritorio. Pero la idea es la reutilización, y si ya tenemos un sistema Web que facilita la vida para usuarios que acceden a él por medio de la red, porque no otorgar esta posibilidad a usuarios que lo quieran utilizar de manera local.

Es aquí donde entra Jetty, que como en un post anterior lo mencionamos, es un contenedor para aplicaciones web de Java. Lo singular de ésta aplicación es la facilidad para poder integrar una aplicación web cualquiera, aún utilizando diversos frameworks (yo hasta el momento lo he utilizado con Hibernate, Struts2 y Spring sin ningún problema). Con unas simples configuraciones queda completamente funcionar como aplicación de solo lectura, y así también las aplicaciones que éste contiene.

Después de haber sorteado este problema nos enfrentamos a un nuevo reto, lograr utilizar un manejador de base de datos para nuestra aplicación, sin tener que instalar uno forzosamente. Es aquí donde entra Derby, que como también anteriormente habíamos mencionado, es un manejador de base de datos hecho en Java y que puede trabajar de manera embebida. Inicialmente había elegido HSQL, sin embargo la característica de que sea un manejador que trabaja en memoria, en el momento que lo implementé aparecieron mas contras que pros de su utilización, así que decidí utilizar Derby, sin embargo tu eres libre de utilizar el manejador que mejor te plazca.

Obviamente si nuestra intención es crear un sistema que corra en CD, la base de datos solo tendrá atribuciones de lectura, no podremos escribir en ella. Derby permite ser utilizado como base de datos de solo lectura, incluso por su integración con java, es posible agregar nuestra base de datos a un jar agregadolo simplemente al classpath.

Para concluir esta primera parte del post, quisiera agregar que estas herramientas es posible utilizarlas en conjunto para una aplicación potable. Sin embargo, es necesario aplicar ciertas configuraciones para que funcionen como solo lectura y además requieren un directorio temporal en el sistema local para su disposicion tanto Jetty como Derby (Esto es algo chafa, pero si queremos utilizarlo de la manera fácil es necesario que se usen directorios temporales), y si a esto le agregamos algún lanzador automatico para correr la aplicación en un navegador una vez iniciados los servicios, ¡listo! tenemos nuestra aplicación portable, que fácil ¿no?.

Este post continuará con el ejemplo práctico, dentro de poco. Recuerda, cualquier comentario es bienvenido... cambio y fuera...

pazzzzzzz
Aquí puedes ver la continuación de esta entrada 

lunes, 1 de marzo de 2010

Ordenar nuestra información, pesadilla

Estaba un día viendo mis canciones, y me dije "¡que desm#$%dre tengo!, algún día tengo que ordenar", y el tiempo pasó y no he ordenado aún. Estaba otro día viendo los videos que tengo, unos los guardo en su formato original y otros los convierto a mp4 para verlos en el PSP, y me dije "¡que p#$%che desm#$%dre tengo!, un día de estos tengo que ordenar", y el tiempo ha pasado y pasado y no he ordenado. Un día estaba descargando aplicaciones para la computadora y cuando vi mi directorio de descargas dije "¡que p#$%"e des"#$%"#dre tengo, ya voy a depurar!". Lo mismo me ha pasado con las películas que tengo, con mis documentos, con mis juegos, con mis respaldos de información, en fin, con todo mi material digital que tengo disperso en diferentes medios, la verdad es que tengo un verdadero desm#$%dre.

¿Que hacer?, afortunadamente no me siento solo, se que mas de alguno le ha de suceder lo mismo, e incluso me atrevo a decir que debe ser un fenómeno mundial, y una de dos, o hay un duende informático que se encarga de esparcir nuestra información de manera desorganizada, o - una posibilidad que me parece menos lógica y menos plausible... jeje ;) - los desorganizados somos nosotros.

Según el articulo que leí, y concuerdo con él, un gran problema que tenemos es la tendencia a guardar todo, como si tuviéramos un medio de almacenamiento infinito (sobre todo el disco duro de nuesta pc principal). En el artículo lo llaman  "Infinite U-store-it".  Y lo peor de éste fenómeno es que lo repetimos en todos los dispositivos que nos acompañan: gadgets, celulares, consolas de juegos, laptop, etc.

La solución... mmm... tener un método de ordenamiento para que podamos conjuntar nuestros datos de manera útil y fácil de organizar y depurar. OK, creo que esto es una utopía, como voy a tener todo previsto ... si cuando uno compra un dispositivo nuevo, lo menos que te pones  a hacer es a idear un mecanismo de organización. Entonces en contra parte necesitamos una vacuna, una solución reactiva a este mal, pero difícilmente podemos encontrar una manera sistemática de solucionar el desorden... debe haber algún programita que lo haga... en el articulo que comento mencionan algunos ejemplos.

En realidad esta entrada no es más que para que recordemos un poco este mal que nos aqueja y tal vez hagamos conciencia de..... poooooor fin.... ordenar nuestra información... jeje.. o encontrar una forma de convivir con ello de manera que no sea un gran problema.. jeje.. como realmente lo hacemos.. ;) ... un saludo javeros y no javeros... aquí les dejo el enlace del articulo al que hago alusión, para acceder al artículo haz clic aqui.

pazzz

viernes, 12 de febrero de 2010

Alternativas de iluminación electrica: Tipos, ahorro, ecologia

El otro día me encontré con un articulo muy interesante a cerca de las alternativas de iluminación eléctrica en el hogar, y creo que es algo que vale la pena compartir con los amigos javeros porque la electricidad es parte implícita de nuestras herramientas de trabajo.

Como ya has de saber, como alternativas de iluminación en el hogar tenemos las bombillas incandescentes, lámparas fluorescentes y lámparas led. En el artículo mencionan características y diferencias e implicaciones ecológicas, además de un pequeño marco histórico, incluso cosas relacionadas con la salud que yo no sabia con respecto a las lámparas de luz fluorescente (Hechas con mercurio, que es un material tóxico, por lo tanto peligrosas si se rompen); cosas buenas para tomarse en cuenta la próxima vez que vayas a reemplazar alguno de tus focos fundidos... jeje..  así que sin más aquí esta.
 
En estos tiempos de crisis económica y crisis ecológica, más vale ahorrar y buscar las alternativas más sanas. ¡¡Puedes comentar!!

¡¡Pazzzzzzzzz!!!

lunes, 8 de febrero de 2010

HSQLDB - HyperSQL

Siguiendo con la linea de herramientas para aplicaciones ligeras, sobre todo para ambientes que se ejecuten de manera embebida, me encontré con este manejador de base de datos: HSQLDB.

HSQLDB es otro manejador de base de datos que esta desarrollado puramente en java. Es un motor de base de datos bastante rápido, una vez que arranca, y bastante versátil y sencillo de usar. Permite conexiones cliente/servidor a través de la red, bases de datos en memoria y bases de datos embebidas. También es un manejador que esta específicamente soportado por Hibernate.

A diferencia de Derby, HSQL trabaja mas en memoria, por lo cual operaciones sobre la base de datos como consultas pueden ser mas rápidas, sin embargo es algo a tener en cuenta cuando se trabaja en bases de datos grandes y se tiene una memoria limitada para la maquina virtual que esta ejecutando el servicio de HSQLDB.

Yo lo he trabajado con Hibernate y se me ha hecho una alternativa muy confiable, de manera embebida trabaja bastante bien. Por otro lado algo que se me ha hecho un poco incomodo es el manejador SQLTool que trabaja de manera nativa con HSQL. Es un interprete de comandos algo rudimentario, así como la interfaz del DatabaseManager hecha en Swing, que también permite hacer consultas a las bases de datos de HSQL. Es muy rustica si las comparamos con otras lineas de comandos y GUI's de manejadores como MySQL, o hasta Postgres por ejemplo, pero es usable.

A continuación algunos enlaces que seguramente te serán de utilidad si tu intención es iniciarte en el uso de HSQL con java:


Más adelante publicaré una entrada donde retome algunas comparaciones que se han hecho entre varios manejadores de bases de datos, para que te sea mas fácil elegir alguna alternativa. ¡Paz!

martes, 2 de febrero de 2010

¿Me lo mandas? - mail forwarding & package forwarding


Estaba un día chateando con un amigo javero, platicando de las bondades de las compras a través de internet, y de los contras. Platicábamos que de vez en cuando (porque cada vez los precios estan igual de caros en cualquier parte del mundo, maldita globalización) encontrabamos precios bastante asequibles en tiendas en USA, sin embargo la posibilidad de comprar desde aqui se reduce con todos los filtros de aranceles y aduanas que hay. Fue asi que salió al tema algo de lo que él ya habia ledio algo: mail forwarding & package forwarding.

Platiquemos un poco de éste concepto. Deseas comprar un articulo, aquí en tu país de origen no hay o es demasiado caro para que lo puedas pagar, sin embargo, en USA encuentras en una tienda en linea, o en ebay, o bestbuy, o en alguna alternativa similar. Generalmente las compañias o personas que venden en USA no cuentan con envíos internaionales, primer problema. Otra cosa es que también suelen hacerla de emoción si tu tarjeta de credito no es una tarjeta de USA, otro problema. Es aquí donde entran estas compañias de mail/package forwarding. Estas compañías te ofrecen por un pago o mensualidad, una dirección en sus almacenes en USA que puedes utilizar para hacer tus compras en linea en aquel pais. Tu haces tus compras y tus articulos son almacenados ahi y asi, te los mandan incluso todos de una sola vez a tu casa en tu pais de residencia. El problema de la tarjeta de credito que no es de USA también esta considerado por varias de estas compañias.

Como podemos ver el mail/package forwarding es una interesante opción para quienes vivimos fuera de USA y deseamos aprovechar alguna atractiva oferta de algun producto en particular. Sin embargo es importante hacer una evaluación a conciencia del balance costo/beneficio, porque no vaya a ser que al utlizar esta alternativa te ahorre tres pesos y te de mas problemas que el comprar tu articulo en una tienda local. Como siempre es mejor informarse bien, esta no es una solución mágica a todos los problemas de adquisicion de articulos en línea, solo es una alternativa más.

Yo en lo particular aún no lo he intentado, sin embargo no dudo que mucha gente lo haga ya aqui en México, sobre todo vendedores en linea deben abundar que utilicen esta manera de surtirse de productos de allá. Sería interesante conocer una anécdota real de una experiencia con esto. Tendremos que ver que sucede y como va evolucionando también todas estas alternativas en nuestro pais.

Te dejo un enlace que me roló mi amigo javero donde explican un poco de que se trata el mail/package forwarding. Lo puedes ver aqui.



Si encuentras una buena oferta no dudes en avisarme... saludos!!!

viernes, 29 de enero de 2010

Problema de precisión con el punto flotante en java (y en otros)

Estaba un día un amigo javero programando como cotidianamente lo hace, feliz en por la vida, cuando, de repente, al comprobar una igualdad en un algoritmo que parecía más que lógica se encontró con que algo no estaba funcionando como debiera.

En sí se trataba de una igualdad entre números de punto flotante, de tipo double  para ser más exacto (o doble si quieres usar una traducción literal, pero esto es programación, así que te quiero pedir que mejor no lo hagas, puede provocar confusiones). Como se trataba de una operación algo mas específica y seguramente compleja como para ponerla de ejemplo, mejor me remitiré al fragmento de código java que éste amigo me proporcionó para ejemplificar lo que pasa:
double test = 0.0;
for (int i = 0; i < 10; i++)
    test += 6111403.6;

//6111403.6 sumado 10 veces debería ser 61114036.0

//se agrega cero después del punto, así java lo toma como tipo double

if (test == 61114036.0)
    System.out.print("Igual");

else
    Syste.out.print("WTF!!??");

Consultando el valor de la variable 'test' al final nos da: ­test=6.111403600000001E7 en lugar de un varlor de 6.1114036E7 .... ¡así es, algo totalmente inesperado!

¿Pero qué es lo que sucede? bueno, veamos, los números de punto flotante (o coma flotante como le dicen en tierras del mediterráneo) se crearon con la intención de representar números reales. Un número de punto flotante se representa exactamente por la fórmula:
digitos significantes × baseexponente
y al parecer en nuestro problema algo tiene que ver la precisión que manejan los números de punto flotante  en su representación en sistemas informáticos (en la computadora).

Entonces la presición depende de que tantos valores se puedan almacenar de cada una de las partes de la fórumula de arriba, lo cual en ambientes informaticos, como todos saben, es finito, delimitado por el tipo de dato que se utilize para representar ese número real.

Entonces el hecho real es que los números de punto flotante no pueden representar absolutamente todos los números reales, entonces las operaciones que en ellos realizamos nos pueden llevar a situaciones sorpresivas como la que arriba ejemplificamos. Todo esto debido a la presición finita que las computadoras usan para representar estos números.


Para más información al respecto puedes consultar el articulo en la Wikipedia aqui.

Continuando con la historia, lo que mi amigo javero hizo para solucionar su problema, como le bastaba una presición con respecto a los primeros dos dígitos decimales, fue algo como lo siguiente con el valor en cuestión:
test = Math.round(test * 100) / 100;
de esta manera ya lo pudo comparar de manera confiable. Cada quien podrá implementar la manera que mejor le convenga, lo que si hay que conservar en mente, esque este tipo de problemas se pueden presentar en cualquier momento si estamos trabajando con valores de punto flotante, por lo tanto debemos tomar medidas si vemos que hay riesgo potencial de que ello signifique errores en nuestros sistemas.

Hay otras alternativas para evitar este problema, una explicación (que además esta en español pero no precisamente para java) se puede ver aqui.

Espero no haber confundido más con respecto a este tema y te sea de alguna utilidad, cualquier comentario aqui estamos...  ¡Paz!

lunes, 25 de enero de 2010

Jetty: Servidor Web embebido

Navegando un día buscando precisamente algo de esas cosas embebidas (esa palabra me sigue causando algo de conflicto pero si existe en el español, ¡¡lo juro!!) me encontré con algo llamado Jetty. Jetty nos proporciona, entre varias cosas,  un servidor HTTP, cliente HTTP, y un contenedor de servlets de java. Jetty además es otro proyecto cuyo código es abierto, y esta disponible para su distribución y uso comercial. El núcleo del proyecto se encuentra alojado por la Fundacion Eclipse a partir de la versión 7 y de las versiones 6 para abajo en Codehaus.

Varios proyectos interesantes ya usan Jetty. Nosotros lo hemos utilizado como servidor embebido incluso migrando directamente proyectos que corren bien usando un contenedor Tomcat, en Jetty funcionan bastante bien. Al igual que lo que comentaba de Derby, el utilizar este tipo de herramientas embebidas hace ampliar las posibilidades en aplicaciones que se ejecutan en diferentes ambientes y diferentes equipos, es ligero y confiable. Para ver esa posibilidad de utilizar Jetty de manera embebida puedes ver el tutorial aqui.

En realidad solo quería comentar un poco a cerca de esta aplicación, la documentación que ofrece es bastante clara, con ejemplos de código que ayudan poniendo énfasis en los puntos importantes del tutorial en línea, claro, en ingles. Así que si quieres echar un vistazo a Jetty te invito a checar su página principal http://jetty.codehaus.org/jetty/.

viernes, 22 de enero de 2010

Iniciandose en Derby: Java DB

Derby es un subproyecto de Apache DB. Se trata de un manejador de base de datos de código abierto hecho completamente en java. Derby tiene varias características que lo hacen sumamente atractivo para soluciones en sistemas ligeros. Entre otras me gustaría mencionar las que a mi me llamaron la atención: es fácil de instalar, ligero (pesa tan solo unos cuantos megabytes) y puede usarse de manera embebida (palabra que si existe en español, ver aquí), es decir, que dentro de una aplicación java, podemos iniciar y utlizar bases de datos de Derby dentro de la misma máquina virtua.


Bueno, después de esta pequeña reseña que podemos encontrar fácilmente en cualquier sitio que hable de Derby, vamos a lo importante, como lo usamos dentro de nuestras aplicaciones.

Básicamente lo que haré a continuación será parafrasear un poco los ejemplos de la guía rápida básica de Derby que podemos encontrar en el tutorial oficial.

Primero que nada necesitamos descargar Derby por supuesto, lo cual se puede hacer aquí. Una vez descargado descomprimimos el directorio que esta ahí contenido, ejemplo 'db-derby-alguna_version-bin'. A la ubicación de este directorio lo llamaremos de ahora en adelante: DERBY_HOME.

Comenzaremos con el ejemplo de el uso de Derby embebido dentro de tu aplicación java, lo hago debido a que esta es una de las características que mas llaman la atención de este manejador. Se supone que ya tenemos instalado y debidamente configurado un jdk en nuestro equipo.

Lo haremos a través de la linea de comandos (unix y windows) para hacer mas sencillo de explicar el procedimiento.

Primero creamos un directorio que llamaremos "DERBYTUTOR" y entramos en él. Ahí introduciremos los sguientes comandos, no se te olvide el punto que va al final (.):
Unix:
cp $DERBY_HOME/demo/programs/workingwithderby/* .

export CLASSPATH=$DERBY_HOME/lib/derby.jar:.

 Windows:
copy %DERBY_HOME%\demo\programs\workingwithderby\* .

set CLASSPATH=%DERBY_HOME%\lib\derby.jar;.

Ahora en el directorio DERBYTUTOR en donde nos encontramos deben existir varios archivos java. Después de confirmar que los archivos WwdEmbedded.java y WwdUtils.java existan e introducir el siguiente comando para compilar ambos archivos:

Unix y Windows:
javac WwdEmbedded.java WwdUtils.java
Si en este punto ocurre algún error probablemente es porque no se tiene bien configurado el jdk en nuestro sistema o que al definir el classpath algo no se hizo correctamente.

Si todo salió bien no deberá aparecer nada al ejecutarse la linea anterior y los archivos se habrán compilado satisfactoriamente, creando los archivos WwdEmbedded.class y WwdUtils.class.

A continuación ejecutamos el ejemplo con el siguiente comando y sucederá algo como lo que sigue:

java WwdEmbedded 
org.apache.derby.jdbc.EmbeddedDriver loaded.
Connected to database jdbcDemoDB
 . . . . creating table WISH_LIST
Enter wish-list item (enter exit to end):
a peppermint stick
  __________________________________________________________
On 2009-05-08 13:12:09.058 I wished for a peppermint stick
  __________________________________________________________
Enter wish-list item (enter exit to end):
a long vacation
  __________________________________________________________
On 2009-05-08 13:12:09.058 I wished for a peppermint stick
On 2009-05-08 13:12:21.28 I wished for a long vacation
  __________________________________________________________
Enter wish-list item (enter exit to end):
exit
Closed connection
Database shut down normally
Getting Started With Derby JDBC program ending.

¿Que sucede aquí? Estamos accediendo una base de datos Derby embebida he insertando datos en una tabla. Asi es, sin un servidor Derby activo, simplemente con la aplicación actual.

En el enlace del ejemplo podrás obtener más detalles, lo único que me gustaría comentar aquí es como se logra la conexión en la clase WwdEmbedded a través de que detalles.

Lo único que cambia, con respecto al uso de cualquier JDBC es que utiliza los siguientes parametros:
   // define driver a usar (el contenido en la libreria derby.jar)
      String driver = "org.apache.derby.jdbc.EmbeddedDriver";
   // nombre de la base de datos 
      String dbName="jdbcDemoDB";
   // URL que Derby usara
      String connectionURL = "jdbc:derby:" + dbName + ";create=true";

Y con esto simplemente creamos la conexión de manera normal:

String driver = "org.apache.derby.jdbc.EmbeddedDriver";
...
try {
    Class.forName(driver); 
} catch(java.lang.ClassNotFoundException e) {
  ...
}
String connectionURL = "jdbc:derby:" + dbName + ";create=true";
...
try {
    conn = DriverManager.getConnection(connectionURL);
    ...  
}  catch (Throwable e)  {   
   ...
}

 Aquí concluiría este blog, cualquier otra duda te invito a checar la documentación de los ejemplos, es bastante clara (Aunque en inlgés) y para fines prácticos yo la veo bastante útil.

Puedes ver el sitio oficial de Derby aqui.

Inicia Bitacora de un Javero y otras cuestiones


HOla! Este blog comienza por la necesidad de llevar una bitácora de cosas que ocurren en la vida diaria para un programador cualquiera. En el pasado cuando he tenido algunas inquietudes, ya sabes, esos problemas que necesitas resolver en algún sistema que estés desarrollando y que no encuentras alguna solución puntual en un lugar en específico; ese tipo de inquietudes que cuando logras resolver piensas que a alguien mas podrian serle de utilidad, me ha llevado a iniciar este esfuerzo. También es una manera de llevar un registro de cosas que luego se puedan olvidar, jeje... porque a todos nos pasa, mas vale un blog tonto que una mente lista, a veces.

El nombre de este blog esta obviamente relacionado con el lenguaje de programación Java, con el cual convivo diariamente, sin embargo, debido a que siempre es necesario de otras herramientas o trabajar en otros contextos, será común encontrar temas que puedan estar relacionados con el lenguaje o no directamente. Habrá ocaciones que se hable de sistemas operativos, noticias de tecnología, frameworks, IDE's, juegos, diseño, internet, etcétera; no te preocupes si nos desviamos un poco del tema principal, habrá algún nexo con nuestra intención principal, simplemente la tecnología, sea tangible o intangible.

Bueno si es tu intención a aportar en este blog eres bienvenido, cualquier comentaro, sugerencia o corrección para una probable "fe de erratas" (o fe de ratas como le suelen decir) será también bienvenido, asi que "nieve para el Popocatepetl"... y comenzamos.