java: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.

domingo, 7 de octubre de 2007
Hace unos dias atrás formatié mi equipo ya que habia descargado openSUSE 10.3 x86_64 (64 bits) y procedi a instalarlo, hasta hoy todo perfecto, actualize el sistema, me reconoció todo mi hardware, veo nuevos módulos, un nuevo sistema de instalación de software que hace esa tarea un juego de niños, etc.

El problema fué cuando quize instalar el netbeans 5.5.1, cuando ejecuté por consola
./netbeans-5_5_1-linux.bin

me salio el siguiente error:
java: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.

algo que en openSUSE 10.2 no habia visto, bueno, buscando en google me encuentro con esto donde basicamente dicen que, al parecer, hay un problema cuando java encuentra una extensión de xinerama.

Bueno, hasta ahí puros problemas, no puedo ejecutar nada hecho en java, que se puede hacer ? pues muy simple. Por default openSUSE trae una versión de java, la 1.5.0_12, como root hay que ejecutar el siguiente comando:
sed -i 's/XINERAMA/FAKEEXTN/g' /usr/lib64/jvm/java-1.5.0-sun-1.5.0_update12/jre/lib/amd64/xawt/libmawt.so

con eso ya estamos listos.

En mi caso instalé, además, el jdk 1.6.0 update 3 y si se quiere usar hay que hacer el mismo proceso, yo lo instale en /opt y el comando fue el siguiente:
sed -i 's/XINERAMA/FAKEEXTN/g' /opt/jdk1.6.0_03/jre/lib/amd64/xawt/libmawt.so

y listo, problema solucionado.

Si se fijan las versiones de java que estoy usando son para procesadores de 64 bits, en el caso de quienes tengan este problema con procesadores de 32 bits entonces tendrán que modificar el comando en dos partes, donde dice lib64 lo cambian por lib y donde dice amd64 lo cambian por i386.

De forma genérica el comando quedaria de esta forma, sirviendo para cualquier distro:
32 bits:
sed -i 's/XINERAMA/FAKEEXTN/g' /JRE_HOME/lib/i386/xawt/libmawt.so

64 bits:
sed -i 's/XINERAMA/FAKEEXTN/g' /JRE_HOME/lib/amd64/xawt/libmawt.so

en ambos casos deben modificar donde dice JRE_HOME por el directorio donde se encuentra la carpeta jre del java que estan configurando.

Espero les sirva, les dejo unas capturas para que vean que funciona, donde estoy corriendo JKiltro 3.0.2, Netbeans 5.5.1 y Netbeans 6.0.





saludos !!!

Connection pool y Datasource en NetBeans 5.5.1

domingo, 30 de septiembre de 2007
Muchas veces desarrollamos aplicaciones que se conectan a una o varias bases de datos (MySQL, Oracle, PostgreSQL, etc.) y el gran problema siempre es la cantidad de conexiones que deben soportar dichas bases de datos. Qué pasa si hay 4000 conexiones a la vez ? que pasa si esta cifra aumenta ? bueno, ya pueden imaginar que cosas podrian suceder, partiendo por que el servidor de base de datos se caiga ...

Pero para este gran problema existe una solución muy buena y viene en el uso de un DataSource mediante el cuál el cliente se conectará a la base de datos. Este datasource utiliza lo que se conoce como Connection Pool que no es mas que una cantidad de conexiones disponibles para el uso y lo maneja un servidor de aplicaciones (como glassfish). No entraré en detalles sobre como funciona de forma interna, por ahora nos basta decir que mediante un connection pool las conexiones a la base de datos pueden bajar de 4000 a solo 100 (esas son cifras reales), ya que no siempre se necesitan conexiones activas. Esto no quiere decir que un cliente se quedará sin el recurso, si no mas bien que el servidor de aplicaciones permitirá un mejor uso de dicho recurso a través de la gestión que hace al administrar el pool de conexiones.

Una vez un hombre que diseñó una arquitectura que Microsoft tomó como ejemplo (no recuerdo su nombre) nos dió una charla en la Universidad y comentó que el gran problema del Open Source era que si bien habia gran documentación era muy difícil encontrar ejemplos prácticos, lugares donde te dijeran cómo hacer las cosas mas que el qué hay que hacer. En ese punto le encontré la razón y uno de los fines de mi blog es justamente dar ejemplos prácticos de cómo hacer las cosas, pero fundamentando.

Bueno, manos a la obra ...

