Desenvolvimento - Web Services

Implementando um Processo de Negócio com BPEL

O presente trabalho tem como objetivo apresentar um panorama geral sobre a discussão que envolve a construção de um Processo de Negócios com BPEL – Business Process Execution Language, usando as ferramentas disponibilizadas pela Oracle, bem como o uso de um Serviço Web criado com a ferramenta Visual Studio 2008.

por Fabrício Rocha



RESUMO

O presente trabalho tem como objetivo apresentar um panorama geral sobre a discussão que envolve a construção de um Processo de Negócios com BPEL –Business Process Execution Language, usando as ferramentas disponibilizadas pela Oracle, bem como o uso de um Serviço Web criado com a ferramenta Visual Studio 2008.

Esse tutorial é resultado dos trabalhos de um projeto do programa Ensinar com Pesquisa da Universidade de São Paulo, sob orientação do professor Doutor Marcelo Fantinato, do curso de Sistemas de Informação.

Palavra(s)-chave:Serviço Web, BPEL, Oracle.

1. INTRODUÇÃO

A linguagem WS-BPEL (Web Services Business Process Execution Language) é um padrão criado pela OASIS (Organization for the Advancement of Structured Information Standards) para a execução de processos de negócios, descrevendo como ocorre o relacionamento entre os diversos Serviços Web participantes de uma composição [2]. Ela permite a composição de Serviços Web com o objetivo de realizar funcionalidades mais complexas [1].

A primeira versão de BPEL foi desenvolvida em agosto de 2002 pela IBM, BEA e Microsoft, após a SAP e a Siebel juntarem ao consorcio que estavam desenvolvendo foi lançado em março de 2003 a versão 1.1 [4] Apud [16]. Em abril de 2003 a OASIS recebeu uma versão para padronização e em abril de 2007 foi lançado oficialmente a versão 2.0 com o nome de WS-BPEL 2.0 [30] Apud [2].

A programação com WS-BPEL é parecida com a programação das linguagens de programação já existentes, na medida me que ela oferece determinados tipos de construções como estruturas de repetição, estruturas condicionais, variáveis e atribuições. Este fato possibilita que o Processo de Negócio seja visto como um algoritmo. Porém, o uso desses recursos é bem simples e limitado, objetivando a facilidade de uso e aprendizagem da mesma [2].

Uma composição de serviços especificada em WS-BPEL é vista como serviço, ou seja, quem usou um Processo de Negócio definido em WS-BPEL não tem a ciência que na verdade está usando vários serviços para realizar uma determinada operação. Por ser um Serviço Web, a composição necessita ter sua interface baseada no padrão WSDL, troca de mensagens com outros Serviços Web através do padrão SOAP e pode ser cadastrado em um repositório UDDI para fins de consulta. O padrão WS-BPEL assume que os serviços participantes da composição estejam descritos usando WSDL [2].

Um processo BPEL pode ser síncrono ou assíncrono. Um processo BPEL síncrono bloqueia o cliente (aquele que está usando o processo) até que o processo termine e retorne um resultado para o cliente. Um processo assíncrono não bloqueia o cliente. Em vez disso, ele usa um retorno de chamada para retornar o resultado (se houver). Geralmente, os processos assíncronos são usados para processos de longa duração, e os síncronos são usados para processos que retornam um resultado em um tempo relativamente curto. Se um processo BPEL usa serviços Web assíncronos, o próprio processo geralmente também é assíncrono [3].

A propriedade mais importante de WS-BPEL está relacionada à invocação de Serviços Web. BPEL permite que as operações de um Serviço Web sejam invocadas sincronamente ou assincronamente de maneira mais fácil. Estas operações podem ser invocadas seqüencialmente ou paralelamente. As funcionalidades mais importantes de WS-BPEL são listadas a seguir:

    Descrever a lógica dos processos de negócio através da composição de serviços;
  • Tratar as invocações de operações de modo síncrono ou assíncrono;
  • Invocar serviços de maneira seqüencial ou paralela.
  • Prover mecanismos para tratar erros durante a invocação de serviços;
  • Manter atividades de longa duração (transacionais), assim como interrompe-las;
  • Reiniciar uma composição que foi interrompida ou apresentou erros;
  • Agendar a execução de atividades e definir a ordem em que elas irão executar [2].

