Los archivos de propiedades son archivos comunmente utilizados dentro de la programación de aplicaciones sobre todo en aquellos aspectos donde se requiera parametrización, es decir, cargar un conjunto de opciones que en algun momento puedan ser cambiadas sin necesidad de recompilar las clases.
Recordando un poco el manejo de archivos de propiedades, estos pueden ser cargados en un programa en Java por medio del uso de la clase Properties y su método load, el cual es un método sobrecargado que acepta un flujo de entrada, ya sea un InputStream o un Reader.
Debido a la naturaleza de los EJB's, no es tan sencillo cargar directamente mediante un flujo de lectura de archivos, un archivo de propiedades, suponiendo que dicho archivo reside dentro del mismo Jar del EJB o bien en algun otro archivo Jar, debido a que las clases FileInputStream y FileReader actuan sobre el sistema de archivos y como el archivo de propiedades se encuentra comprimido dentro del Jar, estas clases no lograrian tener el acceso adecuado. Ademas debido al despliege propio de cada aplication server, del ejb-jar, sería complicado el acceso mediante rutas relativas y/o absolutas, además de poco óptimo.
Para solucionar este problema se puede hacer uso de la clase Class y su método getResource, el cual obtiene un objeto java.net.URL, en este caso al archivo de propiedades requerido, sin importar que esté dentro del Jar. A su vez la clase URL contiene el metodo openStream, el cual regresa un flujo de tipo InputStream, el cual servirá para la carga del archivo de propiedades. Ejemplo:
public DB2ExceptionMessageParser() throws IOException {
URL url = getClass().getResource("db2messages.properties");
InputStream is = url.openStream();
properties = new Properties();
properties.load(is);
}
El caso anterior carga un archivo de propiedades con mensajes de error personalizados llamado db2messages.properties, asociados a los códigos de error de una base de datos en DB2. Cabe mencionar que tanto el archivo de propiedades, como la clase que carga tal archivo se encuentran en el mismo paquete. En caso contrario se debe especificar la ruta relativa hacia el archivo desde la clase.
¿Por que hacer este blog en vez de hechar la hueva?
La intención de este blog es compartir con la comunidad algunos problemas con los que me he topado cuando me ha tocado realizar algún proyecto o alguna misión especial asi como la forma en que lo solucioné. Asi mismo me gustaría compartir la preferencia que tengo por el Metal y la música oscura y uno que otro tema que mis colaboradores(as) quieran aportar
jueves, 3 de enero de 2008
miércoles, 26 de diciembre de 2007
METAL DAY EN YEBOTV.COM
YeboTV.com nos trae el proximo 28 de diciembre presentaciones en vivo de las siguientes bandas:
Lo unico que tienen que hacer es registrarse en el sitio (de manera gratuita) y registrarse en el evento.
Click aqui
- Haste the Day
- Nightwish
- Bleeding Through
- Evergreen Terrace
- In This Moment
Lo unico que tienen que hacer es registrarse en el sitio (de manera gratuita) y registrarse en el evento.
Click aqui
martes, 18 de diciembre de 2007
Apocalyptica en Mexico
Apocalyptica ha confirmado tres fechas en México para comenzar chingon el 2008, esperemos estar ahy tambien.
Informacion tomada de: http://www.apocalyptica.de/de_tourdates.html
| Datum | Stadt | Veranstaltungsort | |
| 04.02.2008 | MEX - Monterrey | Auditorio Coca Cola | |
| 05.02.2008 | MEX - Mexiko City | National Auditorium | |
| 06.02.2008 | MEX - Guadalajara | Teatro Diana |
Informacion tomada de: http://www.apocalyptica.de/de_tourdates.html
martes, 11 de diciembre de 2007
La dos veces reina y la dama de negro
Hoy compré el especial de muy interesante sobre las cruzadas, aun no he leido todo pero tiene artículos muy chidos, sobre todo para los que nos interesan todo ese tipo de conflictos bélicos de la antigüedad. Altamente recomendable.
Entonces hoy decidí publicar un scan con un fragmento de un artículo de la revista.

OTERO Luis,"10 personajes principales" Especial Muy Interesante, Las Cruzadas No 6/07 p81
Dedicado para Montse.
Entonces hoy decidí publicar un scan con un fragmento de un artículo de la revista.

