No nosso último artigo, Integrar o Oracle BRM com aplicações empresariaisNa secção "Integração BRM-CRM", explicámos uma forma de implementar uma integração BRM-CRM. A solução sugerida consistia em criar um conector no lado do BRM e ligá-lo a uma aplicação de terceiros. No entanto, também é possível adoptar uma abordagem diferente, utilizando Oracle Enfileiramento avançadoque será o objecto do presente artigo.
Recentemente, estivemos envolvidos num projecto em que o cliente pretendia uma integração "segura" sem a necessidade de ser em tempo real; uma solução quase em tempo real seria suficiente, disseram eles. O que queremos dizer com integração segura é ter uma solução que não afecte qualquer acção realizada, como a compra de um produto ou a criação de uma factura, por uma falha na ligação de comunicação (ou qualquer outro erro) entre o Oracle BRM e o software de terceiros. Ao implementar um conector dm personalizado para integração de dados, qualquer operação concluída sem sucesso reverterá toda a ação. Embora isso possa ser um comportamento desejado, nesse caso não era; portanto, decidimos usar o Oracle Advanced Queuing. Identificámos que o nosso pior cenário seria o de problemas na base de dados, mas haveria também muitos outros problemas; para começar, o sistema BRM não funcionaria correctamente.
Outras vantagens que identificámos foram a persistência dos dados (os eventos são armazenados na base de dados até que a aplicação do consumidor esteja pronta para processar as mensagens em fila de espera) e uma tecnologia Oracle AQ já comprovada.
Implementamos com sucesso essas mudanças no Oracle BRM versão 7.3 e 7.3.1 com o Oracle Database 10g (10.2.0.1.0 64bit) e 11g (11.2.0.1.0 64bit) com o componente Oracle Advanced Queuing (AQ).
O processo de publicação de eventos do Oracle BRM utilizando o Oracle Advanced Queuing funciona pode ser visto na figura abaixo:
Para desenvolver um processo de sincronização deste tipo, é necessário efectuar alguns passos preliminares. Estas incluem:
1. Instalação do EAI Manager.
o Módulo EAI Connection Manager (CM) (inclui códigos de operação exigidos pelo EAI),
o Gestor de dados EAI,
o Módulo externo (EM) gerador de carga útil - também designado por EAI Java Server ou eai_js.
2. Depois de concluir a instalação do EAI Manager, configure os valores nos arquivos de configuração CM e EAI DM (pin.conf), bem como no arquivo de propriedades do Gerador de Carga Útil (Infranet.properties).
3. Configure a lista de notificação de eventos que deseja publicar, editando os arquivos de configuração para notificação de eventos (arquivos $BRM_HOME/sys/data/config/pin_notify*) e mescle-os antes de executar o utilitário load_pin_notify.
4. Defina eventos no ficheiro de configuração do gerador de cargas úteis EM (payloadconfig.xml).
Após a conclusão das etapas preliminares, é hora de criar e configurar a Fila Avançada Oracle. Aqui estão os passos (o terceiro passo pode variar, pois depende da sua configuração):
1. Crie uma fila de espera:
pin_ifw_sync_oracle.pl create -l $USER/$PASS@$DB -q TEST_QUEUE -t TEST_QUEUE
2. Teste a fila de espera (passo opcional):
pin_ifw_sync_oracle.pl test -l $USER/$PASS@$DB -q TEST_QUEUE
3. Inicie sessão na sua base de dados como utilizador SYSTEM e defina os privilégios de concessão adequados para o seu "t_user":
exec dbms_aqadm.grant_queue_privilege('ALL', 'PUSER.TEST_QUEUE', 't_user');
conceder execução em puser.pin_event_ty a t_user;
conceda a execução em sys.dbms_aqin a t_user;
Em seguida, precisamos de um produtor de filas, uma aplicação que vai colocar em fila de espera os eventos definidos anteriormente. É necessário implementar um módulo personalizado (biblioteca) e defini-lo no ficheiro de configuração dm_eai, na entrada "plugin_name".
Existe também uma forma mais simples de realizar esta tarefa. Se já tiver instalado o "Account Synchronization DM", encontrará uma implementação de um módulo produtor de filas no gestor de dados dm_ifw_sync. No entanto, se escolher esta opção, são necessárias algumas entradas adicionais no ficheiro de configuração dm_eai.
Depois de ter um produtor de filas em funcionamento, vá em frente e invoque alguns dos seus eventos para ver se eles são colocados em fila. As filas de espera podem ser consultadas na tabela definida aquando da criação da fila.
Por fim, precisará de um consumidor de fila, uma aplicação que lerá e retirará as mensagens da fila. Existem várias interfaces programáticas disponíveis para aceder ao Oracle Streams AQ nas seguintes linguagens de programação: Java (JMS), PL/SQL, C (OCI), Visual Basic (OO4O), AQ XML Servlet (IDAP).
Com a implementação do seu cliente personalizado, terá controlo total sobre a velocidade, o momento e o número de mensagens a serem processadas. Por exemplo, durante as horas de menor movimento, pode processar mais dados do que durante as horas de maior movimento.
Esperamos ter-lhe dado algumas indicações válidas sobre como proceder ao processo de integração/sincronização entre o Oracle BRM e sistemas e/ou aplicações de terceiros.