Mostrando postagens com marcador BPEL. Mostrar todas as postagens
Mostrando postagens com marcador BPEL. Mostrar todas as postagens

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.


sábado, 17 de junho de 2017

BPEL Property inMemoryOptimization

Existem algumas propriedades no BPEL no qual podemos setar para diminuir a quantidade de I/O no metadados de infra do SOA Suite e execução em memoria, que em alguns casos ajuda na performance do ambiente.

Vou demonstrar como configurar o atributo "inMemoryOptimization" tanto na versão 12c (12.2.1) e na versão 11g (11.1.1.7).

Este atributo deve ser utilizado com processos que sejam transient e que não contenha as atividades de dehydration com receive, wait, onMessage e onAlarm.

No caso farei com que seja persistido o fluxo do BPEL somente se tiver falha.

SOA Suite 12c:

Passos:

1-)  Quando selecionar para criar um BPEL, selecione a Aba "In Memory SOA" e selecione "falted" para "Completion Persist Policy"


Quando o BPEL for criado, verá na aba properties a configuração que selecionamos:




2-) Execute seu fluxo e verá que para os fluxos de sucesso o trace não está disponível e para os fluxos com erro o trace irá aparecer.

Fluxo sucesso:
Fluxo erro:


SOA Suite 11g:

1-) No JDeveloper do 11g não temos a aba igual a aba "In Memory SOA", devemos fazer a configuração das propriedades manualmente. Abra o composite, click na aba "source" e acrescente as propriedades abaixo no BPEL ou selecione e o BPEL e acrescente as propriedades via "Porperty Inspector".






O resultado dos testes é o mesmo que fiz no 12c.

Referencias:
Documentação SOA Suite 11g - link
Documentação SOA Suite 12c - link

quinta-feira, 5 de junho de 2014

Utilizando a atividade Java Embedding no BPEL

Irei demonstrar um exemplo de como utilizar a atividade "Java Embedding" do BPEL.
Para o exemplo vou utilizar o seguinte cenário:
- Calcular a diferença de dias entre duas datas.

Passos:

1-) Crie um SOA Project

2-) Crie crie um BPEL na versão 2.0 sincrono



3-) Altere o xsd que foi gerado para o bpel adicionando dois campos do tipo dateTime como parametro de entrada
4-) Altere o xsd que foi gerado para o bpel adicionando um campo do tipo integer como parametro de saída


XSD:
<?xml version="1.0" encoding="UTF-8"?>
<schema attributeFormDefault="unqualified"
    elementFormDefault="qualified"
    targetNamespace="http://xmlns.oracle.com/MDSSampleApplication/JavaEmbeddingProject/JavaEmbeddingExample"
    xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="process">
        <complexType>
            <sequence>
                                <element name="dateTime1" type="dateTime"/>
                                <element name="dateTime2" type="dateTime" />
            </sequence>
        </complexType>
    </element>
    <element name="processResponse">
        <complexType>
            <sequence>
                                <element name="dias" type="integer"/>
            </sequence>
        </complexType>
    </element>
</schema>


5-) Vá na aba source do BPEL gerado e na parte de import inclua o seguinte trecho:

<import location="oracle.xml.parser.v2.XMLElement" importType="http://schemas.oracle.com/bpel/extension/java"/>
    <import location="java.text.SimpleDateFormat" importType="http://schemas.oracle.com/bpel/extension/java"/>
    <import location="java.text.ParseException" importType="http://schemas.oracle.com/bpel/extension/java"/>
    <import location="java.util.Calendar" importType="http://schemas.oracle.com/bpel/extension/java"/>
 



6-) Na sessão "Oracle Extensions" arraste a atividade "Java Embedding" para o BPEL



7-) Duplo clique na atividade e verá a seguinte popup



8-) Em name altere para "MyJavaEmbedding"

9-) Insira o trecho de código abaixo:

