Traducir Blog

miércoles, noviembre 05, 2008

Implementando MyFaces, Tommahawk y SandBox.

En el mundo de JSF existen muchas implementaciones que siguen el modelo y la filosofia de este robusto Framework de desarrollo enfocado principalmente en la capa de presentación, resaltan Oracle ADF Faces, RichFaces, MyFaces, Trinidad, ICEFaces, etc. Todos enfocados a extender la implementación estandar de JSF siguiendo obviamente el modelo y arquitectura definidos por la implementación de referencia.


En esta ocasión hablaré un poco sobre MyFaces una de las implementaciónes de JSF mas conocida y utilizada, como información general este es uno de los muchos proyectos con exito de Apache, ahora bien,Tommahawk y SandBoxpueden tomarse como extensiones o subproyectos de MyFaces, con componentes y utilidades que no se encuentran en la distribución core de MyFaces, una de las grandes ventajas que tenemos los desarrolladores de JSF es que podemos hacer una mezcla de diversos frameworks dentro de nuestros proyectos y hacer uso de una gran gama de componentes que, a final nos sirven para que los proyectos que desarrollemos haciendo uso de tecnologia J2EE tengan una buena calidad.

Configuración e instalación del Proyecto:

Para comenzar debemos contar con una estructura de aplicación Web, donde cuando menos debemos contar con un direcotorio WEB-INF y en el interior de dichos directorios deberan existir por lo menos los directorios lib, classes, conf (opcional) y los ficheros web.xml (fichero de configuración de la aplicación web) y faces-config.xml (fichero de configuración de JSF).Con esta estructura creada es necesario tener las librerias adecuadas en el directorio WEB-INF/lib para la correcta instalación y configuración de la aplicación es necesario descargar MyFaces y las correspondientes librerias commons al momento de redactar este documento nos encontramos en la versión 1.2.7, para descargarlo la ruta es: http://www.apache.org/dyn/closer.cgi/myfaces/binaries/myfaces-core-1.2.7-bin.tar.gz
El fichero contiene las librerias commons adecuadas deacuerdo la versión de MyFaces. Sin embargo, en algunos casos (dependiendo del servidor de aplicaciones o contenedor web de despliegue) sera necesario la libreria commons-el (Expression Lenguage) este asunto se explicará con detenimiento mas adelante.
Posteriormente debemos descargar Tommahawk desde aqui: http://www.apache.org/dyn/closer.cgi/myfaces/binaries/tomahawk-1.1.9-bin.tar.gz
La versión al momento de escribir este documento es la 1.1.9.
Finalmente nos descargamos SandBox desde la siguiente ruta:
http://people.apache.org/maven-snapshot-repository/org/apache/myfaces/tomahawk/
Una vez ubicadas estas librerias en el directorio WEB_INF/lib procedemos a configurar el proyecto de la forma mas adecuada, en MyFaces es necesario configurar los filtros de extensión para Tommahawk ademas es necesario tener en cuenta que para una aplicación Web normal con MyFaces, no se pueden incluir en el directorio WEB_INF/lib las librerias de la implementación estandar de JSF, es decir los ficheros jsf-api.jar y jsf-impl.jar principalmente debido a conflictos entre las especificaciones de JSF estandar y MyFaces.
Ahora el fichero de configuración de la aplicación Web debera contener las siguientes lineas:


El contenido del fichero es casi "auto-explicativo" solamente por resaltar lo explicado anteriormente sobre la definición del ExtensionFilter aquí es importante anotar que la etiqueta de estas lineas deben de coincidir con la definición del Faces Servlet que como se muestra en las lineas anteriores contiene *.faces lo que indica que cualquier petición a una pagina en el servidor con extensión .faces será procesada por el Servlet de Faces.

Prueba de Configuración y Ejecución:

Para verificar el correcto funcionamiento de la configuración realizada se podra componer una pagina de prueba que haga uso de componentes simples de MyFaces, Tommahawk y SandBox.
Crearemos un fichero llamado index.jsp con el siguiente contenido

FICHERO INDEX.JSP

Si el nombre de la pagina es index.jsp, para que sea manejada por JSF es necesario invocarla como index.faces, esto debido a que la extensión faces es la que se ha configurado en el web.xml

Posibles problemas de configuración:
Es probable que se detecten errores de configuración cuando se configura MyFaces relacionado con librerias especialmente, en algunos casos el servidor de aplicaciones o contenedor Web prevee las librerias necesarias, en otras ocasiones no, como es el caso de las librerias commons-el y commons-lang ahora bien, los errores relacionados con esto como ya se podria imaginar son ClassNotFoundException. por lo tanto es necesario incluirlas tambien en el directorio WEB_INF/lib aquí las dejo:

commons-el
commons-lang

Tambien es posible que el ExtensionFilter no se encuentre bien configurado sin embargo con el fichero de configuración implementado en lineas anteriores se encuentra correctamente configurado y no deberia haber problemas, sin embargo la documentación se encuentra aquí:

http://myfaces.apache.org/tomahawk/extensionsFilter.html
Por el momento es todo por el momento, espero que sea de utilidad, si alguien tiene alguna duda deja tu comentario.

Jdaanial.




[+/-] Continuar leyendo...

jueves, octubre 30, 2008

Plugin de Eclipse para poder usar Glassfish

Normalmente cuando trabajamos con un IDE basado en Java tenemos muchas opciones de donde elegir, algunos nos dan herramientas y opciones que no se encuentran en otros y así vamos probando, ensayando y jugando un poco, actualmente existen muchisimos, sin embargo los mas conocidos en el mundo de Java sin lugar a dudas son NetBeans y Eclipse, desde mi punto de vista ambos tienen opciones, herramientas y formas de desarrollar que son muy útiles, y en mi caso no entraría en el debate de decir que uno es mejor que otro.



ECLIPSE Y GLASSFISH
Aunque es completamente cierto que Netbeans esta mucho mejor integrado para trabajar con Glassfish que Eclipse en sus versiones posteriores a la 3.5, opino lo mejor seria utilizar ambos y explotar las potencialidades que ofrecen, no estamos hablando de productos comerciales, sino de productos opensource, así que podemos sentirnos libres de usarlos sin mayores limitaciones independiente de esta eterna "batalla" de opiniones y absurdas criticas de lado a lado que en realidad no llevan a nada, voy a centrarme en estas lineas solamente a comentar algo que resulta ser muy útil y a su vez muy simple a la hora de desarrollar aplicaciones J2EE con Eclipse y Glassfish, en primer lugar, cabe aclarar un par de asuntos:

