Semana passada a Oracle disponibilizou para download o "Oracle SOA Suite 12c".
Segue o link do blog "Oracle SOA Suite - TEAM Blog" onde eles disponibilizaram alguns materiais do que há de novo no SOA Suite.
Algumas coisas que vi que há de novo e que me interessaram são:
- Instalador único. No mesmo installer já vem tudo que precisamos (Weblogic, RCU, BUS, JDevelover e SOA Suite)
- Oracle Cloud Adapter
- Unificação de desenvolvimento do BUS. JDeveloper com o plugin para desenvolvimento para o BUS
Segue o link que também está disponível no blog do team oracle do que tem de novo. (What's new in Oracle SOA Suite 12c)
segunda-feira, 30 de junho de 2014
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)
Assinar:
Postagens (Atom)