try{
    long DAY_MILLESECONDS = 1000 * 60 * 60 * 24;
    Long differenceMillesenconds = 0L;
    Long dias = 0L;
   
    XMLElement xmlElement1 = (XMLElement)getVariableData("inputVariable","payload","/client:process/client:dateTime1");
    XMLElement xmlElement2 = (XMLElement)getVariableData("inputVariable","payload","/client:process/client:dateTime2");

    String dateTimeStr1 = xmlElement1.getTextContent();
    String dateTimeStr2 = xmlElement2.getTextContent();

    addAuditTrailEntry("Saida no AuditTrail -> dateTime1: " + dateTimeStr1);
    addAuditTrailEntry("Saida no AuditTrail -> dateTime2: " + dateTimeStr2);

    dateTimeStr1 = dateTimeStr1.replace("T"," ");
    dateTimeStr2 = dateTimeStr2.replace("T"," ");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Calendar dateTime1 = Calendar.getInstance();
    Calendar dateTime2 = Calendar.getInstance();

    dateTime1.setTime(sdf.parse(dateTimeStr1));
    dateTime2.setTime(sdf.parse(dateTimeStr2));
   
    /*Remover hora minutos e segundos */
    dateTime1.set(dateTime1.get(Calendar.YEAR),
                  dateTime1.get(Calendar.MONTH),
                  dateTime1.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    dateTime2.set(dateTime2.get(Calendar.YEAR),
                  dateTime2.get(Calendar.MONTH),
                  dateTime2.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
   
    differenceMillesenconds = dateTime1.getTimeInMillis() - dateTime2.getTimeInMillis();
    dias = differenceMillesenconds / DAY_MILLESECONDS;
   
    addAuditTrailEntry("Saida no AuditTrail -> dias: " + dias);
    setVariableData("outputVariable","payload","/client:processResponse/client:dias", new Integer(dias.intValue()));
} catch (Exception e){         
    System.out.println("exception "+e.getMessage());
    addAuditTrailEntry(e);
}





10-) Antes da atividade Java Embedding do seu processo BPEL, acrescente uma atividade do tipo "Assign" e inicialize o valor de retorno "dias" com o valor zero. É importante fazer esta atividade, pois quando executado o trecho java,  se a variável não foi inicializada, dará erro de xpath na execução do método setVariableData(...). 



11-) Faça o deploy e execute um teste, no trace do bpel verá algo como:




Obs: se atente aos métodos de acesso e de escrita de parametros do BPEL (getVariableData(...), setVariableData(...)), os métodos que podem ser utilizados no java embedding estão descritos na tabela 14-1 do Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite 11g Release 1 (11.1.1.7)

quarta-feira, 14 de maio de 2014

Console Extension no SOA Suite 11g

O Console Extension é uma ferramenta que nos prove relatórios em tempo real e monitoração de métricas que podem ser configuradas manualmente no WebLogic Diagnostic Framework (WLDF). O Console Extension vem na instalação do Weblogic, vamos ver como instalar e configurar metricas.

Copie o jar diagnostics-console-extension.jar que se encontra em <WL_HOME>\server\lib\console-ext para o diretório <DOMAIN_HOME>/console-ext.

exemplo de comando no linux:
cp <WL_HOME>\server\lib\console-ext <DOMAIN_HOME>/console-ext

inicio o seu dominio, ao logar no console verá a aba "WLDF Console Extension"


Clique na aba e verá um descritivo do Console Extension e pedindo para acessar a URL http://hostname:port/console/dashboard


Abra a URL http://localhost:7001/console/dashboard e verá a seguinte tela:


Em "Built-in Views" temos já pré-configurados 3 views:

JVM Runtime
JVM Runtime Heap
Thread Pool Runtime

Selecione a view "JVM Runtime Heap" e clique no botão "Start" (está em verde) e deixe executando por um tempo para coleta, e verá algo parecido como a seguinte tela:

  

Configurando Métricas

Logue no console e clique em "Diagnostic Modules" que se encontra no grupo "Diagnostic"


Clique em "Module-FMWDFW"


Clique na aba "Collected Metrics"


Clique em "New" e depois em "Next", aceitando o valor default em "MBean Server location"


Em "MBean Type" escolha "soainfra_message_processing"  e clique em "Next"


Escolha as opções "requestProcessingTime_avg", "requestProcessingTime_maxTime" e "requestProcessingTime_minTime" e clique em "Next"


Seleciona a opção "oracle.dms.name=/soainfra/engines/message_processing/bpel" e clique em "Finish"


Configurando uma View no Dashboard