1.1 OBJETIVOS DO TUTORIAL

Esse tutorial tem como objetivo descrever os principais componentes de infra-estrutura necessários para se construir (através de exemplos práticos) um Processo de Negócio com a linguagem WS-BPEL (Web Services Business Process Execution Language), usando as ferramentas disponibilizadas pela Oracle, bem como o uso de um Serviço Web criado com a ferramenta Visual Studio 2008.

1.2 ESTRUTURA DO TUTORIAL

Do ponto de vista estrutural, este tutorial organiza-se em seis seções que terão seus assuntos apresentados a seguir.

Na seção 1, introdutória, é apresentado o contexto geral em que o assunto deste tutorial esta inserido, bem como suas motivações e objetivos.

Na seção 2 são apresentados os conceitos fundamentais de WS-BPEL, bem como uma breve descrição sobre sua estrutura, suas primitivas e o funcionamento básico do BPEL.

Na seção 3 é apresentada a preparação dos recursos necessários para que seja possível criar e executar o exemplo prático de Processo de Negócio desse tutorial.

Na seção 4 é apresentada a execução de um exemplo prático de Processo de Negócio em WS-BPEL usando as ferramentas disponibilizadas pela Oracle, bem como o uso de um Serviço Web criado com a ferramenta Visual Studio 2008.

Na seção 5 é apresentado o código da implementação do Processo de Negócio em BPEL.

2. CONCEITOS FUNDAMENTAIS DE WS-BPEL

Conforme a referencia [1] temos que: Existem alguns elementos fundamentais da linguagem WS-BPEL que podem ser usados tanto para a especificação de processos de negócio quanto para a especificação de protocolos de interação de negócio. Além desses conceitos, existem algumas extensões requeridas para cada um desses dois usos específicos. A estrutura geral de um Processo de Negócio especificado em WS-BPEL é formada por quatro seções:PartnerLinks,Variables,FaultHandlerseActivities, conforme descritas a seguir:

    PartnerLinks: seção que define os diferentes parceiros (partes envolvidas) que interagem com o Processo de Negócio durante toda sua execução. Eles são usados para identificar a funcionalidade que deve ser oferecida por cada serviço parceiro. As ligações de parceiros (partner link) devem estar associadas a um tipo de ligação entre parceiros (partner link type) definidos na especificação de serviços Web em WSDL;
    Variables: seção que define as variáveis de dados usadas pelo Processo de Negócio. As definições são feitas em termos de tipos de mensagem WSDL, elementos ou tipos simples de esquemas XML. Elas são usadas para manter os dados de estado e o histórico do processo com base nas mensagens trocadas. As variáveis devem estar associadas a tipos de mensagens (messages) definidos na especificação WSDL;
    FaultHandlers: seção que contém os tratadores de falhas que definem as atividades a ser executadas em resposta às falhas resultantes da invocação de serviços de avaliação e de aprovação;
    Activities:seção que contém a descrição do comportamento normal para a execução do Processo de Negócio. Existem basicamente dois tipos de atividades:
    Basic Activity:tipo de atividade usado para executar alguma operação. Algumas dessas atividades básicas envolvem a interação com algum parceiro, as quais são:invoke,receiveereply. Outras dessas atividades básicas são executas sem a interação com qualquer parceiro, as quais são:wait,terminate,assign,empty,throwecompensate;
    Structured Activity:tipo de atividade usado para agrupar atividades básicas (basic activities) dentro de algumas estruturas de fluxo.Tais atividades são:while,pick,flow,sequence,switchescope.