En resumen lo qué haremos será lo siguiente:
  1. Establecer una conexión con la base de datos.
  2. Crear una aplicación web.
  3. Crear un connection pool.
  4. Crear un datasource.
  5. Registrar el connection pool y el datasource en el servidor de aplicaciones.
  6. Llamar un datasource desde una clase en mi aplicacion web.
Lo primero es lo primero, necesitamos algunas cosas antes de partir. Necesitamos instalado:
(las versiones pueden variar, yo utilizé esas). Si se fijan, en el segundo enlace esta el NetBeans 5.5.1 y el JDK 1.6.0_02 en un solo paquete.

Una vez todo instalado debemos tener corriendo la base de datos.


Ahora crearemos una conexión a la base de datos usando netbeans, pinchen la pestaña "runtime", luego "Databases", click derecho a "Drivers" y pinchan "New driver"


Aquí debes pasarle el driver jdbc como pueden ver en la imagen, luego click en Ok.
Ahora vamos a crear una conexión utilizando el driver que le acabamos de pasar. Haz click derecho sobre "Databases" y pincha "New connection".


En la ventana que aparece ingresa los datos que corresponden como pueden ver en la imagen. Luego pincha Ok.


Ahora ya tenemos una conexión a la base de datos desde netbeans, la cual podremos usar cuando queramos en nuestras aplicaciones. Ahora levantaremos nuestro servidor de aplicaciones, para esto pincha sobre "Servers", haz click derecho sobre "Sun Java System Application Server 9" y pincha "Start", esto levantará el servicio que utilizaremos mas adelante.


Ahora crearemos un "Web Application" ...



Una vez creado el proyecto crearemos el connection pool, para esto haz click derecho sobre el proyecto, mueve el cursor a "New" y pincha "File/Folder".


Ahora busca a la derecha "Sun Resources" y a la izquierda pincha "JDBC connection pool" y luego siguiente.


Ahora debes colocar un nombre a tu connection pool y seleccionar la conexión a la base de datos que previamente estableciste en netbeans.


luego pinchas siguiente y verás los datos de la conexión a la base de datos, luego pinchas "finish".


Ahora vamos a crear el datasource, para esto vas donde mismo para crear el connection pool pero esta vez seleccionas "JDBC Resource".


luego pinchas siguiente y seleccionas el connection pool previamente creado, luego ingresa un nombre a tu datasource, puede ser cualquier nombre, pero no lo olvides, lo necesitarás mas adelante.


Ahora necesitamos crear una referencia al datasource en nuestro proyecto, para esto haz doble click en "web.xml" (está en MiProyecto -> Web pages -> WEB-INF), luego pinchas "References" -> "Add" y agregas el nombre que le pusiste al datasource.


luego pinchas Ok. Si pinchas "XML" en web.xml podrás ver que se agregó la referencia.


Ahora haz doble click sobre "sun-web.xml", expande "Sun Web Aplication" y pincha el datasource que aparece ahí (es el que tu creaste). Fijate que donde dice "JNDI Name" no hay nada, debes copiar y pegar lo que sale justo arribita (el nombre de tu datasource) y guardas.



Ahora debes registrar en el servidor de aplicaciones el connection pool y el datasource que haz creado previamente, simplemente expande "Server resources" en tu proyecto y haz click derecho sobre el connection pool y pincha "Register", lo mismo después con el datasource.


Ya tenemos listo el connection pool y el datasource en nuestra aplicación y en el servidor de aplicaciones. Ahora solo resta utilizarlos en nuestra aplicación. Para ésto haz una clase java en tu proyecto colocando el nombre que tu quieras.


Una vez creada haz click derecho en el editor de netbeans, sobre tu clase y mueve el cursor a "Enterprise resources" y pincha "Use database".


Luego selecciona el datasource que creaste y pinchas Ok.


Ahora podrás ver que en el editor de netbeans ha aparecido un método que obtiene y retorna un DataSource.


Ya con eso puedes crear un objeto de tipo Connection y conectarte a la base de datos usando el DataSource que retorna el metodo previamente creado.


Ahora ya estas listo para trabajar como comunmente lo haces utilizando un objeto de tipo PrepareStatement y ResultSet.

Si te fijas en tu aplicación en ninguna parte ingresas un nombre de base de datos ni usuario ni contraseña, ni si quiera cargas el driver jdbc, ésto es por que tu aplicación ya no es mas un cliente-servidor, agregaste una capa intermedia que es el servidor de aplicaciones, el cuál se encarga de manejar las conexiones a la base de datos, alivianando la carga sobre éste último.

