Mostrando postagens com marcador Oracle Soa Suite 12c. Mostrar todas as postagens
Mostrando postagens com marcador Oracle Soa Suite 12c. Mostrar todas as postagens

segunda-feira, 24 de fevereiro de 2020

Criando Dominio Compacto

A criação de um domínio compacto vem desabilitado, neste post irei demonstrar como habilitar e criar um domínio SOA compacto.

Crie os schemas utilizando o RCU. (os passos são iguais ao do post Criando um Dominio no Oracle SOA Suite 12c.)

cd $ORACLE_HOME/oracle_common/bin
./rcu



Execute:

cd $ORACLE_HOME/oracle_common/common/bin
export CONFIG_JVM_ARGS=-Dcom.oracle.cie.config.showProfile=true
./config.sh

Selecione "criar um domínio compacto", e selecione a localização do domínio.


Selecione "Oracle SOA Suite - <version>"


Daqui em diante, os passos são iguais ao do post Criando um Dominio no Oracle SOA Suite 12c.







sábado, 22 de setembro de 2018

BPEL Configuration Properties - SyncMaxWaitTime

Caso tenha um processo BPEL que seja síncrono e esteja retornando o Fault abaixo, significa que o processo está levando mais tempo que o configurado na propriedade "SyncMaxWaitTime" (o default é 45 seg).

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header>
      <tracking:faultId xmlns:tracking="http://oracle.soa.tracking.core.TrackingProperty">40002</tracking:faultId>
   </env:Header>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>request-response conversation has timed out for component = default/SyncMaxWaitTimeProject!1.0*soa_08421ba4-74aa-41a5-a491-4fce027f0858/BPELProcess1, flowId = 70003</faultstring>
         <faultactor/>
         <detail>
            <exception/>
         </detail>
      </env:Fault>
   </env:Body>
</env:Envelope>

Para alterar esta propriedade, no EM vá em "SOA Infraestructure" -> "SOA Administration" -> "BPEL Properties".


Click em "More BPEL Configuration Properties...", e procure a propriedade  "SyncMaxWaitTime" e altere com o valor desejado.


domingo, 9 de setembro de 2018

Usando Coherence Adapter no SOA Suite 12c

Vou demonstrar neste post como utilizar o Coherence Adapter no SOA Suite 12c. Como no post Habilitando Result Caching - Business Service, vamos armazenar o resultado de uma consulta utilizando o Coherence Adapter.

Certificando que o Coherence Adapter está "active" no domínio.

Faça o login no console, vá em "deployments".



Se estiver "installed", click no "CoherenceAdapter", vá em "Targets" e adicione seu server e click em "save".


No JDeveloper, crie um projeto SOA, e vamos configurar o Coherence Adapter. Arraste o "Coherence Adapter" para "External Reference".


Vamos criar o adapter para recuperar informação do Coherence.

Atribua um "Name"



Para o exemplo utilizarei o JNDI "eis/Coherence/Local"


Selecione "Get" em "Operation"


Preencha o "Cache Name" com "adapter-local"


Irá aparecer a mensagem informando que o campo "Key" não foi informado, este campo iremos informar depois no BPEL.


Selecione o "Element Schema" que irá ficar em cache


Agora vamos configurar o adapter para incluir no Coherence. Arraste o "Coherence Adapter" para "External Reference", e preencha o campo "Name".


Para o exemplo utilizarei o JNDI "eis/Coherence/Local"


Em "Operation" escolha "Put"


Desabilite a opção "auto-generate key" e em "Cache Name" atribua "adapter-local". Em "Time to Live" vamos usar a opção default.


Escola o mesmo "Element Schema" da operação "Get".


Criei um DB Adapter (schema HR, tabela COUNTRIES, veja post HR Schema Oracle XE), caso o país não exista no cache, consulto e incluo no cache.


 Abra o BPEL, e inclua uma atividade de "Invoke", em "Partner Link" selecione o Coherence Adapter que geramos para exutar o "Get".


Click na aba "Properties" e click em "+", selecione a propriedade "jca.coherence.Key" e atribua uma variável ou uma expressão.


Crie uma condição, para verificar se houve retorno, se existir montamos o response do BPEL, caso não exista, vamos consultar no banco e incluir no cache.


Inclua uma atividade de "Invoke", em "Partner Link" selecione o Coherence Adapter que geramos para exutar o "Put".



Click na aba "Properties" e click em "+", selecione a propriedade "jca.coherence.Key" e atribua uma variável ou uma expressão.


