Usando o Mapeador BPEL para editar os processos BPEL
Última atualização: 15 de Dezembro de 2006
Contribuição de Victoria Zhukovskaya, mantido por Irina Filippova
Este tutorial ilustra como trabalhar com as expressões XPath usando o mapeador BPEL. O mapeador BPEL é um componente do recurso BPEL Designer do NetBeans Enterprise Pack. Usando as extensas capacidades do mapeador BPEL, você pode trabalhar com predicados, usar as funções XPath e copiar as variáveis dentro de um processo comercial.
O mapeador BPEL permite adicionar e editar as funções específicas de alguns elementos do processo comercial, como Atribuir, If, o elemento ElseIf de If, Para cada, Repetir até, While e Esperar. Cada um desses elementos pode possuir tipos específicos de expressões, como atribuições de cópia, expressões condicionais e funções temporais. Por exemplo, as atividades If, elemento ElseIf de If, e Repetir até podem ter expressões condicionais, o elemento Atribuir contém expressões de cópia, o elemento Esperar pode ter expressões de duração e a atividade Para cada pode ter expressões com valores inteiros. Usando a interface gráfica do mapeador BPEL, você pode realizar também cálculos atribuindo operações e funções XPath a variáveis e a partes, atributos e elementos XSD.
Pré-requisito
Este tutorial presume que você tenha algum conhecimento básico ou experiência de programação com as tecnologias SOA e o NetBeans IDE.
Requisitos do sistema
Este tutorial presume que o seu sistema atende aos requisitos especificados no tópico Requisitos do sistema das Notas de versão do NetBeans Enterprise Pack 5.5.
Software necessário para o tutorial
Antes de começar, você deve instalar o seguinte software em seu computador:
- NetBeans IDE 5.5 com NetBeans Enterprise Pack 5.5 (download)
Conteúdo
superior
Configurando o ambiente do tutorial
Antes de implantar o seu aplicativo, o servidor de aplicativos Sun Java System e o tempo de execução JBI devem estar configurados corretamente e em execução.
Consulte a seção Configurando o ambiente do tutorial do tutorial Um processo BPEL síncrono simples para saber como iniciar o servidor de aplicativos.
superior
Criando o projeto SynchronousSample
Para este tutorial, usaremos o projeto de amostra do processo BPEL síncrono.
- No menu principal do IDE, escolha Arquivo > Novo projeto.
- Na lista Categorias, expanda o nó Amostras e selecione o nó Service Oriented Architecture.
- Na lista Projetos, selecione Processo BPEL síncrono.
- Clique em Próximo.
- Aceite os padrões de Nome do projeto, SynchronousSample e Local do projeto ou altere os valores de acordo com as suas preferências.
- Clique em Finalizar.
A janela Projetos agora contém dois nós de projeto: um nó do projeto do módulo BPEL chamado SynchronousSample e um projeto de aplicativo composto chamado SynchronousSampleApplication.
superior
Explorando a janela Mapeador BPEL
- Na janela Projetos, expanda o nó do projeto SynchronousSample e o nó Arquivos do processo.
- Clique duas vezes no arquivo SynchronousSample.bpel.
O IDE abre a exibição Design do arquivo BPEL.
- No diagrama, selecione o elemento Atribuir1.
A janela Mapeador BPEL do elemento Atribuir1 se abre na parte inferior do IDE.
- Expanda o nó inputVar do lado esquerdo da janela Mapeador BPEL e o nó outputVar do lado direito.
Observe que, para o elemento Atribuir1, o valor do parâmetro de entrada é copiado no parâmetro de saída.