Saludos !!!

Instalación de Openbravo 2.33 en Windows XP SP2

martes, 14 de agosto de 2007
Hola, varios me han pedido la guía de instalación de Openbravo 2.33 (de aquí en adelante OB 2.33) sobre la plataforma Windows ... aquí la tienen !!. Al igual que con openSUSE 10.2 todo lo hice sobre una máquina virtual ya que yo no soy usuario de Windows.

Para partir hay que descargar algunas dependencias necesarias las cuales son PostgreSQL Apache-Ant Apache-Tomcat JDK y obviamente OB 2.33. En mi caso bajé la última version (para Windows) de cada una a la fecha.


Una vez descargado todo seguimos con la instalación. Primero empezamos por el JDK de java, simplemente hacemos doble click al instalador y seguimos las instrucciones, no hay ninguna ciencia.


luego verificamos que la instalación se haya hecho correctamente, para esto abrimos la consola (ejecutar -> cmd) y escribimos:
java -version

con lo cual veremos lo que esta en la siguiente imagen:

Ahora que tenemos el JDK correctamente instalado seguiremos con PostgreSQL. Para esto simplemente descomprimimos el zip, ejecutamos el instalador y seguimos las instrucciones. Hay que fijarse de ingresar una contraseña para levantar el servicio y otra distinta para el usuario administrador de la base de datos, el usuario postgres. A continuación mostraré las imagenes correspondientes a la instalación de PostgreSQL.


Una vez listo debemos cambiar un valor en el archivo pg_hba.conf que está en la carpeta data/ dentro del directorio de instalacion de PostgreSQL. Abrimos ese archivo con algun editor de texto, bajamos hasta el final y buscamos la linea que dice:
host all all 127.0.0.1/32 md5

y lo cambiamos por:
host all all 127.0.0.1/32 trust

Ahora seguimos con la instalación de tomcat y ant. Para esto simplemente descomprimimos los zip y copiamos o movemos las carpetas al directorio que queramos, en mi caso a la raiz de la unidad C.


Ahora debemos agregar una variable de entorno al sistema, la JAVA_HOME, para esto hacemos click derecho sobre Mipc -> propiedades -> opciones avanzadas -> variables de entorno -> nueva y agregamos como vemos en la siguiente imagen:


Ahora ya tenemos todo instalado, solo nos resta subir el servidor Tomcat y la base de datos PostgreSQL.
Para subir Tomcat nos dirigimos a la carpeta bin que esta en el directorio de tomcat y le damos doble click al archivo startup.bat.


Para subir PostgreSQL simplemente ejecutamos start service desde el menu de Windows.


Ahora estamos listos para compilar e instalar OB 2.33. Simplemente ejecutamos el instalador.


le damos siguiente siguiente hasta que nos muestre la opción a elegir la base de datos, cambiamos Oacle por PostgreSQL y seguimos adelante.


Luego le damos la ruta del JDK (deberia tomarla automágicamente si hicimos los pasos anteriores correctamente).


Luego le pasamos el ant


y luego tomcat


Luego debemos pasarle la ruta a los ejecutables del PostgreSQL e ingresamos la contraseña del usuario administrador postgres


Ahora debemos ingresar una contraseña para el usuario tad (si quieren pueden cambiar el nombre de este usuario por otro).


Ahora presionamos siguiente y esperamos a que la compilación e instalación concluya.


Una vez finalizada la instalación debemos reiniciar Tomcat, para esto ejecutamos el archivo shutdown.bat y esperamos a que se baje el servidor, luego volvemos a ejecutar startup.bat para subir el servidor Tomcat.


Ahora abrimos nuestro querido firefox y escribimos:
http://localhost:8080/openbravo

y con esto veremos la pantalla de login de openbravo. Ingresamos el usuario Openbravo y la contraseña openbravo


Ya con esto presionamos el boton Login y podremos entrar a nuestro flamante ERP Openbravo 2.33.


Espero les haya servido esta guía de instalación, estos fueron los pasos que seguí y no tuve ningún problema. De todas maneras, al igual que los chicos de Openbravo, yo les recomiendo hacer la instalación sobre Linux, si ven la guía anterior verán que es muy fácil, se ahorran dinero en licencias, no pierden datos por virus, etc.

Saludos !!!