As primitivas que formam a gramática da linguagem BPEL são interpretadas e executadas por um mecanismo de orquestração (MACHAEL, 2007 apud [4]).

A seguir, estão descritas de maneira sucinta as primitivas XML mais usadas numa composição de serviço conforme citadas acima e na referencia [4].

Tabela 1 – Primitivas básicas usadas em uma composição de serviço

PRIMITIVA

SIGNIFICADO

<invoke>

Invoca um Serviço Web

<receive>

Aguarda a resposta de um cliente

<reply>

Gera resposta síncrona

<assign>

Manipula dados

<throw>

Indica faltas ou exceções

<wait>

Espera por certo tempo

<terminate>

Finaliza um processo

<sequence>

Seqüência de atividades a serem invocadas

<flow>

Usada para definir um conjunto de atividades que podem ser invocadas em paralelo

<if>

Seleção

<while>

Repetição

<pick>

Aguarda por um evento

2.1 SÍNTESE DO FUNCIONAMENTO DO BPEL

Conforme referencia [4] pode-se resumir o funcionamento do BPEL da seguinte maneira:

·Partner links são partes que interagem com o processo BPEL.

·PortTypes são usados para acesso a serviços do próprio processo BPEL.

BPEL funcionamento
Figura 2.1.1 – Funcionamento do BPEL

3. PREPARAÇÃO DOS RECURSOS NECESSÁRIOS PARA CRIAR E EXECUTAR UM PROCESSO DE NEGÓCIO

O objetivo dessa seção é executar a instalação dos recursos necessários para iniciar a criação de um exemplo prático e simples de um Processo de Negócio usando as ferramentas da Oracle disponíveis em seu site, bem como detalhar cada etapa de execução conforme mencionado anteriormente.

Dessa forma, são primeiramente apresentados na Tabela 1 os softwares, e as respectivas versões, usados para realizar esse exemplo prático.

Tabela 1 – Softwares necessários para esse tutorial

QUADRO SÍNTESE DOS SOFTWARES USADOS

Microsoft Windows XP Professional versão 2002 Service Pack 3

Microsoft Visual Studio 2008

Internet Information Services (IIS6) Manager

Internet Explorer 8

Oracle Database 10g Edition

WebLogic Server 11gR1

Repositório Utilitário de Criação (RCU) – versão 11.1.1.1.0

SOA Suite – versão 11.1.1.1.0

JDeveloper – versão 11.1.1.1.0

As etapas a serem cumpridas nesta seção são:

1.Criação de conta na Oracle para acesso aos softwares necessários;

2.Downloadsdos recursos necessários para funcionalidade desta execução;

Existem várias maneiras para se intalar o Visual Studio, A seguir é apenas sugerida uma maneira possível, baseada em orientações extraídas de [5]:

Passo 1:Criar uma conta OTN (Oracle Technology Network) para ter acesso aosdownloadsdos pacotes de instalação necessários para realizar as tarefas desse tutorial. A inscrição é gratuita e pode ser feita no link:Link.


Passo 2:Clicar no botão “Free Download” que está no localizado no canto superior direito da página abaixo, conforme apresentado na Figura 3.1.1:Link.



Figura 3.1 – Botão “Free Download

Passo 3:localizar e efetuar osDownloadsdos pacotes abaixo relacionados e descritos:

1.Oracle Database 10g Express Edition:A suite SOA requer uma base de dados para persistência. A versão Express Edition foi escolhida para o ambiente de desenvolvimento em questão. O downloadpode ser feito em:Link

2.WebLogic Server:A instalação do WebLogic proporciona o ambiente JEE (assim como o provedor JMS) necessários para executar o SOA Suite (uma aplicação JEE). Escolher o “Oracle WebLogic Server 11gR1 (10.3.1)Package Installer” (ou a versão correspondente). O nome do pacote é wls1031_win32.exe, com 570MB. O downloadpode ser feito em:Link;