1- Eclipse utiliza un sistema de plugins y features en donde se encuentran las configuraciones de nuestro entorno, desde allí podremos instalar características que harán que nuestro Eclipse pueda adquirir nuevas capacidades que nos pueden parecer muy útiles. Este sistema se complementa con una interfaz de descarga e instalación de características que nos permite ingresar un repositorio valido e instalar características interesantes para nuestro entorno.
2- Existen diferentes versiones de Eclipse como muchos ya saben, sin embargo la que resulta interesante es la versión integrada de desarrollo con j2EE la cual contiene las herramientas necesarias para trabajar con las tecnologías mas punteras en el mundo de Java Enterprise.


Ahora bien desde este enlace https://glassfishplugins.dev.java.net/download/ se encuentran las versiones disponibles y los métodos de instalación del plugin, es posible descargar los ficheros de plugins y features y pegarlos en el directorio de Eclipse donde corresponde, es decir en el directorio plugins y en el directorio features, una vez descomprimidos allí es posible encontrar un server adapter adecuado.
Nuevamente como comente anteriormente este procedimiento solamente es valido para versiónes anteriores a la 3.5, dado que la versión Galileo de Eclipse ya contiene este plugin y no necesita configuración adicional.

Espero que sirva de algo estas pocas lineas para despejar algunas dudas.

Jdaanial

[+/-] Continuar leyendo...

martes, agosto 26, 2008

Instalar y Configurar Oracle 10G en Debian Etch junto con SQLDeveloper 1.5

Bueno, pues eso, llevo un par de semanas haciendo que funcione Oracle 10g en mi computadora, casi que no lo logro, aquí trataré de contar un poco como ha sido mi experiencia, los pasos que he tenido que realizar y otros detalles de la instalación, una guiá que me ha parecido excelente y que me ha servido bastante para conseguir este objetivo ha sido esta

Voy a tratar de explicar un poco los pasos que he seguido en esta guiá, las dificultades que he tenido y como las he afrontado para poder instalar el motor, finalmente mostraré como instalar un cliente que particularmente me parece que es bastante util, me refiero a SQLDeveloper 1.5. Bueno.... comencemos:





INSTALACIÓN Y CONFIGURACIÓN DE ORACLE 10G:

Primero que nada, se debe descargar la base de datos desde aqui en este momento en este sitio se puede descargar Oracle 10g, se requiere el siguiente fichero: ship.db.lnx32.cpio.gz (649,170,233 bytes) (cksum - 1778052285) Tener en cuenta que debe de ser este fichero solamente, con el cual se instala la base de datos oracle 10g y herramientas bastante utiles como sqlplus, isqlplus, Enterprise Manager 10g Datagrid Control, Net Configuration Assistant... entre otras. Vamos a comenzar con la configuración inicial de paquetes y parámetros que se deben de modificar para su correcto funcionamiento, primero que todo las librerías necesarias, en mi experiencia personal, no todas las que dicen que se requieren se encuentran disponibles para Debian Etch, claro, esto también es debido a que Oracle 10g no esta disponible para Debian Etch, de hecho solamente esta certificado para Red Hat, mas adelante explicaré un poco sobre esto, es importante tener al menos las siguientes:

  • libc6-dev (de vital importancia que sea la ultima versión)

  • binutils

  • lesstif2

Estas son las mas importantes, he encontrado que en muchos sitios recomiendan otras como libmotif3, esta no se encuentra en los repositorios de Debian, pase de ella, y al final no tuve ningún problema con la instalación ;) Posterior a esto me dedique a crear los grupos y el usuario oracle para la instalación y ejecución de todos los servicios que se usaran, he ejecutado lo siguiente como root claro esta:

groupadd oinstall

groupadd dba

useradd -c "Usuario Oracle10g" -g oinstall -G dba -m -d /home/oracle oracle

En Debian Etch, hay que considerar que al usar el comando useradd el directorio HOME no es creado implícitamente, debe indicarse que se quiere crear dicho directorio y especificar su ubicación esto con las opciones -m y -d Se asigna password al nuevo usuario de este modo: sudo passwd oracle
Como
root obviamente Y listo, después de esto ya esta el usuario creado, ahora debemos crear la estructura de directorios base para la instalación del producto, simplemente creación de directorios, nada de que preocuparse:

mkdir -p /u01/app/oracle

mkdir -p /u02/oradata

chown -R oracle:oinstall /u02 /u01

chmod -R 775 /u01 /u02

Luego viene la parte de configuración, donde se especifican los parámetros del Kernel que deben modificarse, en este punto los pasos que se deben realizar son los siguientes:

