Archive for the ‘SOA’ Category.

Criando, Populando e Consumindo Advanced Queue com BPEL – Parte 2/3

Com a estrutura da AQ criada, o próximo passo ainda utilizando o PLSQL é o envio das informações para a fila. O enqueue deve ser feito utilizado a API Core DBMS_AQ.

Populando (Enqueue)

O enfileiramento é um processo simples, uma vez que as variáveis foram declaradas, basta popular o type da mensagem que será enviada a fila, e fazer uso do dbms_aq.enqueue.

Este exemplo demonstra o enfileiramento de um único registro na fila, mas você pode evoluir o código fazendo o preenchimento com multiplos registros.

Veja como popular o objeto correspondente a mensagem com dados fixos.


    --
    -- Formatacao da Mensagem para o Enqueue com dados fake
    --
    MESSAGE := XXAR_KEY_INVOICE( INVOICE_NUM => 10001,
                                 SOURCE_NAME => 'core system',
                                 TOTAL_AMOUNT => 139.99,
                                 DESCRIPTION => 'White T-Short'
                               );
--

Uma vez que a mensagem foi preenchida, a próximo ação é o enfileiramento da mensagem, um procedimento tão simples quanto o anterior. O commit da transação é obrigatório.

    --
    -- Enqueue (enfileiramento)
    dbms_aq.enqueue(queue_name           => p_queue, -- nome da fila
                    payload              => MESSAGE, -- mensagem
                    enqueue_options      => enqueue_options,
                    message_properties   => message_properties,
                    msgid                => message_handle);

    commit; --
--

Pronto, feito isto já é possível consultar a Queue Table e verificar o novo registro que acabou de ser inserido.

SELECT * FROM XXAR_INVOICE WHERE 1 = 1 ORDER BY enq_time DESC;

A coluna State da Queue Table corresponde ao status do registro.

dbmsaq.READY     = 0
dbmsaq.WAITING   = 1
dbmsaq.PROCESSED = 2
dbmsaq.EXPIRED   = 3

O registro na fila está pronto para ser consumido, e vou demonstrar isto na próxima parte utilizando o BPEL.

Download

Criando, Populando e Consumindo Advanced Queue com BPEL – Parte 1/3

Este post irá mostrar como você pode fazer uso das filas do banco de dados Oracle – Oracle Advanced Queue.
No cenário apresentado, é sugerida a integração entre dois sistemas, sendo que o Sistema A irá enfileirar as informações para que o serviço da camada Middleware faça o consumo e dispare os dados para o Sistema B.

A seguir você poderá criar uma nova fila com um tipo de dado definido, em seguida ela será populada com dados fixos utilizando PLSQL e por fim, em um processo BPEL assíncrono fazer o dequeue (consumo).

Construindo

Os passos a seguir são para construção da fila e definição da mensagem que será entregue ao consumidor.
Conecte no banco de dados Oracle e execute os scripts na sequência, no final deste artigo você poderá fazer download dos scripts.

Tipo que define a estrutura da mensagem que será adicionada a fila.

--
CREATE TYPE XXAR_KEY_INVOICE AS OBJECT (
    INVOICE_NUM         NUMBER(10),
    SOURCE_NAME         VARCHAR2(200),
    TOTAL_AMOUNT        NUMBER(15,2),
    DESCRIPTION         VARCHAR2(500))
/

Criação da Queue Table, associada ao tipo (estrutura da mensagem).

--
Begin
 DBMS_AQADM.create_queue_table( queue_table => 'XXAR_INVOICE', -- nome da QTable
                                queue_payload_type => 'XXAR_KEY_INVOICE' -- tipo mensagem da QTable
                              );
End;
/

Criação da fila vinculada com a tabela controladora dos registros que serão adicionados a fila.

--
Begin
 DBMS_AQADM.create_queue(queue_name => 'XXAR_INVOICE_QTAB', -- nome da Queue
                         queue_table => 'XXAR_INVOICE' -- Tabela controladora da Queue
                         );
End;
/

Iniciando a fila.

--
Begin
  DBMS_AQADM.start_queue( queue_name => 'XXAR_INVOICE_QTAB' );
End;
/
CREATE OR REPLACE TYPE XXAR_KEY_INVOICE_T AS TABLE OF XXAR_KEY_INVOICE;
/

Pronto, agora conseguimos criar a AQ com um tipo de dado complexo definido.
Como você deve ter percebido toda a criação da fila faz uso da API core DBMS_AQADM. Para o nosso próximo passo que é o envio de mensagens para a fila (enqueue), será necessário a DBMS_AQ.

Downloads

[]‘s