3.Repositório Utilitário de Criação ou RCU:O RCU ira definir os esquemas de banco de dados que o SOA Suite usa para realizar suas tarefas, tais como auditoria e etc. O nome do pacote é: ofm_rcu_win32_11.1.1.1.0_disk1_1of1.zip com 282MB de tamanho (ou a versão correspondente). O downloadpode ser feito em:Link;

4.SOA Suite:Este é a aplicação JEE real que contém os motores SOA que serão implantados no WebLogic. Escolher o"SOA Suite, Genericpackage" (ou a versão correspondente),seu nome é ofm_soa_generic_11.1.1.1.0_disk1_1of1.zip com 1,5 GB de tamanho. O downloaddesse arquivo pode ser feito em:Link

5.Jdeveloper:O Jdeveloper é a IDE usada para criar e implantar a camposição SOA. Escolher o “Studio Edition”. O nome do pacote é jdevstudio11111install.exe com 934MB de tamanho. O downloadestá em:Link.

3.1 INSTALAÇÃO DO ORACLE SUITE 11gR1 NO WINDOWS

A seguir será descrito um resumo da instalação de cada componente. Como as ferramentas em questão estão em constate atualização, alguns detalhes podem sofrer variações.


Passo 1:Instalar o banco de dadosOracle Database 10g Express Edition (XE). Caso exista alguma dúvida quanto a essa instalação, o conteúdo do link a seguir pode ajudar:Link


OBS.:Verifique a Requisitos de hardware no site da Oracle antes de instalar todos os componetes.

Passo 2:Executar o utilitário de criação do repositório (RCU) para criar os esquemas de banco de dados:

1.Descompactar o pacote ofm_rcu_win32_11.1.1.1.0_disk1_1of1.zip em C:\ORACLE\11gR1 (por exemplo).

2.Executar C:\ORACLE\11gR1\rcuHome\BIN\rcu.bat que inicia a instalação conforme apresentado na Figura 3.1.1

image_4
Figura 3.1.1 – Tela inicial de configuração do RCU

3.Ignorar a mensagem de aviso (caso aparece alguma, conforme a Figura 3.1.2), pois ela apenas indica que o Oracle XE não é certificado para uso em produção.


Figura 3.1.2 – Tela de aviso sobre uso do Oracle XE em produção

4.Selecionar “SOA infra-estrutura” e inserir prefixo conforme Figura 3.1.3.


Figura 3.1.3 – Tela de seleção de componentes

5.Aceitar tudo e depois criar as tabelas.

Passo 3:Para instalar o WebLogic deve-se:

1.Executar o arquivo “wls1031_win32.exe”;

    Escolher um local para sua instalação, por exemplo: C:\ORACLE\11gR1\MW_HOME. A Figura 3.1.4 mostra a tela para a escolha do caminho de instalação do WebLogic


Figura 3.1.4 – Tela de escolha do caminho de instalação do WebLogic

3.Digitar seu e-mail se desejar receber atualizações de segurança;

    Escolher a instalação típica;
  1. Aceitar todos os outros padrões.