Nota Importante: Los pasos son tomados de la guiá anterior encontrada aqui

  1. Enlaces Simbólicos: Primero que todo añadir los siguientes enlaces simbolicos, que en sistemas certificados por Oracle como (Red Hat Enterprise) se encuentran normalmente ya creados, sin embargo, en Debian deben ser creados, ejecutar:
    ln -s /usr/bin/awk /bin/awk
    ln -s /usr/bin/rpm /bin/rpm
    ln -s /usr/bin/basename /bin/basename
    ln -s /etc /etc/rc.d

  2. Requerimientos del Sistema: Se deben verificar los requerimientos mínimos del sistema, asumo que cuando menos conoces tu maquina ;) lo que debes de tener en cuenta es que la instalación de Oracle 10g requiere como mínimo 512 de memoria RAM y 1 Giga de SWAP, aunque esto si queremos instalarlo, en ningún momento se ha hablado de ejecutarlo, Oracle es bastante pesado y para efectos prácticos, instalarlo en un equipo GNU/Linux con 512 de RAM es... digamos tedioso de trabajar, ya que Oracle consumiría absolutamente todos los recursos..., es mejor emplear un sistema un poco mas robusto, con por lo menos 1 Giga de RAM, aunque 2 Gigas no vendrían mal ;).
    En cualquier caso si desconoces esas características las puedes consultar con los siguientes comandos:

    grep MemTotal /proc/meminfo grep SwapTotal /proc/meminfo
  3. Modificar los limites del Kernel: En esta parte es necesario modificar los parámetros del Kernel, de modo tal que quede algo optimizado para la instalación de Oracle 10g. Se deberán ejecutar inicialmente las siguientes instrucciones por separado:

    /sbin/sysctl -a |grep sem
    /sbin/sysctl -a |grep shm
    /sbin/sysctl -a |grep file-max
    /sbin/sysctl -a |grep ip_local_port_range

    La salida de este comando solamente determina los limites del Kernel que tiene en ese momento el sistema, una configuración adecuada para cada una de estas entradas seriá como se indica a continuación, en el caso de que algunos de estos valores no concuerden se deben modificar el archivo /etc/sysctl.conf y ejecutar el comando sysctl -p:

    kernel.sem = 250 32000 100 128
    kernel.shmmni = 4096
    kernel.shmall= 2097152
    kernel.shmmax = 2147484648
    fs.file-max=65536
    net.ipv4.ip_local_port_range=1024 65000


  4. Seguimos modificando los limites: Ahora se deben de modificar (si es el caso) el valor por defecto de los descriptores de fichero para el usuario oracle, podría adicionarse las siguientes lineas en el archivo /etc/security/limits.conf En la guiá indicada anteriormente define las siguientes lineas para todos los usuarios, pero este no es el objetivo, ya que solamente el usuario oracle debería tener configuradas estas variables:

    * soft nproc 2047 * hard nproc 16384 * soft nofile 1024 * hard nofile 65536


    Luego se deberá adicionar la siguiente linea (sino existe ya) al fichero /etc/pam.d/login:

    session required /lib/security/pam_limits.so

  5. Modificar el profile del usuario Oracle:
    Solamente basta con adicionar las siguientes lineas al fichero $ORACLE_HOME/.bash_profile:

    if [ $USER = "oracle" ]; then
    
    if [ $SHELL = "/bin/sh" ]; then
    ulimit -p 16384
    ulimit -n 65536

    else
    ulimit -u 16384 -n 65536
    fi
    fi


  6. MODIFICACION DE LAS VARIABLES DE ENTORNO:

    Se modifican las variables de entorno del usuario oracle con el fin de que se puedan ejecutar sin ningún problema los comandos relacionados con inicio de los listeners, inicio de la base de datos, sqlplus e inicio de isqlplus... etc. Entre otras cosas también se adicionan las rutas relacionadas:

    ORACLE_BASE=/u01/app/oracle
    
    ORACLE_HOME=/u01/app/oracle
    /product/10.1.0/db_1; export ORACLE_HOME
    ORACLE_SID=test; export ORACLE_SID
    ORACLE_TERM=xterm; export ORACLE_TERM
    ORACLE_OWNER=oracle; export ORACLE_OWNER
    NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1; export NLS_LANG
    CLASSPATH=${CLASSPATH}:${ORACLE_HOME}/jdbc/lib/classes12.zip
    LD_LIBRARY_PATH=${ORACLE_HOME}/lib;
    export LD_LIBRARY_PATH

    DISABLE_HUGETLBFS=1; export DISABLE_HUGETLBFS
    TEMP=/tmp; export TEMP
    TMPDIR=/tmp; export TMP
    PATH=$PATH:/u01/app/oracle/product/10.1.0/db_1/bin;
    export PATH


  7. "Engañar" al instalador de Oracle: 

    Al descargar Oracle muy posiblemente te has dado cuenta de que este software esta solamente disponible para la distribución Red Hat..., esto es un problema al momento en el que se esta realzando la instalación de Oracle sobre Debian ya que el instalador verifica que se trata de instalar el software sobre una versión de GNU/Linux certificada, sin embargo esto puede ser resuelto sin muchas dificultades solamente creando el fichero de configuración que indica la distribución del sistema operativo que se esta empleando el instalador busca este fichero para comprobar que se trata de un sistema Red Hat, solamente se crea dicho archivo con el contenido adecuado y no es mas.... se hace de la siguiente manera:

    nano /etc/redhat-release ---Podras utilizar cualquier editor de texto...

    en el archivo escribir y guardar este contenido:


    Red Hat Linux release 2.1 (drupal)
    

    Y esto es todo, Ahora se continua con la instalación


INSTALACIÓN DE ORACLE 10G EN DEBIAN ETCH
Pues inicialmente, vamos a descomprimir de la siguiente forma el archivo descargado:

gunzip ship.XXXX.cpio.gz cpio -idmv <>

Con esto se crea el directorio Disk1 el cual contiene el instalador de oracle 10g llamado runInstaller, lo ejecutamos:
./runInstaller.sh

En el caso de que en las comprobaciones de la pantalla arroje un error y no se pueda proceder con la instalación, es probable que se tr ate de que el servidor x no se encuentra iniciado , (bastante comun), para solucionarlo como root tratar de ejecutar lo siguiente

xhost +


Esto mostrara un mensaje informando que el servidor x se encuentra listo para recibir nuevos clie
ntes, después como el usuario normal creado anteriormente se vuelve a ejecutar el instalador


PASOS DE INSTALACIÓN:
1. En el primer paso se selecciona instalación avanzada:

2. Se dejan los valores por defecto:

 

3. Se elige edición Enterprise del producto en la siguiente interfaz.

Posterior a esto se realiza la verificación del producto para validar que las librerías necesarias se encuentren instaladas y los requisitos de sistema se cumplan correctamente, posterior a esto, se selecciona el tipo de base de datos que se quiere instalar, especificando que se creara una nueva base de datos, Se introducen los datos relacionados con la misma, nombre de la BD y SID, normalmente se deja el SID generado a partir del nombre.
Se sigue el proceso de instalación con los valores por defecto hasta que se llega al punto de especificar el tipo de almacenamiento, el mas común es "Sistema de archivos" donde se especificara el directorio creado
anteriormente

/u02/oradata
se continua con los valores por defecto las próximas 2 pantallas, y se procede a instalar cuando aparece el botón Instalar, después de aproximadamente 20 minutos o 30 dependiendo de tu computadora, veras que el instalador termina y comienza la creación de la nueva base de datos, esto tarda aproximadamente 5 o 10 minutos.
Finalmente se muestran las rutas de acceso a las herramientas instaladas, tales como Oracle Enterprise Manager 10g, iSQLPlus UltraSearch normalmente ubicadas en las direcciones:

URL de Ultra Search:

http://localhost:5620/ultrasearch
URL de Herramienta de Administración de Ultra Search:
http://localhost:5620/ultrasearch/admin
URL de iSQL*Plus:
http://localhost:5560/isqlplus
URL de Enterprise Manager 10g Database Control:
http://localhost:5500/em

Con esto finaliza la instalación y configuración de Oracle 10g en Debian Etch, ahora se explicara un poco las bases previas para usar las herramientas, y servicios relacionados:


1. Creación del Servicio de Oracle:

Si se necesita que la base de datos arranque con el sistema (algo que personalmente no recomiendo mucho por el tema de consumo innecesario de recursos) se deberá editar el archivo de configuración /etc/oratab en este fichero se especifica lo siguiente:

*:/u01/app/oracle/product/10.1.0/db_1:N

SID_BD:/u01/app/oracle/product/10.1.0/db_1:Y

Luego se crea el script de arranque en /etc/init.d/oracle con el siguiente contenido:

#!/bin/bash

#
# Run-level Startup script for the Oracle Instance and Listener
#
# chkconfig: 345 91 19
# description: Startup/Shutdown Oracle listener and instance
ORA_HOME="/u01/app/oracle/product/10.1.0/db_1"
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
# start TNS listener
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl start"
# start database
su - $ORA_OWNR -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
# stop TNS listener
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl stop"
# stop database
su - $ORA_OWNR -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
esac
exit 0

Luego se le dan permisos de ejecución

chmod 755 oracle

