Oracle BAM – Atualizando a definição de dataObjects

Em um artigo anterior (http://blog.iprocess.com.br/2012/04/exportacao-e-importacao-de-objetos-do-oracle-bam/) vimos como utilizar o comando icommand para  importar/exportar objetos do Oracle BAM, dentre eles um data object, que é a estrutura onde os dados exibidos no Oracle BAM são armazenados.

Neste tópico, veremos como atualizar a definição dos data objects do Oracle BAM de uma forma um pouco mais poderosa que utilizando o icommand, por meio dos webservices do Oracle BAM.

Problema:

Uma das limitações do icommand é que ele não permite “atualizar” um data object. Por exemplo, via icommand, não é possível incluir uma nova coluna. É preciso excluir o data object e criá-lo novamente, o que acarreta a perda de referências e também a perda de dados.

Solução:

Utilize o webservice DataObjectDefinition (http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10224/bam_webservices.htm) para enviar a nova estrutura do data object, sem perder os dados existentes.

O modo de funcionamento é simples: você envia a nova estrutura do data object no payload. As colunas que existirem com o mesmo nome serão atualizadas, as que não existirem serão criadas e as que existirem mas não estiverem na nova definição, serão excluídas.

Exemplo de payload:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bam="http://xmlns.oracle.com/bam" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header/>
   <soap:Body>
      <bam:Update>
         <bam:xmlPayload>
            <![CDATA[
            <DataObject Version="14" Name="Distribuicao" ID="_Distribuicao1" Path="/Logistica" External="0">
               <Layout>
                  <Column Name="Local" ID="_Local" Type="string" MaxSize="100" Nullable="1" Public="1" TipText="&quot;CQ&quot; / &quot;Buffer&quot; / &quot;Direto&quot;"/>
                  <Column Name="Quantidade" ID="_Quantidade" Type="integer" Nullable="1" Public="1"/>
                  <Column Name="Data_Expiracao" ID="_Data_Expiracao" Type="datetime" Nullable="1" Public="1" TipText="Data de expiração dos dados no BAM"/>
               </Layout>
            </DataObject>
            ]]>
         </bam:xmlPayload>
      </bam:Update>
   </soap:Body>
</soap:Envelope>

Note que o formato do payload é o mesmo que o utilizado no XML exportado ou importado via icommand, o que facilita o trabalho.

A atualização terá ocorrido com sucesso se o retorno do webservice for o elemento “UpdateResponse” vazio.

Exportação e importação de Objetos do Oracle BAM

A interface padrão do Oracle BAM permite criar e salvar objetos diretamente no servidor do Oracle BAM. Desta forma, não é necessário salvar os objetos em arquivo na máquina local.

Porém, em determinados momentos é necessário exportar os objetos criados no servidor atual para outro servidor (ex: para testar os dashboards criados no servidor de desenvolvimento no servidor de testes).

Neste post, aprenderemos como exportar e importar objetos criados no Oracle BAM. Todos os componentes do Oracle BAM, podem ser exportados para um arquivo XML através do comando ICOMMAND.

iCommand

O iCommand é um utilitário que permite importar e exportar os diversos componentes do Oracle BAM através do prompt do DOS.

Exemplo de comando para exportar:

 icommand type=export name=myComponent type=dataobject file=myFile.xml

Exemplo de comando para importar:

 icommand type=import file=myFile.xml

Procedimentos antes de executar os comandos de importação e exportação:

  1. Se necessário, setar o Java Home: export JAVA_HOME=/home/oracle/Middleware/home_soa11g/jdk160_11
  2. No servidor do BAM, entrar no diretorio /home/oracle/Middleware/home_soa11g/Oracle_SOA1/bam/bin e executar o comando de exportação ou importação
  3. Caso os reports a serem exportados tenham drill, os reports referenciados devem ser exportados separadamente, e importados sempre ANTES dos reports que os referenciam. Do contrário, irá ocorrer a mensagem “DrillAcross Destination Report not found.”

Mensagens de erro comuns:

  1. Se o iCommand retornar o erro “BAM-01261: Cannot connect to the Oracle BAM Server”, verificar no arquivo /home/oracle/Middleware/home_soa11g/Oracle_SOA1/bam/config/BAMICommandConfig.xml se o parâmetro “ADCServerPort” está setado com a porta no qual o BAM foi efetivamente instalado (o valor padrão é 9001). Caso seja diferente, ajustar para a porta correta e tentar novamente.

Exemplos diversos:

Exportação de reports:

Exportando a pasta “Meus Relatórios” (e todos os relatórios dentro dela):

./icommand -cmd export -name ”/private:weblogic/Report/Meus Relatórios/Coleções” -type folder -file teste.xml

Exportando a pasta “Relatórios compartilhados” (e todos os relatórios dentro dela):

./icommand -cmd export -name ”/public/Report/MainFolderInShared” -type folder -file C:\FolderExportTest2.xml

Exportando um relatório privado:

./icommand -cmd export -name ”/private:bamadmin/Report/MyReport” -type report -file C:\MyReport.xml

Exportando um relatório da pasta “Relatórios Compartilhados”:

./icommand -cmd export -name ”/public/Report/SharedReport” -type report -file C:\SharedReport.xml

Exportação de Data Objects:

Exportando um Data Object da pasta raiz:

./icommand -cmd export -name TestDataObject -file “C:\TestDataObject.xml”

Exportando um Data Object de dentro de uma pasta específica:

./icommand -cmd export -name ”/Samples/Call Center” -file “C:\CallCenter.xml”

Exportando uma pasta de Data Objects inteira:

./icommand -cmd export -name ”/public/DataObject/Colecoes/Desempenho por Marcas” -type folder -file objects.xml

Importação de objetos (reports, data objects, etc):

./icommand -cmd import -file /home/oracle/Middleware/home_soa11g/Oracle_SOA1/bam/bin/teste.xml

Para maiores informações, consulte:
http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10224/bam_app_icommand.htm