Passo 4:Para instalar o SOA Suite deve-se:


    Figura 3.1.5 – Tela de escolha do diretório “home”

    Passo 5:Para configurar o SOA Suite deve-se:


      Figura 3.1.5 – Tela de configuração do domínio

      4.Escolher um nome para o domínio;

        a)Se foi escolhido o prefixo padrão de “DEV_” durante a instalação do RCU, selecionar todos os esquemas e, em seguida atualizar:

        ·Serviço (em geral, XE é o padrão);

        ·Host (nesse caso preencher como: localhost);

        ·Porta (1521 é o padrão XE).

        b)Se não foi escolhido o prefixo padrão, então além dos anteriores percorrer cada esquema para atualizar o prefixo: Conferir um esquema. Fazer a mudança. Desmarcar o esquema, verificar o próximo e assim por diante.

          managed SOA server:C:\ORACLE\11gR1\MW_HOME\user_projects\domains\dmd_soa_domain1\
          bin\startManagedWebLogic.cmd soa_server1;

          3.Para verificar se os servidores iniciaram corretamente acessar a URL:Link.

          Passo 7:Para testar os consoles deve-se:


            Figura 3.1.6 – Tela do Enterprise Manager

            Passo 9:Para instalar o Jdeveloper deve-se:


              Figura 3.1.7 – Opção “Check for Updates” do menu “Help

              3.Assegurar que as opções “Oracle Fusion Middleware Products” e “Official Oracle Extensions e Updates” estão selecionados e clicar em “Avançar”;

              4.Assegurar que a opção “Oracle SOA Composite Editor” esteja selecionada e clicar em “Avançar” conforme apresentado na Figura 3.1.8;

              Figura 3.1.8 – Opção “Oracle SOA Composite” da tela “Updates

              5.Autenticar-se com o login OTN criado anteriormente;

O Processo de Negócio que será criado irá usar o Serviço Web criando no tutorial disponível em:Linkque tem como objetivo ler uma String e exibi-la.

O Processo de Negócio irá concatenar uma String a String do Serviço Web e retorná-las como resultado.

A seguir será exibido como implementar o Processo de Negócio.

Passo 1:Executar o Microsoft Visual Studio 2008, clicar em File > Open Project e selecionar arquivo “PrimeirowebService”correspondente ao Serviço Web criando no tutorial citado anteriormente. Será apresentada uma tela semelhante a da Figura 5.1.1.


Figura 4.1.1

Passo 2:Altere o método para o código a seguir:

[WebMethod(Description = "Primeiros testes de WebService")]
public stringTestando(stringminha_pagina)
{
Stringa = "StringDoWebservice";
returnminha_pagina + a;
}

Essa alteração será útil para identificar a concatenação feita no Processo de Negócio.

Passo 3:Localizar o “Solution Explorer” e clicar com o botão direito no mouse no item “servico.asmx” e selecionar a opção “Set As Start Page” conforme a Figura 4.1.2.


Figura 4.1.2

Passo 4:Executar o Serviço Web e deixa o “ASP NET Development Server” que é parte integrante da plataforma .NET 2.0 carregar para que seja possível manipulá-lo pelo Processo de Negócio. A Figura 4.1.3 mostra um exemplo de como seria a tela durante a execução.


Figura 4.1.3

Passo 5:Clicar em “Descrição de Serviço” e copiar o endereço da URL do WSDL, pois esse será usado durante a criação do Processo de Negócio. A Figura 4.1.4 exemplifica o modelo de endereço URL gerado o qual pode aparecer com o número de portas diferentes em cada máquina.


Figura 4.1.4


Passo 6:Inicializar os servidores conforme o “Passo 6” da “seção 3.1”.

Passo 7:Executar o arquivo “jdeveloper.exe” ou no menu iniciar > Programas clicar em “JDeveloper Studio 11.1.1.1.0”, conforme apresentado na Figura 4.1.5.


Figura 4.1.5

Passo 8:Criar uma nova aplicação conforme a Figura 4.1.6.


Figura 4.1.6

Passo 8:Escolher um nome e um diretório para localização da aplicação conforme Figura 4.1.7.


Figura 4.1.7

Passo 9:Clicar com o botão direito do mouse em “Project1” e criar um novo “SOA Composite” conforme Figura 4.1.8.



Figura 4.1.8


Passo 4:Indicar um nome para o “Composite” conforme Figura 4.1.9.


Figura 4.1.9

Passo 10:Em “Component Palette” localizada no canto superior direito da tela, selecionar o componente “BPEL Process”conforme Figura 4.1.10 e arrastá-lo até a área “Components” localizado na área central da tela.