Clique para aumentar
Vejamos o código-fonte da operação de cópia. Para ver o código-fonte, clique com o botão direito do mouse no elemento
Atribuir1 no diagrama e selecione Ir para o código-fonte no menu pop-up.
Na exibição Fonte, você vê o seguinte código que copia o valor de entrada paramA no valor de saída paramA.
<copy>
<from>$inputVar.inputType/paramA</from><to>$outputVar.resultType/paramA</to>
</copy>
Exclua essa operação dessa janela do mapeador BPEL realizando as seguintes etapas:
- Clique na guia Design para abrir a exibição Design e selecione o elemento Atribuir1 no diagrama.
- Na janela Mapeador BPEL, clique na linha que conecta os parâmetros de entrada e saída e pressione o botão Excluir.
Na exibição Fonte, você pode verificar se o código não contém mais a operação de cópia: <assign name="Assign1"></assign>
- Clique em Salvar.
superior
Editando o projeto BPEL síncrono usando o mapeador BPEL
Os exemplos abaixo mostram como trabalhar com a função current-date e as seguintes funções de seqüência: concat e substring. Você usará também as literais string e number e aprenderá como usar as funções de conjunto de nós como count e last. Os exemplos mostram o uso das operações sum e equal.
Finalmente, você também criará dois casos de teste para testar o processo comercial modificado:
- Para o Caso de teste 0, os parâmetros de entrada são qualquer seqüência e o número de teste, e a saída é uma seqüência que contém a data atual e fuso horário.
- Para o Caso de teste 1, os parâmetros de entrada são o número de teste e um conjunto de nós, e a saída é uma seqüência que contém o número de elementos, sua soma e o último elemento.
Adicionando uma variável
Neste procedimento, você adiciona a variável todayIs do tipo de seqüência ao processo comercial. Esta variável é usada para armazenar o valor retornado da função current-date.
- Se o arquivo SynchronousSample.bpel não estiver aberto no IDE, abra-o agora.
- Na exibição Design, clique com o botão direito do mouse no elemento de processo SynchronousSample e selecione Adicionar > Variável.
- No campo Nome, digite todayIs.
- Expanda o nó Tipos incorporados e selecione o tipo seqüência.
- Clique em OK.
Selecione o elemento Atribuir1 no diagrama. A variável todayIs é exibida agora em ambos painéis de árvore da janela Mapeador BPEL.
Modificando esquema XML
Neste procedimento, você modifica as propriedades de um elemento existente do esquema XML e adiciona um novo elemento nTest. O elemento nTest é usado para definir que ramificação If será executada. Depois, você usará o elemento nTest em casos de teste.
- Na janela Projetos, expanda o nó do projeto SynchronousSample e o nó Arquivos do processo.
- Clique duas vezes no nó SynchronousSample.xsd.
O IDE abre a exibição Esquema do arquivo do esquema XML.
- Nas colunas da exibição Esquema, selecione o nó Tipos complexos > simpleProcess > seqüência > paramA.
Você pode clicar no botão da coluna
para certificar-se de que esteja no modo de coluna da exibição.
- Na janela Propriedades, defina o parâmetro Max Occurs como não vinculado para permitir o uso dos valores que sejam maiores ou iguais a 1.
Se a janela Propriedades não estiver aberta, selecione Janela > Propriedades ou pressione Ctrl-Shift-7.

Clique para aumentar
- Na terceira coluna da exibição Esquema, clique com o botão direito do mouse no elemento Seqüência e selecione Adicionar > Elemento no menu pop-up.
- Na caixa de diálogo Elemento, insira nTest no campo Nome e selecione a opção Usar tipo existente.
- Expanda o nó Tipos incorporados e selecione o tipo int.
- Clique em OK.

Clique para aumentar
- Escolha Arquivo > Salvar todos.
Editando o processo BPEL
Neste procedimento, você adicionará as atividades If e Atribuir ao processo comercial.
- Se o arquivo SynchronousSample.bpel não estiver aberto no IDE, abra-o agora.
- Na exibição Design, selecione o ícone de If na Paleta, arraste a seleção para a área de design e solte-a no diagrama, entre o elemento inicial e o elemento Atribuir1.
- Mova o elemento Atribuir1 para dentro do elemento If1 e solte-o na ramificação principal (sem mover).
- Na Paleta, selecione o ícone de Atribuir e solte-o no diagrama depois do elemento Atribuir1 dentro do elemento If .
Este elemento recebe o rótulo de Atribuir2.
- Clique com o botão direito do mouse no elemento If e escolha Adicionar Else If no menu pop-up.
- Na Paleta, selecione o ícone de Atribuir e solte-o no diagrama dentro da ramificação ElseIf .
Este elemento recebe o rótulo de Atribuir3.
Veja a ilustração abaixo e verifique se o diagrama do seu processo comercial é semelhante à ela.

