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.
sábado, 22 de setembro de 2018
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:
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:
quinta-feira, 30 de agosto de 2018
Importando certificado via script Python
Criei um script em python para executar o import no arquivo DemoTrust.jks.
Download em: https://github.com/leonardosugahara/wlst_examples aquivo addCertToDemoTrust.py
Altere as varáveis para as configurações de seu ambiente. Ex:
MIDDLEWARE_HOME = "/app/oracle/Middleware_12.2.1.2"
JAVA_HOME = "/app/jdk/jdk1.8.0_131"
CERT_FILE="/app/mycert.crt"
CERT_ALIAS = "mycertalias"
Execute o comando:
python addCertToDemoTrust.py
Caso queira criar um certificado para teste (no linux), certifique-se que possui o openssl instalado e execute os comandos:
openssl req -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr
openssl req -key mydomain.key -new -x509 -days 365 -out mydomain.crt
Download em: https://github.com/leonardosugahara/wlst_examples aquivo addCertToDemoTrust.py
Altere as varáveis para as configurações de seu ambiente. Ex:
MIDDLEWARE_HOME = "/app/oracle/Middleware_12.2.1.2"
JAVA_HOME = "/app/jdk/jdk1.8.0_131"
CERT_FILE="/app/mycert.crt"
CERT_ALIAS = "mycertalias"
Execute o comando:
python addCertToDemoTrust.py
Caso queira criar um certificado para teste (no linux), certifique-se que possui o openssl instalado e execute os comandos:
openssl req -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr
openssl req -key mydomain.key -new -x509 -days 365 -out mydomain.crt
terça-feira, 28 de agosto de 2018
Habilitando Result Caching - Business Service
Neste post irei mostrar como configurar o "result caching" de um business service.
O "result caching" é recomendado para serviços que não mudam com frequência suas respostas, assim ajudando a reduzir sobrecargas de rede, melhorando a escalabilidade e reduzindo cargas de servidores.
Esta configuração utiliza o Oracle Coherence, que está incluso no Weblogic.Para o correto funcionamento, precisamos configurar o "Cache Token", uma chave única para o Coherence efetuar o controle do cache.
Configurando "Result Caching" no Business Service.
Abra o Business Service e vá na sessão "Performance", click em "Enable Result Caching" e click em "expression"
Preencha com um valor que seja chave. Ex:
Em "Expiration Time", para teste, selecione "Duration" e coloque 15 segundos.
Default: utiliza o parâmetro "expiry-delay" do arquivo "osb-coherence-cache-config.xml" que está no arquivo resultcache.gar. O valor default é 5 minutos
Duration: permite que seja configurado hr:min:sec
Expression: Expressão XQuery para recuperar o tempo de expiração do resquest ou response.
Coloque uma atividade de "Replace" no pipeline para verificarmos as informações de cache na chamada do business.
<cache-info>
<cache-originated>{fn:data($outbound/ctx:transport/ctx:response/tp:cache-originated)}</cache-originated>
<cache-token>{fn:data($outbound/ctx:transport/ctx:response/tp:cache-token)}</cache-token>
</cache-info>
Teste:
Primeira execução:
Segunda execução:
Observe que na segunda execução, o parametro "cache-originated" retornou com o valor "true", indicando que foi recuperado do cache.
O cache-token e o tempo de expiração podem ser sobrescritos via pipeline, inclua uma atividade de insert e acrescente as informações em ./ctx:transport/ctx:request
O "result caching" é recomendado para serviços que não mudam com frequência suas respostas, assim ajudando a reduzir sobrecargas de rede, melhorando a escalabilidade e reduzindo cargas de servidores.
Esta configuração utiliza o Oracle Coherence, que está incluso no Weblogic.Para o correto funcionamento, precisamos configurar o "Cache Token", uma chave única para o Coherence efetuar o controle do cache.
Configurando "Result Caching" no Business Service.
Abra o Business Service e vá na sessão "Performance", click em "Enable Result Caching" e click em "expression"
Preencha com um valor que seja chave. Ex:
Em "Expiration Time", para teste, selecione "Duration" e coloque 15 segundos.
Default: utiliza o parâmetro "expiry-delay" do arquivo "osb-coherence-cache-config.xml" que está no arquivo resultcache.gar. O valor default é 5 minutos
Duration: permite que seja configurado hr:min:sec
Expression: Expressão XQuery para recuperar o tempo de expiração do resquest ou response.
Coloque uma atividade de "Replace" no pipeline para verificarmos as informações de cache na chamada do business.
<cache-info>
<cache-originated>{fn:data($outbound/ctx:transport/ctx:response/tp:cache-originated)}</cache-originated>
<cache-token>{fn:data($outbound/ctx:transport/ctx:response/tp:cache-token)}</cache-token>
</cache-info>
Teste:
Primeira execução:
Segunda execução:
Observe que na segunda execução, o parametro "cache-originated" retornou com o valor "true", indicando que foi recuperado do cache.
O cache-token e o tempo de expiração podem ser sobrescritos via pipeline, inclua uma atividade de insert e acrescente as informações em ./ctx:transport/ctx:request
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.
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.
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.
Assinar:
Postagens (Atom)