Y se añaden los niveles de ejecución

ln -s /etc/init.d/oracle /etc/rc.d/rc2.d/S99oracle

ln -s /etc/init.d/oracle /etc/rc.d/rc3.d/S99oracle
ln -s /etc/init.d/oracle /etc/rc.d/rc4.d/S99oracle
ln -s /etc/init.d/oracle /etc/rc.d/rc0.d/K01oracle
ln -s /etc/init.d/oracle /etc/rc.d/rc6.d/K01oracle

Y con esto basta ya cada vez que se inicie el sistema oracle es iniciado también, en el caso de que se requiera iniciar o detener la base de datos, se puede ejecutar como cualquier servicio de GNU/Linux ejecutando desde /etc/init.d/

./oracle start|stop

Ahora vamos con los servicios:
Listener:
Para que clientes como SQLDeveloper puedan conectarse a la base de datos Oracle y hacer uso de ella, es necesario que el servicio de red este disponible, inclusive aunque dicho cliente se ejecute en la maquina local, esto se consigue con un Listener de la base de datos, dicho servicio se crea normalmente con un fichero de configuración muy importante ubicado en $ORACLE_HOME/network/admin/listener.ora, en el se especifica el tipo de servicio de red que se presta y la dirección de la base de datos, en un plano mas general pueden crearse los listeners manualmente o utilizar la utilidad del Asistente de Configuración de Red el cual es una interfaz sencilla que permite crear los listeners con un sencillo paso a paso de forma gráfica.
Para ejecutarlo basta con escribir en consola el comando
netca en pasos anteriores se han configurado las variables de entorno y el path para el usuario oracle, se espera que siempre se ejecuten todos los comando que se dan a continuación con dicho usuario. En el caso de que el comando netca no sea reconocido, todas las utilidades de oracle se encuentran en el directorio $ORACLE_HOME/bin/ desde donde se podrán ejecutar todos los comandos sin ningún tipo de dificultad como si se tratara de un servicio normal. Otro comando que permite una administración mas completa de los servicios en red es netmgr Ahora se puede ejecutar el comando de inicio del listener, es un servicio que permite iniciar y detener el listener con el comando
lsnrctl start|stop

Se debe tener precaución en ejecutarse con el usuario adecuado, es decir el usuario Oracle para que no falle el inicio o parada del servicio.

ISQLPlus:
Al igual que el listener, se trata de un servicio de Oracle que viene desde la versión 9i, donde se pueden ejecutar los comandos SQL ingresados por un usuario desde una consola Web por medio del puerto 5620 normalmente, esta ruta completa se da cuando se termina de instalar el motor.
para iniciar o detener el servicio basta con ejecutar el comando


isqlplusctl start|stop

Y ya esta, se puede acceder desde un navegador web a esta herramienta haciendo uso de Login y Password.

OEM (Oracle Enterprise Manager) :
Se trata de una potente herramienta incluida desde oracle 10g que permite visualizar y generar reportes muy variados sobre administración, rendimiento y tuning de la base de datos, permite realizar tareas administrativas de mantenimiento y generación de copias de seguridad, bastante robusta y fácil de manejar, se encuentra en un entorno web, asi que al igual que isqlplus se puede acceder a ella por medio de un navegador web y con un usuario con rol de sysdba, normalmente usuario sys. Para iniciar o detener el servicio se ejecuta:

emctl start|stop dbconsole

SQLPLUS:
Otra opción menos interactiva pero bastante robusta y común para los desarrolladores de oracle desde antiguas versiones es SQLPlus, basada en una consola de texto, donde se permite conectar a una base de datos oracle sin necesidad de tener un listener activo en el momento de la conexión
Su uso típico es el siguiente:


sqlplus /nolog
SQL> conn sys/passdesys as sysdba

Conectado.

SQL> SELECT * FROM V$INSTANCE;

INSTALANDO SQLDEVELOPER PARA CONEXIÓN A BASE DE DATOS ORACLE 10G:

Ahora se procede a instalar SQLDeveloper, el procedimiento es realmente simple, solamente se requiere descargar SQLDeveloper desde el sitio oficial de Oracle aqui
En el enlace que dice
SQLDeveloper 1.5 se podrá descargar el software que vendrá en forma de un paquete RPM, el cual se puede convertir posteriormente en un paquete .deb por medio del comando alien el cual se puede instalar con un simple comando de instalación con APT
Para ejecutarlo saldría en consola algo similar a esto:

jdaanialdebian:/home/oracle# alien sqldeveloper-1.5.54.40-1.noarch.rpm
Warning: Skipping conversion of scripts in package sqldeveloper: postinst
Warning: Use the --scripts parameter to include the scripts.
sqldeveloper_1.5.54.40-2_all.deb generated
jdaanialdebian:/home/oracle#

Esto indica que el paquete .deb ha sido generado y puede instalarse sin ningun problema con el uso del comando
dpkg de la siguiente forma:

jdaanialdebian:/home/oracle# dpkg -i sqldeveloper_1.5.54.40-2_all.deb
(Leyendo la base de datos ...
131324 ficheros y directorios instalados actualmente.)
Preparando para reemplazar sqldeveloper 1.5.54.40-2 (usando sqldeveloper_1.5.54.40-2_all.deb) ...
Desempaquetando el reemplazo de sqldeveloper ...
Configurando sqldeveloper (1.5.54.40-2) ...
jdaanialdebian:/home/oracle# sqldeveloper

Oracle SQL Developer
Copyright (c) 2008, Oracle. All rights reserved.

Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk

En este punto al ser la primera vez que se ejecuta el instalador pide la ruta de instalación del JDK de Java, en el caso de que no sepas como instalarlo y configurarlo, puedes remitirte a una entrada anterior a este blog donde se explican este tipo de tareas y algunas otras aqui
Una vez se configura esto, ya se puede ejecutar el
SQLDeveloper con tan solo escribir sqldeveloper en la consola.

Por el momento es todo, espero que esta guiá le sirva de algo a aquellas personas que necesitan ayuda con
Oracle 10g en GNU/Linux Debian.

JDAANIAL.

[+/-] Continuar leyendo...

miércoles, julio 23, 2008

Problemas Sonido Modulo HDA en equipos Acer con GNU/Linux Debian

Desde hace algún tiempo he tenido algunos problemas con la placa de sonido de mi computadora Acer 5920G este modelo tiene una tarjeta de sonido Realtek ALC888 HD Audio la cual normalmente presenta problemas con GNU/Linux cuando se instala por primera vez, es bastante común encontrar problemas como que no se reproduce ningún tipo de sonido





