Inicio > Forms & Reports > Integración Forms 11gR2 y Advanced Queuing (AQ)

Integración Forms 11gR2 y Advanced Queuing (AQ)

Ya en la versión 11g de Oracle Forms se incorporaba esta nueva e interesante funcionalidad de integración con el sistema de mensajería Advanced Queuing (AQ), que las bases de datos Oracle incorporan desde la versión 8i.

AQ es un sistema de mensajería asíncrono pensado para que procesos desligados puedan pasarse información entre ellos. De hecho, su utilización garantiza precisamente que los procesos estén desligados entre si. AQ es muy interesante en la integración de Forms con, por ejemplo, Oracle BPM (Business Process Management).

AQ envía y recibe mensajes de dos formas:

  • Punto a  punto:Emisor y receptor utilizan la misma cola y se establece comunicación bidireccional entre ambos. Los mensajes sólo son consumidos por un solo receptor.

  • Publicación-Subscripción:Los mensajes son publicados y consumidos por varios receptores subscritos a una cola.

     

Para profundizar en las colas AQ os dejo este link con la documentación completa.

A continuación os muestro un pequeño ejemplo de cómo utilizarlo desde Oracle Forms. Se trata simplemente de un formulario que se subscribe a una cola y va recibiendo mensajes de manera asíncrona.

    1. Definimos qué tipo de mensajes se van a transmitir:create or replace type testcase.prueba_aq_typ2 as OBJECT (TEXTO varchar2(100), CONTADOR number, FECHA date);
    2. Creamos una tabla de mensajes AQ:begin

      DBMS_AQADM.CREATE_QUEUE(

      QUEUE_NAME => ‘testcase.prueba_aq’ ,

      QUEUE_TABLE => ‘testcase.prueba_aq’ );

      end;

      /

  1. Creamos una cola de mensajes:begin

    DBMS_AQADM.CREATE_QUEUE(

    QUEUE_NAME => ‘testcase.prueba_aq’ ,

    QUEUE_TABLE => ‘testcase.prueba_aq’ );

    end;

    /

  2. Ponemos en marcha la cola: begin

    DBMS_AQADM.START_QUEUE( ‘testcase.prueba_aq’ );

    end;

    /

  3. Subscribimos a un usuario de BD, en nuestro ejemplo testcase, a la cola de mensajería creada anteriormente: DECLARE

    subscriber sys.aq$_agent;

    begin

    subscriber := sys.aq$_agent( ‘TESTCASE’ , null, null);

    dbms_aqadm.add_subscriber(

    queue_name => ‘testcase.prueba_aq’,

    subscriber => subscriber);

    end;

    /

  4. A partir de este punto adaptamos nuestro formulario para que sea capaz de recibir mensajes transmitidos desde la cola creada. Se trata de crear un evento y subscribirse a la cola de mensajes programando a medida la lógica de la recepción del mensaje. Tanto en tiempo de diseño como de ejecución, el formulario ha de estar conectado a la BD con el usuario que está subscrito a la cola de mensajes, en nuestro ejemplo testcase. Os adjunto un pantallazo para que se vea de manera más gráfica cómo hacerlo:
  5. En el disparador WHEN-EVENT-RAISED del nuevo evento creado utilizaremos la función GET_EVENT_OBJECT_PROPERTY para recoger el mensaje de la cola y tratarlo.
  6. A nivel de configuración del servidor de aplicaciones Oracle Weblogic Server, sólo hemos de definir el parámetro MaxeventWait (expresado en milisegundos) a 2000. Con este parámetro estamos “diciéndole” a Forms cada cuanto tiempo ha de revisar si existen mensajes en las colas a las que se está subscrito.
  7. Para enviar mensajes simplemente hemos de lanzar el siguiente script desde por ejemplo SQL*PLUS.declare

    enq_ct dbms_aq.enqueue_options_t;

    msg_prop dbms_aq.message_properties_t;

    enq_msgid raw( 16 );

    userdata testcase.prueba_aq_typ2:= testcase.prueba_aq_typ2( ‘texto del mensaje a las ‘||to_char(sysdate,’hh24:mi:ss’) ,1,sysdate);

    begin

    DBMS_AQ.ENQUEUE(

    QUEUE_NAME => ‘testcase.prueba_aq’,

    ENQUEUE_OPTIONS => enq_ct,

    MESSAGE_PROPERTIES => msg_prop,

    PAYLOAD => userdata,

    MSGID => enq_msgid);

    COMMIT;

    end;

    /

Por otro lado en este link os dejo una demo mucho más completa de Oracle en la que se hace un chat con forms y AQ.

  1. Javier
    octubre 19, 2012 en 21:24

    interesante ejemplo, pero me gustaria lo continuaras hasta el desencolado.
    gracias

    • Javier Gea
      octubre 23, 2012 en 10:04

      El desencolado es automático una vez el form recibe el mensaje

  2. up
    marzo 2, 2013 en 00:14

    Greetings from Colorado! I’m bored at work so I decided to check out your website on my iphone during lunch break. I really like the info you provide here and can’t wait to take
    a look when I get home. I’m surprised at how fast your blog loaded on my phone .. I’m not even using WIFI, just 3G .

    . Anyhow, awesome site!

  1. No trackbacks yet.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 137 seguidores

A %d blogueros les gusta esto: