Archive for the ‘JEE’ Category

Eclipse: Como una pequeña introducción

jueves, septiembre 4th, 2014

Aqui un video que muestra desde el comienzo como descargar e instalar eclipse. En esta caso se descarga la version JEE.

Videos Instalación Java, Netbeans, Eclipse ADT (Android) y Anypoint Studio

lunes, agosto 18th, 2014

Debido a mis clases he necesitado hacer un par de videos y dejarlos disponibilizados para que puedan ver instalaciones que aunque son de Perogrullo, es valido que una imagen vale más que mil palabras.

Aun cuando yo debo reafirmar mi mala costumbre de instalar todos los java, eclipse, netbeans o «studios» que hacen algo en la ruta c:\opt todo esto por mostrar un incipiente método de trabajo propio que es util sobretodo para cuando se utilizan programas que después iran en un batch de windows.

Aquí va la lista

Instalación Java 1.4.2

Instalación Java 5 (1.5)

Instalación Java 6 (1.6)

Instalación Java 7 (1.7)

Instalación Java 8 (1.8)

Instalación de Netbeans 8.0

EClipse ADT (Android Developer Tools)

Anypoint Studio

Distintas versiones de la misma aplicación en JBoss 4.2.x

viernes, enero 4th, 2013

La verdad sea dicha, carecemos de recursos ilimitados para poder probar aplicaciones en ambientes ni siquiera similares a los que poseen nuestros clientes, esto solo existe para productos más consolidados. Por lo mismo hay que buscar las estrategías necesarias para que en un servidor quepan multiples instancias y así rentabilizar más los recursos.

Cuando se habla de multiples instancias estamos hablando de que JBoss se puede configurar para correr en más de un puerto, una explicación bastante buena esta en un blog de una compañía argentina Avant Garden Technologies. Con este artículo podrás tener multiples instancias de JBoss, aun cuando el único reparo que debo hacerle es que el cambiar por «fuerza bruta» los puertos Sí funciona, yo lo pude hacer cuando aun no entendía bien como funcionaba el tema de las instancias, ellos indican lo contrario. Aun así ellos entregan con argumentos conceptuales y practicos para poder establecer más de una instancia.

Pero llegue al punto en donde tengo una aplicacion que debo mantener multiples versiones. Aun cuando tenga multiples instancias algunas configuraciones se solapan. Es posible mantener en multiples instancias multiples datasources debido a que esta dentro de la carpeta deploy. Pero muchas veces requieres leer un archivo especifico, que debes colocar en una ruta externa a JBoss, para lo cual te vales del CLASSPATH de Java… y ahí existe un problema cuando deseas ejecutar distintas versiones de la aplicación en el mismo servidor, no importando que tengas multiples instancias el CLASSPATH para JBoss es único, para todas sus instancias, por lo que se te provocan algunos problemas.

La aplicación lee un archivo de propiedades x.properties, este archivo esta ubicado en alguna parte dentro del CLASSPATH si tu deseas modificar una llave de este archivo la modificarás para ambas versiones de la aplicación, y eso no es lo que ando buscando, sino que cada aplicación lea su propio properties. Inicialmente hice que la version de producción leyera x.properties y la version de qa y.properties, pero nos paso la cuenta el control de versiones, en donde estos archivos son distintos por lo que las nuevas llaves creadas en y.properties no eran traspasadas a x.properties siempre, con los inherentes problemas de ejecución.

Ahora bien, la exigencia de que el properties este fuera de JBoss (el servidor de aplicaciones) es un petición del cliente, es más solucionable si esto estuviese dentro, debido a que cada instancia vería su ambito solamente.

Entonces como habían dos CLASSPATH excluyentes lo que hice fue copiar la carpeta JBoss completa, y con las multiples instancias ya aplicadas fue hacer un

/usr/local/jboss/bin/run.sh -b 0.0.0.0 -c default 

y un

/usr/local/jbossqa/bin/run.sh -b 0.0.0.0 -c qa

Y así tuve dos instancias de JBoss con la misma aplicación y distinta versión, apuntando a distintos CLASSPATH

Conectar Java (JDBC) a Oracle RAC

jueves, octubre 25th, 2012

Lo normal es que nuestras conexiones JDBC esten dadas a través del String URL de la siguiente forma

jdbc:oracle:thin:@HOST:1521:SID

En Oracle 10g me dio buenos resultados (ante el error ORA-12505)

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service)))

Pero en 11g la documentación dice

jdbc:oracle:thin:@HOST:1521/SID

Con lo que ha funcionado completamente (notese que antes del SID los dos puntos cambia por slash).

Cambiando el tiempo de transaccionalidad en JBoss 4.2.3.GA

miércoles, septiembre 26th, 2012

Para los desarrolladores que «debugean» es util cambiar el valor de timeout de la transaccionabilidad el JBoss que esta configurada en 300 segundos por defecto, esto porque la depuración puede de un proceso largo puede tomar más que esos 300 segundos, luego de lo cual la transaccionalidad se pierde, y pierdes además conexiones y cosas similares. En el archivo jboss-service.xml, se debe modificar la seccion, con los segundos en 5000.

   
   
      5000
      ${jboss.server.data.dir}/tx-object-store 
   

Error en lectura de archivo fuera del Application Server

jueves, enero 12th, 2012

Tengo una pagina JSP encargada del proceso de «download» para cualquier archivo. Esta había sido probada en varios sistemas operativos hasta que me topé con Solaris. En Solaris uno no puede leer un archivo que este fuera de la ruta del servidor de aplicaciones, envía error y no lee el archivo (en otros sistemas operativos no sucede). Para poder hacerlo no hay que abrirlo como File sino como URL, pero para abrirlo como URL, hay que antepornerle el protocolo ‘file://’, siendo esto compatible con todos los sistemas operativos.

String file = "file://" + request.getParameter("file");
	
OutputStream output = response.getOutputStream();
InputStream in = null;
try {
    URL url = new URL(file);
    in = url.openStream();
    byte[  ] buf = new byte[4 * 1024]; 
    int bytesRead;
    while ((bytesRead = in.read(buf)) != -1) {
        output.write(buf, 0, bytesRead);
    }
} finally {
    if (in != null) in.close();
}

La verdad es que independientemente del sistema operativo esto debió ser siempre así, sólo que muchas veces uno se queda con lo primero que le resulta.