no se reconocen los altavoces, mala calidad, se pierde la configuración una vez se reinicia la computadora y siempre hay que ejecutar el comando alsaconf,
inclusive como fue en mi caso, aunque reconocía la placa de sonido, al momento de conectar los "cascos" o audífonos, los altavoces aun seguían funcionando y reproduciendo sonido, por lo tanto quedaba lo que se estuviera escuchando tanto en los altavoces como en los audífonos.... :-S
lo cual es bastante molesto, eso sin contar con que en ocasiones se reproducían ruidos fuertes bastante agudos e intensos, además de que siempre debía ejecutar el comando alsaconf al iniciar la computadora, ya que no tenia sonido.....

En GNU/Linux, el modulo que controla los eventos de sonido y se encarga de administrar las placas de sonido es llamado ALSA, en su sitio oficial Alsa project se encuentra toda la documentación y software necesario para poder emplear las utilidades que trae este proyecto.
Ahora explicaré brevemente los pasos que se deben seguir para poder configurar este Driver en nuestra distribución de GNU/Linux Debian.

Pasos de Instalación /Configuración:

Inicialmente se deben instalar las librerías necesarias y recursos para compilar y ejecutar los módulos, basta con los siguientes paquetes instalados con APT que vienen incluidos directamente en los repositorios de GNU/Linux Debian:

  • build-essential
  • libcurses-dev
  • gettext


y adicional a estos paquetes, se deben incluir también las cabeceras del Kernel correspondiente, en conclusión se podría ejecutar el siguiente comando

apt-get install build-essential libncurses-dev gettext linux-headers-`uname -r`

Es posible que algunos paquetes ya se encuentren instalados en su versión mas reciente, pues nada, pasamos de ellos.
Una vez instalados los paquetes debemos descargar las ultimas versiones de los paquetes de ALSA específicamente nos interesan los paquetes: Driver, Lib, Utils y Tools (opcional, vendría bien).
Nota: Los enlaces en algún momento podrían no estar disponibles, en tal caso conviene visitar el sitio de ALSA y descargar los ficheros comprimidos desde allí, a la fecha de escribir esta pequeña guía se encuentran en su versión 1.0.17.

Ahora con los paquetes correspondientes descargados, se deben realizar las acciones de compilación e instalación. Para esto crearemos un nuevo directorio donde se almacenaran los fuentes descargados, una vez descomprimidos:

mkdir /usr/src/alsa

Cada uno de los ficheros comprimidos descargados se deberán copiar a este directorio, y una vez ubicados en el, se descomprimen:

sudo tar xjf alsa-driver.bz2

sudo tar xjfv alsa-lib.tar.bz2

sudo tar xjf alsa-utils.tar.bz2

sudo tar xjf alsa-tools.tar.bz2

Ahora que se han descomprimido el proceso es bastante simple, solamente se debe compilar e instalar cada uno de los directorios (alsa-driver, alsa-lib, alsa-utils, alsa-tools).
En cada directorio se deberán ejecutar los mismos comandos, pero se deben ejecutar en el mismo orden que he puesto arriba es decir: alsa-driver, alsa-lib, alsa-utils, alsa-tools en este mismo orden.

Ahora se ejecuta lo siguiente:

sudo ./configure

sudo make

sudo make install

Y ya esta, en cada directorio este proceso puede demorar bastante, así que no desesperéis si tarda demasiado, seguro que termina.
Después de terminar con esto solamente queda reiniciar el ordenador y ya todos los archivos de configuración y demás han quedado configurados correctamente.

NOTA IMPORTANTE:
Para realizar esta entrada me he basado en una pagina que me ha dado las bases y sigue los mismos pasos que he escrito aquí, dado que no es de mi agrado, ni mi estilo transcribir literalmente de Internet hago referencia a la pagina desde la cual he encontrado esta solución, esta en ingles, así que será de ayuda para las personas que lo prefieran en Español.
La referencia es: https://help.ubuntu.com/community/HdaIntelSoundHowto

Tiene algunas notas mas que resultan interesantes para algunos otros problemas que resultan comunes y están relacionados con el sonido.

Jdaanial.


[+/-] Continuar leyendo...

sábado, julio 19, 2008

Utilizando J2EE 5.O Parte III

En esta parte mostraré un poco el uso de la capa web integrandola con las capas de negocio y persistencia mostradas en las entradas anteriores, para conseguir este objetivo en Java puede hacerse uso de diferentes tecnologias, tales como Servlets, JSP o Frameworks como Struts o JSF, para este caso con el fin de seguir la continuidad de tecnologias ampliamente soportadas y adaptadas en J2EE 5.0 se hara uso de JSF (Java Server Faces).




JSF es un Framework que se caracteriza por contener elementos que le permiten a los desarrolladores adaptar soluciones de acuerdo a sus propias necesidades gracias al modelo de componentes que dicho framework maneja, cabe resaltar que JSF es una "evolución" de las tecnologias anteriormente mencionadas (Servlets, JSP y Struts), una de las premisas mas importantes que cada desarrollador de software que utilice JSF debe tener es pensar en cada objeto y en cada elemento de la capa web desarrollada como un Componente, el cual tiene atributos, propiedades y metodos de acción, y una de las cosas mas importantes, es reutilizable y puede emplearse en cualquier interfaz web desarrollada.
En JSF existen diferentes implementaciones, las cuales amplian las funcionalidades de los componentes estandar que vienen incluidos en la Implementación de Referencia de Sun, e inclusive contienen componentes que nuevos, gracias al modelo de componentes que implementa esta tecnologia, cualquier desarrollador con un conocimiento medio sobre tecnologia JSF puede desarrollar sus propios componente y emplearlos en sus propias creaciones, o compartilos con otros usuarios. Un ejemplo claro de esto se encuenta en las implementaciones de Apache sobre JSF llamada MyFaces la cual incluye componentes bastante robustos que en algunos casos implementan Ajax y uso avanzado de Toolkits basados en JavaScript. Tambien existen otras implementaciones como Rich Faces, ADF Faces, ICE Faces, entre otros.

Ahora comienza la integración propiamente dicha de acuerdo a lo anteriormente creado en las entradas de EJB y JPA respectivamente:

Primero que nada es necesario crear una aplicación Web como se hace normalmente, e incluir por lo menos la siguiente estructura de directorios:
MYAPP
|
|
-WEB-INF
|
-classes
-lib
-src (opcional esta ubicación, los fuentes pueden estar ubicados en cualquier sitio)

En este punto desde el directorio MYAPP pueden existir los directorios y paginas donde se contendran todos los recursos web, como en cualquer otra aplicación comun, en el directorio WEB-INF/classes se deberan contener todos los archivos .class que representan la versión compilada de los Managed Beans (clases planas que separan la logica de la aplicación y la presentación en un entorno JSF) y cualquier otra clase o recurso necesario.
En el directorio LIB se contendran las librerias necesarias para implementar JSF RI, en el caso de que se emplee un servidor de aplicaciones como Sun Application Server (Glassfish) este punto no se hace necesario, ya que Glassfish contiene todas las lbrerias necesarias para ejecutar las API de J2EE 5.0.

