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.
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
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
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:
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".
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:
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)
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"/>
<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"/>
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"
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:
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
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).
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.
Referencia : SOA Suite 11g developer guide - Date Functions
Assinar:
Postagens (Atom)






