Volte ao dashboard (http://hostname:port/console/dashboard) em "View List" clique em "New View", vai aparecer em "My View" uma caixa de texto, preencha com "Message Processing"


Vá em "Metric Browser" e execute os passo a baixo:
Selecione o checkbox "Collected Metrics Only"
Irá aparecer "soainfra_message_processing" em "Types" e selecione o mesmo
Clique na seta ao lado do titulo e selecione "New Chart"



Em "Instance" selecione "oracle.dms.name=/soainfra/engines/message_processing/bpel"
Em "Metrics", selecione "requestProcessingTime_avg"
Clique na seta ao lado do titulo e selecione "Add Metric"
Faça o mesmo para as outras duas metricas


Clique em "Start" e rode alguns composites, apó isso verá algo parecido com a tela abaixo:


Pode ser configurados metricas para MDS, ADF, etc... todos disponivel em MBean type.

quarta-feira, 7 de maio de 2014

Manipulando dateTime via xpath no BPEL


 Irei demonstrar algumas maneiras para formatar e manipular data e hora no bpel.

 

current-dateTime


Esta função retorna a data corrente no formato ISO (CCYY-MM-DDThh:mm:ss.sTZD).

Utilização:
xp20:current-dateTime()

 

format-dateTime


Esta função retorna uma string formatada a partir de um formato fornecido.

Utilização:
xp20:format-dateTime(dateTime as string, format as string)
  • dateTime = String da data a ser formatada
  • format = Formato que deseja
 Ex:
xp20:format-dateTime(xpath20:current-time(), '[D01]-[M01]-[Y0001]')

Saída: 
'01-01-2014'

Para formatar o ano, podemos utilizar os seguintes formatos:
[Y0001] – 2014
[Y] – 2014
[Y01] – 14

Para formatar o mês, podemos utilizar os seguintes formatos:
[M01] – 03
[M] – 3
[MNn] - March
[MN] - MARCH
[MNn, *-3] - Mar

Para formatar o dia, podemos utilizar os seguintes formatos:
[D01] – 04
[D] – 4
[FNn] - Friday

Para formatar a hora, podemos utilizar os seguintes formatos:
[H01] – 04
[H] – 4

Para formatar minutos, podemos utilizar os seguintes formatos:
[m01] – 04
[m] – 4

Para formatar segundos, podemos utilizar os seguintes formatos:
[s01] – 04
[s] – 4

Para formatar AM/PM, podemos utilizar os seguintes formatos:
[PN] – PM
[Pn] – Am

 Para formatar GMT, podemos utilizar os seguintes formatos:
[z] -  GMT+03:00

add-dayTimeDuration-to-dateTime


Esta função retorna um novo dateTime com o resultado do valor de duração passado por parâmetro adicionado a data.

Utilização:
xp20:add-dayTimeDuration-from-dateTime(dateTime as string, duration as string)
  • dateTime = String da data a ser adicionada a duração.
  • duration = Duração a ser adicionada (dia, mês, ano, hora, minutos, segundos).
Duração:
P1D - um dia
P7D - uma semana
P10D - dez dias
P1M - um mês
P1Y1M1DT1H - Um ano, um mês, um dia e uma hora
PT5M - 5 minutos
PT10S - 10 segundos

Ex:
xp20:add-dayTimeDuration-to-dateTime(xp20:current-date(), 'P10D')

subtract-dayTimeDuration-from-dateTime


Esta função retorna um novo dateTime com o resultado do valor de duração passado por parâmetro subtraído da data.
 Utilização:
xp20:subtract-dayTimeDuration-from-dateTime(dateTime as string, duration as string)
  • dateTime = String da data a ser adicionada a duração.
  • duration = Duração a ser adicionada (dia, mês, ano, hora, minutos, segundos).
Duração:
P1D - um dia
P7D - uma semana
P10D - dez dias
P1M - um mês
P1Y1M1DT1H - Um ano, um mês, um dia e uma hora
PT5M - 5 minutos
PT10S - 10 segundos

Ex:
xp20:subtract-dayTimeDuration-from-dateTime(xp20:current-date(), 'P10D')

Obs: para as funções de adição e subtração, se o parâmetro de duração for negativo, a função fará o inverso, na adição irá subtrair e na subtração irá adicionar.