Ahora se asume los siguientes archivos de configuración que son necesarios para poner en marcha un contexto web con JSF en el directorio raiz de WEB-INF deben existir los siguientes archivos (pulsa en el enlace para ver su contenido):

faces-config.xml

Para este archivo se define solamente los recursos de los cuales dispondra JSF para su correcto funcionamiento en esta aplicación, en este archivo se pueden contener muchas instrucciones que son utiles para adicionar componentes personalizados, recursos de mensajes en diferentes idiomas (soporte para internacionalización), managed beans y otras opciones adicionales como reglas de navegación.

web.xml

En este archivo se especifica la forma en la cual será mapeada la configuración de JSF para ser empleada en el contexto de la aplicacioón, puede notarse que para la configuración de JSF, todas las paginas deberan preceder del conexto virtual faces/ y apartir de allí se podran ejecutar todas las paginas que contengan componentes y/o recursos basados en JSF.

Despues de tener estas opciones de configuración listas se procede a crear las paginas, para este caso se crea crearParte.jsp, si se aprecia que la extensión de la pagina es .JSP y no .JSF es debido a la configuración anteriormente definida en el fichero web.xml, mas explicitamente en las lineas donde se especifica el Faces Servlet, de esta forma la pagina inicial podria ser un simple formulario de registro de datos:

crearParte.jsp

Ahora bien, hasta este punto solamente tenemos la parte de la capa web creada, sin embargo podemos ver que se hace un uso notable de un Bean Manejado (JdaanialBean para este caso) este Managed Bean ha sido definido en el archivo de configuración faces-config donde se ha definido el paquete al que pertenece, en nombre con el que sera identificado y usado por los demas que recursos que accedan a él, y su extensión, que aunque para este caso es de session, puede ser usado en las extensiones habituales de cualquier variable en un contexto web normal, pudiendo emplearse Managed Beans a nivel de: session, application y request de esta forma se mantienen los datos guardados en el Managed Bean de acuerdo a su extensión.
aqui se puede obtener el codigo de este ManagedBean

BeanPruebas.java

Puede notarse que tanto en la pagina como en el Managed Bean se hace uso de una de las entidades definidas en la entrada anterior sobre JPA, para realizar esta integración entre estas capas de la aplicación se hace vital el uso de la anotación @EJB, dicha anotación tiene como atributo de referencia la interfaz remota o local que debe ser empleada para acceder al EJB propiamente dicho y que efectuara los metodos que se invoquen por los componentes que quieran usarlos, la anotación @EJB se encarga de localizar e instanciar todas las referencias necesarias del EJB para que se encuentre en estado consistente y pueda ser empleado en cada momento, dado que este EJB tiene como atributo la entidad Parte, esta entidad puede ser usada, y si que es usada como lo que realmente es, un objeto plano (POJO) que solamente almacena datos cuando se emplean los metodos setXXX y getXXX sobre sus atributos, lo cual es bastante util al momento de guardar directamente las entidades como registros en la base de datos al momento activar el manejador de persistencia para guardado de datos.

JDaanial.

[+/-] Continuar Leyendo...

miércoles, julio 09, 2008

Utilizando J2EE 5.0 Parte II

Antes que nada se comienzan a identificar algunos conceptos que se trabajan constantemente cuando se emplea esta tecnología, como es el caso de anotaciones para definir las interfaces de negocio de los EJB (Local o Remote), así como el tipo de EJB que se ha de emplear (Con estado o sin Estado), desde la versión 5.0 de J2EE existen anotaciones que permite simplicar el desarrollo de componentes de negocio con estas características, cabe resaltar que las anotaciones como tal son una característica nueva y muy poderosa que viene incluida desde la versión 5.0 de la JVM edición estándar.




En continuación con la entrada anterior, ahora comenzaré explicando la integración de la capa de negocio con EJB3.O y la capa de Persistencia con JPA la cual se definió en la entrada anterior

aqui.


Ahora para continuar con el ejemplo de la entrada anterior, voy a proceder a crear la capa de negocio con EJB 3.0 y la voy a integrar con la capa de persistencia con JPA por medio de administradores de persistencia, los cuales realizan toda la magia....
Para realizar este pequeño ejemplo no hace falta nada mas que tener conocimientos en Java y un editor de textos cualquiera, recuerden que para programar en Java no es necesario tener instalado ningún IDE, siempre es mas útil saber hacer las cosas sin recurrir a ellos cuando el objetivo principal es aprender, aunque obviamente son muy aconsejados cuando lo que se necesita es producir y entregar productos de forma rápida y bien elaborada.

PASOS DE ELABORACIÓN
Primero que nada debemos crear la interfaz que contendrá los métodos de negocio y será la especificación del servicio cuando alguien quiera utilizarlo (algo que detallaré en la próxima entrada). Para esto el servicio que manejaremos se nombrara ServicioEjemploEJB y sus correspondiente interface remote será ServicioEjemploEJBRemote, se emplean los métodos mas simples que se puedan tener en una entidad (o tabla) que son insertar, modificar y remover registros
he aqui el código inicial de la interface:

ServicioEjemploEJBRemote

Después de crear esta interfaz con los métodos necesarios, se procede a crear el EJB con su implementación correspondiente:

ServicioEjemploEJB

Y es asi de simple la forma de integrar y realizar todas las operaciones DML sobre la base de datos empleando un modelo de persistencia con JPA y EJB3.0, como se puede ver es bastante simple su uso, el verdadero trabajo lo realiza el administrador de entidades, en la linea en la cual se detalla:
@PersistenceContext private EntityManager em;

Donde automáticamente se instancia y se adiciona un administrador de entidades a un contexto de persistencia, aunque, seguramente algunas personas no tienen muy clara esta parte...., ya que una conexión a la base de datos debe existir obviamente!!
pues bien, todo esto se consigue gracias al archivo de persistencia explicado en la entrada anterior, donde se definen las características de conexión por medio de un nombre JNDI el cual realiza la búsqueda del pool de conexión asociado a ese nombre JNDI y solicita una conexión activa que pueda ser empleada.

Por el momento esto es todo, en las próximas 2 entradas, explicaré la integración de estas 2 capas ya integradas con una capa adicional, la capa Web por medio de JSF, donde ser hará mucho mas claro todos estos conceptos y como realizar aplicaciones empleando J2EE v5.0 y hacer uso de sus potencialidades.

jdaanial.

[+/-] Continuar leyendo...

viernes, julio 04, 2008

Utilizando J2EE 5.0 Parte I

