3 25
07
2011

Java y los ficheros .properties

Fecha de publicación: 25 julio 2011 a las 14:37 por admin

Seguro que muchos ya conocéis qué son y cómo funcionan los ficheros .properties en Java, pero para aquellos que no estén muy familiarizados con este tipo de ficheros de configuración, haremos una pequeña introducción a continuación.

¿Qué son los ficheros .properties para Java?

Los ficheros .properties son archivos que nos permiten almacenar variables de configuración de nuestra aplicación.

En la práctica, no deja de ser un fichero de texto donde almacenar por cada línea, un par clave valor, indicando el nombre de la variable y su valor.

Por ejemplo, podemos almacenar en este tipo de ficheros nuestras variables de configuración para conectar contra base de datos, de esta forma, una vez que el desarrollo pase a un entorno de producción, éste será fácilmente reconfigurable.

Ejemplo:


# DataBase Server
dataBaseServer=localhost

# DataBase Catalog
dataBaseCatalog=mydatabase

# DataBase User
dataBaseUser=myuser

# DataBase Password
dataBasePassword=mypswd

NOTA: Las almohadillas funcionan como comentarios de la línea

¿Cómo trabajar y acceder a los ficheros .properties con Java?

Para trabajar con este tipo de ficheros, Java proporciona la clase java.util.Properties, que a efectos prácticos, no deja de ser una tabla Hash con alguna facilidad más.

Una vez que ya conocemos en qué consisten los ficheros properties, vamos a comprobar cómo trabajar con ellos.

Lo primero que debemos hacer es crear una instancia de java.util.Properties y cargar el fichero de configuración.

Para cargar dicho fichero de propiedades, usaremos el método java.util.Properties.load(input), el cual necesita un parámetro de tipo InputStream, indicando la ruta donde se encuentra el fichero de configuración.

. . .
// create and load default properties
Properties defaultProps = new Properties();
FileInputStream in = new FileInputStream("file.properties");
defaultProps.load(in);
in.close();
...