Antes da atividade de "Invoke", inclua uma atividade de "Assign" e atribua os valores na variável de input gerada no passo anterior.


Fluxo:



Primeira execução:



Segunda execução:



segunda-feira, 27 de agosto de 2018

Flow ID, Instance ID e ECID

Existem alguns IDs que são gerados ao executar um composite, que nos ajuda a monitorar o mesmo. Neste post, vou explicar sobre "Flow ID", "Instance ID" e "ECID".

Flow ID - Id único gerado para um fluxo de uma instância, com este id, mais o ECID, o SOA Suite gera rastreabilidade nas tabelas com o owner <PREFIXO>_SOAINFRA.

Instance ID - ID gerado para cada instância de composite e component.

ECID (Execution Context Id) - É global, um identificador único associado a uma execução de uma determinada requisição.
É utilizado para correlacionar mensagens em arquivo de log e nos fluxos de instância do composite. É passado via header  de um composite para outro, e de um componente para outro.


Vamos ver um exemplo na pratica. Para o fluxo de execução abaixo, veremos que só teremos um "ECID", dois "FLow ID", pois temos execução de dois composites, e um "Instance ID" para cada component.

 

Ao executarmos o fluxo, acessar a aba "Flow Instances" e consultarmos as instâncias recentes, vemos que o "Flow ID" é a chave para abrir a janela do fluxo de execução.

Click em "Show instance IDs" para exibir o id de cada componente.


Click em "Show XML" e irá encontrar o ECID.


Se executar a consulta das ultimas instâncias do outro composite, vemos um "Flow ID" diferente, mas que referencia os mesmos "Instance IDs" e o mesmo "ECID" do composite que fez a chamada deste.



Com esses id's conseguimos rastrear/monitorar as instâncias na base de dados e arquivos de log.

Arquivo de log:


Acesse o banco do owner <PREFIXO>_SOAINFRA.

Tabela SCA_FLOW_INSTANCE


Tabela CUBE_INSTANCE

Tabela AUDIT_TRAIL


Na versão 12c não é mais possível extrair o xml da coluna log da tabela audit_trail via sql, mas existem APIs JAVA do SOA Suite para acesso desta informação.
 

terça-feira, 21 de agosto de 2018

Estruturação de composites com partições


Podemos estruturar (agrupar) os composites utilizando partições no SOA Suite. E definir para estas partições um grupo de Work-Manager.

É sempre necessário existir ao menos uma partição, por isso, quando criamos o dominio, a partição "default" é gerada automaticamente. Você pode deletar a partição default após criar uma partição. Documentação

Quando trabalhamos com partições, podemos gerenciar os seguintes itens:
  • Agrupamente de composites
  • Shutdown/Start, Retire/Active composites desta partição
  • Estrategia de purge do metadados da partição
  • Criação e definição de Work-Manager para a partição
  • Criação de regras de acesso a partição
    etc...
Vamos criar uma partição:

No Enterprise Manager, clique com o direito em soa-infra, e depois selecione "Manage SOA Folders"


 

A tela de gerenciamento de partições será exibida. Vamos criar uma nova partição.
Click em "Create"


Adicione um nome, e vamos criar junto com a partição, um grupo de Work-manager, click no sinal de "+".


Adicione um nome e descrição, e depois clique em "DONE".


Click em "Create"


A partição foi gerada, se selecionar a partição, pode ser feito controle dos composites (Shutdown/ Start, Active/Retire, Deploy,Undeploy).
 Vizualisar o Work-Manager gerado: 
Click em "SOA Infraestructure" e selecione "Work Manager Groups"


Click na seta ao lado do Work-Manager gerado, para expandir e vizualizar as configurações geradas.


As configurações do Work-Manager, podem ser vizualisadas e editadas via console.


Verificando as "Application Roles" geradas com a criação da partição:
 
Click em "SOA Infraestructure" e selecione "Security" -> "Application Roles"


 Em "Role Name", coloque o nome da partição gerada e depois click na seta para consultar, as Application Roles geradas para a partição serão mostradas. Inclua o grupo ou o usuário que poderá ter acesso em cada Application Role.


Adicionando um "group" a "Application Role".
Click em "Edit", em "Principal Name", preencha com "Adm", click na seta para executar a consulta, selecione "Administrator" e click em "OK".


Click em "OK" novamente:


O grupo "Administrator" foi adicionado a "Application Role"