En los últimos meses he recibido bastantes correos de personas que necesitan ayuda sobre el uso de J2EE v 5.0, en especial con temas relacionados con JPA (Java Persistence Api) y EJB 3 con Annotations (Enterprise Java Beans v3.0) , pues bien, Aquí pongo un ejemplo practico de conceptos necesarios para poder dominar esta tecnología, en este pequeño HOW-TO expondré el uso de JSF-EJB3-JPA de una forma clara identificando muchos de los elementos que se emplean en aplicaciones de alto rendimiento en organizaciones que lo emplean, es bastante simple, y sirve para comenzar a adentrarse un poco con esta tecnología.Espero sea de vuestro agrado.




COMENZANDO:
Comenzaremos con un ejemplo simple de integración, donde utilizaremos JPA como capa de datos y EJB como capa de acceso, (aquí hay un poco mas de información sobre JPA y EJB 3.0 en términos técnicos y de especificación).
Se da por hecho que las personas que sigan este pequeño HOW-TO deberán tener un servidor J2EE instalado y funcionando correctamente, personalmente empleo como plataforma operativa GNU/Linux en su distribución Debían Etch 4.0r3 y Sun Application Server 9.1 (Glassfish), todo esto bajo NetBeans v 6.x, Empleo todo esto con frecuencia en trabajo, entonces me resulta bastante familiar e intuitivo, si deseas obtener el software aquí encontraras los enlaces de referencia: NetBeans, Glassfish En el enlace de Netbeans, podéis ver que se encuentra disponible la opción de descarga completa, con todos los componentes incluidos, instalando de una sola vez NetBeans, Glassfish, librerías de desarrollo adicionales e inclusive Tomcat como servidor web, así que podría ser una opción también valida.

En esta reseña se asumirá que se emplea como servidor de aplicaciones Glassfish, no importa lo que se emplee para editar los archivos, puedes utilizar un IDE como NetBeans, JDeveloper o Eclipse, inclusive si lo deseas gedit, nano, vi o uno con menos funcionalidades como notepad, lo que desees....

Ahora, para comenzar el pequeño ejercicio vamos a asumir la siguiente situación: Se tiene una pequeña empresa que desarrolla productos de diferentes tipos, los cuales se encuentran agrupados por diferentes categorías, por supuesto cada categoría contiene un conjunto de productos que tiene características comunes, por ejemplo Categoría: Informática, Producto: Ordenador Portátil, Mause, Router...... cada uno de estos productos a su vez están compuestos por diferentes partes, es decir, un Ordenador común, cuando menos contiene una placa de sonido, tarjeta de red, Unidades de Entrada (USB, CD/DVD...). Para este ejemplo vamos a asumir que cada producto puede estar asociado a muchas categorías, y que cada categoría puede contener muchos productos, (relación n:n). En bases de datos de primer semestre se nos detallan este tipo de situaciones, y normalmente nos piden generar un diagrama entidad relación creando tablas y obviamente relaciones entre ellas, con JPA esto cambia en el sentido de que ya no hablamos directamente de tablas sino de entidades las cuales representan un objeto persistente cada entidad tiene atributos y relaciones y son simplemente objetos planos POJO que normalmente solamente contienen una estructura básica de información con los métodos básicos de acceso a objetos por medio de métodos setXXX y getXXX donde XXX representa el atributo.
Para este caso se emplea se pueden determinar 3 entidades básicas que son Categoría, Producto y Partes, ahora, las entidades serían las siguientes:

Categoria.java


Producto.java


Parte.java

Como se puede ver, se han emitido algunos atributos que podrían contener las entidades, dado que para este ejemplo no representan mayor importancia no se enfoca mucho en ellos, lo que si resulta interesante es el uso de las relaciones que son las que en realidad realizan el trabajo de integridad y consistencia en el modelo de datos, el uso correcto de las mismas es vital, ya que esta es la forma de normalizar el modelo de tablas que se crearan y/o borraran de la base de datos. A continuación detallare un poco sobre las funciones de cada una de dichas relaciones.

@ManyToMany:
Una relación de muchos a muchos que puede ser bidireccional o unidireccional, donde se especifican los atributos que harán parte de este tipo de relaciones, en este caso dado que una Categoria puede tener muchos productos y un producto puede estar en muchas categorías, esta anotación debe de estar integrada en ambas entidades.
Podemos ver varios elementos en este ejemplo, la anotación ManyToMany en la clase Categoria (que se será la clase que gobierne la relación) tiene una anotación anidada @JoinColumns que a su vez tiene otra @JoinColumn, esto tiene una razón muy simple, debe existir una tabla intermedia cuando existe una relación n:n (Bases de Datos I capitulo de Normalización) en este caso, JPA con el uso de estas anotaciones define el nombre de la tabla que sera creada como tabla intermedia y define también los campos que representaran las claves foráneas respectivas en la relación de entidades, a partir de aquí, la persistencia se realiza prácticamente de forma automática entre las 3 entidades (bueno.... como veremos en otra entrada no es tan automática) sin embargo el manejo de consistencia es mucho mas simple, también existe un atributo en la anotación ManyToMany llamado mappedBy, en este atributo se define el nombre del atributo de la tabla con la cual se tiene relación, por lo tanto en ambas entidades estos nombres deben de coincidir de forma exacta
@OneToMany:
Aquí se especifica una relación de uno a muchos la entidad que contenga esta anotación deberá especificar una lista o conjunto de objetos que deberán hacer referencia a otra entidad, y al igual que ocurre con la anotación ManyToMany, se deberá identificar el atributo mappedBy
@ManyToOne:
Aquí se trata el sentido inverso de la relación tratando Muchos a Uno, la entidad que haga uso de esta entidad deberá contener un atributo univalorado, (es decir un solo objeto) que haga referencia a otra entidad que contenga una anotación OneToMany apuntando a una lista de objetos de su mismo tipo, estas situaciones se notan claramente en el ejemplo de Producto-Parte

Cabe anotar que todas estas anotaciones y clases en su gran mayoría se encuentran en el paquete
javax.persistence

Ahora hay otra caracteristica importante que debe ser tomada en cuenta en este punto, y es el hecho de que debe existir una conexión a la base de datos para que estas entidades puedan materializarse en tablas, para esto es necesario tener incluido un archivo persistence.xml el cual contiene el nombre JNDI del pool de conexiones, para que despues de esta forma el EntityManager pueda hacer uso de esta referencia JNDI y así localizar el pool y solicitar la conexión, para este caso el archivo podria incluir el siguiente contenido (cambiando XXXX por el nombre de la base de datos)


Persistence.xml

Aqui empleamos como framework de persistencia TopLink de oracle, tambien podriamos usar Hibernate o Kodo, cada uno tendra sus propias caracteristicas, sin embargo con JPA tenemos la libertad de usar cualquiera de ellos e inclusive cambiarlo si nos apetece en cualquier punto de la aplicación.


