DirXML Queries

enero 26, 2010

La función query nos permite realizar consultas tanto al repositorio de destino como al de origen de objetos según un criterio de búsqueda. Para usarlo declaramos una variable que contendrá el resultado de la búsqueda y le asignamos la función query donde definimos el repositorio donde queremos realizar la búsqueda , el atributo de búsqueda ( match attribute ) y los atributos que queremos consultar de los objetos que cumplan con las condiciones de búsqueda.

Captura en designer con la declaración de la variable y el objecto query
Ahora nos quedará por definir las propiedades de búsqueda como se puede ver en la siguiente captura , en este ejemplo buscamos en origen ( metadirecotry ) un objeto usuario de nombre alfredo ( cn = alfredo ) y queremos obtener su apellido y su dirección de email

Es importante definir el tipo de objeto de la variable a node-set , si no queremos tener problemas para recorrer el resultado. Una vez definido como node-set podremos usar expresiones xpath para consultar los resultados.

La ejecución de la función nos devolverá un documento XML del siguiente estilo

<nds dtdversion="3.5" ndsversion="8.x">
<source>
<product version="3.6.10.4747">DirXML</product>
<contact>Novell, Inc.</contact>
</source>
<output>
<instance class-name="User" qualified-src-dn="O=Company\OU=Users\CN=alfredo" src-dn="\ARBRE\Company\Users\Alfredo" src-entry-id="33136">
<attr attr-name="CN">
<value naming="true" timestamp="1264497510#16" type="string">alfredo</value>
</attr>
<attr attr-name="sn">
<value naming="true" timestamp="1264497510#16" type="string">Garcia</value>
</attr>
<attr attr-name="Internet Email Address">
<value naming="true" timestamp="1264497510#16" type="string">agarcia@company.es</value>
</attr>
</instance>
<status level="success"></status>
</output>
</nds>

Este es el contenido de la variable $user ahora , mediante xpath podemos obtener los valores que deseamos.

$user/cn Para obtener el cn
$user/sn Para obtener el surname

Eso es todo! para mas información sobre consultas xpath consultar la guia de la w3c


Como leer un fichero linea por linea en Bash Script

noviembre 20, 2009

Sencillo ejemplo de como leer un fichero línea por línea en bash y almacenar dicha línea en una variable para luego poder tratarla, la verdad que este código me ha resultado bastante útil durante mis tareas con sistemas operativos GNU/linux

i=0
while read line
   do i=$(($i+1));
   echo $i $line
done < "/etc/passwd"
echo "Final line count is: $i";

El ejemplo lee el fichero /etc/passwd y muestra el número de línea ( variable $i ) y el contenido de la línea ( variable $line )

Espero que os sea igual de útil que me ha sido a mi para muchas cosas


Autenticando Joomla 1.5 usando eDirectory

julio 21, 2009

Por algunas cuestiones me interesaba que la autentificación de usuario en Joomla no se hiciera contra la base de datos MySQL local, si no que autentificara los usuarios a través de un directorio LDAP, en este caso Novell eDirectory 8.8. Permitiendo así que los usuarios del directorio pudieran entrar en Joomla con las mismas credenciales que usan para entrar en otros sistemas de nuestra red.

Aún que este artículo se basa en la configuración para eDirectory , al ser LDAP un estándar de acceso a directorios es extrapolable a otros directorios como openLDAP ,Microsoft Active Directory, Sun iPlanet etc.., en este artículo sin embargo nos centraremos en Novell eDirectory.

La autentificación LDAP nativa es una de las nuevas características que nos trae la versión 1.5 de Joomla, para versiones anteriores existe un paquete llamado JAuth que nos permite hacer lo mismo, pero que en este artículo no vamos a tratar.

Para la configuración de la autentificación LDAP, deberemos conocer cómo funciona un directorio LDAP y como está estructurado nuestro directorio, si no es así deberíamos mirar la estructura de nuestro directorio mediante un cliente LDAP, y leer un poco de documentación sobre directorios LDAP. Lee el resto de esta entrada »


Breve introducción a la Gestión de Identidades

May 5, 2009

Podríamos definir la gestión de identidades como solución que permite sincronizar datos; cuentas de usuario , grupos , objetos etc.. entre diferentes repositorios de naturaleza distinta.

Un ejemplo seria poder sincronizar cuentas entre Microsoft Active Directory y una base de datos Oracle, logrando que cuando se diera de alta un usuario en Active Directory este mismo se replicara en la base de datos permitiéndose el acceso a ambos sistemas con la misma cuenta, obviamente no queda limitado a la conexión de dos sistemas si no que se puede conectar tantos sistemas como se requiera.

Esta funcionalidad se puede lograr mediante programas a medida o mediante soluciones de gestión de identidades, en el mercado hay varios fabricantes que han lanzado diferentes soluciones, algunas de estas son :

Lee el resto de esta entrada »


Error «Duplicate engine id detected» en User Application

May 5, 2009

En algunas ocasiones en un entorno con User application en cluster me he encontrado con que uno de los nodos no arranca, apareciendo un error del tipo


«Duplicate engine id detected. This engine may not have been shutdown cleanly or another engine is running with engine-id: ENGINE01 . Waiting 60,000 ms for heartbeat to timeout.»

Esto es debido a que uno de los nodos del cluster no se ha cerrado bien y se queda a la espera , en principio esperando un tiempo prudencial tendría que arrancar , pero no siempre es así. Para forzar a arrancar el nodo tenemos que cambiar en la tabla de estado de los nodos el estado de dicho, eso se hace accediendo a la base de datos , en mi caso la por defecto , MySQL y consultando la tabla AFENGINESTATE.

select * from AFENGINESTATE;

ENGINEID HEARTBEAT STARTTIME SHUTDOWNTIME ENGINESTATE
Engine01 2009-05-04 21:58:13 2009-05-04 21:51:13 NULL 1
Engine02 2009-05-04 21:58:39 2009-05-04 21:54:39 NULL 1

En esta tabla podemos ver los dos nodos del cluster , llamados Engine01 y Engine02 , en este caso el Engine02 aparece arrancado cuando en verdad no lo esta, borramos el registro y volvemos a arrancar el nodo y veremos como ya no aparece y el nodo arranca correctamente.

El comando para borrar el registro podria ser por ejemplo este :

delete from AFENGINESTATE where ENGINEID=’Engine02′;

Ahora al volver a arrancar el servicio podremos ver como jboss y User Application vuelven a arrancar.


Ejecutar sentencias SQL directamente desde nuestro conector JDBC.

marzo 12, 2009

Aún que el conector JDBC se encarga de realizar todas las operaciones sobre la base de datos, en algunos casos particulares nos puede interesar el hecho de ejecutar sentencias SQL desde las reglas directamente a la base de datos. Hay que tener en cuenta que estamos atacando directamente la base de datos y no pasamos por la política de Schemma Mapping, por lo que deberemos hacer referencia a los objetos y atributos tal y como están en la base de datos, de hecho el conector cuando ve la sentencia , no sigue ejecutando políticas y procede a ejecutar la sentencia SQL.

Existen dos tipos de sentencias SQL; Sentencias de ejecución, de las que sólo nos tenemos que preocupar de ejecutar,como es el caso de un update.O las sentencias de consulta, que nos devuelven un resultado, en este caso deberemos capturar el resultado y recorrer los valores segun nos convenga, como seria el caso de una sentencia select.

Lee el resto de esta entrada »