lunes, 16 de enero de 2012

Establecer propiedades de sistema vía Spring XML

Es bastante probable que en más de una ocasión necesites establecer propiedades de sistema vía Spring. Gracias al FactoryBean MethodInvokingFactoryBean es bastante sencillo llamar a un factory method, por lo que podrías hacer lo siguiente:



Ten en cuenta que necesitarás incluir el schema y namespace correspondientes.
En el ejemplo, se está llamando al método estático System.getProperties(), y sobre él se hará un putAll de todas las propiedades indicadas como arguments.

(Thanks to user Patrick at Stackoverflow)

lunes, 9 de enero de 2012

Esperando a que se cargue un elemento con Selenium-WebDriver

Si estás en un proyecto que utiliza de forma intensiva tecnología AJAX, a la hora de crear los tests con Selenium probablemente tengas que enfrentarte al problema de esperar a que las peticiones asíncronas terminen. Para ello puedes hacer uso de las llamadas "esperas explícitas", en las que puedes indicar un tiempo máximo en el cual se debe dar una condición, por ejemplo, que se muestre un WebElement.


Es lo que puedes ver en el snippet anterior, donde se espera a que se muestre un elemento indicado por una expresión XPATH hasta un tiempo máximo indicado por TIMEOUT. Se lanzará una TimeoutException en caso de que el elemento buscado no esté visible antes del tiempo indicado.

Puedes profundizar acudiendo a la documentación de WebDriver.

martes, 27 de septiembre de 2011

Error generando FlexFamily en Fatwire Content Server

Si tienes mala suerte y trabajas con Fatwire Content Server (recientemente adquirido por Oracle) puede ocurrir que durante el proceso de inicialización de un site se produzca un error al crear alguna familia flexible (FlexFamily), que provocará más errores a la hora de publicar contenidos de los tipos correspondientes a dicha familia.

Si a este problema añadimos la imposibilidad de eliminar la familia desde la interfaz de administración, no nos queda otra que de-registrar la familia de forma manual directamente en base de datos (accediendo con ContentServer Explorer, por ejemplo).

Es cierto que éste no es un error muy común y mucho menos provocado por el producto, sino probablemente por causas ajenas al CMS durante el proceso de inicialización, como por ejemplo, publicar a través de un túnel HTTP.

viernes, 23 de septiembre de 2011

ORA-1034 y ORA-27101

Hoy tengo motivos para esperar que esta entrada pueda sacar a alguien de un aprieto.

Tras una caída inesperada y una confluencia de desastrosas circunstacias hoy nos hemos encontrado con estos errores al intentar conectarnos a Oracle.

ORA-1034: Oracle not available
ORA-27101: shared memory realm does not exist

Aunque los mensajes no ayudan mucho a solucionar el problema, sobre todo el ORA-27101, la solución puede ser bien sencilla.

Es probable que se deba a que la variable de entorno ORACLE_HOME tenga como valor una ruta que acaba en barra. Sí, éste es el problema.

$> echo $ORACLE_HOME
/opt/oracle/9.2.0.6/
$> export ORACLE_HOME=/opt/oracle/9.2.0.6

Basta con redefinir la variable ORACLE_HOME sin la barra del final.

martes, 8 de marzo de 2011

Indexando documentos con Nutch

Continuando el artículo Primeros pasos con Nutch, veremos ahora cómo Nutch puede indexar multitud de tipos de documentos.

Para ello utiliza diferentes plugins que son los que se encargan de trabajar con cada tipo de documento. En el fichero nutch-site.xml se configuran los plugins a incluir, en la propiedad plugin.includes:

<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|msword|pdf)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>Regular expression naming plugin directory names to include.  Any plugin not matching this expression is excluded. In any case you need at least include the nutch-extensionpoints plugin. By default Nutch includes crawling just HTML and plain text via HTTP, and basic indexing and search plugins. In order to use HTTPS please enable protocol-httpclient, but be aware of possible intermittent problems with the underlying commons-httpclient library.</description>
</property>