Apresentando o BPEL com o Adapter File

A solução da Oracle para o conceito de arquitetura de serviços SOA, conhecida como Oracle SOA Suite disponibiliza um pacote com diversos recursos para organização, orquestração, segurança e integração. Para este último posso destacar o Business Process Execution Language, BPEL, que integrado ao JDeveloper é uma excelente ferramenta de trabalho, fácil, simples e com alguns recursos (adapters) pré-compilados que auxiliam o desenvolvimento.

O BPEL é uma linguagem descrita em XML que básicamente é utilizada para desenhar processo de negócio seguindo como base o BPM, destaca-se pela simplicidade da criação de um processo e pela amigável interface, proporcionando uma sensação agradável no momento do design. O utilizador de BPEL não necessita de conhecimentos em linguagem de programação, porém, o programador poderá obter mais recursos da ferramenta.

Para apresentar o BPEL escolhi algo um pouco mais além do famoso “Hello Word”, vamos trabalhar em um cenário de integração de softwares, aonde o legado irá disponibilizar um arquivo TXT no padrão CVS posicional diáriamente, o processo deverá interpretar o conteúdo deste arquivo e gravar no banco.

Pré-Requisitos

JDeveloper 10.1.3.4 (com suporte a SOA).

SOA Suite 10.1.3.1.0 (Com Windows Vista, talvez vc tenha problemas, baixe o patch).

MySQL.

Parte 1 – Criando o Projeto

Crie um projeto do tipo BPEL Project em File -> New -> Projects -> BPEL Process Project (certifique-se de que está filtrando por todas as tecnologias). Em seguida, dê um nome ao projeto e na opção template opte por Empty BPEL Process.

proj02 - New Project 2

Parte 2 – Usando o Adapter File

O Adapter File é um recurso do BPEL para manipulação de arquivos, oferece três opções Leitura, Escrita e Sincronização (Read, Writer e Synchronous Read), além dele existe o Adapter FTP (autoexplicativo), porém iremos falar sobre ele depois. Continuando com nosso projeto, vamos utiliza a opção Read para o arquivo texto que estará disponível no diretório c:\interface_dir, haverá um pooling a cada 1 minuto, obviamente que isto é apenas para testes você deve adequar o intervalo de tempo de acordo com sua necessidade, veja a seguir o passo-a-passo do Adapter File.

Veja aqui os screenshot do passo-a-passo para configurar o File Adapter.

Até este passo fizemos apenas configurações básicas da funcionalidade do Adapter, porém, agora é necessário definir um o mapeamento das colunas posicional (fixo), utililzando um Schema XSD, veja a seguir como é simples:

Screenshots para criar o Schema XSD.

Parte 3 – Criando o Adapter Database

Crie um banco de dados no MySQL ou em qualquer outro SGDB, em seguida crie a tabela pais que irá receber os dados contidos no arquivo texto. Antes de utilizar o Adapter Database certifique-se que sua conexão com o banco está feita pelo JDeveloper, ela será necessária para os passos a seguir, portando vá até a aba Connection, se não existir crie-a.

Connection

Com a tabela criada e a conexão feita, agora vamos utilizar o componente Database Adapter que será o responsável por executar instruções SQL. Os passos aqui são tão simples quanto a criação da conexão, porém, é importante destacar que no Passo 4 escolha a opção Execute Custom SQL, e no quinto e último passo coloque a instrução de inserção da tabela pais, não se preocupe com o XSD ele será criado automáticamente, veja como fica:

Custom SQL

Passo 4 – While e Variáveis

Para cada campo do arquivo TXT, mapeado pelo Schema XSD, devemos criar uma variável que irá armazenar o valor dos campos, então vá até a aba Structure e crie as variáveis.

Variaveis - 01

Variaveis - 02

Depois de todas as variáveis criadas precisamos associa-las aos campos do XSD e inicializa-las, mas para isto devo esclarecer uma coisa, sabemos que o arquivo texto poderá ter uma ou mais linhas de registro, portanto é necessária uma instrução de repetição. Utilizaremos o componente WHILE, a partir de uma variável contadora (índice).

diagram_01

O While cria um novo escopo aonde devemos arrastar os componentes de assinatura das variáveis e chamada da procedure, ou seja, para cada registro iremos fazer a inicialização da variáveis e a chamada da procedure para gravar no banco de dados, finalizando o nosso processo BPEL.

diagram_02

O processo é simples mas o dominio do ambiente BPEL é excencial, saber criar as variáveis, inicializá-las, passagem de valores, etc. Abaixo está disponível o fonte do projeto criado no JDeveloper.

Clique aqui para baixar o fonte.