Por el momento esta breve introducción a JPA será algo para comenzar, sin embargo obviamente no suficiente, en próximas entradas ingresaré como integrar EJB y JPA por medio de beans de Sesión sin estado haciendo uso de un Contexto de Persistencia y un manejador de entidades, posterior a esto ingresaré otra entrada indicando los pasos para integrar estas 2 entradas con JSF y una aplicación web simple empleando este framework, y finalmente en otra entrada más, mostraré el uso de NetBeans y Sun Application Server para desplegar y probar la aplicación, si estáis siguiendo estos pasos seguro no tendrás muchos problemas empleando J2EE v5.0, de cualquier modo mi correo siempre esta abierto a preguntas/comentarios que se os ocurran....

jdaanial.


[+/-] Continuar leyendo...

miércoles, julio 02, 2008

Licencias Libres, OSI o FSF? parte I

Open Source o Free Software? libre o abierto?
Son muchas las opiniones, debates y comentarios que se han formulado sobre estos conceptos, las posturas principalmente se inclinan hacia tomar uno de dos "bandos" posibles, aunque en este punto la palabra "bando" no creo que sea la apropiada, muchas personas la toman de este modo, ya que se inclinan o por apoyo a la OSI (Oper Source Initiative) o la FSF (Free Software Foundation), las cuales aunque persiguen objetivos similares, lo hacen de formas diferentes, mientras que la FSF defiende a toda costa la libertad del usuario final, la OSI defiende la libertad de los desarrolladores


se trata de dos filosofias basadas en lo mismo, pero con enfoques diferentes, las diferencias mas notables radican en que la FSF contempla que la licencia que acompaña un software, programa u obra informatica debe de ser en primer lugar compatible con los cuatro fundamentos de libertad definidos para que sea realmente software libre estos son palabras mas, palabras menos:
  1. El usuario final debera poder ejecutar el software sin ningun tipo de limitación en su uso y no podra haber discrimación racial o sobre grupos de usuario para el uso o distribución del mismo, es decir, cualquiera sin restricciones podria eventualmente hacer uso y obtener el software.
  2. Debera tener la libertad de leer y estudiar su funcionamiento si así lo desea, obviamente una premisa para que el usuario pueda hacer esto es disponer del codigo fuente.
  3. Podra realizar las modificaciones/mejoras que considere oportunas deacuerdo a sus necesidades de usuario particulares, o podra no hacerlo y solamente hacer uso del mismo, libertad de modificar el codigo fuente o no hacerlo.
  4. Liberdad de redistribuir o no el software modificado, esto quiere decir que si lo deseas puedes entregar a la comunidad de software libre, o a un amigo las mejoras y modificaciones que has realizado sobre el software.
Son criterios basicos que emplea la FSF para tratar de explicar su filosofia, mientras que la OSI emplea lo que ellos denominan la OSD (Open Source Definition) la cual consiste en un conjunto de "pilares" que determinan cuando un software determinado es libre/abierto, se trata de un conjunto de 10 principios, que considero bastante loables y amplios en definicion, pueden verse como una ampliacion numerada de los cuatro principios definidos por la FSF, pero... siendo esto cierto, donde esta la diferencia entre ambos movimientos (FSF y OSI), aparte de conceptos filosoficos, de estructura y opiniones, una diferencia fundamental esta en el marco de licencias que se pueden acoplar entre uno y otro movimiento de acuerdo a las licencias empleadas.... Me explico: La licencia bandera de la FSF, como ya muchos saben es la GNU/GPL, la cual es la licencia con la cual un porcentaje superior al 60% de proyectos de software libre del mundo emplean, es la licencia mas importante en el mundo del software libre, sobre la cual se licencian todos los proyectos de software libre de la FSF, por otro lado, la OSI, como sus propios precursores confiezan esta inspirada en el trabajo realizado por Richard Stallman (padre y fundador del software libre (así como de la FSF), autor y precursor principal de la GNU/GPL, vaya no puedo ocultar mi admiración por este personaje, jeje), sin embargo, como ellos mismos afirman, querian darle un enfoque "empresarial" al software libre, con el fin de capatar un mas la atención del software libre en entornos que no solamente se limitaran a proyectos en Universidades y por comunidades, no hay que olvidar que el software libre ha tenido y aun tiene una mayor evolución, desarrollo y apoyo en instituciones educativas universitarias, esto no quiere decir que lo realizan solamente estudiantes, a este movimiento se integran personas con altos niveles de conocimientos en diferentes areas, entre los que se distinguen personas con estudios superiores de Maestria y Doctorados.
Con la OSD se abre esta posibilidad dado que abre ciertas puertas que explicitamente se cierran con la GNU/GPL definida por la FSF, con esto que quiero decir: La GNU/GPL define que los terminos de esta licencia deben de ser respetados y cumplidos en su totalidad. En el caso de que se trate de integrar software basado en otra licencia, (doble licenciamiento) esta nueva licencia debera de ser compatible con la GNU/GPL para que esta nueva obra de software pueda ser considerada tambien libre por ejemplo: Si un software/componente u algun otro tipo de obra informatica X.01 es licenciada bajo una licencia GNU/GPL, o una licencia compatible con esta, es considerado libre con copyleft. Ahora, suponiendo que este software en su nueva versión X.02 integre un componente Y bajo una licencia diferente a la GNU/GPL, pueden haber dos escenarios posibles, esta licencia puede presentar problemas de compatibilidad y no es posible realizar una redistribución del software bajo los mismos terminos que la versión anterior, o es compatible y no existe ningun problema en la redistribución. Obviamente es interesante prestar especial atención al primero de los casos, dado que se tendria obviamente un problema legal, especialmente relacionado con violación de licencias, ahora esta situación como relaciona a la FSF y la OSI? Simplemente por el hecho de que la OSI, cuenta con un conjunto de licencias certificadas por ellos y definidas como Open Source que a su vez, no son consideradas libres por la FSF por los mismos problemas de incompatibilidad descritos anteriormente, es por esto que en muchas ocasiones existe confuciones sobre determinados productos de software que se consideran libres pero en realidad no lo son, sin embargo si que son de fuente abierta o Open Source.
Este tipo de consideraciones legales son muy importantes dado que se pueden generar problemas legales por violación de derechos de Autor, para ver un poco mas sobre licencias compatibles e incompatibles con la GNU/GPL se pueden apreciar aqui los comentarios de la FSF sobre la compatibilidad de las licencias de software mas populares actualmente.
En otra entrada, escribire un poco mas sobre esto y en especial sobre la GNU/GPL v3.0 la nueva versión de esta licencia, que sin duda alguna ha sido un avance muy grande y clara muestra del compromiso que se tiene en la evolución y desarrollo del software libre! en especial con un tema de gran interes y a la vez de gran preocupación, y es el tema de las patentes en el software y sus riesgos implicados en la industria del software tanto libre como propietario.

Jdaanial.

[+/-] Continuar leyendo...