Clique para aumentar
Adicionando condições ao elemento If
Você pode especificar as condições para a execução da atividade If seguindo os procedimentos abaixo. O parâmetro nTest define que ramificação If contém true (verdadeiro). Para a ramificação If, nTest é igual a 1 e para a ramificação ElseIf, nTest é igual a 2.
Para especificar as condições do elemento If1:
- Selecione o elemento If1 no diagrama.
- Na janela Mapeador BPEL, na barra de menus, selecione Número > Literal numérico e operadores > IGUAL.
São exibidas duas caixas de função no painel de mapeamento. Para a sua comodidade, arraste as caixas de função para que a caixa Literal numérico fique à esquerda e a caixa de função IGUAL à direita.
- No painel de árvore esquerdo da janela Mapeador BPEL, expanda os nós inputVar e inputType.
- Selecione o nó nTest no painel de árvore esquerdo e arraste o ponteiro até o parâmetro qualquer1 da caixa de função IGUAL.
- Na caixa de função Literal numérico, clique duas vezes no campo de entrada e insira 1.
- Selecione a caixa de função Literal numérico e arraste o ponteiro até o parâmetro qualquer2 da caixa de função IGUAL.
- Na caixa de função IGUAL, selecione o parâmetro booleano de retorno e arraste o ponteiro até o nó Resultado no painel de árvore direito da janela Mapeador BPEL.
- Selecione Arquivo > Salvar.

Clique em ampliar
Para especificar as condições do elemento ElseIf:
- Selecione o elemento ElseIf no diagrama.
- Siga as etapas de acordo com o procedimento anterior para If, porém insira 2 como o valor de Literal numérico.

Clique em ampliar
Adicionando expressões ao elemento Atribuir
Neste procedimento, você adicionará expressões aos elementos Atribuir1, Atribuir2 e Atribuir3 usando o Editor de fontes e o Mapeador BPEL.
Para adicionar expressões ao elemento Atribuir1:
- Selecione o elemento Atribuir1 no diagrama.
- Na janela Mapeador BPEL, na barra de menus, selecione Data-hora > Data atual.
A caixa de função Data atual é exibida no painel de mapeamento.
- Na caixa de função Data atual, selecione o parâmetro seqüência de retorno e arraste o ponteiro até o nó todayIs no painel de árvore direito da janela Mapeador BPEL.
- Selecione Arquivo > Salvar.

Clique para aumentar
- Clique com o botão direito do mouse no elemento Atribuir1 no diagrama e selecione Ir para o código-fonte no menu pop-up.
Na exibição Fonte, o operador copiar do elemento Atribuir1 copia o valor do parâmetro seqüência de retorno na variável todayIs como mostrado abaixo:
<assign name="Assign1"></assign>
<copy>
<from>current-date()</from>
<to variable="todayIs"/>
</copy>
</assign>
Para adicionar expressões ao elemento Atribuir2:
O elemento Atribuir2 formará a seguinte seqüência de saída: Olá! Hoje é 2006-11-17. O fuso horário é de 03:00.
Você trabalhará com a variável todayIs que contém a data atual no seguinte formato: AAAA-MM-DD FF:FF, na qual AAAA é o ano atual, MM é o mês, DD é a data e FF:FF é o fuso horário.
- Selecione o elemento Atribuir2 no diagrama.
- Na janela Mapeador BPEL, na barra de menus, selecione Seqüência > Concat e selecione duas vezes Seqüência > Subseqüência.
São exibidas três caixas de função no painel de mapeamento. Para sua comodidade, arraste as duas caixas Subseqüência à esquerda e a caixa Concatenar à direita.
- Para formar uma seqüência da variável todayIs que conterá somente uma data sem um fuso horário, realize as seguintes etapas:
- Selecione o nó todayIs no painel de árvore esquerdo e arraste o ponteiro até o parâmetro seqüência da primeira caixa de função Subseqüência.
- Clique duas vezes em número dentro da caixa de função e digite 1.
Esta é a posição inicial da seqüência todayIs que será copiada.
- Clique duas vezes em número? dentro da caixa de função e digite 10.
Este é o número de símbolos que serão copiados.
- Para formar uma seqüência da variável todayIs que conterá somente um fuso horário sem uma data, realize as seguintes etapas:
- Selecione o nó todayIs no painel de árvore esquerdo e arraste o ponteiro até o parâmetro seqüência da segunda caixa de função Subseqüência.
- Clique duas vezes em número dentro da caixa de função e digite 11.
Esta é a posição inicial da seqüência todayIs que será copiada.
Observação: Aqui, número? não é um parâmetro obrigatório para a função Subseqüência: sem nenhum parâmetro especificado, a função Subseqüência copia a seqüência da posição inicial ao final.
- Para formar uma seqüência de saída Concatenar, citada no início desta seção, realize as seguintes etapas:
- No painel de árvore esquerdo da janela Mapeador BPEL, expanda os nós inputVar e inputType.
- Selecione o nó paramA no painel de árvore esquerdo e arraste o ponteiro até o parâmetro seqüência1 da caixa de função Concatenar.
Esta ação copia a seqüência que está contida no parâmetro de entrada.
- Clique duas vezes em seqüência2 dentro da caixa de função Concatenar e digite Hoje é.
Este procedimento forma uma seqüência para uma saída, que será adicionada na seqüência de saída.
- Na primeira caixa de função Subseqüência, selecione o parâmetro seqüência de retorno e arraste o ponteiro até seqüência3 da caixa de função Concatenar.
Esta ação copia uma data atual sem um fuso horário.
- Clique duas vezes em seqüência4 dentro da caixa de função Concatenar e digite : O fuso horário é de.
Esta seqüência vem depois da data atual.
- Na segunda caixa de função Subseqüência, selecione o parâmetro seqüência de retorno e arraste o ponteiro até seqüência5 da caixa de função Concatenar.
Esta ação copia um fuso horário sem uma data atual.
- Clique duas vezes em seqüência6 dentro da caixa de função Concatenar e digite : .
Esta seqüência é adicionada depois de um fuso horário.
- No painel de árvore direito da janela Mapeador BPEL, expanda os nós outputVar e resultType.
- Na caixa de função Concatenar, selecione o parâmetro seqüência de retorno e arraste o ponteiro até o nó paramA no painel de árvore direito da janela Mapeador BPEL.
Esta ação copia o resultado da função Concatenar na saída.
- Selecione Arquivo > Salvar.