Figura 4.1.10

Passo 11:Informar o nome do processo e selecionar o “template”Synchronous BPEL Process” e clicar em “OK” conforme a Figura 4.1.11.



Figura 4.1.11

O resultado dessa operação pode ser visualizado na Figura 4.1.12.


Figura 4.1.12

Passo 12:Aplicar um duplo clique no item “ProcessoBPEL” conforme a Figura 4.1.13.



Figura 4.1.13

O resultado dessa operação pode ser visualizado na Figura 4.1.14


Figura 4.1.14

Passo 13:Na paleta “BPEL Services” arraste para dentro do diagrama o “Partner Link”conforme Figura 4.1.15.



Figura 4.1.15

Passo 14:Para configura o “Partner Link”deve-se:


    Figura 4.1.16

    Passo 15:Na paleta “BPEL Activities and Components”clicar em “Invoke”e arrastar para dentro do diagrama e posicionar depois da atividade “receiveInput”conforme apresentado na Figura 4.1.17.


    Figura 4.1.17

    Passo 16:Para configurar o “Invoke”deve-se:


      Figura 4.1.18

      2.Preencher um nome ou manter o padrão;

        ) e clicar em “OK” para preencher o campo “Input” conforme Figura 4.1.19;


      Figura 4.1.19

      5.Para criar as variáveis de saída basta clicar no sinal de mais () e clicar em “OK”para preencher o campo “Output”conforme Figura 4.1.20;


      Figura 4.1.20

      6.Assegura que a tela final fique semelhante à Figura 4.1.21;


      Figura 4.1.21

      7.Clicar em “OK”para finalizar. Se clicar em “Apply”antes de “OK” o JDeveloper faz a validação dos valores informados e se tudo estiver correto o ícone de “Warning”ou “Error”sumirá.

      Passo 17:Na paleta “BPEL Activities and Components” arrastar a atividade “Assing” de forma a ficar entre o “receiveInput”e “Invoke_1” conforme a Figura 4.1.22.


      Figura 4.1.21

      Passo 18:Para configurar o “Assign_1” deve-se:

        );
      1. Clicar no sinal de mais ();
      2. Selecionar “Copy Operation”;
      3. Selecionar “Expression” em “Type”;
      4. Clicar no botão “XPath Expression Builder” ();
      5. Em “Fuctions”selecionar “String Functions” conforme Figura 4.1.22;


      Figura 4.1.22

      7.Clicar em “concat”e digitar ou construir o comando da Figura 4.1.22. A última “String”adicionada ao comando é automaticamente preenchida quando se efetua um duplo clique no item “client:input” localizado em “BPEL Variables”conforme a Figura 4.1.23;


      Figura 4.1.23

      8.Clicar em “OK”;

      9.Selecionar “client:input”em “TO”conforme Figura 4.1.24;


      Figura 4.1.24

      10.Clicar em “OK”;


        Figura 4.1.25


        Passo 19:Na paleta “BPEL Activities and Components” arrastar a atividade “Assing” de forma a ficar entre o “Assign_1” e “Invoke_1” conforme a Figura 4.1.26.


        Figura 4.1.26

        Passo 20:Para configurar o “Assign_2”deve-se:

          );
        1. Clicar no sinal de mais ();
        2. Selecionar “Copy Operation”;
        3. Selecionar “client:input”em “inputVariable”conforme Figura 4.1.27;
        4. Selecionar “ns1:minha_pagina”em “Invoke_1_Testando_InputVariable”conforme Figura 4.1.27;

        6.Clicar em “OK”;


        Figura 4.1.27

        7.Clicar em “OK”novamente para finalizar conforme a Figura 4.1.28.


        Figura 4.1.28


        Passo 21:Para configurar o “Assign_3”deve-se:

          );
        1. Clicar no sinal de mais ();
        2. Selecionar “Copy Operation”;
        3. Selecionar “ns:1:TestandoResult” em “invoke_1_Testando_OutputVariable” conforme Figura 4.1.29;
        4. Selecionar “client:result”em “OutputVariable”conforme Figura 4.1.29;
        5. Clicar em “OK”;


        Figura 4.1.29

        7.Clicar em “OK” novamente para finalizar conforme a Figura 4.1.30.


        Figura 4.1.30

        Passo 22:Salvar as alterações.

        Passo 23:O diagrama completo está na Figura 4.1.31


        Figura 4.1.31

        Passo 24:Caso não exista uma conexão com o servidor “Oracle WebLogic Server”pronta, criar uma seguindo os passos indicados em [8];

        Passo 25:Para implantar o projeto deve-se:


          Figura 4.1.32

          3.Selecionar em “Overwrite any existing composites with the same revision ID”e clicar em “OK”;


            Figura 4.1.33

            5.Se tudo ocorrer bem o Jdeveloper exibirá uma mensagem conforme a Figura 4.1.34;


            Figura 4.1.34

            Passo 25:Abrir um navegador e acessar o endereço http://localhost:7001/em correspondente ao “Oracle Enterprise Manager 11g” conforme a Figura 4.1.35.



            Figura 4.1.35

            Passo 26:Efetuar a autenticação no Servidor.

            Passo 27:Navegar na árvore do domínio até o item “SOA”, selecionar “soa-infra (soa_server1)”e por fim, selecionar o projeto criado conforme a Figura 4.1.36;



            Figura 4.1.36

            Passo 28:Para testar o Processo BPEL deve-se:


              Figura 4.1.37

              3.Clicar em “Testar Web Service” localizado no canto inferior direito da tela;

              4.A resposta para o exemplo em questão está na Figura 4.1.38.


              Figura 4.1.38

