Buscar en el Blog

viernes, 21 de mayo de 2010

Tarea de Ant para generar clientes de servicios web usando Apache Axis

A continuación comparto la tarea de Apache Ant para poder crear los client stubs para consumir servicios web usando Apache Axis.

La última versión de Apache Axis es la v1.4, se lo puede descargar del siguiente link: http://www.apache.org/dyn/closer.cgi/ws/axis/1_4

La tarea de Ant para crear los client stubs de un servicio web es la siguiente:

<property name="axis.home" location="${lib.home}/apache-axis-1.4"/>

    <target name="axis-generate-client-stubs" depends="init"
            description="Generate the client stubs for a web service">
        <path id="axis.path">
            <fileset dir="${axis.home}/lib">
                <include name="*.jar"/>
            </fileset>
        </path>
        <java classname="org.apache.axis.wsdl.WSDL2Java" fork="true">
            <arg value="-client"/>
            <arg value="-o"/>
            <arg value="${javaproject.home}/src-generated"/>
            <arg value="http://www.webservicex.net/CurrencyConvertor.asmx?WSDL"/>
            <arg value="-p"/>
            <arg value="com.myapplication.webservices"/>
            <classpath>
                <path refid="axis.path"/>
            </classpath>
        </java>
    </target>


En dónde:

  •  axis.home direcciona al directorio que contiene las librerías de Apache Axis
  •  -o  para configurar la ubicación en dónde se crearán las clases Java para el cliente del servicio web, en éste ejemplo: ${javaproject.home}/src-generated
  • La URL dónde se encuentra publicado el servicio web, en éste caso:  http://www.webservicex.net/CurrencyConvertor.asmx?WSDL
  • -p para definir el paquete Java en el cuál se crearán las clases del cliente del servicio web, por ejemplo: com.myapplication.webservices

lunes, 17 de mayo de 2010

Consulta de Estadísticas en los metadatos de BusinessObjects Data Integrator

Otra vez trabajando con las herramientas de BusinessObjects me encontré con la necesidad de consultar las estadísticas de Data Integrator directamente en el repositorio de metadatos.

La versión del repositorio con la cuál expongo el siguiente ejemplo es:

BODI-20031: The local repository version: 11.5.2.0000

Al consultar directamente en las tablas del repositorio de metadatos puedo conocer la historia de las ejecuciones de los flujos de datos y el detalle de ejecución de los mismos. Por ejemplo, es posible conocer el nombre del flujo de datos (dataflow), el nombre del objeto, eltipo, el número de registros cargados y el tiempo de ejecución.

Para realizar la consulta de las estadísticas se puede usar la siguiente consulta SQL:

select dataflow_name, object_name, object_type, execution_time as exec_time, row_count from (
select  
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '2' and x.key2 = y.key2) as object_name,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '3' and x.key2 = y.key2) as object_type,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '4' and x.key2 = y.key2) as row_count,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '5' and x.key2 = y.key2) as start_time,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '6' and x.key2 = y.key2) as end_time,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '7' and x.key2 = y.key2) as execution_time,
         (select x.value from al_statistics x 
         where x.object_key = y.object_key and x.seqnum= '8' and x.key2 = y.key2) as dataflow_name
from al_statistics y
where y.object_key = '5' and y.seqnum= '8' 
)  order by dataflow_name; 

En donde object_key hace referencia a la clave primaria de la tabla al_history. Para consultar ésta tabla se puede usar la siguiente consulta SQL:


select object_key,service,start_time,end_time, status, has_error from al_history order by object_key desc;

martes, 11 de mayo de 2010

Cómo eliminar un salto de línea LF(Line feed, '\n', 0x0A, 10 en decimal) en los datos de una columna de Oracle

Muchas veces nos encontramos con columnas de tipo de dato VARCHAR con valores que poseen saltos de línea (LF - Line Feed). Por ejemplo, supongamos que se tiene la siguiente tabla de base de datos, creada con el siguiente script SQL:

CREATE TABLE TABLA (COLUMNA VARCHAR2(128));
INSERT INTO TABLA VALUES ('MAURICIO MURILLO' || CHR(10) || 'INGMMURILLO');
COMMIT;
SELECT * FROM TABLA;

Al consultar el registro de la tabla se obtendrá lo siguiente:








Como se puede observar, los datos de la columna COLUMNA contienen un salto de línea representado por /n. Para reemplazar los saltos de línea que se encuentren en la cadena de texto por un espacio en blanco se usa la función SQL REPLACE como se muestra a continuación:

SELECT 
REPLACE(REPLACE(REPLACE(COLUMNA,CHR(10),' ') ,CHR(13),' ') ,'  ',' ') AS COLUMNA_NUEVA FROM TABLA;


El script SQL anterior me permitirá reemplazar los saltos de línea por espacios en blanco.


lunes, 3 de mayo de 2010

Criterios de decisión para una solución de integración

Algunos de los siguientes son criterios de decisión para construir soluciones de integración. Tomado del libro de Gregor Hohpe y Bobby Woolf, Enterprise Integration Patterns.
  1. Acoplamiento de aplicaciones. Las aplicaciones que se integran tienen que minimizar sus dependencias (Loosely Coupled)
  2. Soluciones NO INTRUSIVAS. Se tiene que minimizar los cambios en las aplicaciones y en el código de integración.
  3. Tecnología.
  4. Formato de datos. Acordar el formato de datos con el que se transportarán los mensajes.
  5. Tiempo y tamaño. Minimizar el tiempo de intercambio de datos, intercambiarlos frecuentemente y en fracciones pequeñas.
  6. Decidir sí la integración será de datos o funcionalidad (procesos)
  7. Comunicación Remota. Una solución asíncrona puede ser más eficiente pero se convierte en compleja de diseñar, desarrollar y depurar.
  8. Confiabilidad. Las soluciones de integración tienen que ser confiables. Se tiene que asegurar el despacho de todos los mensajes que se transporten.