O processo presume que um cliente inicia o processo enviando uma mensagem que contém um documento de itinerário de viagem parcial.
O itinerário da viagem do cliente pode ter:
Nenhuma reserva pré-existente ou
Uma combinação de reservas pré-existentes de linha aérea, carro e/ou hotel.
O Serviço de reserva de viagens examina o itinerário do cliente de entrada e processa esse itinerário para conclusão.
Se o itinerário do cliente não contiver uma reserva de linha aérea pré-existente, o Serviço de reserva de viagens passará o itinerário para o respectivo serviço de parceiro, o Serviço de reserva de linhas aéreas, para adicionar a reserva de linha aérea.
O Serviço de reserva de linha aérea passa o itinerário modificado de volta para o Serviço de reserva de viagens.
O Serviço de reserva de viagens executa uma lógica semelhante nas reservas de carro e hotel. Em cada caso, ele delegará a provisão real da reserva para o Serviço de reserva de veículos e o Serviço de reserva de hotel.
Finalmente, o Serviço de reserva de viagens passa o itinerário completo de volta para o cliente original, concluindo o processo.
Antes de prosseguir, revise os requisitos nesta seção.
Pré-requisitos
Este tutorial presume que você possui algum conhecimento básico ou experiência de programação na linguagem e na plataforma Java e no 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 IDE 6.0.
Software necessário para o tutorial
Antes de começar, você precisa instalar o software seguinte em seu computador: NetBeans IDE 6.0 com SOA e o servidor da aplicação GlassFish, incluído no download "Todos" disponível no Download do NetBeans IDE 6.0.
Configurando e iniciando o servidor da aplicação GlassFish
Quando o download completo do NetBeans 6.0 é instalado, ele inclui o servidor da aplicação GlassFish. O NetBeans IDE iniciará automaticamente o servidor da aplicação quando necessário.
Para iniciar o servidor da aplicação GlassFish:
Se a janela Serviços não estiver visível, escolha Janela > Serviços.
Na janela Serviços, expanda o nó Servidores.
O nó Servidores deve conter um subnó do servidor da aplicação GlassFish. Se o nó do servidor da aplicação GlassFish não aparecer, vá para Para configurar o servidor da aplicação GlassFish.
Clique com o botão direito do mouse no nó do servidor da aplicação GlassFish e selecione Iniciar.
A janela de saída exibe informações de log sobre a inicialização da aplicação. Se a janela de saída não estiver visível, escolha Janela > Saída > Saída.
Quando a mensagem Inicialização do servidor da aplicação concluída aparecer na janela Saída, o servidor da aplicação estará em execução. Observação: se um emblema com uma seta verde aparecer no nó do servidor da aplicação GlassFish, o servidor estará sendo executado.
Observação: a implantação de uma aplicação no servidor da aplicação GlassFish iniciará automaticamente o servidor. Assim, não é necessário iniciar manualmente o servidor da aplicação.
Observação: o procedimento seguinte mostra como configurar o IDE para usar uma versão alternativa do servidor da aplicação GlassFish V2.
Para configurar o servidor da aplicação GlassFish V2:
Você pode querer usar uma versão diferente do servidor da aplicação da fornecida com o NetBeans 6.0. Por exemplo, pode querer baixar e instalar uma versão mais atual do servidor da aplicação GlassFish V2 do site da comunidade do GlassFish.
O seguinte procedimento mostra como configurar o NetBeans 6.0 IDE para usar uma versão alternativa do servidor da aplicação GlassFish V2. Ele supõe que você tenha baixado e instalado a versão alternativa do servidor da aplicação.
Na janela Serviços, clique com o botão direito do mouse no nó Servidores e escolha Adicionar servidor no menu pop-up.
A caixa de diálogo Adicionar instância do servidor é aberta.
Na página Escolher servidor, selecione GlassFish V2 na lista.
Clique em Próximo.
A página Localização da pasta da plataforma é aberta.
No campo Localização da plataforma, use o botão Procurar para navegar para o local de instalação do servidor da aplicação e selecionar esse local.
Se você tiver instalado o servidor da aplicação GlassFish no local padrão, use a Tabela 1 como um guia para localizar a instalação. Caso contrário, navegue para a localização onde você instalou o servidor da aplicação GlassFish V2.
Tabela 1: diretório padrão de instalação do servidor da aplicação
Plataforma
Instalando como...
Instalação da SOA
Instalação do conjunto de ferramentas
Solaris OS
Linux
raiz
/opt/glassfish-v2
/opt/SUNWappserver
Solaris OS
Linux
usuário
~/glassfish-v2
~/SUNWappserver
Mac OS X
N/D
/Applications/NetBeans/glassfish-v2b58g
/Applications/NetBeans/NetBeans 6.0
Windows
N/D
C:\Program Files\glassfish-v2-b58g
C:\Sun\AppServer
Selecione o botão de opção Registrar o domínio local padrão e clique em Próximo.
Indique o nome de usuário e a senha do administrador do domínio.
Caso você tenha aceitado os valores padrão durante a instalação, o nome de usuário é admin e a senha é adminadmin.
Criando um novo projeto com o projeto de amostra Serviço de reserva de viagens
No menu principal do IDE, escolha Arquivo > Novo projeto.
Em Categorias, selecione Amostras > SOA.
Em Projetos, selecione Serviço de reserva de viagens e clique em Próximo.
Aceite os valores padrão ou digite um nome e localização de projeto da sua escolha.
Observe que neste documento, o nome do projeto é TravelReservationService.
Clique em Terminar.
A janela Projetos agora contém três nós de projeto: um para TravelReservationService, um módulo BPEL, um para TravelReservationServiceApplication, um projeto de aplicação composta, e um para ReservationPartnerServices, um projeto EJB empacotado.
Implantando o projeto dos serviços Web de parceiro
O Serviço de reserva de viagens se comunica com seus serviços de parceiro através de suas interfaces públicas. Essas interfaces são definidas nos arquivos WSDL específicos do parceiro.
O IDE inclui um projeto EJB empacotado chamado ReservationPartnerServices. O projeto ReservationPartnerServices contém uma implementação básica EJB e baseada em JMS dos três serviços de parceiro. Esses serviços de parceiro são o Serviço de reserva de hotel, o Serviço de reserva de veículos e o Serviço de reserva de linhas aéreas. Esses serviços Web de parceiro devem ser implantados no servidor da aplicação GlassFish empacotado antes que você possa fazer a execução de teste do processo do Serviço de reserva de viagens.
Essa implementação destina-se somente a servir como um harness de teste do processo do Serviço de reserva de viagens. A implementação dos serviços de parceiro não deve ser de nenhum interesse para o desenvolvedor do BPEL. Eles são meramente pré-requisitos para a testabilidade do Serviço de reserva de viagens.
Para implantar o projeto ReservationPartnerServices:
Na janela Projetos, clique com o botão direito do mouse no nó ReservationPartnerServices e escolha Implantar e desimplantar. Isso implanta o ReservationPartnerServices.
Verifique se a aplicação ReservationPartnerServices foi implantada com êxito, realizando as seguintes etapas:
Alterne para a janela Tempo de execução e expanda o nó GlassFish V2.
Expanda o nó Aplicações e, em seguida, expanda o nó Módulos EJB.
Implantando o projeto de aplicação composta no servidor da aplicação
O projeto TravelReservationServiceApplication já contém um projeto BPEL como um módulo JBI (consulte o nó TravelReservationServiceApplication > Módulos JBI > TravelReservationService.jar). Implante a aplicação composta TravelReservationServiceApplication para tornar a composição de serviço disponível para o servidor da aplicação, permitindo, portanto, que as unidades de serviço sejam executadas.
Na janela Projetos, clique com o botão direito do mouse no nó do projeto TravelReservationServiceApplication e escolha Implantar no menu pop-up.
Na caixa de diálogo Aviso, verifique se GlassFish V2 está selecionado e clique em OK.
O deployment foi bem sucedido, a seguinte mensagem for exibida na janela Saída:
Realizando uma execução de teste do processo do Serviço de reserva de viagens
O recurso de execução de teste permite que os desenvolvedores do processo comercial realizem execuções de teste de seus processos. Os processos BPEL são implantados no tempo de execução do BPEL, que gerencia o ciclo de vida do processo. Um processo BPEL começa com uma atividade Receber ou Selecionar responsável por iniciar o processo.
Um processo BPEL também é um serviço Web. Como qualquer serviço Web, um processo BPEL possui um arquivo WSDL que descreve sua interface pública. Essa interface, por sua vez, descreve as operações e as mensagens que os clientes podem alcançar para criar a instância do processo. Durante a recepção de uma mensagem destinada a uma dessas atividades Receber, o tempo de execução BPEL criará uma instância do processo BPEL e entregará a mensagem para a instância do processo a fim de que seja processada.
Por exemplo, no caso do TravelReservationService.wsdl existe uma operação chamada buildItinerary. Essa é a operação que os clientes do TravelReservationService chamarão para instanciar uma conversa com o TravelReservationService.
Portanto, para testar um processo BPEL, você deve enviar ao tempo de execução BPEL uma mensagem destinada a uma das atividades Receber do processo.
Esta versão do BPEL Designer contém recursos para tornar esse teste uma experiência de apontar e clicar. Especificamente, com o projeto de amostra TravelReservationService, você pode enviar solicitações buildItinerary para o TravelReservationService implantado.
Para realizar a execução de teste de TravelReservationService:
Expanda os nós TravelReservationServiceApplication > Teste.
Existem 4 subnós:
HasNoReservations - um itinerário de teste sem reservas
HasAirline - um itinerário de teste com uma reserva de linha aérea pré-existente
HasVehicle - um itinerário de teste com reservas de linha área e de veículo pré-existentes
HasHotel - um itinerário de teste com reservas de linha aérea, veículo e hotel pré-existentes
Estes nós de teste são na verdade arquivos XML que contêm os dados da mensagem de SOAP. Cada um representa um caso diferente que pode ser usado para testar o TravelReservationService a fim de exercitar o processo de formas ligeiramente diferentes.
Clique com o botão direito do mouse no nó HasNoReservations e escolha Executar no menu pop-up.
Quando você seleciona a ação Executar, o IDE envia a mensagem SOAP HasNoReservations ao tempo de execução do BPEL. O IDE indicará se o teste foi bem sucedido.
Observações:
Se você realizar uma execução de teste em um dos cenários de teste antes de adicionar o módulo JBI ou implantar o projeto, a execução de teste falhará.
Depurando o processo do Serviço de reserva de viagens
Você pode usar o IDE para depurar a aplicação BPEL de amostra.
Etapas gerais de depuração
Na janela Projetos, sob o nó TravelReservationService > Arquivos do processo, clique duas vezes no arquivo TravelReservationService.bpel.
No Editor de código-fonte, defina pontos de interrupção no código-fonte, clicando no número da linha do elemento em que você deseja colocar um ponto de interrupção. Usaremos o teste HasNoReservations, portanto, colocaremos pontos de interrupção nas atividades que chamam todos os três serviços de parceiro.
Coloque um ponto de interrupção na atividade Receber ReceiveItinerary na linha 97. Essa é a atividade que inicia o processo. Se os números de linha não estiverem visíveis, escolha Exibir > Mostrar números de linha no menu principal.
Você também pode definir pontos de interrupção no diagrama. Para isso, alterne para a visualização Design, clique com o botão direito do mouse no elemento e escolha Alternar ponto de interrupção no menu pop-up.
Uma caixa vermelha é mostrada na parte superior do elemento com um ponto de interrupção.
O comando de menu Alternar ponto de interrupção também está disponível para os elementos na visualização Lógica do navegador BPEL. Se a janela Navegador não estiver aberta, escolha Janela > Navegação > Navegador no menu principal. Para os elementos com pontos de interrupção, o Navegador mostra uma pequena caixa vermelha como a da imagem seguinte (ReceiveItinerary):
Coloque pontos de interrupção nas atividades Chamar ReserveAirline (linha 130), ReserveVehicle (linha 183) e ReserveHotel (linha 236).
Agora, adicione inspeções ao projeto:
Se a janela Inspeções não estiver visível, escolha Janela > Depuração > Inspeções no menu principal.
Na visualização Código-fonte, vá para a linha 127 e copie a expressão XPath:
Como alternativa, selecione o elemento If HasAirline no diagrama e copie a expressão XPath a partir da linha Condição na janela Propriedades. Se a janela Propriedades não estiver visível, escolha Janela > Propriedades no menu principal.
Clique com o botão direito do mouse dentro da janela Inspeções e escolha Nova inspeção.
Na caixa de diálogo Nova inspeção, cole a expressão XPath no campo Inspecionar expressão e clique em OK.
Adicione mais duas inspeções para expressões nas linhas 180 e 233. Sua janela Inspeções agora deve ter três itens:
Na janela Projetos, clique com o botão direito do mouse no nó TravelReservationServiceApplication e escolha Depurar projeto (BPEL).
Espere até que a mensagem CONSTRUÇÃO BEM SUCEDIDA seja exibida na janela Saída.
Alterne para a janela Console do depurador BPEL para garantir que a mensagem Sessão de depuração iniciada tenha aparecido.
Garanta que você tenha as janelas seguintes abertas:
Variáveis BPEL; escolha Janela > Depuração > BPEL > Variáveis BPEL no menu principal, se ela não estiver aberta.
Instâncias do processo BPEL; escolha Janela > Depuração > BPEL > Instâncias do processo BPEL no menu principal, se ela não estiver aberta.
Execução do processo BPEL; escolha Janela > Depuração > BPEL > Execução do processo BPEL no menu principal, se ela não estiver aberta.
Na janela Projetos, clique com o botão direito do mouse em HasNoReservations no nó Teste em TraveReservationServiceApplication e escolha Executar para iniciar o teste.
Quando o processo alcança o primeiro ponto de interrupção, observe as janelas seguintes:
Janela Variáveis BPEL
Ela mostra a estrutura das variáveis locais e seus valores da instância do processo atual e a posição em que a instância do processo atual ficou suspensa.
Observe que você pode acessar e modificar a parte XML que pertence a uma variável específica na caixa de diálogo Valor desde que seu valor seja XML. Para exibir a caixa de diálogo, pressione o botão de reticências (...) no fim da linha na janela Variáveis BPEL.
Janela Instâncias do processo BPEL
Ela lista todas as instâncias do processo BPEL que estão sendo executadas no mecanismo de serviço BPEL durante a sessão de depuração atual.
A instância numerada TravelReservationService deve estar no estado Suspenso.
Janela Execução do processo BPEL
Ela representa geograficamente o andamento da execução da instância do processo BPEL atual no depurador BPEL.
A atividade ReceiveItinerary deve ser realçada em verde, o que significa que ela está sendo executada no momento.
O resto das atividades fica cinza, já que elas ainda não foram executadas.
Janela Inspeções.
Ela contém a string <Impossível avaliar a expressão> na coluna Valor de todas as três expressões. Isso acontece porque o processo parou no início da primeira atividade Receber e a mensagem ItineraryIn ainda não chegou.
Clique em Continuar na barra de ferramentas Depuração (Ctrl-F5). O processo pára no segundo ponto de interrupção. Nesse momento, a mensagem ItineraryIn chegou e as condições das inspeções foram avaliadas. O valor de todas as três expressões deve ser definido como verdadeiro.
Observação: as expressões retornam true se a mensagem não contiver um item de reserva correspondente. Se você executar o teste HasAirline, o valor da expressão not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air), que verifica se a mensagem de entrada não contém o item de reserva Linha aérea, será definido como false.
Clique em Continuar.
Na conclusão do processo, o teste HasNoReservations passa com êxito.
Selecione Executar > Terminar sessão do depurador no menu principal.
Ações de depuração em um ponto de interrupção
Quando uma instância do processo é suspensa, você pode realizar qualquer uma das seguintes ações convencionais da barra de ferramentas Depurar (se a barra de ferramentas Depurar não estiver visível, escolha Exibir > Barras de ferramentas > Depurar):
Terminar sessão do depurador (Shift-F5). Finaliza a sessão de depuração atual.
Continuar (Ctrl-F5). Faz com que a instância do processo atual seja executada até que encontre o próximo ponto de interrupção ou até que a instância seja concluída.
Passar dentro (F7). Passa na próxima atividade BPEL. Esta etapa só é suportada na granularidade de uma atividade em termos de linguagem BPEL. Ela não entra em uma granularidade superior. Conforme você entra, o indicador da linha atual avançará e o conteúdo das janelas Variáveis BPEL e Inspeções pode conseqüentemente se alterar.
Executar até cursor (F4). Permite que os pontos de interrupção sejam definidos dinamicamente, quando o processo está sendo executado, na janela Navegador e nas visualizações Código-fonte e Design do BPEL Designer.