5. IMPLEMENTAÇÃO DO PROCESSO DE NEGÓCIO EM BPEL

O código implementado em BPEL para o Processo de Negócio usado no tutorial é:

<?xml version = "1.0" encoding = "UTF-8" ?>
<!--
////////
  Oracle JDeveloper BPEL Designer 
  Purpose: Synchronous BPEL Process
///////
-->
<process name="ProcessoBPEL"
               targetNamespace="http://xmlns.oracle.com/AplicacaoSOA/Project1/ProcessoBPEL"
               xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
               xmlns:client="http://xmlns.oracle.com/AplicacaoSOA/Project1/ProcessoBPEL"
               xmlns:ora="http://schemas.oracle.com/xpath/extension"
               xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
               xmlns:xpath20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
               xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
               xmlns:ui="http://xmlns.oracle.com/soa/designer/"
               xmlns:task="http://xmlns.oracle.com/bpel/workflow/task"
               xmlns:taskservice="http://xmlns.oracle.com/bpel/workflow/taskService"
               xmlns:wfcommon="http://xmlns.oracle.com/bpel/workflow/common"
               xmlns:wf="http://schemas.oracle.com/bpel/extension/workflow"
               xmlns:xdk=http://schemas.oracle.com/bpel/extension/xpath/function/xdk
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
               xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
               xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
               xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
         xmlns:ns1="http://matrix/">
  <!-- 
    ////
      PARTNERLINKS                                                      
      List of services participating in this BPEL process               
   /////
  --> 
  <partnerLinks>
    <!-- 
      The "client" role represents the requester of this service. It is 
      used for callback. The location and correlation information associated
      with the client role are automatically set using WS-Addressing.
    -->
    <partnerLink name="processobpel_client" partnerLinkType="client:ProcessoBPEL" 
	myRole="ProcessoBPELProvider"/>
    <partnerLink name="PartnerLink_1" partnerRole="servicoSoap_Role"
                 partnerLinkType="ns1:servicoSoap_PL"/>
  </partnerLinks>

  <!-- 
    ////
      VARIABLES                                                        
      List of messages and XML documents used within this BPEL process 
    ////
  -->
  <variables>
    <!-- Reference to the message passed as input during initiation -->
    <variable name="inputVariable" messageType="client:ProcessoBPELRequestMessage"/>

    <!-- Reference to the message that will be returned to the requester-->
    <variable name="outputVariable" messageType="client:ProcessoBPELResponseMessage"/>
    <variable name="Invoke_1_Testando_InputVariable"
              messageType="ns1:TestandoSoapIn"/>
    <variable name="Invoke_1_Testando_OutputVariable"
              messageType="ns1:TestandoSoapOut"/>
  </variables>

  <!-- 
    ////
     ORCHESTRATION LOGIC                                               
     Set of activities coordinating the flow of messages across the    
     services integrated within this business process                  
    ////
  -->
  <sequence name="main">

    <!-- Receive input from requestor. (Note: This maps to operation defined in ProcessoBPEL.wsdl) -->
    <receive name="receiveInput" partnerLink="processobpel_client" 
	portType="client:ProcessoBPEL" operation="process" variable="inputVariable" createInstance="yes"/>

    <!-- Generate reply to synchronous request -->
    <assign name="Assign_1">
      <copy>
        <from expression="concat("StringDoProcesso:", 
		" ",bpws:getVariableData("inputVariable","payload","/client:process/client:input") )"/>
        <to variable="inputVariable" part="payload"
            query="/client:process/client:input"/>
      </copy>
    </assign>
    <assign name="Assign_2">
      <copy>
        <from variable="inputVariable" part="payload"
              query="/client:process/client:input"/>
        <to variable="Invoke_1_Testando_InputVariable" part="parameters"
            query="/ns1:Testando/ns1:minha_pagina"/>
      </copy>
    </assign>
    <invoke name="Invoke_1" inputVariable="Invoke_1_Testando_InputVariable"
            outputVariable="Invoke_1_Testando_OutputVariable"
            partnerLink="PartnerLink_1" portType="ns1:servicoSoap"
            operation="Testando"/>
    <assign name="Assign_3">
      <copy>
        <from variable="Invoke_1_Testando_OutputVariable" part="parameters"
              query="/ns1:TestandoResponse/ns1:TestandoResult"/>
        <to variable="outputVariable" part="payload"
            query="/client:processResponse/client:result"/>
      </copy>
    </assign>
    <reply name="replyOutput" partnerLink="processobpel_client" 
	portType="client:ProcessoBPEL" operation="process" variable="outputVariable"/>
  </sequence>