OTERO Luis,"10 personajes principales" Especial Muy Interesante, Las Cruzadas No 6/07 p81
Dedicado para Montse.
domingo, 9 de diciembre de 2007
Nightwish en México?¿
Ayer recibí un correo de dilemma, la cual es la organización que se da a la tarea de organizar varios conciertos de nuestro querida música metalera. En el correo se mencionaban los eventos confirmados para el siguiente año.
Yngwie Malmsteen Dic 12 salón 21
WASP Enero 25 circo volador
Sonata arctica Marzo 6 circo volador
Epica 19 y 20 de Marzo circo volador
Nightwish 2 de mayo TBA
Lo que me llamó la atención fue que estaba listado para el 2 de mayo una fecha de Nightwish, por lo que me puse a indagar en las fechas publicadas en la página de la banda y en el myspace, sin lograr confirmar el dato debido a que no aparece listada.
Entonces pensé que si los de dilemma habían enviado la noticia por correo a la lista de suscriptores con ese dato es por algo, por lo que decidí enviarles un correo a estos muchachos pidiendo mas información.
Hoy por la mañana para mi sorpresa recibí un correo de respuesta con lo siguiente
Dice ahí (TBA) eso quiere decir por anunciar, esperamos qué para principios
de Enero lo anuncien ellos tambíen
saludos
Lo que aclaró mis dudas.
Así que esperaremos al siguiente año por la confirmación de la tocada de Nightwish, así como también poder estar ahí, aunque sigo prefiriendo al viejo Nighwish.
Tarja and Fucking BEER Foverer!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Yngwie Malmsteen Dic 12 salón 21
WASP Enero 25 circo volador
Sonata arctica Marzo 6 circo volador
Epica 19 y 20 de Marzo circo volador
Nightwish 2 de mayo TBA
Lo que me llamó la atención fue que estaba listado para el 2 de mayo una fecha de Nightwish, por lo que me puse a indagar en las fechas publicadas en la página de la banda y en el myspace, sin lograr confirmar el dato debido a que no aparece listada.
Entonces pensé que si los de dilemma habían enviado la noticia por correo a la lista de suscriptores con ese dato es por algo, por lo que decidí enviarles un correo a estos muchachos pidiendo mas información.
Hoy por la mañana para mi sorpresa recibí un correo de respuesta con lo siguiente
Dice ahí (TBA) eso quiere decir por anunciar, esperamos qué para principios
de Enero lo anuncien ellos tambíen
saludos
Lo que aclaró mis dudas.
Así que esperaremos al siguiente año por la confirmación de la tocada de Nightwish, así como también poder estar ahí, aunque sigo prefiriendo al viejo Nighwish.
Tarja and Fucking BEER Foverer!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
sábado, 8 de diciembre de 2007
Invocacion de un EJB de sesion remoto desde un cliente en Geronimo 2.0
No hace mucho desde el momento de escribir esta entrada empezé a pelearme con los EJB's. Para esto el buen Gus me mostró como hacer una poderosa Calculadora que exponía un método remoto suma, el cual, después de ser montado en Weblogic Server 8.1, podía ser invocado en un cliente Java remoto mediante los stubs del EJB y el contexto inicial de Weblogic proporcionado por BEA.
Cuando quize repetir el experimento en Geronimo 2.0 para conocer la especificacion EJB3, segui un procedimiento semejante para montar un EJB Calculadora en éste application server.
Genere un proyecto EAR en eclipse y un EJB Module asociado al EAR
Posteriormente definí la interfaces remota y local que exponen el método suma
package test.ejb3;
import javax.ejb.Remote;
@Remote
public interface CalculadoraRemote {
int suma(int a,int b);
}
package test.ejb3;
import javax.ejb.Local;
@Local
public interface CalculadoraLocal {
int suma(int a,int b);
}
Escribí un POJO que definía la implementacion del metodo con las Anotaciones Java adecuadas para el EJB, en este caso @Stateless para indicar que es un EJB de sesion sin estado.
package test.ejb3;
import javax.ejb.Stateless;
@Stateless(name="Calculadora")
public class CalculadoraBean implements CalculadoraLocal,CalculadoraRemote{
@Override
public int suma(int a, int b) {
return a+b;
}
}
Una vez hecho esto simplemente generé el EAR con el EJB, el cual pude montar sin problemas sobre el Geronimo.
Lo siguiente era hacer un cliente Java para probar el EJB. Al igual que el cliente utilizado para el EJB sobre weblogic, lo primero es construir el contexto JNDI inical, pero en este caso tendría que hacerse con un contexto de Open EJB, el cual es el proveedor de servicios EJB utilizado por gerónimo.
Una vez obtenido el contexto JNDI lo siguiente era obtener una referencia remota de la interfaz del EJB mediante su nombre JNDI asociado al EJB, es aqui donde empezaron los problemas debido a que el manejo de nombre JNDI mostrados la documentación es un poco extraña. De hecho después de mucho buscar en google, hacer pruebas y decir muchas maldiciones llegué a lo siguiente.
Para obtener la referencia remota se especifica el nombre JNDI de la siguiente forma
archivo_EJBJar.jar/ejbName/fullQualifiedName_interfaceRemote
Donde archivo_EJBJar.jar Es el nombre del archivo de modulo EJB dentro del EAR (lo que se me hizo una mamada).
ejbName Es el nombre asociado al EJB, este se puede definir en la anotacion @Stateless con el atributo name, o bien en el archivo ejb-jar.xml y openejb-jar.xml para el caso de la especificación 2.0 y anteriores de EJB.
fullQualifiedName_interfaceRemote Que es el nombre de la interface remota, incluyendo los paquetes.
Con lo que el cliente Java quedó de la siguiente manera, utilizando una clase de prueba de JUnit 4.0.
package test.test.ejb3;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.Before;
import org.junit.Test;
import test.ejb3.CalculadoraRemote;
public class CalculadoraTest {
private InitialContext context;
@Before
public void setUp() throws Exception {
Properties properties = new Properties();
properties.put("java.naming.factory.initial",
"org.openejb.client.RemoteInitialContextFactory");
properties.put("java.naming.provider.url", "127.0.0.1:4201");
context = new InitialContext(properties);
}
@Test
public void testSuma() {
try {
Object calculadora = context.lookup(
"CalculadoraEJB3.jar/Calculadora/test.ejb3.CalculadoraRemote");
assertNotNull(calculadora);
assertTrue(calculadora instanceof CalculadoraRemote);
CalculadoraRemote calculadoraRemote = (CalculadoraRemote) calculadora;
assertEquals(5, calculadoraRemote.suma(2, 3));
} catch (NamingException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}
Algo curioso que me pasó es que cuando intenté realizar esto sin incluir al módulo EJB dentro del EAR, el formato del nombre anteriormente señalado no funcionó, quizá por que se requiera un formato diferente para el nombre JNDI, el dato no lo he encontrado, pero al menos será posible invocar al EJB remotamente con el procedimiento anterior.
Cuando quize repetir el experimento en Geronimo 2.0 para conocer la especificacion EJB3, segui un procedimiento semejante para montar un EJB Calculadora en éste application server.
Genere un proyecto EAR en eclipse y un EJB Module asociado al EAR
Posteriormente definí la interfaces remota y local que exponen el método suma
package test.ejb3;
import javax.ejb.Remote;
@Remote
public interface CalculadoraRemote {
int suma(int a,int b);
}
package test.ejb3;
import javax.ejb.Local;
@Local
public interface CalculadoraLocal {
int suma(int a,int b);
}
Escribí un POJO que definía la implementacion del metodo con las Anotaciones Java adecuadas para el EJB, en este caso @Stateless para indicar que es un EJB de sesion sin estado.
package test.ejb3;
import javax.ejb.Stateless;
@Stateless(name="Calculadora")
public class CalculadoraBean implements CalculadoraLocal,CalculadoraRemote{
@Override
public int suma(int a, int b) {
return a+b;
}
}
Una vez hecho esto simplemente generé el EAR con el EJB, el cual pude montar sin problemas sobre el Geronimo.
Lo siguiente era hacer un cliente Java para probar el EJB. Al igual que el cliente utilizado para el EJB sobre weblogic, lo primero es construir el contexto JNDI inical, pero en este caso tendría que hacerse con un contexto de Open EJB, el cual es el proveedor de servicios EJB utilizado por gerónimo.
Una vez obtenido el contexto JNDI lo siguiente era obtener una referencia remota de la interfaz del EJB mediante su nombre JNDI asociado al EJB, es aqui donde empezaron los problemas debido a que el manejo de nombre JNDI mostrados la documentación es un poco extraña. De hecho después de mucho buscar en google, hacer pruebas y decir muchas maldiciones llegué a lo siguiente.
Para obtener la referencia remota se especifica el nombre JNDI de la siguiente forma
archivo_EJBJar.jar/ejbName/fullQualifiedName_interfaceRemote
Donde archivo_EJBJar.jar Es el nombre del archivo de modulo EJB dentro del EAR (lo que se me hizo una mamada).
ejbName Es el nombre asociado al EJB, este se puede definir en la anotacion @Stateless con el atributo name, o bien en el archivo ejb-jar.xml y openejb-jar.xml para el caso de la especificación 2.0 y anteriores de EJB.
fullQualifiedName_interfaceRemote Que es el nombre de la interface remota, incluyendo los paquetes.
Con lo que el cliente Java quedó de la siguiente manera, utilizando una clase de prueba de JUnit 4.0.
package test.test.ejb3;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.Before;
import org.junit.Test;
import test.ejb3.CalculadoraRemote;
public class CalculadoraTest {
private InitialContext context;
@Before
public void setUp() throws Exception {
Properties properties = new Properties();
properties.put("java.naming.factory.initial",
"org.openejb.client.RemoteInitialContextFactory");
properties.put("java.naming.provider.url", "127.0.0.1:4201");
context = new InitialContext(properties);
}
@Test
public void testSuma() {
try {
Object calculadora = context.lookup(
"CalculadoraEJB3.jar/Calculadora/test.ejb3.CalculadoraRemote");
assertNotNull(calculadora);
assertTrue(calculadora instanceof CalculadoraRemote);
CalculadoraRemote calculadoraRemote = (CalculadoraRemote) calculadora;
assertEquals(5, calculadoraRemote.suma(2, 3));
} catch (NamingException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}
Algo curioso que me pasó es que cuando intenté realizar esto sin incluir al módulo EJB dentro del EAR, el formato del nombre anteriormente señalado no funcionó, quizá por que se requiera un formato diferente para el nombre JNDI, el dato no lo he encontrado, pero al menos será posible invocar al EJB remotamente con el procedimiento anterior.
viernes, 7 de diciembre de 2007
Bienvenida
Que tranza gente:
Pues bien, yo soy Ricardo y pues de lo que les puedo decir es que soy solo un simple mortal que sabe un poco de computadoras y que le gusta la música metalera (BLACK FUCKIN METAL!!!!!!!! 1) y oscura en general.
Les puedo decir que tenía la idea ya de crear un blog, pero hasta ahora me animé a hacerlo. Mi idea es compartir las pocas o muchas experiencias que he tenido cuando me he visto involucrado en desarrollar algún proyecto, ya sea para las materias de la escuela o para las misiones que me encargan del trabajo.
De los temas de computación a los que me enfocaré que tengo en la mente en este momento son:
Por otro lado me gustaría incluir información de interés general, por lo que he invitado a algunas amistades a colaborar en esta idea.
Espero salga algo provechoso de todo esto
Ricardo
Que la chela sea
In blood we lust
In beer we lust
More Fuckin metal and more fuckin beer
1 Frase tomada de: http://www.xibalbaitzaes.com/
Pues bien, yo soy Ricardo y pues de lo que les puedo decir es que soy solo un simple mortal que sabe un poco de computadoras y que le gusta la música metalera (BLACK FUCKIN METAL!!!!!!!! 1) y oscura en general.
Les puedo decir que tenía la idea ya de crear un blog, pero hasta ahora me animé a hacerlo. Mi idea es compartir las pocas o muchas experiencias que he tenido cuando me he visto involucrado en desarrollar algún proyecto, ya sea para las materias de la escuela o para las misiones que me encargan del trabajo.
De los temas de computación a los que me enfocaré que tengo en la mente en este momento son:
- Programación en Java
- Bases de datos (DB2, PostgreSQL)
- IDOL de Autonomy
- Weblogic Server y Aqualogic Service Bus
- Apache Geronimo
- etc
Por otro lado me gustaría incluir información de interés general, por lo que he invitado a algunas amistades a colaborar en esta idea.
Espero salga algo provechoso de todo esto
Ricardo
Que la chela sea
In blood we lust
In beer we lust
More Fuckin metal and more fuckin beer
1 Frase tomada de: http://www.xibalbaitzaes.com/
Suscribirse a:
Entradas (Atom)