Clique para aumentar
- Clique com o botão direito do mouse no elemento Atribuir2 no diagrama e selecione Ir para o código-fonte no menu pop-up.
Na exibição Fonte, o operador copiar do elemento Atribuir2 forma uma seqüência que contém uma data atual e um fuso horário da seguinte forma:
<assign name="Assign2">
<copy>
<from>concat($inputVar.inputType/ns0:paramA, ' Hoje é ', substring($todayIs, 1, 10), '. O fuso horário é de ', substring($todayIs, 11), '.')</from>
<to>$outputVar.resultType/ns0:paramA</to>
</copy>
</assign>
Para adicionar expressões ao elemento Atribuir3:
Você usará o Editor de fontes para adicionar expressões ao elemento Atribuir3.
Observação: Você pode editar o elemento no mapeador BPEL, se necessário, depois de adicionar uma expressão usando o Editor de fontes.
- Clique com o botão direito do mouse no elemento Atribuir3 no diagrama BPEL e selecione Ir para o código-fonte no menu pop-up.
- Substitua a seqüência <assign name="Assign3"/> pela seguinte:
<assign name="Assign3">
<copy>
<from>concat('Existe(m) ', count($inputVar.inputType/ns0:paramA), ' elemento(s) no conjunto de nós.', 'A soma de elemento(s) é ', sum($inputVar.inputType/ns0:paramA), '. O último elemento é ', $inputVar.inputType/ns0:paramA[last()], '.')</from>
<to>$outputVar.resultType/ns0:paramA</to>
</copy>
</assign>
- Selecione Arquivo > Salvar.
- Clique no botão Design na barra de ferramentas do Editor para ir para a exibição Design e ver os resultados na janela Mapeador BPEL.
- Selecione o elemento Atribuir3 no diagrama BPEL.