</process> 

6. REFERÊNCIAS BIBLIOGRÁFICAS

[1] FATINATO, M.Uma abordagem Baseada em Características para o Estabelecimento de Contratos Eletrônicos para Serviços Web. Tese de Doutorado, Unicamp, 2007.

[2] DAMASCENO, J.C.Introdução à Composição de Serviço Web. Disponível em:Link. Acesso em: Acesso em: 01 dez. 2009.

[3] KOVAL, A.Guia do desenvolvedor para BPEL Designer. Disponível em:Link. Acesso em: Acesso em: 10 ago. 2009.

[4] RABELO, R.J.BPEL – Business Process Execution Language.Disponível em:Link. Acesso em: 21 set. 2009.

[5] DEMED.Installing Oracle SOA Suite 11gR1 on Windows.Disponível em:Link. Acesso em: 10 dez. 2009.

[6] FURUTANI, R.Introdução ao BPEL Utilizando o Oracle SOA Suite 10g. Disponível em :Link. Acesso em: 13 nov. 2009.

[7] JUNIOR, M. P. B.Desenvolvendo Serviços Web: Guia rápido usando Visual Studio .Net com Banco de Dados SQL Server.Ciência Moderna, 2005.

[8] ORACLE.Creating an Application Server Connection. Disponível em:Link. Acesso em: 05 jan. 2010.

Fabrício Rocha

Fabrício Rocha