Vamos a proponer una pequeña variación algo más dinámica para la carga usando getClassLoader y getResourceAsStream.


        this.properties = new Properties();
        try {
            properties.load(Configuration.class.getClassLoader().getResourceAsStream("file.properties"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

En este caso, mi archivo de propiedades se encuentra al nivel del primer paquete/package, tal y como se puede ver en la imagen, dentro de la carpeta src, por lo que cuando genere el proyecto (una aplicación web), el archivo de propiedades quedará dentro del directorio classes.

Accediendo a .properties en Java

Accediendo a .properties en Java

Cómo acceder .properties en Java

Cómo acceder .properties en Java

Ya tenemos cargado desde Java nuestro archivo de configuración mediante un fichero .properties, así que únicamente necesitamos poder acceder a las propiedades de configuración.

Como ya hemos dicho, la clase java.util.Properties, no deja de ser una tabla Hash optimizada para este uso, así que acceder a las variables será muy intuitivo.

Podemos hacer uso del método getProperty de la siguiente manera sobre la instancia creada originalmente.


this.properties.getProperty(key)

 

Clase final para acceder a .properties en Java

Visto a grandes rasgos cómo acceder y trabajar con un fichero .properties desde Java, vamos a crear una clase Configuration.java implementando el patrón Singleton (que explicaremos en próximos artículos), que nos permitirá cargar y gestionar de forma transparente nuestro fichero de propiedades .properties desde una clase Java.

Para que la gestión sea más sencilla, añadiremos también dentro de la propia clase Configuration, unas cuantas constantes que nos permitan acceder de forma más sencilla a la propiedad que estamos buscando.


package com.v3.blog;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 *
 * @author v3rgu1
 */
public class Configuration {

    Properties properties = null;

    /** Configuration file name */
    public final static String CONFIG_FILE_NAME = "Configuration.properties";

    /** Data base server */
    public final static String DATABASE_SERVER = "dataBaseServer";

    /** Data base name */
    public final static String DATABASE_CATALOG = "dataBaseCatalog";

    /** Data base user */
    public final static String DATABASE_USER = "dataBaseUser";

    /** Data base password */
    public final static String DATABASE_PSWD = "dataBasePassword";

    private Configuration() {
        this.properties = new Properties();
        try {
            properties.load(Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE_NAME));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }//Configuration

    /**
     * Implementando Singleton
     *
     * @return
     */
    public static Configuration getInstance() {
        return ConfigurationHolder.INSTANCE;
    }

    private static class ConfigurationHolder {

        private static final Configuration INSTANCE = new Configuration();
    }

    /**
     * Retorna la propiedad de configuración solicitada
     *
     * @param key
     * @return
     */
    public String getProperty(String key) {
        return this.properties.getProperty(key);
    }//getProperty
}

¿Cómo será la llamada?

Configuration.getInstance().getProperty(Configuration.DATABASE_SERVER)
0 09
06
2011

El doodle-guitarra de Les Paul (by Google)

Fecha de publicación: 9 junio 2011 a las 22:49 por admin

Van tan sumamente sobrados que pueden permitirse el lujo de crear virguerías como la de hoy para rendir homenaje a Les Paul, percursor de la guitarra eléctrica.

doodle homenaje Les Paul Google

doodle homenaje Les Paul Google

Ya estamos acostumbrados a encontrarnos de vez en cuando doodles, originales diseños que sustituyen la imagen de Google en homenaje a algún hecho histórico o acontecimiento. Pero en esta ocasión se han superado a ellos mismos.

Hasta no hace mucho, estos doodles no dejaban de ser imágenes con un diseño original, hasta que apareció el ya famoso PacMan de Google. Tal fue el éxito que tuvieron que crear una página propia para este doodle: PacMan Google.

Como ya hemos dicho, hoy se cumplen 96 años del nacimiento de Les Paul, y para celebrarlo, esta mañana nos hemos despertado con un nuevo doodle en forma de guitarra eléctrica interactiva.

¿Cómo funciona el doodle-guitarra?

Si pasamos el ratón por encima de las “cuerdas” de la guitarra, veremos y escucharemos los primeros acordes. Esto está muy bien, pero mejor está la opción de activar el teclado.

Si pinchamos en la imagen inferior que tiene forma de teclado (veremos que está activada si toma un tono rojo, podremos utilizar el teclado para realizar nuestras composiciones.

Algunas melodías para la doodle-guitarra

Pasemos a la acción. Buscando por internet en el día de hoy, es fácil encontrar ya cientos de vídeos en youtube o “partituras” para tocar algunas composiciones famosas.

Algunas de mis melodías preferidas interpretadas por el doodle de Les Paul de Google son:

  • Star Wars: WWWQTEQTEUUUITEQTE
  • El Padrino: DHKJHKHJHFGD
  • Misión Imposible: EETYEEWQ EETYEEWQ
  • Popeye el Marino: 3555435 5646865 5646876531 3555678

Y por supuesto, mi preferida:

  • Indiana Jones: ERTI WER TYUP YUIOP

 

0 06
06
2011

Incrustando ficheros PDF

Fecha de publicación: 6 junio 2011 a las 21:39 por admin
Google Docs Viewer

Google Docs Viewer

Recientemente acabamos de publicar en sinnoticiasdelmundo.com un artículo relacionado con el Convenio de las Agencias de Viajes.

Sin embargo, no creamos esta entrada en v3rgu1.com para hablar sobre dicho convenio colectivo, sino para hablar sobre cómo hemos incrustado o embebido el documento PDF que contiene la información, en este caso, el Convenio de Agencias de Viajes, dentro de nuestro blog.

La mayoría ya conocemos la herramienta GDocs creada por Google como alternativa online al famosísimo Microsoft Office. Lo que no conocía a nivel personal hasta ahora, o más bien, no había caído en esa posibilidad, era la opción de aprovechar el visor de Google Docs para incrustar o embeber nuestros archivos, por ejemplo en formato PDF, dentro de nuestras páginas webs.

La idea es sencilla, pues simplemente debemos indicarle a Google Docs Viewer la url de nuestro archivo de la siguiente manera:


<iframe src="http://docs.google.com/viewer?url=URLDETUFICHERO&embedded=true" width="600" height="780" style="border: none;">
</iframe>

O si ya te encuentras en un nivel de vaguería superior, genera el código html desde Google Docs Viewer.

En nuestro caso, el blog se construye bajo WordPress, pero sobra decir que es válido lógicamente para cualquier página, framework, lenguaje, plataforma, etc.

El resultado final será similar al conseguido con https://viewer.zoho.com/ o con http://es.scribd.com/ pero Powered by Google :P

0 09
05
2011

Cómo integrar WSE 3.0 en Visual Studio 2008

Fecha de publicación: 9 mayo 2011 a las 23:33 por admin

Recientemente en el trabajo, estamos desarrollando un proyecto en el que interactuar con un web services con WSE 3.0 integrada.

Por lo tanto, el primer paso fue instalar Web Service Enhancements (WSE) 3.0 for Microsoft .NET descargando el instalable desde esta dirección Web Service Enhancements (WSE) 3.0 for Microsoft .NET.

Una vez finalizada la instalación, no dispondremos todavía de esta herramienta integrada dentro de Visual Studio 2008. Para incorporar WSE 3.0 a nuestro entorno de trabajo Visual Studio 2008, podemos realizar los siguientes pasos:

1. Acudimos al directorio de instalación, en mi caso por ejemplo C:\Documents and Settings\All Users\Datos de programa\Microsoft\MSEnvShared\Addins

2. Editamos con el notepad (o similar) el archivo WSESettingsVS3.Addin (veréis que tiene formato xml)

3. Buscamos y sustituimos <Version>8.0</Version> por <Version>9.0</Version>, y finalmente guardamos los cambios.

4. Para terminar, abrimos Visual Studio 2008 y accedemos a: Tools (Herramientas) > Options (Opciones) > Add-in/Macros Security (Seguridad de Macros/Complementos)

5. Y añadimos nuestro directorio de instalación indicado en el punto 1 tal y como muestra la siguiente imagen.

Integrar WSE 3.0 en Visual Studio 2008

Integrar WSE 3.0 en Visual Studio 2008

No olvides “reiniciar” Visual Studio para contemplar los cambios realizados.

Ya podemos trabajar con WSE 3.0 integrado en Visual Studio 2008.

Integrar WSE 3.0 en Visual Studio 2008 - WSE 3.0 Settings

Integrar WSE 3.0 en Visual Studio 2008 - WSE 3.0 Settings

0 08
05
2011

Comprobar si existe un elemento con jQuery

Fecha de publicación: 8 mayo 2011 a las 15:29 por admin

Comprobar si existe un elemento con jQuery es muy sencillo.

Simplemente tenemos que ejecutar el siguiente código indicando en el selector de jQuery el identificador, clase o condición del elemento que estamos buscando para conocer si existe.


// Comprueba si existe algún elemento con el identificador "identifier"

if ($('#identifier').length) {

// Do something

}

// Comprueba si existe algún elemento con la clase css "mycssclass" asociado

if ($('.mycssclass').length) {

// Do something

}

// Comprueba si existe algún elemento de tipo radio-button

if ($(':radio').length) {

// Do something

}

 

2 01
05
2011

Obtener el valor de un radio button con Javascript (con y sin jQuery)

Fecha de publicación: 1 mayo 2011 a las 1:45 por admin

Siempre se me olvida, no sé cómo lo hago pero cuando estoy programando y necesito recoger el valor del radio button seleccionado… me surge siempre la misma pregunta: ¿y esto cómo se hacía?

jQuery

jQuery

Así que comparto con vosotros y me lo anoto para mí mismo la forma de recoger el valor del radiobutton seleccionado con la ayuda de jQuery.

Disponemos del siguiente grupo de radio-buttons dentro de un formulario para indicar el género o sexo de un usuario, y deseamos conocer el valor del botón de tipo radio seleccionado:

</p>
<p><label><input type="radio" id="gender-male" name="gender" value="male"/> Hombre</label><br />
<label><input type="radio" id="gender-female" name="gender" value="female"/> Mujer</label></p>
<p>

Mediante jquery podemos obtener el valor actual del radio con cualquiera de las siguientes líneas:

</p>
<p>var gender = $("input:radio[name='gender']:checked'").val();<br />
var gender = $("input[@name='gender']:checked").val();</p>
<p>

Y para los nostálgicos, cómo recoger el valor del radiobutton con javascript, sin ayuda de la librería jQuery (ayns… que recuerdos me trae esta función…):

</p>
<p>function getValueRadio(nombreFormulario,nombreCampo){<br />
  var longitud = eval("document."+nombreFormulario+"."+nombreCampo+".length")<br />
  for (var l=0; l<longitud; l++){<br />
    if (eval("document."+nombreFormulario+"."+nombreCampo+"["+l+"].checked"))<br />
        return eval("document."+nombreFormulario+"."+nombreCampo+"["+l+"].value");<br />
  }<br />
  return null;<br />
}//getValueRadio<br />
11 29
04
2011

ERROR 500: 1and1 hosting

Fecha de publicación: 29 abril 2011 a las 20:13 por admin

Cuál es mi sorpresa cuando al acceder a este blog en el día de ayer, y me encuentro con una bonita pantalla que dice:

ERROR 500: ERROR INTERNO DEL SERVIDOR

Ha surgido un problema inesperado que impide que el servidor pueda llevar a cabo la solicitud.

Ante tal mensaje de error, accedo inmediatamente a otro de mis blogs: sinnoticiasdelmundo.com, y me encuentro con otro error, esta vez mostrando un error de un plugin que tenía activado.

Ambos blogs personales, funcionando bajo wordpress, tanto v3rgu1.com como sinnoticiasdelmundo.com, se encuentran alojados en el hosting 1and1, del cual, hasta el día de hoy, he de reconocer que nunca había tenido ninguna queja ni problema.

Cuando había tenido alguna duda, había contactado con su soporte vía correo electrónico, resolviendo las dudas en un plazo razonable de tiempo. Sin embargo este no ha sido el caso. Dado que recientemente no había actualizado ninguna versión de wordpress ni de plug-ins, el primer pensamiento fue pensar en algún problema del hosting 1and1,  por lo que les notifiqué la incidencia inmediatamente, si bien aún seguimos esperando respuesta.

Por suerte, existe gente dispuesta a compartir sus conocimientos y soluciones, y buscando un poco por internet, hemos podido encontrar compañeros que se encontraban en situación similar a la nuestra, con su blog funcionando bajo wordpress alojado en 1and1 y con los mismos problemas, que aportaban soluciones, que efectivamente han funcionado.

Parece ser que el problema se debe a algún cambio realizado en 1and1 hosting, que provoca que la versión de php por defecto no sea php5, y por lo tanto, dejen de funcionar las páginas realizadas en php 5.x.

Esto se puede solucionar fácilmente accediendo al archivo .htaccess de tu instalación aplicación, e incluyendo las siguientes líneas:


AddType x-mapp-php5 .php .php4
AddHandler x-mapp-php5 .php .php4

De esta forma, le indicamos a apache el orden de versión de php por el que queremos que procese nuestros scripts.

Espero que esta solución al ERROR 500: Error interno del servidor en 1and1, os sea tan útil como me ha sido a mí gracias a la comunidad que entre todos formamos en internet.

0 21
04
2011

Character decoding failed

Fecha de publicación: 21 abril 2011 a las 21:35 por admin

Hace algunos días, programando unos scripts en los que enviaba una petición a un servlet de Java a través de AJAX, me encontré con el siguiente mensaje de error en la consola, en mi caso, de Apache Tomcat:

02-abr-2011 23:50:29 org.apache.tomcat.util.http.Parameters processParameters
ADVERTENCIA: Parameters: Character decoding failed.
Parameter skipped.{id=[Ljava.lang.String;@137c90d, id=[Ljava.lang.String;@1709902, nbsp; <span class=[Ljava.lang.String;@14d626e}java.io.CharConversionException: EOF

Lo que en un primer momento tenía pinta de ser uno de tantos problemas que te vuelven loco buscando soluciones por internet, pero sin embargo la solución era mucho más sencilla de lo esperado.

Dentro de la colección de parámetros que construía para enviar hacia el servlet de Java, podían existir en ocasiones caracteres especiales tales como ‘%’, ‘$’, etc, que generaban el error mencionado: Character decoding failed.

La solución a este problema pasaba simplemente por codificar la cadena a enviar por AJAX en formato unicode, y para ello utilizaremos la función de javascript escape.

El código quedaría parecido a estas líneas:

    var params = "id=" + textAreaName + "&value=" + escape(text);
    $.ajax({
        url: "/MyApp/ajax/http/edit?id=" + id,
        type: 'GET',
        data: params,
        success: function(){ // your code }
    });
0 30
01
2011

Internacionalización y localización en Java

Fecha de publicación: 30 enero 2011 a las 13:12 por admin

Hoy vamos a comprobar cómo conocer la cultura en la que se está ejecutando tu programa Java.

Pero, ¿qué es esto de la cultura?

El poder conocer la cultura en la que se está ejecutando un programa, nos permitirá acercarnos a construir un programa más agradable para el usuario final.

Además de las diferencias evidentes de idiomas, la cultura nos permitirá mostrar otros datos como fechas y números en los formatos correctos según la cultura y/o localización del cliente.

Un europeo, entenderá perfectamente la fecha 30/03/1983 como 30 de Marzo de 1983, mientras que un norte-americano esperaría 3/30/1983.

Nos permitirá la cultura por lo tanto internacionalizar nuestras aplicaciones de una forma más sencilla y elegante.

Para ello vamos a utilizar la clase Locale de java dentro del paquete java.util.

Según la propia definición de la clase Locale en la página de Sun… digo de Oracle: un objeto Locale representa una región geográfica, política y cultural específica.

Probemos con el siguiente código Java que utiliza la clase Locale de Java:

        Locale myLocale = Locale.getDefault();
        System.out.println("My country (ISO): " + myLocale.getCountry());
        System.out.println("My country name: " + myLocale.getDisplayCountry());

        System.out.println("My language (code): " + myLocale.getLanguage());
        System.out.println("My language (name): " + myLocale.getDisplayLanguage());

        System.out.println(myLocale.getDisplayName());

Este sencillo código nos permite conocer la cultura/localización de nuestra aplicación Java. Adicionalmente, estamos mostrando por pantalla algunas características del mismo como el país o el lenguaje actual.

La salida será la siguiente:

My country (ISO): ES
My country name: España
My language (code): es
My language (name): español
español (España)
My country (ISO): GB
My country name: United Kingdom
My language (code): en
My language (name): English
English (United Kingdom)

En futuros artículos veremos cómo seguir internacionalizando nuestras aplicaciones en Java.

2 24
12
2010

Feliz Navidad 2010

Fecha de publicación: 24 diciembre 2010 a las 13:00 por admin

Desde v3rgu1.com queremos desearos a todos felices fiestas, y agradeceros la aceptación del blog en este primer año de vida.

¡FELIZ NAVIDAD A TODOS!