Clique para aumentar
As expressões para o elemento Atribuir3 mostra o número de nós copiados em paramA, calcula a soma de todos os nós e proporciona o valor do último nó. A saída é a seguinte seqüência de amostra: Existe(m) 3 elemento(s) no conjunto de nós. A soma de elemento(s) é 6. O último elemento é 3.
superior
Implantando o projeto no servidor de aplicativos
Antes de iniciar os testes do processo comercial, você precisa adicionar o projeto do módulo BPEL como um módulo JBI e implantá-lo no servidor de aplicativos.
Para isso, siga as etapas descritas na seção Implantando o projeto no servidor de aplicativos do tutorial Um processo BPEL síncrono simples.
superior
Criando um caso de teste
Para testar o processo BPEL modificado, crie casos de teste (TestCase0 e TestCase1) conforme descrito nos procedimentos abaixo. Para o TestCase0, os parâmetros de entrada são uma seqüência e o número do teste, e a saída é uma seqüência que contém a data atual e fuso horário. Para o TestCase1, os parâmetros de entrada são o número de teste e um conjunto de nós, e a saída é uma seqüência que contém o número de elementos, sua soma e o último elemento.
Para criar o TestCase0:
- Na janela Projetos, expanda os nós SynchronousSampleApplication, Teste e TestCase0.
O nó TestCase0 contém dois arquivos XML: Input para entrada e Output para saída.
- Clique duas vezes no nó do arquivo Input e substitua o conteúdo padrão pelo seguinte:
<soapenv:Envelope xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:syn="http://xml.netbeans.org/schema/SynchronousSample">
<soapenv:Body>
<syn:typeA>
<syn:paramA>Olá!</syn:paramA>
<syn:nTest>1</syn:nTest>
</syn:typeA>
</soapenv:Body>
</soapenv:Envelope>
Neste teste, os parâmetros de entrada são o número do teste (1) e a seqüência "Olá!"
- Clique duas vezes no nó do arquivo Output no nó TestCase0.
- Exclua o texto padrão do arquivo Output.
Para criar o TestCase1:
- Na janela Projetos, expanda o nó do projeto SynchronousSampleApplication, clique com o botão direito do mouse no nó Teste e escolha Novo caso de teste no menu pop-up.
O assistente para Novo caso de teste é aberto.
- Em Nome, deixe TestCase1 e clique em Próximo.
- Expanda SynchronousSample - Arquivos do processo, selecione SynchronousSample.wsdl e clique em Próximo
- Selecione operação1 e clique em Finalizar.
- No nó Teste, expanda o nó TestCase1 e clique duas vezes em Input.
- Substitua o conteúdo padrão pelo seguinte:
<soapenv:Envelope xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:syn="http://xml.netbeans.org/schema/SynchronousSample">
<soapenv:Body>
<syn:typeA>
<syn:paramA>1</syn:paramA>
<syn:paramA>2</syn:paramA>
<syn:paramA>3</syn:paramA>
<syn:nTest>2</syn:nTest>
</syn:typeA>
</soapenv:Body>
</soapenv:Envelope>
Neste teste, os parâmetros de entrada são os três nós: 1, 2, 3, e o número do teste = 2.
- Clique duas vezes no nó do arquivo Output no nó TestCase1 e exclua o texto padrão deste arquivo.
- Salve as alterações escolhendo Arquivo > Salvar todos.
superior
Testando o aplicativo
Para executar os casos de teste:
- Na janela Projetos, clique com o botão direito do mouse no nó do projeto SynchronousSampleApplication e escolha Testar projeto no menu pop-up.
- Na primeira execução, o arquivo Output está vazio, por essa razão aceite substituir a saída vazia clicando em Sim nas duas caixas de diálogo.
- Observe a mensagem de que os testes falharam. É um caso especial porque durante a primeira execução o Output.xml está vazio e a saída é gravada em Output.
- Repita a etapa 1.
- Observe a mensagem de que os testes foram bem-sucedidos.
Você pode abrir os arquivos Output.xml de cada um dos casos de teste e verificar os resultados.
Em TestCase0, o arquivo Output.xml contém uma seqüência que exibe a data atual e o fuso horário, por exemplo "Olá! Hoje é 2006-11-17. O fuso horário é de 03:00."
Em TestCase1, o arquivo Output.xml apresenta a seguinte seqüência: "Existe(m) 3 elemento(s) no conjunto de nós. A soma de elemento(s) é 6. O último elemento é 3."
superior
Resumo
Neste tutorial, você explorou o componente Mapeador BPEL do BPEL Designer no NetBeans Enterprise Pack. Você modificou um projeto de aplicativo síncrono de amostra e usou a funcionalidade Mapeador BPEL para adicionar expressões e funções a um processo comercial. Você também testou os aplicativos e verificou que as expressões retornaram valores válidos.
superior