Uma Abordagem Prática para Desenvolvimento de Web

Transcrição

Uma Abordagem Prática para Desenvolvimento de Web
UNIVERSIDADE FEDERAL DO ESTADO DO RIO DE JANEIRO
ESCOLA DE INFORMÁTICA APLICADA
CURSO DE BACHARELADO EM SISTEMAS DE INFORMAÇÃO
Uma Abordagem Prática para Desenvolvimento de Web Services com Contract-First
Nome do autor:
Sandro Pinheiro Lopes
Marcos de Barros Mele
Nome do Orientador:
Leonardo Guerreiro Azevedo
Julho/2012
Uma Abordagem Prática para Desenvolvimento de Web Services com Contract-First
Projeto de Graduação apresentado à Escola
de Informática Aplicada da Universidade
Federal do Estado do Rio de Janeiro
(UNIRIO) para obtenção do título de
Bacharel em Sistemas de Informação
Nome dos autores:
Sandro Pinheiro Lopes
Marcos de Barros Mele
Nome do Orientador:
Leonardo Guerreiro Azevedo
Uma Abordagem Prática para Desenvolvimento de Web Services com Contract-First
Aprovado em ____/_________/______
BANCA EXAMINADORA
____________________________________________________________________
Prof. Leonardo Guerreiro Azevedo, D.Sc. (UNIRIO)
____________________________________________________________________
Prof. Mácio de Oliveira Barros, D.Sc. (UNIRIO)
____________________________________________________________________
Prof. Alexandre Luis Correa, D.Sc. (UNIRIO)
Os autores deste Projeto autorizam a ESCOLA DE INFORMÁTICA APLICADA da
UNIRIO a divulgá-lo, no todo ou em parte, resguardando os direitos autorais
conforme legislação vigente.
Rio de Janeiro, ____ de _________ de ______
____________________________________________________________________
Sandro Pinheiro Lopes
____________________________________________________________________
Marcos de Barros Mele
Agradecimentos
Agradecemos primeiramente a Deus pelo desenvolvimento e orquestração de
tudo.
Às nossas famílias não somente pelo incentivo sempre bem-vindo e
necessário, mas pela paciência pelas muitas ausências e entendimento da importância
desse estágio de nossas vidas.
Ao nosso orientador Leonardo Guerreiro Azevedo por ter nos apresentado
com tanta paixão esse universo que é SOA. Sua atenção, dedicação e competência
foram cruciais para elaboração deste trabalho.
Ao Luiz Felipe Velloso que nos concedeu seu servidor para que nós
pudéssemos desenvolver em um ambiente controlado e centralizado. Ao Michael
Ramos pela ajuda competente que nos deu em diversas tecnologias que utilizamos
em nosso projeto.
Aos nossos amigos que, como nossas famílias, sentiram nosso afastamento,
mas mesmo sem o laço sanguíneo entenderam a necessidade e torceram por nós.
Ao corpo docente da Uniriotec pela competência em nos proporcionar uma
formação de qualidade e diferenciada.
SUMÁRIO
Capítulo 1:
1.1
1.2
1.3
1.4
Capítulo 2:
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.7.1
2.7.2
2.7.3
2.8
2.8.1
2.8.2
2.8.3
2.9
Capítulo 3:
3.1
3.2
3.3
3.4
3.5
3.6
3.6.1
3.6.2
3.6.3
3.6.4
Capítulo 4:
4.1
4.1.1
4.1.2
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.3
4.4
Introdução ...................................................................................... 12
Contextualização............................................................................ 12
Motivação ...................................................................................... 13
Objetivo do trabalho ...................................................................... 14
Estrutura do trabalho ...................................................................... 14
Conceitos ....................................................................................... 16
SOA ............................................................................................... 16
Web services .................................................................................. 18
WSDL ............................................................................................ 18
SOAP ............................................................................................. 20
XSD ............................................................................................... 22
BPM ............................................................................................... 26
Ciclo de Vida de Serviços.............................................................. 29
Fase de Projeto ............................................................................... 30
Fase de Execução ........................................................................... 31
Fase de Mudança ........................................................................... 31
Métodos para Identificação, Análise e Projeto de Serviços .......... 32
Identificação de Serviços ............................................................... 32
Análise de Serviços ........................................................................ 37
Projeto de Serviços ........................................................................ 39
Orquestração e coreografia ............................................................ 41
Contract-First: projetando web services interoperáveis ................ 43
Contrato de serviço ........................................................................ 43
Conformidade com WS-I Basic Profile (BP) ................................ 45
Centralização de Esquema ............................................................. 49
Padrões de projeto de XML Schema ............................................. 50
Modularização de WSDL .............................................................. 53
Contract-first versus code-first ...................................................... 55
Acoplamento .................................................................................. 56
Desempenho .................................................................................. 61
Alteração do contrato ..................................................................... 62
Gestão de tipos de dados e WSDL ................................................ 69
Provendo serviços interoperáveis .................................................. 71
Elaboração da interface do serviço. ............................................... 77
Desenvolvimento dos esquemas .................................................... 77
Desenvolvimento do WSDL .......................................................... 83
Desenvolvimento de serviço .......................................................... 88
Mapeamento Schema x Java .......................................................... 89
Persistência de dados ..................................................................... 91
Camada de Acesso a Dados ........................................................... 96
Implementação do Serviço .......................................................... 100
Composição de serviços .............................................................. 106
Testes de desenvolvimento .......................................................... 108
Teste de serviço ........................................................................... 111
Publicação de serviço .................................................................. 111
4.4.1
Compilação de serviço com Ant .................................................. 111
4.4.2
Implantação do Serviço ............................................................... 114
4.5
Considerações sobre o desenvolvimento dos serviços ................ 114
Capítulo 5:
Conclusão .................................................................................... 118
Referências Bibliográficas ....................................................................................... 122
Apêndice 1 – Padrões de Projeto para Centralização de Esquema .......................... 125
LISTA DE FIGURAS
Figura 1 – Sistemas Heterogêneos [Josuttis, 2007] ................................................... 17
Figura 2 - Exemplo de arquivo WSDL na vesão 1.1 ................................................. 20
Figura 3 - Exemplo de mensagem SOAP .................................................................. 22
Figura 4 - Exemplo de um XML Schema Definition ................................................. 23
Figura 5 - Enterprise Service Bus (adaptado de [Papazoglou, 2007]). ...................... 26
Figura 6 - Perspectivas dos modelos de negócios [Magalhães, 2007]. ...................... 28
Figura 7 - Diferença entre coreografia e orquestração (adaptado de Peltz [2003]) ... 42
Figura 8 - Contrato de Serviço (adaptado de Erl [2007]) .......................................... 44
Figura 9 – Trecho de WSDL abstrato que é importado ............................................. 47
Figura 10 – Trecho de WSDL concreto que importa o WSDL abstrato .................... 48
Figura 11 - XSD com entidades básicas .................................................................... 52
Figura 12 - XSD de visão ........................................................................................... 52
Figura 13 – StockQuoteAbstract.wsdl [Hewitt, 2009] ............................................... 54
Figura 14 - StockQuoteConcrete.wsdl [Hewitt, 2009]............................................... 55
Figura 15 - Definitions geradas pelo Axis 1.4 ........................................................... 57
Figura 16 - Definitions geradas pelo JAX-WS 2.2 .................................................... 57
Figura 17 - Interface do serviço HelloWorld utilizado pelo AXIS e JAX-WS ......... 58
Figura 18 - Tipos definidos no WSDL pelo Axis 1.4 ................................................ 59
Figura 19 - Tipos definidos em XSD e importados pelo WSDL no JAX-WS 2.2 .... 59
Figura 20 - Mensagens e PortType no Axis 1.4 ......................................................... 60
Figura 21 - Mensagem e PortType no JAX-WS 2.2 .................................................. 60
Figura 22 - Mensagens e PortType no Axis 1.4 ......................................................... 61
Figura 23 - Mensagem e PortType no JAX-WS 2.2 .................................................. 61
Figura 24 - XSD do serviço HelloWorld antes da manutenção do serviço ............... 64
Figura 25 - WSDL do serviço HelloWorld antes da manutenção do serviço ............ 64
Figura 26 - Nova especificação do serviço HelloWorld - Code-First ........................ 65
Figura 27 - XSD original versus XSD após manutenção com code-first .................. 66
Figura 28 - WSDL original versus WSDL gerado após manutenção com code-first 67
Figura 29- Nova especificação do serviço HelloWorld - Contract-First ................... 69
Figura 30 – Modelo em notação EPC do processo “Analisar pedido de crédito” ..... 72
Figura 31 – Modelo canônico do processo de análise de crédito (adaptado de Souza
et al. [2011]) ............................................................................................................... 78
Figura 32 - Modelo Canonico.xsd - parte 1 ............................................................... 80
Figura 33 - Modelo Canonico.xsd - parte 2 ............................................................... 81
Figura 34 - Esquema de visão da entidade PropostaContrato .................................... 82
Figura 35 - WSDL abstrato de Tratar Cliente ............................................................ 85
Figura 36 - WSDL Concreto do serviço Tratar Cliente ............................................. 87
Figura 37 - Sumário de verificação WS-I .................................................................. 88
Figura 38 - Correlação JAXB x XSD ........................................................................ 90
Figura 39 - Entidade CreditoConcedido com as anotações JPA ................................ 94
Figura 40 - DAO Genérico ......................................................................................... 97
Figura 41 - DAO da entidade PropostaContrato ........................................................ 98
Figura 42 - Persistence.xml do projeto PropostaClienteEJB ..................................... 99
Figura 43 - Arquivo de configuração sun-jaxws.xml .............................................. 100
Figura 44 - Anotação @WebService usada na interface do serviço ........................ 101
Figura 45 - Anotação @WebService usada na classe do serviço ............................ 102
Figura 46 - Anotação @SOAPBinding .................................................................... 102
Figura 47 - Anotação @WebMethod ....................................................................... 103
Figura 48 - Anotação @WebParam ......................................................................... 103
Figura 49 - Anotação @WebResult ......................................................................... 103
Figura 50 - Interface do serviço TratarCliente ......................................................... 104
Figura 51 – Trecho da implementação do serviço TratarCliente ............................. 105
Figura 52 - Interface do serviço utilizado na composição do ManterCadastroCliente
.................................................................................................................................. 106
Figura 53 - Classe responsável pela obtenção do serviço TratarCliente .................. 107
Figura 54 – Composição de serviços ....................................................................... 107
Figura 55 - Classe de testes do DAO PropostaContrato .......................................... 109
Figura 56 - Resultado da realização de um teste com TestNG ................................ 109
Figura 57 - Criação de Teste com SoapUI ............................................................... 110
Figura 58 - Teste de chamada com SoapUI ............................................................. 110
Figura 59 - Build.xml - Tratar Cliente ..................................................................... 113
Figura 60 - Diagrama de Arquitetura do Projeto ..................................................... 115
LISTA DE TABELAS
Tabela 1 – Partes do WSDL ....................................................................................... 19
Tabela 2 - Elementos de um XSD .............................................................................. 22
Tabela 3 - Lista de Restrições em um XSD ............................................................... 24
Tabela 4 - Template para descrição de serviço candidato.......................................... 33
Tabela 5 - Resumo de projeto de serviços [Azevedo et al., 2009c] ........................... 40
Tabela 6 - Comparativo entre padrões XML Schema ................................................ 51
Tabela 7 - Serviços candidatos identificados por Souza et al. [2011] ....................... 73
Tabela 8 - Serviços candidatos indicados para não serem desenvolvidos [Souza et al.,
2011] .......................................................................................................................... 74
Tabela 9 - Serviços candidatos indicados para serem desenvolvidos [Souza et al.,
2011] .......................................................................................................................... 75
Tabela 10 - Serviços desenvolvidos e suas operações ............................................... 76
Tabela 11 - Listagem de anotações JPA .................................................................... 95
Tabela 12 - Principais elementos Ant ...................................................................... 112
LISTA DE ABREVIATURAS
SOA – Service-Oriented Architecture
BPM – Business Process Management
BPEL – Business Process Execution Language
ESB – Enterprise Service Bus
SOAP – Simple Object Access Protocol
WSDL – Web Services Description Language
XSD – XML Schema Definitions
XML – eXtensible Markup Language
RPC – Remote Procedure Call
JPA – Java Persistence API
EJB – Enterprise Java Beans
JEE – Java Enterprise Edition
JAX-WS – Java Architecture for XML Web Services
JAXB – Java Architecture for XML Binding
RESUMO
A arquitetura orientada a serviços (SOA) propõe comunicação e
interoperabilidade entre sistemas heterogêneos, sejam eles legados ou novos.
Entretanto, mesmo usando uma abordagem SOA, a integração entre sistemas é um
desafio. Existem propostas de padrões de desenvolvimento de serviços para que os
mesmos se tornem interoperáveis. Na prática, a abordagem de desenvolvimento mais
utilizada no mercado é a geração automática do contrato após o desenvolvimento
(code-first). Contudo, essa abordagem gera dificuldades de manutenção e consumo
do serviço em longo prazo, tais como: impossibilidade de utilização de tipos de
dados centralizados, alta probabilidade de mudança no contrato no caso de
manutenção na implementação do serviço e impossibilidade de versionamento. Uma
melhor abordagem é construir o contrato do serviço primeiro e a partir do contrato
implementar o código aderente a este contrato. Este trabalho apresenta um estudo de
caso com aplicação de abordagem de desenvolvimento contract-first, a fim de
garantir interoperabilidade, aumento do grau de reuso e durabilidade, facilidade de
governança e redução do acoplamento com uma determinada tecnologia.
Palavras-chave: SOA, Contract-First, Interoperabilidade, Basic Profile (BP),
WSDL, Web Services e Centralização de Esquema.
Capítulo 1:
Introdução
O objetivo deste capítulo é contextualizar os conceitos e fundamentações
teóricas utilizadas neste trabalho. Além disto, serão apresentados a motivação, o
objetivo do trabalho e a estrutura dos capítulos.
1.1 Contextualização
Segundo Josuttis [2007], SOA (Service-Oriented Architecture) possibilita a
comunicação entre sistemas desenvolvidos em linguagens de programação distintas e
sendo executados em sistemas operacionais diferentes. Esse cenário é muito comum
em empresas de médio e grande porte que possuem uma infra-estrutura de TI
complexa.
A definição de Erl [2005] identifica SOA como um paradigma arquitetural
que disponibiliza funcionalidades de aplicações de maneira autocontida como
serviços. Serviços são componentes de software que representam uma atividade do
negócio [Hewitt 2009]. Em geral, serviços são desenvolvidos utilizando a tecnologia
de web services e são responsáveis pela comunicação e interoperabilidade entre os
sistemas. No mundo de web services, serviços são descritos utilizando a linguagem
WSDL (Web Services Description Language) e a comunicação é feita de forma
padronizada utilizando troca de mensagens escritas segundo o protocolo SOAP
(Simple Object Access Protocol).
Papazoglou[2007] apresenta os dois principais papéis em uma arquitetura
SOA: provedor e consumidor. Provedor realiza todos os passos do desenvolvimento
do serviço, desde a identificação da necessidade ao provimento do mesmo. Após a
publicação do serviço, os consumidores estão aptos a consumi-los através da
interface disponibilizada. Existe ainda um terceiro papel, do broker, responsável por
realizar a manutenção dos registros de serviços publicados.
Em um complexo sistema corporativo, é necessária uma infraestrutura em
que consumidores e provedores de serviços se comuniquem de forma eficiente e
segura e que não seja ponto-a-ponto, reduzindo acoplamento entre consumidores e
provedores, i.e., é necessário haver mediação de comunicação consumidor-provedor.
Conforme descrito por Josuttis [2007], a principal infra-estrutura para mediação da
comunicação entre consumidores e provedores é chamada de Enterprise Service Bus
(ESB).
Josuttis [2007] apresenta a ligação entre SOA e a utilização de uma gestão de
processos de negócio, e como a utilização de BPM (Business Process Management)
representa um papel importante em SOA, uma vez que serviços são partes de
processos de negócio. O modelo de processos estabelece a seqüência de atividades
que compõem o processo de negócio. O desenho de atividades e fluxo das mesmas
apresentam informações importantes sobre o negócio tais como produtos e insumos,
se são executadas por sistemas ou executadas manualmente ou apoiadas por
sistemas, papéis que executam a atividade etc. Enfim, o modelo de negócio apresenta
um conjunto de informações sobre as quais é possível realizar uma análise
sistemática para identificação de serviços e, posteriormente, a análise desses
serviços. Essa sistematização na identificação e análise foram propostas
respectivamente por Azevedo et al. [2009a, 2009b, 2009c, 2009d, 2009e, 2011].
1.2 Motivação
Souza et al. [2010] realizaram a identificação e análise de serviços a partir de
um modelo do processo de negócio para tratar análise de crédito, seguindo as
heurísticas propostas por Azevedo et al.[2009a, 2009b, 2009c, 2009e, 2011].
Em Souza et al., [2011] foram definidos, dentre a listagem obtida após análise
dos serviços candidatos, quais serviços seriam implementados. Este trabalho dará
continuidade ao estudo de caso relativo ao processo de análise de crédito, seguindo o
ciclo de vida apresentado por Gu e Lago [2007] nas fases projeto e implementação
dos serviços obtidos.
Como em SOA a principal comunicação entre provedor e consumidor é
estabelecida através do contrato do serviço, cada serviço desenvolvido terá primeiro
seu contrato estabelecido, evitando que mudanças e tendências durante o
desenvolvimento afetem os consumidores do serviço. Alguns padrões e convenções
serão abordados, a fim de garantir interoperabilidade, redução de acoplamento,
aumento de reusabilidade e melhoria em governança dos serviços.
13
1.3 Objetivo do trabalho
O objetivo deste trabalho é se aprofundar na fase de desenvolvimento do ciclo
de vida de serviços presente no modelo de ciclo de vida de serviços orientado a
stakeholder de Gu e Lago [2007] utilizando contract-first, que desenvolve primeiro
os artefatos relativos ao contrato de serviço antes de sua codificação. A utilização
desse padrão de desenvolvimento auxilia a elaboração de serviços
mais
independentes, coesos, eficientes e aderentes ao negócio. Concomitantemente à
utilização de contract-first, serão utilizados padrões e boas práticas de
desenvolvimento de serviços presentes na especificação do Basic Profile (BP) que
visam garantir interoperabilidade, redução de impacto de mudanças e facilidade de
manutenção de serviços.
Como o foco do trabalho está no desenvolvimento do serviço em si, os
resultados apresentados por Souza et al. [2011] na identificação e análise de serviços
serão empregados como ponto de partida para este trabalho. Isto permitirá uma
análise mais detalhada de tendências entre a fase de análise e a de implementação e,
caso necessário, realizar proposta de melhoria da fase de análise e projeto para se
adequar melhor à realidade da implementação e composição de serviços.
A abordagem escolhida para implementação de serviços foi web services e a
implementação da composição de serviços utilizando injeção direta no serviço
composto. Os contratos dos serviços foram desenvolvidos utilizando WSDL, que é
linguagem padrão de definição de web services; enquanto a API JAX-WS foi
escolhida para desenvolvimento de web services devido a sua robustez e praticidade
por permitir uso de annotations (padrão de mapeamento por anotação de classes
Java).
1.4 Estrutura do trabalho
O restante deste trabalho está dividido da seguinte forma. O capítulo 2 apresenta
os conceitos necessários ao entendimento do trabalho como: SOA; Web services;
WSDL; XSD; ESB; BPM; ciclo de vida de serviços, métodos para identificação,
análise e projeto de serviços; e orquestração e coreografia. O capítulo 3 discorre
sobre o conceito de contrato de serviço, apresenta o Basic Profile (BP), que é o
14
principal produto do consórcio Web Service Interoperability (WS-I) e define padrões
de desenvolvimento de serviços com maior interoperabilidade. Por fim, traz um
comparativo das abordagens contract-first e code-first. O capítulo 4 trata do
desenvolvimento dos serviços identificados utilizando o framework JAX-WS 2.2 e
outras especificações J2EE. Por fim, o capítulo 5 apresenta a conclusão do trabalho.
15
Capítulo 2:
Conceitos
2.1 SOA
SOA é o acrônimo para Service-Oriented Architecture (Arquitetura Orientada
a Serviço). Entretanto, SOA não é uma arquitetura concreta, mas um sistema de
valores que conduz a uma arquitetura concreta de software. Desta forma, não é
possível comprar SOA, como se compra um framework, com a intenção de garantir
precisão e qualidade no desenvolvimento de um projeto [Josuttis, 2007]. Erl [2005]
define a Arquitetura Orientada a Serviços (SOA) como sendo uma arquitetura onde
funcionalidades de software são disponibilizadas como serviços, facilitando assim a
comunicação e interoperabilidade entre aplicações, além de criar uma infraestrutura
de TI mais flexível e alinhada com o negócio.
Serviços são pedaços de funcionalidades auto-contidas, que possuem
interfaces expostas e que são invocados via mensagens [Josuttis, 2007]. Estas
funcionalidades podem fazer parte de um ou mais processos e serviços podem ser
desenvolvidos em qualquer tecnologia e em qualquer plataforma que permita
comunicação interoperável.
Serviços podem representar funcionalidade simples ou complexas. Um
exemplo de serviço simples é aquele para armazenamento ou recuperação de dados.
Por outro lado, um exemplo de serviço complexo seria aquele que exige uma solução
lógica mais sofisticada como, por exemplo, execução de diversas trocas de
mensagens, mecanismos de transação ou compensação e execuções paralelas. A
qualidade de projetos baseados no padrão SOA está diretamente relacionada com o
conhecimento dos projetistas sobre esse paradigma e, obviamente, sobre as
especificações relacionadas ao projeto a ser desenvolvido.
“Os grandes sistemas utilizam plataformas diferentes, linguagens de
programação diferentes (e paradigmas de programação) e até middleware diferente.
Eles são um conjunto de mainframes, clientes SAP, bancos de dados, aplicações
J2EE, pequenos motores de regras, e assim por diante. Em outras palavras, eles são
heterogêneos” [Josuttis, 2007]. Um exemplo ilustrativo é apresentado na Figura 1,
16
onde há uma rede de comunicação entre diversos servidores, sejam eles sistemas em
diferentes linguagens, bancos de dados distribuídos ou aplicações em nuvem, todos
trocando informações entre si.
Figura 1 – Sistemas Heterogêneos [Josuttis, 2007]
Em um ambiente heterogêneo como o descrito por Josuttis, é possível e
provável que um requisito de software possa estar sendo utilizado em uma solução
computacional com proprietários e tecnologias diferentes. Em cenários como esses, a
necessidade de integração de diferentes tipos de sistemas se torna vital para o sucesso
da empresa.
Diferentemente de outras abordagens, SOA aceita essa heterogeneidade
reconhecendo, organizando e utilizando essas capacidades distribuídas de diferentes
proprietários [OASIS, 2006] através de uma arquitetura baseada em padrões. Essa
arquitetura fornece uma poderosa estrutura para adequar e combinar essas
capacidades distribuídas.
Ambientes heterogêneos são difíceis de gerenciar sem essa abordagem
padronizada. Assim, SOA possibilita o desenvolvimento de soluções mais ágeis para
atender às demandas do mercado. Afinal, tão importante quanto desenvolver um
software de qualidade é desenvolvê-lo em um tempo que possa acompanhar o ritmo e
necessidades do mercado e, assim, esteja disponível em tempo hábil para agregar
valor ao negócio da empresa.
Muito dessa agilidade e flexibilidade se deve à
interoperabilidade, reutilização e orquestração de serviços.
17
2.2 Web services
Web service é um conjunto de padrões que possibilita a interoperabilidade
entre sistemas heterogêneos. Esses padrões definem os protocolos utilizados para
comunicação e formatos de interface para especificação e contratos de serviços
[Josuttis, 2007].
Web services são auto-suficientes, auto-descritivos, independentes de
linguagem e fracamente acoplados. Eles possuem natureza modular e podem ser
publicados, localizados e invocados através da World Wide Web [Iyengar et al.,
2008] utilizando, principalmente, o protocolo HTTP.
“A tecnologia de Web Services fornece uma maneira eficiente para
compartilhar lógica de aplicação em múltiplas máquinas que executam sistemas
operacionais diferentes e com diferentes ambientes de desenvolvimento. Para isso,
Web Services utilizam SOAP, WSDL, XML Schema e outras tecnologias baseadas
em XML, fornecendo uma abordagem baseada em padrões para superar as diferenças
de plataforma e linguagem.” [Vasiliev, 2007]. Dessa forma, como descrito por
Vasiliev, existem alguns padrões baseados em XML que possibilitam a
interoperabilidade e demais características fundamentais de um web service e, dentre
eles, o entendimento do padrão WSDL é imprescindível para este trabalho.
2.3 WSDL
Web Services Description Language (WSDL) é a linguagem que fornece um
vocabulário XML, razoavelmente simples, para descrever o serviço, as operações
disponíveis, os formatos de mensagens e como acessá-lo. Atualmente, existem duas
versões de WSDL utilizadas para definição de serviços: WSDL 1.1 [Christensen et
al., 2001] e WSDL 2.0 [Chinnici et al., 2007].
A versão 1.1, apesar de algumas carências iniciais em termos de
documentação de recursos, de ser menos intuitiva e flexível é a mais difundida no
mercado e, por isso, é a que contém maior número de ferramentas de apoio ao
desenvolvimento de web services [Sosnoski, 2011].
18
A versão 2.0 do WSDL foi desenvolvida para ser mais simples, flexível e
melhor documentada quanto a seu propósito e recursos. Em 2007, o W3C substituiu
tecnicamente a versão 1.1 endossando a versão 2.0 do WSDL. Entretanto, esta versão
ainda é pouco difundida [Sosnoski, 2011].
Na prática, isso significa que serviços desenvolvidos utilizando a versão 1.1
tem maior capacidade de interoperabilidade.
Por isso, a Web Services
Interoperability Organization (WS-I) utilizou o WSDL 1.1 para definir boas práticas
para serviços web em seu Basic Profile (BP).
Um arquivo WSDL 1.1 pode ser classificado em três partes distintas que
correspondem à definição abstrata, definição concreta e documentação do serviço.
Cada elemento de um arquivo WSDL corresponde a uma dessas três classificações.
Os elementos types, message, portType e operations são classificados como
elementos de interface e representam a definição abstrata do serviço. Os elementos
binding e services são classificados como elementos de programação e representam a
definição concreta do serviço. O elemento documentation é classificado como
elemento de documentação e representa a documentação do web service para tornálo compreensível e acessível aos usuários [Erl, 2004]. A Tabela 1 apresenta os
elementos existentes em um arquivo WSDL 1.1, versão utilizada neste trabalho, e
seu objetivo. A Figura 2 mostra um exemplo de WSDL na versão 1.1.
Tabela 1 – Partes do WSDL
Elemento
Definitions
Types
portType
Operation
Message
Part
Binding
Service
Descrição
Elemento raiz do arquivo WSDL
Define os tipos de dados (XSD Language) utilizados pelo serviço.
Representa a interface do serviço, podendo conter múltiplas operações.
Representa uma função do web service.
Representa coleções de parâmetros de entrada e saída.
Representa dados usados como parâmetros em operações de entrada e saída.
Define o protocolo e formato que serão utilizados para fornecer o serviço.
Especifica um ou mais endpoints1 nos quais a funcionalidade do serviço está
disponível.
1
Um endpoint é uma associação entre um binding e um endereço de rede, especificado
por uma URI. Um endpoint indica um local específico para acessar um serviço usando um
protocolo específico e formato de dados definido. [http://www.w3.org/TR/ws-gloss/]
19
Figura 2 - Exemplo de arquivo WSDL na vesão 1.1
2.4 SOAP
Conforme visto na seção 2.3, o WSDL descreve a parte do contrato de
serviço responsável pela invocação do web service. As operações contidas no WSDL
são descritas em termos de mensagens abstratas e o Protocolo de Acesso Simples a
Objeto (SOAP – Simple Object Access Protocol) é a especificação utilizada em web
services para fornecer implementação concreta para as mensagens definidas em
20
WSDL 1.1 (versão utilizada neste trabalho), definindo a estrutura XML das
mensagens trocadas de forma padronizada.
SOAP inclui um modelo de processamento composto por nós SOAP que
transmitem e recebem mensagens SOAP e pode retransmiti-las para outros nós
SOAP [Hansen, 2007]. Uma mensagem SOAP, tanto de requisição quanto de
resposta, é dividida em três partes:
 Envelope: define o início e fim de uma mensagem SOAP e os namespaces
utilizados na mensagem. A Figura 3 mostra uma mensagem SOAP de
requisição a um serviço e uma possível mensagem de resposta a esta
requisição. Nesta mensagem, é apresentado o elemento Envelope com prefixo
soapenv e a declaração dos namespaces que definem os elementos utilizados
pela versão SOAP 1.1 (http://schemas.xmlsoap.org/soap/envelope/) e as
mensagens definidas no serviço TratarProduto referentes ao método
consultarProduto.
 Header: contém informações relacionadas à qualidade de serviço (QoS) e
informações relacionadas à segurança e confiabilidade. Headers não são
obrigatórios e não foram configurados no exemplo apresentado na Figura 3.
 Body: tanto as mensagens de requisição quanto as mensagens de resposta
devem ter apenas um elemento filho na seção Body. Esta abordagem é
coerente com a definição de mensagens no WSDL, já que para cada operação
definida é utilizada apenas uma mensagem para a requisição e uma
mensagem para a resposta. A Figura 3, mostra que o elemento Body da
requisição contém um único filho chamado “consutarProduto”. Esse elemento
contém o tipo simples “codigo”. Da mesma forma, a mensagem de resposta
da Figura 3, mostra que seu elemento Body também contém apenas um filho
chamado “consultarProdutoResponse”. Esse elemento contém o tipo
complexo “produto” que é composto pelos tipos simples “codigo”, “nome” e
“valor”.
21
Figura 3 - Exemplo de mensagem SOAP
2.5 XSD
XML Schema Definition (XSD) é a linguagem de definição de esquemas
recomendada pela W3C, escrita em linguagem XML 1.0 e utilizada para descrição de
estrutura de instância de documentos [Wyke e Watt, 2002]. A partir da definição
destas estruturas torna-se possível trocar informações entre aplicações com maior
confiabilidade. Uma das utilizações de um XSD é a definição de estruturas de dados
de um WSDL.
Os principais elementos de um XSD são symple type definitions, complex
type definitions, element declarations e atribute declarations. A Tabela 2 apresenta
os principais elementos de um XSD 1.0, versão utilizada neste trabalho.
Tabela 2 - Elementos de um XSD
Elemento
Import
simple type
Descrição
Define um outro XSD para ser importado e utilizado ou estendido.
Define um tipo de dado simples que pode ser reutilizado por um elemento ou
em uma mensagem
22
complex type
elemento
atribute
documentation
Define um tipo complexo de dados para ser reutilizado por um elemento ou
mensagem. Tipos complexos são estruturas semelhantes a classes Java.
Define um elemento para ser utilizado em uma mensagem. Um elemento
pode fazer parte de um tipo simples ou complexo.
Define uma característica para um elemento ou tipo de dados. Podem ser
utilizados para definir restrições.
Utilizado para documentação do esquema XML, semelhante à seção
documentation de um documento WSDL.
A Figura 4 apresenta um exemplo de esquema com os elementos principais
para transferir dados cadastrais de uma pessoa. Neste exemplo, é possível observar,
na representação do tipo complexo Pessoa, a utilização dos elementos representando
suas informações estruturadas em: nome completo, cpf, endereço, telefone e renda.
Além disso, o atributo endereço corresponde ao uso da estrutura referente ao tipo
complexo endereço (definida como contendo os elementos rua, número, bairro,
cidade e estado). Uma mensagem SOAP poderia tanto utilizar o elemento raiz
“pessoa”, ou utilizar diretamente o tipo complexo Pessoa.
Figura 4 - Exemplo de um XML Schema Definition
23
Além dos elementos já apresentados, também é possível perceber a utilização
de restrições de valores pré-definidos, obrigatoriedade de preenchimento, quantidade
de valores máxima, entre outros. Estas restrições adicionam ao esquema a
possibilidade de realizar validações antes mesmo que uma mensagem seja enviada a
um serviço. No exemplo apresentado, uma mensagem com o cpf de uma pessoa não
preenchido ou a existência de mais de um endereço tornaria esta mensagem inválida
antes mesmo da mensagem chegar ao provedor do serviço. A Tabela 3 apresenta
exemplos de restrições que podem ser especificadas em um XSD.
Tabela 3 - Lista de Restrições em um XSD
Restrição
enumeration
fractionDigits
Length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
Pattern
totalDigits
whiteSpace
Descrição
Define uma lista de valores válidos.
Especifica o número máximo de casas decimais permitidas.
Especifica o número exato de caracteres ou itens permitidos.
Especifica o valor máximo para valores numéricos.
Especifica o valor máximo para valores numéricos.
Especifica o número máximo de caracteres ou itens permitidos.
Especifica o valor mínimo (exclusive) para valores numéricos, ou seja, o
valor do campo deve ser maior que ao valor definido.
Especifica o valor mínimo (inclusive) para valores numéricos, ou seja, o
valor deve ser maior ou igual ao valor definido.
Especifica o número mínimo de caracteres ou itens permitidos
Define a sequência exata de caracteres permitidos.
Especifica o número exato de dígitos permitidos.
Especifica como caracteres vazios (tabs, espaços e retornos de carro) são
tratados.
Em SOA, trocas de informações entre serviços e/ou aplicações distribuídas
são constantes e fundamentais. As mensagens trocadas possuem informações que
devem estar estruturadas e especificadas em um contrato, podendo ser definidas em
um XSD. ESB
Um dos principais componentes de SOA é o ESB (Enterprise Service Bus)
que é a infraestrutura de mediação que permite invocar serviços em um ambiente de
sistemas distribuídos sem ser conexão ponto-a-ponto [Hewitt, 2009]. O ESB deve ser
capaz de fornecer um meio de comunicação entre provedor e consumidor que seja
estável, seguro, simples, integrado e independente de plataforma. A seguir, algumas
responsabilidades atribuídas ao ESB:
24

Prover conectividade
Na conexão ponto a ponto, a solicitação de requisição do serviço é feita
utilizando o endpoint onde o serviço está publicado. Neste tipo de abordagem, se o
endereço físico onde o serviço está alocado for alterado, o consumidor não poderá
acessá-lo enquanto não atualizar o endereço do serviço. Na conexão por mediação, o
consumidor não conhece o endereço físico do serviço. A requisição é feita ao ESB
que identifica o endpoint apropriado para o serviço. Essa abordagem possibilita
maior gerenciamento sobre mudanças, possibilidade do mesmo serviço ser provido
em diferentes sistemas e possibilita balanceamento de carga.
 Transformação de dados
Como a requisição do serviço é recebida pelo ESB e este é o responsável pela
integração entre consumidor e provedor, ele deve ser capaz de fazer transformações
nos dados da requisição para o formato entendido pelo consumidor e pelo serviço
provido. Em um ESB, os dados podem ser transformados utilizando XSLT e
consultados utilizando XQuery e XPath [Sousa et al., 2010], garantindo
conectividade e interoperabilidade entre consumidores e provedores que utilizam
tipos de dados distintos.
 Roteamento inteligente
O roteamento inteligente possibilita que mensagens de consumidores possam
ser encaminhadas a provedores específicos baseado em regras de negócios,
transformação de dados e adaptadores para aplicações [Papazoglou, 2007].

Tratar segurança
O ESB deve prover segurança aos consumidores dos serviços como
criptografia, autenticação, validação de cada solicitação de serviço e autorização para
validar os privilégios dos consumidores quanto ao acesso do serviço e codificação/
decodificação de conteúdo XML [Papazoglou, 2007].
 Administração de serviços
Manter repositório e registro de serviços disponíveis, permitindo que tanto
consumidor ou provedor possam identificar os serviços e utilizá-los.
25
 Monitoramento e logging
Dado que o ESB é o mediador de troca de mensagens entre aplicações
distribuídas, o ESB pode gerar arquivos de log, tanto de erros quanto de informações.
Isto permite monitorar o funcionamento das aplicações.
A Figura 5 mostra um exemplo de como o ESB provê conectividade e
interoperabilidade entre consumidores e provedores de serviços desenvolvidos em
plataformas distintas. O barramento fornece, por exemplo, abstração do destino físico
e as informações de conexão (como número de TCP / hostname e porta IP)
permitindo a conexão aos serviços utilizando nomes de conexão lógica que são
mapeados pelo ESB para saber o destino real de cada serviço. Este desacoplamento
lógico oferece aos serviços publicados no ESB a capacidade de serem atualizados,
movidos ou substituídos sem gerar impacto no consumidor do serviço [Papazoglou,
2007].
Figura 5 - Enterprise Service Bus (adaptado de [Papazoglou, 2007]).
2.6 BPM
A Gestão de Processos de Negócios (Business Process Management - BPM)
se refere a todas as atividades que visam gerenciar os processos de negócio de forma
sistemática. Essas atividades normalmente são apoiadas por meios tecnológicos e
26
visam trazer visibilidade e controle sobre os processos para que seus gestores sejam
capazes de identificar oportunidade de melhorias [Josuttis, 2007].
Processos bem definidos como Modelagem de Processos de Negócio
(Business Process Modeling), Análise de Processos de Negócio (Business Process
Analisys), Melhoria de Processos de Negócio (Business Process Improvement - BPI)
e Integração de Processos de Negócio (Business Process Integration - BPI) fazem
parte desse conceito que é a Gestão de Processos de Negócios.
Em particular, a modelagem de processos de negócio compreende a
construção de um conjunto de visões integradas que provê entendimento comum do
negócio e serve como base para comunicação, melhoria e inovação [Magalhães
2007]. A Figura 6 apresenta as principais perspectivas envolvendo os conceitos
contemplados em um modelo de processos de negócio e as descreve a seguir.
 Modelo organizacional (Quem?): documenta a hierarquia da organização
(áreas, grupos e papéis) permitindo sua visualização do nível mais alto até os
papéis organizacionais;
 Modelo de localização (Onde?): apresenta de forma hierárquica as
localizações geográficas da organização;
 Modelo de processos (Como?): apresenta a sequência de atividades que
compõem um processo de negócio;
 Modelo de atividades (Como?): apresenta as informações necessárias de
uma atividade, ou seja, o que é necessário para sua execução como:
informações de entrada e saída, sistemas que apoiam a atividade, papel que
executa a atividade, entre outros;
 Modelo de objetivos (Porquê): apresenta os objetivos de negócio da
organização de forma hierárquica;
 Modelo de eventos (Quando?): estabelece o momento de execução de uma
determinada atividade. Os eventos podem ser temporais, externos à
organização, provocados pela execução de outra atividade ou por seu
término;
27
 Modelo de produtos (O quê?): apresenta um resumo dos artefatos gerados
por um processo;
 Modelo de sistemas (O quê?): representa os sistemas que apóiam a execução
de atividades do processo de negócio.
Conceitos do modelo de negócio
Onde?
Quem?
Localização
Quando?
Papel
Como?
Evento
Departamento
Processo
Atividade
Por quê?
O quê?
Meta
Produto
Sistema
Regra de
negócio
Fatores
externos
Dados externos
Objetivo
Figura 6 - Perspectivas dos modelos de negócios [Magalhães, 2007].
Entre os diferentes modelos que compõem o modelo de negócio, destaca-se o
modelo de processos, que estabelece a sequência de atividades que compõem um
processo. Essencialmente, um processo é composto por um conjunto de atividades.
Estas atividades são partes bem caracterizadas do trabalho, realizadas em certo
momento por papéis, de acordo com um conjunto de regras definidas que
estabelecem a ordem e as condições em que as atividades devem ser executadas.
Cada atividade manipula um conjunto de produtos de trabalho (dados, documentos
ou formulários) durante sua execução [Sharp e McDermott, 2001].
A implantação de SOA em uma organização não é algo trivial; ao contrário,
requer esforços que vão além do escopo técnico, como necessidade de alinhamento
entre o negócio e a TI e mudança na cultura organizacional [Marks e Bell 2006].
Empresas com uma cultura orientada a processos conseguem entender melhor a
necessidade de romper as fronteiras da verticalização departamental e enxergar a
28
instituição de forma horizontal, entendendo que a produção de um produto ou serviço
ultrapassa as fronteiras departamentais e, muitas vezes, só faz sentido através da
interação/integração com pessoas e processos de outros departamentos.
A afirmativa acima não significa que empresas sem a cultura de
gerenciamento de seus processos estão fadadas a não conseguir implantar um modelo
SOA, mas certamente esse será mais um entre tantos fatores complicadores. Serviços
apresentados em SOA são parte dos processos de negócio das empresas. Logo, se
estes processos são bem definidos, conhecidos e gerenciados, o que se deve fazer é
identificá-los.
Através da modelagem de processos de negócio, é possível ter uma visão
sistemática das responsabilidades de cada papel, das informações necessárias e
produzidas em cada atividade do processo, dos artefatos gerados, da sequência de
atividades, das regras de negócio e dos sistemas que apoiam o processo.
Azevedo et al. [2009a, 2009b, 2009c, 2009e] apresentam heurísticas para
identificação de serviços candidatos que utilizam exatamente as informações
provenientes de processos de negócio modelados, conforme será abordado
sucintamente na seção 2.8.
2.7 Ciclo de Vida de Serviços
Gu e Lago [2007] argumentam que em SOA existem novas e diferentes
tarefas e adição de papéis que não pertencem ao modelo tradicional de engenharia de
software para desenvolvimento de serviços. Para alcançar alguns objetivos de SOA,
como reuso, interoperabilidade e durabilidade, um ciclo de vida sistemático e bem
definido é crucial. Além disso, considerando as características de SOA, surgem
novos desafios, tais como requisitos conflitantes, tratamento de segurança
considerando serviços distribuídos e alinhamento das soluções entre negócio e TI.
Gu e Lago [2007] avaliaram alguns modelos de ciclo de vida da literatura e da
indústria e propuseram um novo modelo de ciclo de vida evoluindo as propostas
existentes baseado em papéis (ou stakeholder), englobando as características
referentes à construção e à manutenção de serviços. No molde apresentado, estão
abordadas não somente as etapas de desenvolvimento do provedor, como também a
29
visão do consumidor e do broker. O objetivo da proposta é obter uma melhor
gerência sobre serviços para prover serviços de alta qualidade.
Neste trabalho, o foco está nas atividades desempenhadas pelo provedor de
serviços. Portanto, as atividades de responsabilidade do broker e do consumidor dos
serviços não foram tratadas ficando como trabalhos futuros considerando a extensão
do presente trabalho.
A seguir são descritas as atividades do provedor de serviços considerando as
três fases utilizadas por Gu e Lago [2007] na definição do ciclo de vida: Projeto,
Execução e Mudança.
2.7.1 Fase de Projeto
Esta fase engloba os passos entre a identificação e descoberta do serviço e o
desenvolvimento e teste do mesmo, que podem ser descritos da seguinte forma.
 Pesquisa de Mercado – O objetivo deste passo é avaliar o mercado e orientar
o desenvolvimento do serviço. Uma boa pesquisa previne a criação de
serviços não benéficos ou com pouco uso;
 Engenharia de Requisitos – Passo onde as ideias e demandas são coletadas.
São avaliados alguns pontos como: potencial de reusabilidade, maior
adequação às necessidades de mercado, acesso ao serviço pelos consumidores
e manutenibilidade do serviço;
 Modelagem de Negócio – Após o levantamento de requisitos, o objetivo é
modelar o processo de negócio referente ao serviço, definindo escopo e
objetivo do serviço. Normalmente, um analista de negócio deve participar
dessa etapa;
 Projeto do Serviço – Nesta fase, o arquiteto define o projeto do serviço,
definindo os requisitos funcionais e não-funcionais. A parte técnica do
contrato é definida nesta fase. Além disso, é feita pesquisa no registro de
serviços para identificar aqueles que podem ser reutilizados;
 Desenvolvimento do Serviço – A equipe de desenvolvimento implementa o
serviço especificado de acordo com os requisitos definidos. Além disso,
testes de integração com outros serviços devem ser realizados bem como e
testes do serviço em si. Somente após estar aderente aos requisitos, o serviço
é liberado para a equipe de testes;
30
 Testes do serviço – Passo onde deve ser garantida a liberação do serviço para
uso comercial. O objetivo não é somente identificar falhas, mas garantir a
qualidade do serviço.
2.7.2 Fase de Execução
Esta fase engloba os passos de publicação, disponibilização e monitoramento
do serviço registrado, os quais são descritos a seguir.
 Publicação do Serviço – Após obter um serviço desenvolvido e testado, esta
atividade tem o objetivo de publicá-lo em um registro de serviços, a fim de
que o serviço seja mais facilmente localizado pelos seus possíveis
consumidores;
 Disponibilização do Serviço – Nesta etapa, há uma interação com o
consumidor para definir um acordo de nível de serviço. No contrato, podem
ser consideradas informações de custo, disponibilidade, desempenho do
serviço e regras de acesso. Estas características definem o que é chamado de
nível de acordo de serviço (SLA – Service Level Agreement), o qual define
um conjunto de acordos entre consumidor e provedor. Após a assinatura da
SLA, o consumidor obtém autorização e acesso ao serviço;
 Monitoramento do Serviço – Este passo consiste em monitorar o estado do
serviço considerando, dentre outras coisas, tempo de resposta, falhas durante
a execução, disponibilidade, etc. Enquanto o serviço estiver sendo
disponibilizado, esta etapa se mantém ativa, para garantir que os termos da
SLA sejam atendidos.
2.7.3 Fase de Mudança
Esta fase representa o processo de manutenção e mudança do serviço. Nesta
fase, são avaliadas possíveis mudanças nos requisitos de negócio ou nos níveis de
acordo de serviço definidos. Caso sejam necessárias alterações, o ciclo de vida do
serviço deve retornar à engenharia de requisitos (ou outra etapa anterior de acordo
com a necessidade) e passar novamente pelas etapas seguintes no ciclo de vida.
31
2.8 Métodos para Identificação, Análise e Projeto de
Serviços
Azevedo et al. [2009e] ajustaram a proposta de Gu e Lago [2007] para
contemplar um ciclo de vida de desenvolvimento de serviços em uma organização
orientada a gestão de processos de negócio, ou seja, que tenha iniciativas de
modelagem de processos de negócio. Esta é uma premissa deste trabalho.
A proposta de Azevedo et al.[2009e] inclui a substituição da atividade
“Mapeamento do mercado” por “Modelagem do negócio”. Esta atividade tem como
objetivo ter a modelagem dos processos de negócio da organização, a fim de que
estes sirvam como base para a identificação de serviços, a partir de uma demanda de
desenvolvimento de sistema. Além disso, foi proposta a inclusão de uma atividade de
identificação de serviços a partir de processos de negócio.
Neste trabalho, é considerado que os processos de negócio referentes à
demanda de implementação de serviços já estão elaborados. Logo, os passos tratados
neste trabalho iniciam a partir da identificação de serviços.
Esta seção apresenta resumidamente os métodos para identificação, análise e
projeto de serviços a partir da modelagem de processos. Maiores detalhes podem ser
encontrados em Azevedo et al. [2009a, 2009b, 2009c, 2009e, 2001] e Dirr et al.
[2012].
2.8.1 Identificação de Serviços
A identificação de serviços efetua uma análise top-down dos modelos de
processos, a fim de identificar serviços candidatos a partir de elementos sintáticos e
semânticos de modelos de processos de negócio. Um serviço candidato é uma
abstração (não implementada) de serviço identificada durante a fase de identificação
de serviços que poderá ser implementada futuramente como serviço ou como
funcionalidade de uma aplicação [Erl, 2005]. Os serviços candidatos identificados
são classificados em:
32
 Serviço candidato de dados: Executa apenas operações de acesso a
dados, tais como, criar, recuperar, atualizar e remover, ou seja,
operações CRUD (Create, Retrive, Update e Delete);
 Serviço candidato de lógica: Serviço que executa uma lógica do
negócio. Devido à abstração na definição do serviço, estes serviços
não estão apenas limitados à execução de lógica de negócio, podendo
também executar operações CRUD. No entanto, o foco desta classe de
serviços está em executar lógica do negócio;
 Serviço candidato utilitário: Serviço que provê funções cuja estrutura
pode ser generalizada e utilizada em mais de um processo de negócio.
Cada serviço candidato encontrado é descrito considerando um conjunto de
informações, as quais são apresentadas na Tabela 4.
Tabela 4 - Template para descrição de serviço candidato
Nome
<nome do serviço candidato>
Tipo
<indicação do tipo de serviço candidato: negócio, dado, utilitário>
Entrada
<informação necessária para o serviço poder executar>
Saída
<informação retornada pelo serviço>
Origem
<indicação da heurística utilizada para identificar o serviço>
Atividades
<lista de atividades consideradas para identificação deste serviço candidato>
Padrão recorrente
<quando constatado para o serviço candidato, este campo indica o padrão
baseado em função recorrente em fluxos de processos de negócio ou padrão
relacionado a aspectos específicos de estrutura organizacional>
Descrição
<breve descrição do serviço candidato>
Observação
<informações relevantes para a fase de projeto de serviços>
Por ser um cenário bastante variado, com grande número possível de
soluções, a alternativa encontrada para a identificação de serviços candidatos foi o
uso de métodos heurísticos. A seguir são listadas as heurísticas do método de
identificação de serviços. Maiores detalhes são apresentados em Azevedo et al.
[2009a, 2009b, 2009c, 2009e].
 Heurística de regras de negócio - Toda regra de negócio deve ser identificada
como um serviço candidato;
 Heurística de requisitos de negócio – Todo requisito de negócio deve ser
identificado como um serviço candidato;
33
 Heurística de informações entrada/saída – Toda informação de entrada e
saída de uma atividade deve ser identificada como um serviço candidato de
leitura/escrita em uma base de dados;
 Heurística de atividades seqüenciais – Para um conjunto de atividades
seqüenciais automatizadas ou apoiadas por sistema, deve ser identificado
um serviço candidato;
 Heurística de AND – Um serviço candidato deve ser identificado a partir de
uma estrutura iniciada em um ponto do workflow, na qual o fluxo subdividese em processos executados em paralelo, e finalizada em um ponto onde
esses processos convergem novamente;
 Heurística de XOR – Um serviço candidato deve ser identificado a partir de
uma estrutura iniciada em um ponto no workflow onde, baseado em uma
decisão, uma e somente uma de várias ramificações do fluxo é escolhida, e
finalizada em um ponto no workflow onde as ramificações do fluxo se juntem
sem sincronização ou quando uma ou mais das ramificações termine em
evento final;
 Heurística de OR – Um serviço candidato deve ser identificado a partir de
uma estrutura iniciada em um ponto no workflow onde, baseado em uma
decisão, uma ou mais ramificações do fluxo são escolhidas e finalizadas em
um ponto no workflow onde as várias ramificações do fluxo se juntem. Se
mais de um dos fluxos de origem for executado, então é necessário
sincronizá-los. Ramificações podem também terminar em um evento final;
 Heurística de Loop – Um serviço candidato deve ser identificado a partir de
uma estrutura do workflow onde uma ou mais atividades podem ser
executadas repetidamente, formando um ciclo;
 Heurística de interface de processo – Caso um processo seja iniciado por
uma interface e seja seguido de uma ou mais atividades automatizadas, um
serviço candidato deve ser identificado. Da mesma forma, caso um processo
seja finalizado por uma interface e a atividade(s) anterior(es) seja
automatizada, um serviço candidato deve ser identificado;
34
 Heurística de atividade de múltiplas instâncias – Toda atividade de múltiplas
instâncias deve dar origem aos seguintes serviços candidatos: (i) serviço
candidato para o remetente da mensagem transmitir as mensagems para os
destinatários; (ii) serviço candidato para cada destinatário; e (iii) serviço
candidato para consolidar as execuções de diferentes instâncias e repassálas para o remetente.
Após a execução de cada uma das heurísticas, tem-se uma lista de serviços
candidatos resultante. Entretanto, existe a possibilidade de termos serviços
duplicados, serviços que na realidade não precisarão ser implementados, ou mesmo
serviços que estão com uma granularidade muito fina para serem implementados
como serviços separados. Dessa forma, é necessário levantar informações dos
serviços a fim de auxiliar o analista SOA a analisar os serviços gerados. Isto é feito
no passo de consolidação de serviços candidatos. Este passo tem o objetivo de gerar
um conjunto de informações em tabelas, gráficos, grafos de dependência, etc. que
serão utilizadas por analistas SOA para decidir como os serviços candidatos serão
implementados. Esta etapa inclui a execução das seguintes heurísticas.
 Heurística de eliminação de serviços candidatos - Devem ser eliminados
todos os serviços candidatos que apareçam duplicados ou que refiram a
regras que explicitam valores padrão;
 Heurística de grau de reuso de serviço candidato - O grau de reuso de um
serviço candidato identificado a partir de uma atividade corresponde à soma
do número de ocorrências de cada atividade em que o serviço está
relacionado. O grau de reuso de um serviço candidato identificado a partir
de um conjunto de atividades é igual ao número de ocorrências do conjunto
de atividades na mesma ordem que esta foi definida no serviço. Além disso,
quando um serviço candidato A faz parte da composição de outro serviço
candidato B, então deve-se somar o grau de reuso do serviço composto B ao
grau de reuso do serviço A calculado previamente;
 Heurística de grau de reuso de serviço candidato identificado a partir de
atividade de múltiplas instâncias - O serviço identificado a partir de
atividades de múltiplas instâncias deve conter uma marcação especial a fim
35
de indicar que o seu reuso é maior do que o calculado pela heurística de
grau de reuso de serviço candidato, pois ele também é reutilizado por cada
instância da atividade, isto é, seu uso é, em geral, maior do que serviços não
identificados a partir de atividades de múltiplas instâncias;
 Heurística de associação de serviços candidatos com sistemas - Um serviço
candidato identificado a partir de um requisito de negócio deve ser
associado aos sistemas que o implementam o requisito, caso ele já tenha
sido implementado;
 Heurística de associação de serviços candidatos com requisitos da demanda Um serviço candidato identificado a partir de um requisito de negócio da
demanda deve ser associado ao respectivo requisito da demanda;
 Heurística de associação de serviços com papéis - Um serviço candidato deve
ser associado aos papéis que executam a(s) atividade(s) que lhe deram
origem;
 Heurística de associação de serviços com atividades - Um serviço candidato
deve ser associado à(s) atividade(s) que lhe deram origem;
 Heurística de associação de serviço de dados - Serviços de dados de leitura
ou escrita identificados a partir da mesma informação de entrada/saída
devem ser associados um ao outro;
 Heurística de associação de clusters com modelo conceitual - Serviços de
dados identificados a partir de informações que representem a mesma visão
dos dados da organização devem ser associados uns aos outros;
 Heurística de associação de serviços candidatos a partir de associações entre
elementos do modelo - Um serviço candidato deve ser associado aos
serviços candidatos que o utilizam. Esta informação é obtida a partir da
associação entre regra de negócio × regra de negócio, regra de negócio ×
requisito de negócio, regra de negócio × cluster e requisito de negócio ×
cluster, quando esta está explícita na modelagem;
 Heurística de identificação de serviços utilitários - Um serviço utilitário
candidato deve ser identificado a partir de um ou mais serviços candidatos
36
previamente identificados quando, pela análise dos modelos de processos de
negócio, for constatado que este(s) serviço(s) faz(em) parte de um padrão
baseado em funções recorrentes de processos de negócio ou de um padrão
relacionado a aspectos específicos de estrutura organizacional que podem
ser generalizados [Thom et al.,2007].
Ao fim desta etapa, têm-se uma lista de serviços candidatos com informações
(presentes, por exemplo, em tabelas, grafos e gráficos) que ajudarão o analista a
decidir quais devem ser implementados como serviços de software (por exemplo,
como web services) ou serão implementados como funcionalidades de aplicações. A
etapa seguinte ajuda a tomar esta decisão, e corresponde à análise de serviços.
2.8.2 Análise de Serviços
Nesta fase é realizada a análise dos serviços candidatos identificados
anteriormente com objetivo de produzir um grupo de serviços com nível de
granularidade apropriado para a fase de projeto. Os serviços resultantes devem estar
alinhados aos requisitos de negócio e, ao mesmo tempo, deve haver preocupações
como durabilidade e reuso.
Para auxiliar nesta tomada de decisão são definidos os seguintes passos: (i)
Priorização de serviços candidatos; e (ii) Definição de grupos de serviços. Detalhes
desta fase são apresentadas por Azevedo et al. (2011) e descritos de forma resumida
a seguir.
2.8.2.1 Priorizar serviços candidatos
Nesta etapa os serviços de maior importância e maior contribuição para a
organização serão destacados através do cálculo da prioridade de cada serviço
candidato. As heurísticas utilizadas nesta etapa são descritas a seguir.
 Heurística de grau de reuso de cada serviço candidato - Agrupar serviços
candidatos para cada diferente grau de reuso encontrado, listando grau de
reuso e quantidade de serviços candidatos correspondente ao grau de reuso.
Em seguida, definir pesos para cada agrupamento;
37
 Heurística de associação de serviços candidatos com sistemas - Agrupar
serviços candidatos que estão associados a cada sistema que os implementa,
listando sistema e quantidade de serviços candidatos. Em seguida, definir
pesos para cada agrupamento;
 Heurística de aumento de peso de serviços candidatos identificados a partir de
atividades de múltiplas instâncias - Atribuir maior peso para serviços
candidatos identificados a partir de atividades de múltiplas instâncias;
 Heurística de associação de serviços candidatos com requisitos da demanda Definir pesos para serviços candidatos associados aos requisitos da
demanda. Definir maior peso para serviços candidatos associados aos
requisitos de uma demanda com maior prioridade;
 Heurística de serviços candidatos com papéis - Agrupar serviços candidatos
que estão associados a cada papel, listando papel e quantidade de serviços
candidatos. Em seguida, definir pesos para cada agrupamento;
 Heurística de cálculo de priorização de serviços candidatos - Calcular
priorização de serviços candidatos de acordo com o somatório dos pesos
definidos em cada heurística de priorização;
 Heurística de detalhamento de priorização de serviços candidatos a partir de
fluxo - Priorizar serviços de fluxo de acordo com as informações levantadas
para caracterização dos mesmos, tais como: número de atividades que
compõem o fluxo; número de modelos nos quais o mesmo fluxo é reutilizado;
número de entidades tratadas pelo fluxo; e número de raias diferentes
existentes no fluxo do serviço; número de sub-fluxos. Para cada uma destas
informações, pesos devem ser definidos, atribuídos a cada caso e o
somatório dos pesos corresponde à importância dos serviços de fluxo;
38
 Heurística de granularidade de serviços candidatos – Elaborar um mapa de
granularidade e posicionar serviços com menor granularidade (grossos) no
topo enquanto que serviços com maior granularidade (finos) ficam na base
do mapa. Serviços com granularidades intermediárias ficam entre os
serviços grossos e finos de acordo com sua granularidade.
2.8.2.2 Definição de grupos de serviços
Nesta fase, o objetivo é agrupar os serviços candidatos, sejam de dados ou de
lógica, de acordo com similaridade de operações ou por manipularem o mesmo
grupo de entidades. Deve ser considerado o reuso dos serviços para que o
agrupamento seja feito adequadamente. As heurísticas utilizadas neste passo são
resumidas a seguir.

Heurística de agrupamento de serviços de dados – Associar serviços de dados
de acordo com entidades e operações CRUD. Definir canais de comunicação
para operações de leitura e reduzir custo de comunicação entre os mesmos;
 Heurística de agrupamento de serviços de lógica – Agrupar serviços de
lógica de acordo com os padrões de uso do serviço na organização.
2.8.3 Projeto de Serviços
Aplicações SOA consistem principalmente pela composição de serviços
interoperáveis, padronizados e reutilizáveis em outras composições ou aplicações
[Erl, 2007]. Para que estes objetivos sejam alcançados, após a análise dos serviços
candidatos, eles devem ser projetados considerando princípios de projeto, tais como:
padronização de contrato de serviço, utilização de serviços existentes, composição,
abstração de serviços, baixo acoplamento, reuso e autonomia [Erl, 2008].
Algumas heurísticas podem ser utilizadas para que o projeto possa seguir os
padrões abordados. Tais heurísticas são apresentadas por [Azevedo et al., 2009c] e
resumidas na Tabela 5.
39
Tabela 5 - Resumo de projeto de serviços [Azevedo et al., 2009c]
Princípio
Comunicação
assíncrona
Tipo de dados
heterogêneos
Descrição
Para cada serviço, priorizar implementação utilizando comunicação assíncrona
Antes de criar um tipo de dado na implementação do serviço, verificar os tipos
de dados existentes no modelo canônico.
Não definir tipos de dados homogêneos para todos os contratos dos serviços.
Mediadores
Utilizar mediadores para invocação de serviços.
Verificação de
tipos
Utilizar verificação de tipos nos mediadores quando o contrato do serviço
estiver estável.
Padrão de
interação
Utilizar tipos de dados comuns em diversas linguagens de programação.
Controle de
transação
Definir operações de compensação para as operações do serviço.
Controle da lógica
do processo
Em ambientes controlados, onde se ter um controlador central não causa
problemas de gargalo, utilizar orquestração de serviços para composição de
serviços. Caso o controlador central esteja impactando o desempenho da
composição, utilize coreografia de serviços.
Versionamento
Utilizar transformação de mensagens no barramento para realizar um
versionamento implícito dos tipos de dados.
Especificação
Separar a especificação do serviço da sua implementação, descrevendo um
modelo técnico (contrato) e um modelo conceitual (requisitos, restrições, etc.).
Descrever formalmente a especificação do serviço.
Prover nomes significativos e bem descritivos do serviço e suas operações
baseado no domínio do negócio, não na tecnologia.
Publicar descrição dos serviços em um repositório de contratos.
Projetar serviços que possam ter uma demanda maior que a esperada.
Serviços semelhantes devem ser consolidados em um serviço. A assinatura do
serviço deve ser definida de acordo com a função mais genérica. Se as funções
consideram diferentes requisitos não funcionais, então deve ser considerado o
requisito funcional mais restritivo.
Reuso
Todas as funções atualizando ou modificando uma entidade (ou seja, operações
de CRUD) devem ser agrupadas em um bloco de funções relacionadas à
entidade.
Ausência de estado
Granularidade
Evite criação de serviços que guardam estados. Se necessário guardar estados,
utilize a linguagem BPEL para tal.
Verificar se as informações processadas por um serviço estão de acordo com as
informações esperadas pelos consumidores.
Projetar serviços com granularidade baixa para disponibilizar serviços com alto
valor ao negócio.
Conforme abordado por [Dirr et al., 2012], o projeto dos serviços deve
considerar as seguintes heuríticas:
 Separar serviços de dados de serviço de lógica – Devido à diferença de
características, serviços de dados e de lógica devem ser separados em
40
diferentes projetos. Serviços de dados correspondem a operações CRUD em
cada entidade do negócio e, em geral, possuem alto grau de reuso. Serviços
de lógica executam operações correspondentes a regras do negócio e,
normalmente, utilizam-se dos serviços de dados;
 Projetar o modelo canônico dos serviços – O modelo canônico contém
todos os dados estruturados aderentes aos requisitos do negócio. Projetá-lo
reduz necessidades de transformação de dados e negociação de formatos,
além de endossar o reuso dos dados existentes;
 Definir operações dos serviços – Devem ser definidas as operações dos
serviços que correspondem aos serviços candidatos identificados. Um
serviço candidato pode corresponder a uma operação ou várias operações de
um serviço bem como vários serviços candidatos podem corresponder a uma
única operação de um serviço;
 Modelagem dos serviços candidatos – Durante esta fase, deve ser
documentada toda a especificação do serviço utilizando linguagem para
modelagem de sistemas, como, por exemplo, UML ou UML com perfil
voltado a SOA. Isto significa que podem ser desenvolvidos: modelo de
classes para entidades do negócio, interfaces dos serviços, e diagrama de
atividades para execução do serviço.
Esta sequência de atividades é o que [Erl, 2008] define como um
acoplamento de lógica para contrato, ou contract-first, garantindo que a lógica do
negócio estará totalmente incorporada ao contrato do serviço.
2.9 Orquestração e coreografia
Composição de serviços é um conceito importante em SOA pois permite criar
um novo serviço a partir da composição de serviços existentes [Josuttis,2007]. Dois
conceitos básicos são empregados: Orquestração e Coreografia.
Em uma orquestra, os integrantes da banda são comandados por um maestro
para produzir a música. Em SOA, orquestração de serviços possui o mesmo
41
princípio, onde um controlador central (maestro) coordena um conjunto de serviços,
formando um serviço de mais alto nível [Josuttis, 2007].
Orquestração não é a única solução para composição de serviços,
principalmente quando o processo de negócio é muito extenso, tornando árdua a
tarefa de manter um controlador central coordenando inúmeras tarefas. Coreografia é
uma abordagem para composição de serviços, onde nenhum serviço possui
conhecimento do processo como um todo, somente quando e com qual serviço deve
interagir [Juric, 2007]. A Figura 7 ilustra as diferenças entre coreografia e
orquestração, onde uma orquestração funciona similar a um processo de negócio com
um dos serviços atuando como controlador do processo, e uma coreografia onde os
serviços chamam uns aos outros.
Figura 7 - Diferença entre coreografia e orquestração (adaptado de Peltz [2003])
BPEL (Business Process Execution Language) ou WS-BPEL é a linguagem
padrão para composição de serviços implementados como web services, baseada na
orquestração de serviços [Fatinato, 2007]. Ela foi definida com a junção de normas
da OASIS (Organization for the Advancement of Structured Information Standards)
e utiliza o padrão XML. A linguagem permite utilizar as principais vantagens de
orquestração, tais como tratamento de exceção, compensação e flexibilidade de
inserção de serviços [Ministro et al. 2011]. Apesar disso, em casos onde os serviços
tenham conhecimento dos dados de saída do serviço anterior e de entrada do serviço
seguinte, o uso de coreografia será o mais indicado, podendo, inclusive, coexistir
ambos os tipos de composição em um ambiente distribuído.
42
Capítulo 3:
Contract-First: projetando web services
interoperáveis
Este trabalho tem o objetivo de se aprofundar no desenvolvimento de serviços
com foco na abordagem contract first. Dessa forma, este capítulo apresenta os
principais conceitos relacionados com a especificação de um bom contrato de serviço
indicando as abordagens utilizadas. Detalhes técnicos são apresentados no Capítulo
4.
Dessa forma, são apresentados: conceitos de contrato de serviços; boas
práticas e regras para especificação de contratos definidas pela WS-I (Web Services
Interoperability Organization) na especificação do Basic Profile (BP); abordagem de
centralização de esquema e como esta abordagem foi empregada neste trabalho; e
padrões de projeto para criação de esquemas XML.
3.1 Contrato de serviço
Um contrato de serviço determina tudo que um serviço deve fazer de um
provedor específico para um consumidor específico [Josuttis, 2007]. Desta forma,
um contrato deve conter informações sobre todos os requisitos do serviço, incluindo
aspectos não-funcionais, como qualidade e segurança.
Hewitt [2009] apresenta que “um contrato de serviço não é somente o WSDL,
mas podem ser incluídos itens como políticas, acordos de nível de serviço (SLA),
autorizações de usuário...”. Assim, o conceito de contrato de serviço corresponde a
uma especificação mais completa possível para que o consumidor saiba tudo que é
necessário para poder utilizar o serviço.
Erl [2007] divide o contrato de serviço em duas categorias distintas:
documentos técnicos e documentos adicionais, conforme Figura 8.
Figura 8 - Contrato de Serviço (adaptado de Erl [2007])
A documentação técnica inclui os seguintes artefatos:
 WSDL: descreve aspectos abstratos e concretos de serviços, provendo
informações sobre suas operações, mensagens trocadas entre provedor e
consumidor, o endereço físico para acessar o serviço (endpoint) e protocolo
de transporte;
 XSD: contém as definições de tipos de dados necessários à troca de
mensagem pelos serviços. A centralização dos tipos de dados no XSD e sua
declaração como um arquivo a parte proporcionam a reutilização desses
tipos por outros serviços. Para utilizar o XSD, o WSDL deve importá-lo;
 WS-Policy: define assertivas de políticas (regras, requisitos e obrigações) que
podem ser definidas e anexadas ao WSDL. Especifica informações de
qualidade de serviços e complementa a descrição do WSDL. Assim, cabe ao
WSDL definir os requisitos funcionais e ao WS-Policy definir os requisitos
não-funcionais.
Documentos adicionais contêm descrições não técnicas que complementam
as definições técnicas do contrato. São exemplos deste tipo de documentação:
contrato como qualidade de serviço (QoS) e acordo de nível de serviço (SLA).
44
Para serviços baseados em SOAP, o WSDL representa a parte física do
contrato [Hewitt, 2009]. O método que constrói o WSDL primeiro e posteriormente
codifica os requisitos em uma linguagem de programação (como, por exemplo, Java)
a partir das definições presentes no WSDL é chamado contract-first. Em
contrapartida, o método onde primeiro é feita a codificação do serviço e a partir da
codificação o WSDL é gerado é chamado code-first ou contract-last.
Ambos os métodos estão relacionados à geração do WSDL e, implicitamente,
à geração do XSD, que é o foco do presente trabalho. Apesar de suas importâncias no
ciclo de vida de serviços, os demais componentes do contrato de serviço não são
considerados neste trabalho, o qual foca o conceito de contrato especificamente à
construção do WSDL.
3.2 Conformidade com WS-I Basic Profile (BP)
SOA é um paradigma para a realização e manutenção de processos de
negócio em um grande ambiente de sistemas distribuídos que são controlados por
diferentes proprietários [Josuttis, 2007]. A integração entre sistemas que utilizam
distintas tecnologias de desenvolvimento e plataformas é viável através da utilização
de serviços independentes de plataforma e protocolo. O padrão de fato para
desenvolvimento de serviços é web services [Erl, 2007]. Contudo, para garantir sua
utilização pelo maior número de consumidores possíveis é importante seguir boas
práticas de desenvolvimento.
O desenvolvimento de web services requer utilização de uma série de
especificações, como, por exemplo, XSD, WSDL, SOAP, etc. Em cada
especificação, há diversas possibilidades de configuração de seus recursos. Desta
forma, o desenvolvedor está livre para efetuar escolhas em uma variedade de
possibilidades, tais como, camadas de transporte, políticas de segurança, mecanismos
de codificação de mensagem, versão de XML utilizado, entre outros. É justamente
esta combinação de possibilidades que dificulta a interoperabilidade entre serviços.
Para
minimizar
essas
dificuldades
e
prover
o
maior
nível
de
interoperabilidade possível, a WS-I – um consórcio composto de um grande número
de fornecedores – definiu padrões para implementação de serviços. Seu produto
45
principal é o Basic Profile (BP), que consiste em um conjunto de padrões e boas
práticas. O BP auxilia os desenvolvedores a escolherem as configurações de seus
web services de forma a garantir interoperabilidade com o maior número de
plataformas tecnológicas.
Hewitt [2009] sumarizou os padrões e boas práticas menos óbvios presentes
no BP. Boa parte da lista indicada por Hewitt foi utilizada no presente trabalho. A
seguir seguem descrições do que foi empregado:

O elemento <body> de um <SOAP envelope> deve conter exatamente zero
ou um elemento filho e deve ser namespace qualified, ou seja, os elementos
e/ou tipos utilizados no esquema devem estar de acordo com o namespace
especificado como targetNamespace. Não deve conter instruções de
processamento ou utilizar DTD;

Utilize literal message encoding em detrimento de SOAP encoding.
Utilizando literal, os elementos e/ou tipos complexos existentes na mensagem
são legíveis (literais) tanto para o consumidor quanto para o provedor,
estando desacoplada de linguagem e codificação. Utilizando encoded, as
mensagens são codificadas utilizando SOAP-Encoding, gerando um
acoplamento com esta tecnologia;

Apesar de ser permitido pela especificação SOAP 1.1, não se deve utilizar
notação de ponto para redefinir o significado de um elemento <faultcode>.
Essa abordagem simplifica o significado do erro. O BP indica que o
detalhamento da informação contida no elemento <faultstring> deve ser
mantido;

A utilização de SOAP 1.1 é restrita ao protocolo HTTP. O protocolo HTTP
recomendado para utilização é HTTP 1.0 ou HTTP 1.1;

Apesar de SOAP Action ter a pretensão de auxiliar na indicação da rota de
mensagem para uma determinada operação, na prática os serviços não
permitem a utilização de SOAP Action, de forma que toda a informação
pertinente é realizada no envelope SOAP e não em cabeçalhos HTTP. Assim,
SOAP Action deve ser utilizado somente com uma dica;
46

Todas as SOAP Actions devem ser especificadas no WSDL utilizando uma
string entre aspas. Se as SOAP Actions não forem especificadas, deve-se
utilizar uma string vazia entre aspas;

Os cookies podem ser utilizados, mas sua utilização não é incentivada porque
consumidores que não suportam cookies não estão aptos a utilizarem o
seviço. Cookies não tem relação com SOAP e, por isso, não parece uma boa
idéia desenvolver serviços que dependam deles. Desta forma, apesar do BP
permitir sua utilização, essa tecnologia não é utilizada neste trabalho;

Utilize XML 1.0 porque esta é a única versão que o BP oferece suporte para
XML Schema e WSDL;

Utilize codificação UTF-8 ou UTF-16;

Tanto a especificação do WSDL quanto o BP recomendam a separação de
arquivos WSDL em componentes modulares e criação de arquivos que
separam a definição abstrata da definição concreta do WSDL;

Ao importar um WSDL, deve haver coerência entre os namespaces de ambos
os arquivos. Isso significa que o targetNamespace indicado no elemento
<definitions> do WSDL importado deve ser o mesmo namespace utilizado no
WSDL
que o está importando. A Figura 9 e a Figura 10 apresentam
exemplos desta boa prática do serviço TratarCliente, cujo WSDL foi dividido
em dois: um para a parte abstrata do WSDL serviço e o outro para sua parte
concreta. A Figura 9 apresenta à seção definition do WSDL abstrato que é
importado pelo WSDL concreto. A Figura 9 corresponde a parte do WSDL
concreto ilustrando a importação do WSDL abstrato, utilizando o mesmo
namespace utilizado no WSDL abstrato;
Figura 9 – Trecho de WSDL abstrato que é importado
47
Figura 10 – Trecho de WSDL concreto que importa o WSDL abstrato

Utilize somente os recursos proporcionados pela especificação do WSDL. A
utilização de extensões de WSDL pode implicar na inviabilidade de consumo
de serviços por parte de alguns consumidores que não suportam tais
extensões;

O BP não permite o uso de tipos de arrays no WSDL 1.1 devido à diversidade
de interpretações de como estes devem ser utilizados. Essa diversidade
implica em uma série de problemas de interoperabilidade. Uma solução
alternativa simples ao uso de arrays é definir o atributo maxOccurs de um tipo
complexo com um valor maior que 0. É possível determinar um número
indeterminado utilizando o valor unbounded para maxOccurs;

Os estilos existentes na costrução de um WSDL são Document e RPC.
Quando o modelo selecionado é Document, as mensagens de entrada e saída
representam documentos, ou seja, referem-se a um parts cujo tipo é element
na seção body do WSDL. Quando o modelo selecionado é RPC, as
mensagens correspondem aos parâmetros de entrada e retorno, e deve-se
utilizar obrigatoriamente types (simples ou complexos). O BP permite a
utilização de ambos os estilos;

Web services são capazes de abtstrair o conteúdo de mensagens e operações
fora da camada de transporte. Entretanto, apenas SOAP é suportado pelo BP
em elementos <binding> (vide Tabela 1 para entendimento de binding).
48
O BP define boas práticas e padrões de projetos para web services. Cabe ao
desenvolvedor identificar os padrões necessários a seus serviços. Essa identificação
deve levar em consideração os requisitos funcionais e não-funcionais.
3.3 Centralização de Esquema
A definição dos tipos de dados a serem empregados nas mensagens trafegadas
pelos serviços é uma questão essencial. A questão que surge é a centralização de
esquema versus a definição de esquemas descentralizados.
A descentralização de esquema refere-se a especificação dos tipos de dados
de um serviço de forma independente dos demais serviços. As vantagens neste tipo
de abordagem é o fato de uma alteração em um tipo consumido ou retornado por um
serviço não gerar impacto em outros serviços. No entanto, aumenta-se a necessidade
de se realizar transformações de dados na comunicação entre serviços que utilizam
tipos de dados com estruturas diferentes, mas que representam a mesma informação.
Erl [2008] apresenta o padrão centralização de esquema e defende a definição
de um esquema "oficial" para cada conjunto de informações. Contratos de serviços
podem compartilhar esses esquemas centralizados. O objetivo é padronizar os tipos
de dados em um determinado domínio, seja um processo, uma indústria (financeira,
farmacêutica, petrolífera, etc.) ou a organização inteira.
A centralização do esquema de dados proporciona a eliminação de tipos
redundantes. Neste projeto, essa abordagem se torna viável devido ao conhecimento
das informações necessárias ao processo, identificadas na modelagem do processo e
pela definição das entidades e seus relacionamentos, mapeadas em um modelo
canônico.
Essa abordagem aumenta a possibilidade de reutilização do serviço, garante
sua interoperabilidade e aumenta sua eficiência por reduzir o uso de transformação
de dados. Entretanto, aumenta o acoplamento dos serviços com os tipos de dados
comuns centralizados no esquema, o que pode significar um desafio à gestão dos
tipos fundamentais.
Alterações de semântica e atributos podem se tornar um sério problema para a
governança de uma arquitetura orientada a serviços, conforme exemplificado abaixo:
49
“Vamos supor que crie um tipo de dados harmonizado para clientes. Depois,
um sistema de contabilidade que pode precisar de mais dois novos atributos do
cliente para lidar com diferentes taxas de juros, enquanto um sistema de CRM pode
introduzir novas formas de endereços eletrônicos e um sistema de oferta pode
precisar dos atributos para lidar com a proteção da privacidade. Se o tipo de dados de
cliente é compartilhado por todos os seus sistemas (incluindo sistemas que não estão
interessados em nenhuma dessas novidades), todos os sistemas deverão estar
atualizados para refletir cada mudança, e o tipo de dado de cliente se tornará mais e
mais complicado.” [Josuttis, 2007].
Neste trabalho, com o intuito de obter os benefícios relativos ao padrão
centralização de esquema, mas minimizar a possibilidade de conceitos distintos em
relação às entidades identificadas e mapeadas, a centralização de esquema por
processo de negócio foi utilizada. Esta abordagem foi escolhida porque em um
processo mapeado e bem definido, o conceito sobre uma determinada entidade é
compartilhado a todos que participam deste processo.
Esta abordagem garante a interoperabilidade e eficiência dos serviços que
participam do processo e diminui a possibilidade de necessidade de redefinição de
uma determinada entidade apenas para um ou outro grupo de consumidores. Na
prática, isso significa que todos os consumidores que usufruem de serviços de um
determinado processo de análise de crédito têm o mesmo conceito sobre as entidades
(por exemplo, cliente, funcionário). Se um consumidor utiliza um serviço de um
processo de contabilidade para obter informações para um processo de marketing,
por exemplo, é possível que os atributos relativos à entidade cliente não sejam iguais,
necessitando um mapeamento prévio para garantir a transformação de dados e,
assim, a interoperabilidade. Apesar de não eliminar a necessidade de transformação
de dados, essa abordagem a minimiza e possibilita uma governança mais eficiente
sobre os dados.
3.4 Padrões de projeto de XML Schema
Seguindo as melhores práticas de padrão de XML Schema, Hewitt [2009]
propõe a utilização de alguns padrões de projeto para esquemas, buscando obter uma
50
mescla de coesão, acoplando, simplicidade e exposição de tipos. São eles: Boneca
Russa, Fatia de Salame, Veneziana e Jardim do Éden.

Boneca Russa: Consiste em um único elemento raiz global. Todos os outros
tipos e elementos são aninhados ao elemento raiz, sendo possível utilizá-los
somente uma única vez.

Fatia de Salame: Ao contrário do padrão boneca russa, todos os elementos
são globais, tornando o esquema reutilizável. Os tipos são somente locais.

Veneziana: É uma extensão do padrão boneca russa. Possui apenas um
elemento raiz global, entretanto os tipos são definidos externamente ao
elemento, e não aninhados.

Jardim do Éden: É uma combinação do padrão Fatia de Salame com o
padrão Veneziana. Sua proposta é maximizar o reuso definindo todos os
elementos e tipos como globais.
A Tabela 6 apresenta um comparativo entre os padrões abordados.
Tabela 6 - Comparativo entre padrões XML Schema
Padrão de Projeto
Vantagens

Boneca Russa (Russian
Doll)
Fatia de Salame
(Salami Slice)
Veneziana (Venetian
Blind)
Jardim do Éden
(Garden of Eden)
Desvantagens
Alta Coesão e acoplamento
mínimo
Facilidade de escrita e leitura do
esquema


Impossibilidade de reuso de
tipos
Impossibilidade de divisão
em dois ou mais arquivos


Fortemente acoplado
Documento extenso.


Facilidade de reuso
Suporta reuso em outros
documentos
Permite múltiplos arquivos
Facilidade de reuso


Fortemente acoplado
Documento extenso





Permite múltiplos arquivos
Extrema facilidade de reuso
Flexibilidade
Fácil manutenção
Baixo Acoplamento



Difícil de ler e entender
Documento extenso
Múltiplos elementos raiz



Observando os padrões abordados e levando em conta o domínio do processo
e a proposta de desenvolvimento dos serviços, será utilizado o padrão Jardim do
Éden, a fim de aproveitar vantagens cruciais da proposta, como uso de múltiplos
arquivos, facilidade de reuso entre vários serviços e o baixo acoplamento dos tipos
51
de dados. No entanto, serão realizadas adaptações para que possam ser minimizadas
as desvantagens apresentadas.
Dessa forma, o modelo canônico de um determinado processo deve ser
implementado considerando um esquema centralizado contendo suas entidades
básicas. Além deste esquema central, deve existir um esquema distinto para cada
entidade, localizado em um arquivo XSD a parte, representando seus
relacionamentos e cardinalidades. A Figura 11 apresenta um exemplo de um modelo
contendo as entidades Pessoa e Endereco apenas com as informações básicas de cada
uma delas. Já a Figura 12 apresenta uma visão da entidade Pessoa, mostrando que há
uma relação entre uma pessoa e seus endereços.
Figura 11 - XSD com entidades básicas
Figura 12 - XSD de visão
52
Para realizar essa divisão entre os esquemas, devem-se considerar os serviços
de candidatos identificados para avaliar que conjunto de dados deve ser usado em
cada serviço. Esses esquemas foram chamados de visões. Cada esquema de visão se
utiliza do esquema central para manipular os tipos de dados do domínio,
maximizando o reuso dos mesmos. A abordagem permite inclusive flexibilidade de
que novos esquemas de visão sejam criados, de acordo com a necessidade do serviço.
Adicionalmente, as especificações das estruturas das mensagens trocadas entre
serviços e seus consumidores possuem apenas informações relevantes à operação,
evitando o consumo de recursos desnecessariamente.
Essa abordagem possibilita a utilização do Jardim do Éden sem o ônus
relativo ao padrão, conforme demonstrado abaixo:
 Difícil de ler e entender: com o modelo de visões, os serviços utilizam
somente os esquemas necessários. Desta forma, não é apresentado ao
desenvolvedor todos os tipos complexos ou elementos relativos ao processo
de análise de crédito, mas somente aqueles necessários aos esquemas que
estão sendo utilizadas no WSDL;
 Documento extenso: como os esquemas são divididos em visões e cada visão
tem somente os tipos complexos ou elementos necessários à visão, o
documento fica potencialmente menor;
 Múltiplos elementos raiz: cada visão tem somente os tipos complexos ou
elementos necessários à visão, o que diminui o número de elementos raiz
passíveis de serem utilizados pelo desenvolvedor.
3.5 Modularização de WSDL
Conforme descrito na seção 2.3, o WSDL pode ser dividido em três partes
distintas que correspondem à definição abstrata, a definição concreta e a
documentação, que pode ser utilizada nas duas partes anteriores.
Considerando esse conceito, é possível separar a parte concreta da parte
abstrata do WSDL, tornando o serviço mais modular e flexível. Essa modularização
proporciona que serviços com diferentes mecanismos de transporte, codificação e
endpoint utilizem a mesma interface e tipos de dados [Hewitt, 2009].
53
Além da modularização do WSDL, é possível especificar um esquema
externo ao WSDL e importá-lo. Assim, a modularização do WSDL deve seguir as
seguintes diretrizes:
 XSD: XSD é importado pelo arquivo que corresponde à parte abstrata
do WSDL;
 WSDL abstrato: representa as interfaces do serviço, ou seja, contém o
nome de cada capacidade do serviço, mensagens de requisição e
resposta (messages e portTypes). A Figura 13 apresenta um exemplo
de WSDL abstrato que é importado pelo WSDL abstrato;
 WSDL concreto: representa as características de implementação do
serviço (elementos binding e services). A Figura 14 apresenta um
exemplo de WSDL concreto que importa o WSDL concreto. É este
WSDL que é disponibilizado para os consumidores quando o serviço
é publicado.
Figura 13 – StockQuoteAbstract.wsdl [Hewitt, 2009]
54
Figura 14 - StockQuoteConcrete.wsdl [Hewitt, 2009]
3.6 Contract-first versus code-first
Na abordagem code-first, primeiramente é desenvolvida a codificação e, em
seguida, gera-se o contrato do serviço com auxílio de um framework. Essa
abordagem é mais utilizada devido a sua praticidade [Kalin, 2009]. O desenvolvedor
não precisa conhecer e desenvolver a documentação técnica do contrato de serviços
(WSDL, XSD e WS-Policy) e, por isso, o desenvolvimento é mais rápido. Em
projetos pequenos, onde previamente não foram identificadas possibilidades de
reutilização em escala do serviço, essa abordagem é suficiente. Contudo, em projetos
de médio a grande porte, onde se planeja utilizar SOA ou a mesma já está em
execução, essa abordagem pode interferir em princípios básicos da arquitetura como:
alinhamento com o negócio, interoperabilidade, acoplamento, reuso e durabilidade.
A abordagem contract-first é menos difundida. Possíveis explicações para
esse fato são: maior complexidade de desenvolvimento devido à necessidade de
domínio sobre elementos diferentes da linguagem de programação usualmente
utilizada e pouca difusão das técnicas e benefícios da abordagem contract-first. Em
55
contract-first, primeiramente elabora-se o contrato do serviço e, em seguida, utilizase desse contrato para gerar a codificação correspondente. Como a codificação
depende do contrato, observa-se um acoplamento positivo da lógica (codificação)
para o contrato (WSDL, XSD e WS-Policy).
3.6.1 Acoplamento
Ao desenvolver primeiramente o contrato, obrigatoriamente a codificação
deve considerar o que foi especificado no WSDL, XSD e WS-Policy. Do ponto de
vista da arquitetura orientada a serviços, este acoplamento de lógica para contrato é
positivo [Erl, 2008] e garante o mesmo contrato independentemente da linguagem de
desenvolvimento ou mesmo framework utilizado. É preciso ter em mente que o foco
de desenvolvimento de SOA é o XML que possibilita interoperabilidade entre
sistemas distribuídos independentemente de plataforma e não na codificação de uma
linguagem de desenvolvimento específica como, por exemplo, Java.
Quando se codifica primeiro, não é possível determinar completamente como
o contrato será gerado. Para serviços já disponibilizados, essa abordagem traz uma
dependência significativa à tecnologia utilizada para manutenção do serviço. Na
prática, significa que se for identificada a necessidade de trocar a tecnologia de
desenvolvimento de serviços, será necessária também a alteração do contrato, o que
afeta diretamente todos os consumidores destes serviços.
Em empresas de médio e grande porte, essa substituição pode ocorrer com
maior frequência por fatores diversos como: substituição de tecnologia proprietária
por tecnologia open source ou vice-versa, substituição de tecnologia em função de
desempenho ou facilidade de programação, entre outros. Todas as empresas que
utilizam SOA devem estar preparadas para alterar a tecnologia de desenvolvimento
sem afetar seus consumidores finais e o uso da abordagem contract-first é a ideal
para esse objetivo.
Com o intuito de exemplificar o que foi discutido até o momento, foram
desenvolvidos dois serviços em Java que utilizam o mesmo código (um simples
serviço HelloWorld), mas com frameworks diferentes (Axis e JAX-WS) que foram
implantados (deploy) no mesmo container web. Mesmo com um exemplo tão
56
simplificado, é possível identificar as diferenças nos contratos gerados com a
utilização frameworks diferentes. A seguir, é apresentado o detalhamento das
diferenças apresentadas nos contratos gerados automaticamente por ambos os
frameworks, divididas nas seções do WSDL.
Definições:
A Figura 15 e a Figura 16 dividem as definições em dois grupos distintos. O
grupo 1 corresponde às definições geradas pelos dois frameworks, ou seja, contém os
mesmos namespaces. O grupo 2 corresponde às definições geradas por apenas um
dos frameworks, ou seja, possui namespaces que foram gerados em um contrato, mas
não estão presentes no outro.
Focando a análise no grupo 1, é possível identificar diferenças sensíveis na
nomenclatura dos prefixos de cada definição, o que implica na impossibilidade de
reutilização do contrato de um se a implementação for substituída pelo outro.
Figura 15 - Definitions geradas pelo Axis 1.4
Figura 16 - Definitions geradas pelo JAX-WS 2.2
57
Tipos:
A mesma classe foi utilizada para desenvolver os serviços nos dois
frameworks. Esta consiste em apenas uma função que recebe como parâmetro um
atributo chamado nome, cujo tipo é uma String, e retorna também uma String,
conforme exibido na Figura 17.
Figura 17 - Interface do serviço HelloWorld utilizado pelo AXIS e JAX-WS
Os tipos de entrada e saída foram gerados em ambos os contratos a partir dos
atributos da classe Java. A Figura 18 apresenta a geração de tipos empregando o
framework Axis. Foram gerados os elementos getHelloWorld para o parâmetro nome
de entrada do método e getHelloWorldResponse para o retorno cujo tipo é String.
Em ambos os casos, a estrutura do tipo complexo foi definida dentro do próprio
elemento. Isto não permite o reuso de tipos. Já a Figura 19 apresenta os tipos gerados
empregando o JAX-WS. Foram gerados também os elementos getHelloWorld e
getHelloWorldResponse. No entanto, diferentemente do Axis, a definição dos tipos
foi feita fora dos elementos.
Além disso, os atributos que representam os tipos complexos utilizados pelos
elementos na requisição e resposta ficaram com nomenclaturas diferentes. No Axis, o
atributo do tipo complexo utilizado na requisição foi nomeado para nome e o atributo
do tipo complexo utilizado como retorno foi nomeado para getHelloWorldReturn, No
JAX-WS, diferentemente do Axis, o atributo do tipo complexo utilizado na
requisição foi nomeado para arg0 e o atributo do tipo complexo utilizado como
retorno foi nomeado para return. Dessa forma, o cliente do serviço seria fortemente
58
impactado apenas pela substituição do framework de disponibilização do serviço,
mesmo sem alterar o código do mesmo, pois teria que considerar um atributo nome
ao invés de arg0, por exemplo.
Vale ressaltar ainda que a forma de definição dos tipos de dados no WSDL
foi distinta nos dois frameworks. O Axis gera os tipos de dados inline (ou seja,
diretamente no arquivo WSDL) enquanto que o JAX-WS gera um arquivo XML
Schema a parte e o importa no WSDL gerado.
Figura 18 - Tipos definidos no WSDL pelo Axis 1.4
Figura 19 - Tipos definidos em XSD e importados pelo WSDL no JAX-WS 2.2
59
Mensagens:
No caso das mensagens, a diferença apareceu apenas na nomenclatura da
mensagem de requisição. No Axis, a mensagem de requisição foi nomeada para
getHelloWorldRequest (Figura 20), enquanto que no JAX-WS foi nomeada para
getHelloWorld (Figura 21). Esta diferença impossibilita a continuidade do consumo
do serviço.
Figura 20 - Mensagens e PortType no Axis 1.4
Figura 21 - Mensagem e PortType no JAX-WS 2.2
Operações:
No caso das operações, a diferença apareceu também na nomenclatura da
mensagem de requisição. No Axis, o nome da mensagem é getHelloWorldRequest
(Figura 22), enquanto que no JAX-WS é getHelloWorld (Figura 23). Esta diferença
também impossibilita a continuidade do consumo do serviço.
60
Figura 22 - Mensagens e PortType no Axis 1.4
Figura 23 - Mensagem e PortType no JAX-WS 2.2
3.6.2 Desempenho
Quando um consumidor solicitar a execução de uma operação, os parâmetros
utilizados devem estar de acordo com o estipulado no XSD. Caso contrário, o
consumidor receberá uma mensagem de erro informando o ocorrido. O XSD valida
as restrições dos tipos de dados do serviço como, por exemplo:
 Relacionamento entre os tipos de dados;
 Cardinalidade dos relacionamentos;
 Obrigatoriedade de tipos de dados;
 Lista de valores válidos para um determinado tipo de dado;
 Tamanhos e formatos específicos para tipos de dados.
Na abordagem code-first, o XSD é gerado a partir dos tipos de dados
implementados para o contrato do serviço em uma linguagem de programação como,
por exemplo, Java. Algumas restrições de tipos de dados podem ser expressas nas
estruturas de dados que representam as entidades e algumas dessas restrições exigem
61
desenvolvimento para serem verificadas. O relacionamento entre as entidades e as
cardinalidades 0 x 1 (relacionamento com outra entidade) e 0 x N (lista de outra
entidade) podem ser expressas diretamente nas classes que representam os tipos de
dados. Contudo, cardinalidades mais precisas (por exemplo, cardinalidade de 1 a 3)
devem ser validadas através de codificação uma vez que não são especificadas no
WSDL gerado. Da mesma forma, validações de obrigatoriedade, valores válidos,
tamanhos e formatos devem ter suas validações implementadas.
Portanto, em code-first, essas estruturas de dados que representam as
entidades dão origem aos tipos de dados do WSDL, seja diretamente no WSDL
(inline) ou em um XSD (sendo importado). Como grande parte das restrições não
consta diretamente nas estruturas, mas em funções programadas, os tipos de dados
gerados automaticamente não contêm essas restrições. Isso implica que nessa
abordagem o consumidor solicita a execução de uma operação que, após verificação
das restrições básicas no XSD, é encaminhada ao servidor de aplicação. O servidor
de aplicação inicia uma instância do serviço e verifica se as restrições programadas
foram atendidas. Se uma dessas restrições não for atendida, o serviço retorna uma
mensagem de erro que é recebida pelo consumidor. Ou seja, parte da validação
ocorre no XSD e outra parte em uma instância do serviço.
O desempenho de SOA torna-se crítico normalmente por causa do tempo de
execução dos serviços [Josuttis, 2007]. Assim, qualquer processamento que possa ser
evitado deve ser considerado. Neste caso, na teoria, a utilização de contract-first
mostra-se como uma melhor abordagem, pois permite incluir outras restrições na
estrutura das mensagens de entrada e saída das operações dos serviços. Dessa forma,
um serviço só é instanciado se a mensagem sendo enviada passa pela validação
segundo as regras do esquema.
3.6.3 Alteração do contrato
Alteração na interface da codificação (nomenclatura de funções e parâmetros)
ou alteração na nomenclatura de atributos de classes pode ser necessária para
padronização, para melhorar a semântica dos mesmos ou por qualquer outro motivo.
62
Se a alteração no desenvolvimento se fizer necessária em serviços já
disponibilizados, idealmente, os consumidores não devem ser afetados.
Utilizando code-first, qualquer alteração na interface da codificação implicará
em alteração do contrato [Kalin, 2009], fato que é contornável utilizando contractfirst quando esta não envolve mudanças de tipos de dados de entrada e saída das
interfaces. Havendo a necessidade de alteração dos tipos de dados, é importante que
a organização tenha uma política de versionamento para acolher a nova demanda
para novos consumidores sem afetar os antigos consumidores do serviço [Josuttis,
2007].
A seguir, será demonstrada como alteração na interface da codificação sem
alteração dos tipos de dados de entrada e saída é tratada diferentemente em contractfirst e code-first.
A Figura 24 exibe os tipos de dados e a Figura 25 exibe a interface do serviço
HelloWorld desenvolvido com o framework JAX-WS 2.2 e utilizado na seção 3.6.1.
Para explicitar a diferença entre as abordagens code-first e contract-first, considere
que a manutenção desse serviço levou às seguintes alterações:
 Criação da classe chamada HelloBean responsável pela construção da
mensagem de saudação;
 Alteração do nome da operação getHelloWorld(String nome) para
sayHello(String name) na interface do serviço;
 Criação da interface IHelloWorld;
 Alterações necessárias na implementação do serviço, dadas as mudanças
acima.
63
Figura 24 - XSD do serviço HelloWorld antes da manutenção do serviço
Figura 25 - WSDL do serviço HelloWorld antes da manutenção do serviço
64
A Figura 26 apresenta as alterações no serviço considerando a abordagem
code-first. Conforme esperado, o XSD e o WSDL gerados a partir deste código
diferem dos arquivos correspondentes à implementação original. A Figura 27 ressalta
nos retângulos 1 e 2 as diferenças entre os tipos de dados definidos no XSD original
e novo XSD, enquanto que a Figura 28 ressalta nos retângulos 1, 2 e 3 as diferenças
no WSDL.
Figura 26 - Nova especificação do serviço HelloWorld - Code-First
65
Figura 27 - XSD original versus XSD após manutenção com code-first
66
Figura 28 - WSDL original versus WSDL gerado após manutenção com code-first
Utilizando contract-first, a primeira coisa a ser feita é desenvolver o XSD e o
WSDL. Entretanto, neste exemplo, o serviço já está em produção e, portanto, tanto o
XSD quanto o WSDL já existem. Logo, as alterações necessárias do serviço serão
realizadas sem alterar o contrato (elementos e tipos de dados, nome de operações,
mensagens, etc.) e, consequentemente, sem afetar os consumidores deste serviço.
Desta forma, o XSD e o WSDL do serviço publicado apresentados na Figura
24 e Figura 25 não serão alterados após a manutenção do código do serviço. Isto é
feito através do uso de anotações no nome das operações e dos tipos implementados
no serviço para mapear os nomes das operações e dos os tipos de dados definidos no
XSD e WSDL. A Figura 29, apresenta este mapeamento. Por exemplo, a operação
67
implementada no serviço sayHello é mapeada na operação getHelloWorld do WSDL;
o parâmetro de entrada name é mapeado no parâmetro parameters da mensagem de
requisição do WSDL; e o retorno da função é mapeado no parâmetro parameters da
mensagem de resposta do WSDL. Esse mapeamento permite que o contrato não seja
modificado, ou seja, que o XSD e o WSDL não sejam alterados em função da
manutenção do serviço. Essa abordagem possibilita que os consumidores continuem
utilizando o serviço com o mesmo WSDL e mesmo XSD, garantindo que os
consumidores não serão afetados.
68
Figura 29- Nova especificação do serviço HelloWorld - Contract-First
3.6.4 Gestão de tipos de dados e WSDL
Em code-first, tanto os tipos de dados quanto o WSDL são gerados
automaticamente a partir da codificação. Os tipos de dados são gerados diretamente
no WSDL (in line) ou em um arquivo XSD que é importado para o WSDL. Essa
69
abordagem impossibilita a modularização do WSDL e a reutilização de tipos de
dados gerados por um serviço em outro serviço.
Conforme descrito na seção 3.3, a centralização de esquemas de tipos de
dados é importante devido aos seguintes fatores:
 Proporciona reutilização de tipos de dados;
 Melhora
a
interoperabilidade
entre
serviços
por
destacar
transformações de dados de tipos comuns;
 Possibilita a gestão dos tipos de dados da organização e,
consequentemente, o versionamento dos mesmos.
Conforme apresentado na seção 3.5, a modularização do WSDL é importante
devido aos seguintes fatores:
 Proporciona
o
desenvolvimento
de
serviços
com
diferentes
mecanismos de transporte, codificação e endpoint utilizando uma
definição única da interface e mesmos tipos de dados;
 Ajuda na interoperabilidade, pois permite oferecer aos consumidores
diferentes configurações concretas (protocolo SOAP, codificação,
etc.) para a mesma interface.
Uma vez que não é possível alterar o contrato do serviço quando este é feito
automaticamente, somente utilizando a abordagem contract-first é possível reutilizar
tipos de dados de esquemas já existentes e obter os benefícios de contratos de
serviços modularizados.
70
Capítulo 4:
Provendo serviços interoperáveis
Esta seção apresenta o desenvolvimento dos serviços de análise de crédito
seguindo o modelo de ciclo de vida orientado à stakeholdersde Gu e Lago [2007] nas
fases de projeto e implementação dos serviços, tendo como base o trabalho de Souza
et al.[2011]. Souza et al. realizaram a aplicação dos métodos propostos por Azevedo
et al. [2009a, 2009b, 2011] para identificação e análise de serviços candidatos em
uma abordagem SOA resultando na identificação de 55 serviços candidatos a partir
do processo de Análise de Crédito.
O modelo de processos foi elaborado em linguagem EPC (Evend-Driven
Process Chain) [Scheer, 2000] é apresentado na Figura 30. O modelo completo
incluindo FAD (Function Allocation Diagram), descrição de regras e de requisitos de
negócio dentre outras descrições é apresentado por Diirr et al. [2010]. Este processo
é responsável por analisar propostas de crédito, as quais podem ser aprovadas ou
rejeitadas. Quando uma proposta de crédito é recebida, o cadastro do cliente é
checado e o sistema verifica se o limite de crédito do cliente é suficiente para a
concessão do crédito proposto. Se o limite for aprovado, então o sistema calcula as
taxas do contrato para gerar uma proposta de contrato. Esta proposta de contrato é
encaminhada a um analista de crédito que identifica necessidades de ajustes e o nível
do risco inerente ao empréstimo. Se o contrato for aceitável, o cliente é contatado
para avaliar o contrato. Uma vez que o contrato é aprovado, ele será ratificado. Se o
contrato não for aprovado, ele será cancelado.
71
Organizationa... Organizational el...
Carries out & Supports
Carries out & Supports
Carries out & Supports
Crédito e
taxas
contratuais
Atendimento
Crédito
Direto
Atendente
Receber
proposta de
crédito
Proposta de
crédito
recebida
Comunicar
proposta não
aprovada
Proposta
não
aprovada
Verificar
cadastro do
cliente SYS
Cadastro de
cliente não
atualizado
Cliente não
cadastrado
Atualizar
cadastro do
cliente SYS
Cadastrar
cliente
Cadastro de
cliente
atualizado
Cliente
cadastrado
Contrato
não
aprovado
pelo cliente
Aprovar
contrato
Cancelar
contrato
Contrato
aprovado
Contrato
cancelado
Cadastro de
cliente
atualizado
SYS
Verificar limite
de crédito do
cliente SYS
Verificar
condições de
contrato com o
cliente
Contrato
aprovado
pelo cliente
Analista de
crédito
Limite não
aprovado
Cancelar
proposta de
crédito SYS
Para cada tipo de taxa
Limite
aprovado
Comprometer
limite de
crédito SYS
Analisar
contrato
Calcular taxas
do contrato
SYS
Efetivar
contrato
Determinar
taxa de juros a
ser cobradaSYS
...
Gerar
proposta de
contrato SYS
Comunicar
proposta não
aprovada
Ajuste não
necessário
Contrato de
risco
identificado
Ajuste
necessário
Cancelar
contrato de
risco
Alterar
proposta de
crédito
Comunicar não
aprovação de
contrato de risco
Proposta de
crédito
alterada
Proposta
não
aprovada
Figura 30 – Modelo em notação EPC do processo “Analisar pedido de crédito”
72
Carrie
Os serviços identificados por Souza et al. [2011] a partir da aplicação das
heurísticas de identificação de serviços sobre os elementos do processo (incluindo
EPC, FAD, atividades, regras de negócio, requisitos de negócio etc.) foram
classificados e catalogados nos serviços apresentados na Tabela 7.
Tabela 7 - Serviços candidatos identificados por Souza et al. [2011]
Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Serviço Candidato
Aprovar crédito
Verificar limite de crédito
Valor limite máximo para taxa de juros
Determinar taxa de juros
Verificar cliente novo
Verificar cadastro de cliente desatualizado
Comprometer limite de crédito_RN
Ajustar proposta de crédito
Identificar contrato de risco
Alterar proposta de crédito
Calcular taxa de impressão
Calcular taxa de entrega
Calcular IOF
Calcular taxa de alteração do contrato
Atualizar informações do cliente
Incluir cliente
Verificar limite de crédito do cliente
Cancelar proposta de crédito
Registrar taxa de juros
Gerar proposta de contrato
Consultar proposta de crédito
Consultar informações do cliente
Comprometer limite de crédito_RqN
Consultar proposta de contrato
Registrar análise de contrato
Consultar limite de crédito do cliente
Consultar proposta de contrato para análise
Consultar créditos concedidos
Consultar proposta de crédito não aprovada
Aprovar créditos concedidos
Cancelar créditos concedidos
Consultar créditos de contrato de risco
Cancelar contrato de risco
Calcular taxas do contrato_RqN
Registrar taxas do contrato
Gerar contrato com ajuste
Calcular taxas do contrato
Enviar mensagem para Calcular taxas do contrato
Consolidar mensagens de Calcular taxas do
contrato
Analisar pedido de crédito (Recebe) Receber
proposta de crédito
Gerar contrato
Rejeitar proposta de crédito
Rejeitar contrato de risco
Tratar créditos concedidos
Tipo de Heurística
Heurística de regras de negócio
Heurística de requisitos de negócio
Heurística de loop
Heurística de atividades de
múltiplas instâncias
Heurística de interfaces de
processo
Heurística de atividades
sequenciais
Heurística de cluster
73
45
46
47
48
49
50
51
52
53
54
55
Tratar proposta de contrato
Tratar proposta de crédito
Tratar limite de crédito do cliente
Tratar cadastro do cliente
Tratar taxas do contrato
Tratar taxa de juros do cliente
Tratar taxa de juros
Manter cadastro do cliente
Analisar pedido de crédito
Verificar contrato sem ajuste
Analisar Pedido de Crédito com Proposta Aprovada
Heurística de XOR
Em seguida, Souza et al. [2011] aplicaram as heurísticas de análise de
serviços candidatos obtendo: a priorização dos serviços, os mapas de granularidade,
o modelo canônico e agrupamento de serviços de dados. A Tabela 8 apresenta os
serviços candidatos para os quais a aplicação do método indicou que não deveriam
ser desenvolvidos. Pequenos ajustes foram realizados nesta tabela para incluir
serviços que consideramos que também não deveriam ser implementados. Já a
Tabela 9 apresenta os serviços candidatos que a aplicação do método indicou para
serem desenvolvidos.
Tabela 8 - Serviços candidatos indicados para não serem desenvolvidos [Souza et al.,
2011]
Código
07
23
Serviço Candidato
Comprometer limite de crédito_RN
Comprometer limite de
crédito_RqN
15
Atualizar informações do cliente
16
Incluir cliente
17
Verificar limite de crédito do cliente
22
Consultar informações do cliente
47
Tratar limite de crédito do cliente
48
Tratar cadastro do cliente
26
Consultar limite de crédito do
cliente
18
21
29
Cancelar proposta de crédito
Consultar proposta de crédito
Consultar proposta de crédito não
Motivo da Exclusão
Estas operações já são realizadas pelo serviço “44 Tratar créditos concedidos”.
Foi identificado a partir da heurística de requisitos
de negócio, mas corresponde à operação CRUD do
serviço de dados.
Foi identificado a partir da heurística de requisitos
de negócio, mas corresponde à operação CRUD do
serviço de dados.
Foi identificado a partir de um requisito de negócio
que descreve que a regra referente ao serviço “01 –
Aprovar Crédito” deve ser implementada.
Foi identificado a partir da heurística de requisitos
de negócio, mas corresponde à operação CRUD do
serviço de dados.
O limite de crédito não será armazenado, mas sim
calculado.
Foi identificado a partir da heurística de requisitos
de negócio, mas corresponde à operação CRUD do
serviço de dados.
A consulta do limite de crédito do cliente é
realizada por “01 – Aprovar crédito” e “02 Verificar limite de crédito”.
Referem-se à atualização do “resultado da
verificação” na entidade proposta de crédito e à
consulta da proposta de crédito. Estas operações já
74
aprovada
35
Registrar taxas do contrato
50
Tratar taxa de juros do cliente
19
Registrar taxa de juro
24
25
Consultar proposta de contrato
Registrar análise de contrato
Consultar proposta de contrato para
análise
Consultar créditos concedidos
Aprovar créditos concedidos
Cancelar créditos concedidos
Cancelar contrato de risco
Consultar créditos de contrato de
risco
27
28
30
31
33
32
40
Analisar pedido de crédito (Recebe)
Receber proposta de crédito
41
Gerar contrato
42
43
Rejeitar proposta de crédito
Rejeitar contrato de risco
Analisar pedido de crédito com
proposta aprovada
55
são realizadas pelo serviço “45 - Tratar proposta de
crédito”.
Esta atividade de inclusão já é feita pelo serviço
“49 - Tratar taxas de contrato”.
O serviço “44 – Tratar créditos concedidos” é
responsável pela atualização da taxa de juros do
cliente.
Esta atividade de inclusão já é feita pelo serviço
“44 - Tratar créditos concedidos”.
O registro da análise e a consulta são realizados
pelo serviço “45 – Tratar proposta de contrato”.
A consulta e a atualização da situação dos Créditos
concedidos são realizadas pelo serviço “44 – Tratar
créditos concedidos”.
A consulta é realizada pelo serviço “46 – Tratar
proposta de crédito”.
Não foi modelado o processo “Receber proposta de
crédito” que utilizaria essa mensagem para invocar
o processo “Analisar pedido de crédito”.
Já está sendo previsto no serviço “36 – Gerar
contrato com ajuste”.
São fluxos muito simples para serem orquestrados.
Deixa uma parte do processo de fora, que o serviço
“53 – Analisar pedido de crédito” contempla.
Tabela 9 - Serviços candidatos indicados para serem desenvolvidos [Souza et al.,
2011]
Agrupamento
Verificar limite de
crédito
Tratar taxa de juros
Manter cadastro do
cliente
Verificar contrato de
risco
Calcular taxas do
contrato
Índice
1
2
3
4
51
5
6
48
52
8
9
10
11
12
13
14
34
37
38
39
Gerar proposta de
49
20
Serviços
Aprovar crédito
Verificar limite de crédito
Valor limite máximo para taxa de juros
Determinar taxa de juros
Tratar taxas de juros
Verificar cliente novo
Verificar cadastro de cliente desatualizado
Tratar cadastro do cliente
Manter cadastro do cliente
Ajustar proposta de crédito
Identificar contrato de risco
Alterar proposta de crédito
Calcular taxa de impressão
Calcular taxa de entrega
Calcular IOF
Calcular taxa de alteração do contrato
Calcular taxas do contrato_RqN
Calcular taxas do contrato
Enviar mensagem para Calcular taxas do contrato
Consolidar mensagens de Calcular taxas do
contrato
Tratar taxas do contrato
Gerar proposta de contrato
Tipo
Lógica
Lógica
Lógica
Lógica
Dados
Lógica
Lógica
Dados
Lógica/Dados
Lógica
Lógica
Dados
Lógica
Lógica
Lógica
Lógica
Lógica
Lógica
Dados
Dados
Dados
Dados
75
contrato
Gerar contrato com
ajuste
Tratar créditos
concedidos
Tratar proposta de
contrato
Tratar proposta de
crédito
Analisar pedido de
crédito
Verificar contrato sem
ajuste
Lógica/Dados
36
Gerar contrato com ajuste
44
Tratar créditos concedidos
Dados
45
Tratar proposta de contrato
Dados
46
Tratar proposta de crédito
Dados
53
Analisar pedido de crédito
Lógica/Dados
54
Verificar contrato sem ajuste
Lógica/Dados
Os serviços identificados que devem ser desenvolvidos fisicamente (Tabela 9)
foram agrupados. Em termos de desenvolvimento, cada agrupamento representa um
projeto para implementação de um web service, enquanto que cada serviço foi
implementado como uma operação do web service.
A nomenclatura utilizada neste trabalho para web services e suas operações
de serviço considerou os seguintes padrões e diretrizes:
 Foram empregados padrões de nomenclatura da linguagem de
programação Java;
 Os projetos de web services que contemplaram serviços candidatos de
lógica ou lógica juntamente com dados tiveram o nome de seu web
service
finalizado
com
“LogicService”.
Exemplo:
TratarTaxaJurosLogicService;
 Os projetos de web services que contemplaram apenas serviços
candidatos de dados tiveram o nome de seu web service finalizado
com “DataService”. Exemplo: TratarPropostaContratoDataService;
 Serviços identificados a partir da heurística de cluster correspondem a
serviços que executam operações CRUD em entidades existentes no
modelo canônico. Logo, estes serviços corresponderam a serviços
básicos de dados e foram desenvolvidos separadamente por possuírem
maior índice de reuso e não conterem lógica de negócio. A Tabela 10
apresenta os serviços que foram desenvolvidos e suas operações.
Tabela 10 - Serviços desenvolvidos e suas operações
Projeto de Serviço
VerificarLimiteCreditoLogicService
Índice
1
2
Operações
Aprovar crédito
Verificar limite de crédito
76
TratarTaxaJurosLogicService
ManterCadastroClienteLogicService
VerificarContratoRiscoLogicService
CalcularTaxasContratoLogicService
3
4
5
6
52
8
9
10
11
12
13
14
34
37
38
39
GerarPropostaContratoDataService
GerarContratoComAjusteLogicService
TratarCreditosConcedidosDataService
TratarPropostaContratoDataService
TratarPropostaCreditoDataService
TratarClienteDataService
TratarTaxasContratoDataService
TratarTaxasJurosDataService
AnalisarPedidoCreditoLogicService
VerificarContratoSemAjusteLogicService
20
36
44
45
46
48
49
51
53
54
Valor limite máximo para taxa de juros
Determinar taxa de juros
Verificar cliente novo
Verificar cadastro de cliente desatualizado
Manter cadastro do cliente
Ajustar proposta de crédito
Identificar contrato de risco
Alterar proposta de crédito
Calcular taxa de impressão
Calcular taxa de entrega
Calcular IOF
Calcular taxa de alteração do contrato
Calcular taxas do contrato_RqN
Calcular taxas do contrato
Enviar mensagem para Calcular taxas do
contrato
Consolidar mensagens de Calcular taxas do
contrato
Gerar proposta de contrato
Gerar contrato com ajuste
Tratar créditos concedidos
Tratar proposta de contrato
Tratar proposta de crédito
Tratar cadastro do cliente
Tratar taxas do contrato
Tratar taxas de juros
Analisar pedido de crédito
Verificar contrato sem ajuste
4.1 Elaboração da interface do serviço.
4.1.1 Desenvolvimento dos esquemas
Os esquemas foram desenvolvidos utilizando o padrão XML Schema –
aprovado como especificação pela W3C e incorporado pelo WS-I BP – em sua
versão 1.0, utilizando a plataforma Eclipse WTP.
Seguindo os serviços identificados, analisados e projetados por Souza et al.
[2011], o modelo canônico apresentado por eles foi revisto devido à necessidade de
algumas alterações como: inclusão de chaves primárias, definição de direção da
associação e inclusão de um atributo no relacionamento entre PropostaCredito e Peca
para indicar a quantidade de peças contempladas na proposta de crédito. Este atributo
ficou armazenado na classe associativa ItemPeca. O resultado final é apresentado na
Figura 31.
77
Figura 31 – Modelo canônico do processo de análise de crédito (adaptado de Souza et
al. [2011])
Seguindo a abordagem de centralização de esquema proposta, foi
desenvolvido um esquema central, chamado ModeloCanonico.xsd, contendo todas as
entidades identificadas no modelo canônico da Figura 31. Este esquema conteve
apenas as entidades e seus tipos de dados básicos, ou seja, não incluiu
relacionamentos. O objetivo é que os serviços possam reaproveitar os tipos de dados
e consigam manter a mesma estrutura do modelo canônico, facilitando a manutenção
da estrutura. Já o contrato do serviço se utiliza de esquemas que denominamos
esquemas de visão, onde são reaproveitados os tipos complexos do esquema central e
são mapeados os relacionamentos das entidades utilizadas no esquema de visão. Isto
permite que apenas as estruturas necessárias sejam trafegadas, ou seja, mesmo que o
modelo de dados conceitual seja todo interligado, somente os dados necessários ao
consumo do serviço são trafegados.
O esquema apresentado na Figura 32 e na Figura 33 pode ser utilizado em um
projeto como qualquer outro XSD. Seu objetivo é manter centralizados os tipos de
dados referentes ao domínio do processo de análise de crédito, sem considerar os
78
relacionamentos entre estes tipos de dados. Sua utilização deve ser feita
indiretamente através da utilização de outros esquemas, os esquemas de visão abordagem proposta neste trabalho. Estes esquemas importam o modelo canônico e
definem os relacionamentos entre suas entidades (o que não é contemplado no
canônico). Assim, se for identificada a necessidade de manipulação ou visualização
de dados de qualquer conjunto de entidades no processo de análise de crédito,
sempre será utilizado o tipo complexo desta entidade definido no esquema
ModeloCanonico.xsd e, além disso, será necessário utilizar outros esquemas que
fazem os mapeamentos dos relacionamentos entre estas entidades. Por exemplo, para
desenvolver um serviço que gera um relatório de todos os créditos concedidos a um
determinado cliente, é necessário criar um XSD de visão que utilize os tipos
complexos Cliente e CreditoConcedido, importados a partir do esquema central. A
Figura 34 mostra um exemplo do esquema representando a visão da entidade
PropostaContrato. Observe a visão criada "PropostaContratoView" que representa o
relacionamento entre "PropostaContrato", "CreditoConcedido" e "TaxaJuros".
79
Figura 32 - Modelo Canonico.xsd - parte 1
80
Figura 33 - Modelo Canonico.xsd - parte 2
81
Figura 34 - Esquema de visão da entidade PropostaContrato
Esta divisão por visões permite limitar o conteúdo das mensagens SOAP.
Assim, o modelo canônico fica conceitualmente interligado, mas, em termos
práticos, não é necessário enviar um XML tão extenso em uma mensagem onde o
objetivo é obter um simples valor para análise. Por exemplo, para consultar os dados
de uma proposta de contrato, apenas é necessário visualizar a proposta de contrato, as
taxas de contrato e o crédito concedido da mesma. No entanto, não realizando a
divisão por visões, a mensagem XML poderia incluir a proposta de crédito e as taxas
de juros relativas ao crédito concedido, e trafegaria também as informações de
cliente relativas à proposta de crédito. Dessa forma, a simples consulta incluiria
informações de todos os dados da análise de crédito, o que nem sempre é o desejado.
Cada esquema de visão deste projeto representa uma estrutura de dados do
domínio e seus relacionamentos definidos. Portanto, foram criados 11 (onze)
arquivos XSD: um para o modelo canônico e outros 10 para mapear os
relacionamentos. É importante ressaltar que o mapeamento relacional tradicional do
modelo canônico, onde uma entidade possui uma chave estrangeira para outra
entidade a qual está relacionada, não está presente em cada esquema de visão. O
82
relacionamento será realizado em uma camada de acesso a dados objeto-relacional,
que será abordada mais à frente neste trabalho.
É possível observar nos esquemas (Figura 32, Figura 33 e Figura 34) o uso de
restrições nos elementos, por exemplo:
 A obrigatoriedade do preenchimento da data de vencimento de uma parcela;
 O valor mínimo de 1(um) para o número de parcelas de um crédito
concedido;
 A obrigatoriedade de pelo menos uma taxa de contrato associada a uma
proposta de contrato.
Estas restrições permitem que a mensagem possa ser validada, garantindo que
estas regras de negócio sejam atendidas, antes que seja criada uma instância do
serviço, evitando processamentos desnecessários.
4.1.2 Desenvolvimento do WSDL
Conforme descrito na seção 2.3, foi utilizada a versão 1.1 para o
desenvolvimento dos contratos dos serviços, através também da plataforma Eclipse
WTP. Os WSDLs foram desenvolvidos com as informações presentes na Tabela 10,
uma vez que esta disponibiliza todas as funcionalidades dos serviços. No entanto, as
informações de entrada e saída não foram mapeadas e, por isso, foi necessário
revisitar o processo de análise de crédito para identificar quais informações eram
necessárias em cada operação. Em seguida, essas informações foram comparadas
com as informações das entidades mapeadas no modelo canônico. Desta forma, as
entradas e saídas que representam entidades do modelo canônico foram definidas no
seu devido esquema de visão.
O desenvolvimento do WSDL foi realizado manualmente e teve como base as
exigências do Basic Profile da WS-I, apresentadas na seção 3.2, e o conceito de
contract-first e suas possibilidades, como modularização e a reutilização dos tipos de
dados desenvolvidos na seção 4.1.1. Como exemplo, a Figura 35 apresenta o WSDL
abstrato do serviço Tratar Cliente. O WSDL apresentado contém apenas as
definições do serviço, as operações, as mensagens e os tipos de dados relacionados.
Algumas observações sobre este WSDL são apresentadas a seguir. Na Figura 35
83
foram incluídos os números referentes a cada observação para facilitar a ilustração
do que é apresentado.
1. Definição do nome do serviço seguindo o padrão: Nome do serviço
identificado + Tipo de serviço (Dados ou Lógica) + Service.
2. Definição
do
namespace
do
serviço
seguindo
o
padrão:
http://uniriotec.monografia.br/ + nome do serviço + tipo de WSDL
(defs para abstrato ou service para concreto).
3. Importação de um esquema de visão, descrito na seção 4.1.1.
4. Definição da estrutura de mensagem seguindo o padrão: nome da
operação + tipo de mensagem (Request ou Response).
5. Reutilização de tipos complexos definidos nos esquemas de visão para
ser utilizado como parte da mensagem.
6. Definição do port type seguindo o padrão de nomenclatura do item 1.
7. Definição do nome da operação:
a. Serviços identificados a partir da heurística de cluster seguem
o seguinte padrão para operações CRUD: incluir, consultar,
atualizar ou excluir + nome da entidade;
b. Demais serviços: utilizam a nomenclatura das operações
presentes na Tabela 10. Entretanto, as funções foram
renomeadas para seguir o padrão Java de nomenclatura.
Operações são iniciadas com letra minúscula. A partir daí,
cada palavra é iniciada por letra maiúscula. Preposições e
caracteres especiais foram removidos.
84
Figura 35 - WSDL abstrato de Tratar Cliente
Após a definição da interface abstrata do serviço, deve ser desenvolvido o
WSDL concreto do serviço, definindo detalhes de implementação. Este WSDL será o
85
utilizado pelos consumidores do serviço. A Figura 36 apresenta o WSDL concreto do
serviço “Tratar Cliente”. Os principais itens a serem observados no WSDL são:
1. Definição
do
namespace
do
serviço
seguindo
o
padrão:
http://uniriotec.monografia.br/ + nome do serviço + service (defs para
abstrato ou service para concreto);
2. Importação do WSDL abstrato para que sejam especificados detalhes
de implementação das operações e serviço definidos anteriormente;
3. Seção para definição dos atributos de detalhes de implementação
relativos à formatação (literal ou encode) e estilo (document ou rpc)
de mensagem do serviço “TratarClienteDataService”;
4. Definição do padrão RPC (Remote Procedure Call) para binding do
serviço. Este estilo foi utilizado por ser simples e intuitivo para o
desenvolvimento e estar de acordo com o WS-I BP;
5. Definição do protocolo SOAP sobre HTTP para envio das mensagens;
6. Uso de literal para troca de mensagens. O uso de encoded não está de
acordo com o WS-I;
7. Definição do endpoint do serviço;
8. Especificação do endpoint em sua URL de acesso.
86
Figura 36 - WSDL Concreto do serviço Tratar Cliente
Após o fim do desenvolvimento do WSDL, é importante certificar que o
mesmo atende aos padrões de interoperabilidade definidos pela WS-I. Para isso, foi
utilizada a ferramenta SOAP UI2 para realizar testes de interoperabilidade em um
2
http://www.soapui.org/
87
WSDL. Esta mesma ferramenta será abordada mais a frente para testes funcionais de
web services.
O SOAPUI realiza a verificação de todas as normas apresentadas pelo WS-I
BP, informa o resultado para cada item e apresenta um sumário da verificação do
WSDL em geral3. Para cada norma de interoperabilidade, o relatório informa o
resultado do teste (aprovado, reprovado, aviso, não aplicável, faltando insumo),
apresentando uma mensagem detalhada das não conformidades, se estas existirem. A
Figura 37 apresenta um exemplo de uso da ferramenta SOAPUI para validar o
serviço "TratarClienteDataService", cujo WSDL foi apresentado na Figura 35 e
Figura 36.
Figura 37 - Sumário de verificação WS-I
4.2 Desenvolvimento de serviço
O desenvolvimento foi dividido em duas etapas. Antes da real implementação
dos serviços, foi projetada e desenvolvida a estrutura de transferência (mapeamento)
de dados e a camada de acesso e persistência dos dados em um SGBD.
Para o desenvolvimento, houve uma preocupação em utilizar os principais
padrões e recursos mais atuais da linguagem Java, em especial a especificação
JEE64. Isto propicia maior facilidade de suporte e manutenção dos frameworks
3
4
http://www.soapui.org/About-SoapUI/features.html#tech-support
http://jcp.org/en/jsr/detail?id=316
88
utilizados, uma vez que os mesmos são mantidos pelas principais empresas do
mercado em conjunto com a mantenedora da linguagem Java, a Oracle.
4.2.1 Mapeamento Schema x Java
Em se tratando de web services, os dados a serem trafegados são mensagens
SOAP e contém estruturas de dados como partes das mensagens. Para que um
serviço desenvolvido em Java possa tratar corretamente essas mensagens, deve haver
algum tipo de ligação (binding) entre dados em XML e classes Java [Metha, 2003].
Para realizar esta ligação foi utilizado o JAXB (Java Architecture for XML
Binding)5. JAXB é a especificação oficial JEE6 para relacionar estruturas de dados
Java e XML. Permite mapear as classes Java através de anotações, correlacionando
tipos e/ou elementos de um XML Schema e atributos de classe POJO (Plain Old
Java Object). Sua versão atual (2.0) é mantida por profissionais da Oracle (Sun) e
por grupos das principais empresas do mercado em SOA.
O framework trabalha a partir da serialização de documentos XML em
classes JAXB (UnMarshalling) para mapear dados para o serviço. Para isso, é
necessário que o pacote de classes contenha uma fábrica de objetos, com o dever de
inicializar cada objeto serializado. Ao mapear dados do serviço para mensagens
SOAP, o framework serializa instâncias em formato XML (Marshalling).
Com o domínio do processo bem definido e centralizado, é possível manter as
classes JAXB em um único projeto que pode ser utilizado por vários serviços.
A Figura 38 apresenta o comparativo entre uma classe JAXB e um arquivo
XML Schema, representando a visão da entidade CreditoConcedido. Cada item está
correlacionado entre a classe Java e o XSD pelos números em vermelho. A partir
deste mapeamento, um serviço é capaz de capturar dados recebidos e enviar dados
sem que haja perda de informações ou incompatibilidade de dados.
5
http://jaxb.java.net/
89
Figura 38 - Correlação JAXB x XSD
Neste trabalho foram abordadas as seguintes anotações JAXB. Dentre elas,
apenas a XmlTransient não foi utilizada no exemplo apresentado na Figura 38.
 XmlAccessorType – Indica se os elementos serão acessados pelos atributos da
classe (Field) ou através de funções get (Property);
 XmlType – Relaciona um complexType ou simpleType de um XSD com uma
classe Java. Deve ser definido o namespace e o nome do tipo complexo como
90
parâmetros desta anotação. Além disso, o parâmetro propOrder deve ser
especificado para identificar a ordem e quais elementos devem estar em um
bind para XML;
 XmlElement – Relaciona um element de um XSD com um atributo de objeto
Java. Devem ser definidos o namespace e o nome do elemento como
parâmetros desta anotação. Além disso, deve ser observada a relação do
parâmetro maxOccurs. Se este parâmetro estiver configurado para receber
mais de um elemento, este deve ser definido com uma lista na classe POJO;
 XmlTransient – Indica que um determinado elemento não será capturado na
serialização de objetos. Isto permite que campos auxiliares ou flags possam
ser utilizados na classe JAXB sem que o framework utilize estes elementos.
Para que os objetos JAXB pudessem representar um tipo complexo de visão,
o padrão DTO (Data Transfer Object) foi utilizado. Este padrão habilita que uma
série de conjuntos de dados possa ser trafegado em um único objeto, evitando envio
de série de parâmetros ou uso de múltiplas chamadas. Fowler [2002] aborda o uso do
padrão DTO para serialização automática de dados entre XML e Java, utilizando
métodos de transformação. No entanto, com JAXB esta serialização se torna
totalmente automatizada através das anotações.
Os objetos que representam os esquemas de visões utilizam o padrão DTO
para encapsular a entidade que dá nome à visão e às entidades que representam seus
relacionamentos. Desta forma, o objeto CreditoConcedidoView da Figura 38
representa o tipo complexo CreditoConcedidoView, encapsulando os elementos
presentes no esquema, que são: CreditoConcedido, PropostaCredito, TaxaJuros e
Parcela.
4.2.2 Persistência de dados
Assim como em softwares de arquitetura tradicionais, serviços baseados em
SOA devem possuir uma camada de persistência dos dados trafegados entre um
SGBD e o usuário final. Neste trabalho, foi utilizado o framework JPA (Java
91
Persistence API)6, presente na especificação JEE6, que define um mapeamento
objeto-relacional das entidades presentes no banco de dados para objetos Java
simples [Burke e Monson-Haefel, 2007]. Este mapeamento aproxima o banco de
dados do desenvolvimento, uma vez que as aplicações são desenvolvidas em uma
programação orientada a objetos.
O framework trabalha com o uso de anotações, permitindo que cada classe
Java possa ser mapeada para uma tabela do banco de dados. Todos os aspectos
relativos à tabela podem ser trazidos à entidade JPA como: colunas, chave primária,
relacionamentos, restrições de unicidade, definição de sequências, gatilhos (triggers),
entre outros.
Desta forma, realizar operações básicas (CRUD) podem ser feitas com pouca
escrita de código pelo desenvolvedor. Além disso, a JPA possui uma linguagem
inspirada em SQL para consultas avançadas voltada para as entidades ao invés de
tabelas, mais familiar à linguagem Java, chamada JPQL (Java Persistence Query
Language).
Para cada entidade do modelo canônico do processo apresentado na Figura
31, uma classe anotada como entidade foi criada em um projeto representando todo o
modelo. A Figura 39 apresenta a entidade CreditoConcedido, permitindo visualizar
algumas das principais anotações JPA. A seguir, o detalhamento destas anotações
[Burke e Monson-Haefel, 2007]:
 Entity – Define que a classe Java é uma entidade JPA;
 Table – Relaciona a entidade mapeada com uma determinada tabela
do banco de dados, através do parâmetro name, que deve ser igual ao
nome da tabela;
 DynamicUpdate – Com o valor true, a entidade persistida só irá
alterar os valores que não estiverem nulos;
 Id – Identifica o atributo da classe como a chave primária da tabela;
 SequenceGenerator – Define uma sequence no SGBD e atribui o
valor sequencial ao atributo que está sendo mapeado. Devem ser
definidos o nome da sequência e o valor incremental (allocationSize).
6
http://www.jcp.org/en/jsr/detail?id=317
92
Esta anotação não é independente de plataforma, visto que existem
sistemas que não possuem gerador de sequência;
 GeneratedValue – Complementar ao SequenceGenerator, define o
tipo valor automático do atributo, que pode ser por sequência, tabela,
identidade ou mesmo escolha automática. Esta escolha deve variar de
acordo com a implementação do SGBD;
 Column – Mapeia diretamente um atributo do objeto a uma coluna da
tabela. Caso o nome seja diferente, o atributo name deve ser utilizado
para manter essa relação. Além disso, outras propriedades da coluna
podem ser definidas como: restrição de unicidade, permissão de
valores nulos, tamanho permitido, etc;
 JoinColumn – Mapeia um atributo da classe como uma coluna da
tabela. No entanto, esta coluna é definida como uma chave estrangeira
para outra tabela. Caso o nome seja diferente, o atributo name deve
ser utilizado para manter essa correlação.
 OneToOne – Define um relacionamento do tipo 1..1;
 ManyToOne – Define um relacionamento do tipo N..1;
 OneToMany – Define um relacionamento do tipo 1..N. Neste caso, a
chave estrangeira deve estar presente na tabela relacionada. Portanto,
o atributo name da anotação JoinColumn deve especificar a coluna da
tabela relacionada.
93
Figura 39 - Entidade CreditoConcedido com as anotações JPA
94
A especificação JPA é vasta e tem o objetivo de incorporar às classes Java
todas as possibilidades existentes em um banco de dados relacional, existindo
inclusive algumas ferramentas para geração automática da estrutura do banco de
dados. A Tabela 11 apresenta algumas outras possibilidades de mapeamento do
framework, e algumas delas que também foram utilizadas neste trabalho.
Tabela 11 - Listagem de anotações JPA
Anotação
Descrição
IdClass
Define uma classe para ser chave primária de uma tabela. Isto indica que esta
chave será composta.
TableGenerator
Semelhante à anotação SequenceGenerator. No entanto, define uma tabela
geradora de valores sequenciais. Ao contrario do gerador de sequência, é
permitido em todos os SGBDs.
Transient
Identifica um atributo do objeto como não gerenciável pela unidade de
persistência.
Temporal
Utilizado para definir tipos de dados em formato data. Pode ser parametrizado
para diferentes formatos de data, como data/hora.
Lob
Identifica um atributo da classe como uma coluna especial do tipo Lob, que
permite armazenamento de grande volume de dados.
ManyToMany
Define um relacionamento do tipo N × M
Pre(Persist,
Update, Remove)
Aplicação similar a uma trigger executada antes de inserir/atualizar/excluir
dados da tabela. Esta anotação é utilizada em uma função.
Post(Load,Persist,
Update, Remove)
Aplicação
similar
a
uma
trigger
executada
após
carregar/inserir/atualizar/excluir dados da tabela. Esta anotação é utilizada em
uma função.
Na Figura 39 podem também ser observadas a presença de anotações do
framework JAXB. Conforme abordado por Burkee e Monson-Haefel [2007], uma
das facilidades da especificação JPA é que, pelo fato dos beans de entidade serem
mapeados em objetos Java simples (POJO), essas entidades podem ser utilizadas
para transferir dados entre cliente e servidor.
Como as estruturas de dados que devem representar os tipos de dados
definidos pela Figura 32 e pela Figura 33 são bastante semelhantes com as entidades
mapeadas, estas classes foram utilizadas tanto para persistir dados quanto para
transferência de dados das mensagens SOAP.
Sendo assim, uma classe possui tanto anotações JAXB quanto anotações JPA.
Esta abordagem auxilia na manipulação dos dados, dispensando as conversões
trabalhosas de classes que representam a transferência de dados entre consumidor e
provedor (JAXB) para classes que representam a persintência de dados (JPA). Além
95
disso, facilita a manutenção do código, uma vez que os dados estão centralizados.
Possíveis alterações dos tipos definidos no XSD refletirão somente neste ponto do
projeto.
4.2.3 Camada de Acesso a Dados
Na seção 4.2.2, foi abordado o uso do framework JPA para representação
objeto-relacional do banco de dados. No entanto, apenas o uso das entidades levaria
aos serviços a necessidade de implementar sua própria lógica de tratamento dos
dados.
Para evitar este acoplamento, foi utilizado o conceito de DAO (Data Access
Object) apresentado pela Sun e estendido em uma abordagem proposta por Mellqvist
[2006] para criação de DAOs genéricos, adotando a funcionalidade Java Generics.
Utilizando este padrão, é possível que as operações de acesso a dados mais comuns
estejam implementadas em apenas uma classe e os demais DAOs gerados estendam
esta classe. A Figura 40 e a Figura 41 apresentam o DAO genérico e uma
implementação do mesmo, respectivamente.
96
Figura 40 - DAO Genérico
97
Figura 41 - DAO da entidade PropostaContrato
É importante observar como a implementação de um DAO a partir da
extensão da classe EntidadeDAO possibilita uma economia significativa de código e
trabalho repetitivo por este já possuir operações CRUD genéricas prontas. Desta
forma, será necessário o desenvolvimento somente de funcionalidades específicas
não contempladas no DAO genérico. Além disso, pode-se perceber a existência da
anotação @Stateless (primeira linha da Figura 41), responsável por tornar o objeto
em um EJB (Enterprise Java Beans) sem informações de estado. Além disso, a
interface do DAO possui a anotação @Remote, que permite que o EJB seja utilizado
remotamente, ou seja, não é necessário que os DAOs estejam no mesmo ambiente
dos serviços.
Conforme abordado por Burkee e Monson-Haefel [2007], EJBs são
componentes do lado servidor escalonáveis, transacionais e distribuíveis. Estas
características podem ser importantes quando se trata de SOA, onde os serviços
podem estar distribuídos em diversos servidores. Além disso, sua utilização
possibilita o gerenciamento centralizado dos dados corporativos, cabendo aos
serviços apenas a utilização desses EJBs.
Aplicar as capacidades EJB aos DAOs permite adicionar algumas
características chave para o desenvolvimento dos serviços deste trabalho:
 Permitir que os DAOs sejam gerenciados pelo servidor de aplicação e
possam ser injetados
diretamente nos
serviços,
adicionando
tratamento automático de transações e concorrência;
98
 Injeção automática de contexto de persistência (EntityManager), a
partir de fonte de dados provida pelo servidor de aplicação,
eliminando necessidade de criação de fábrica de conexões. Isto é
realizado através da anotação @PersistenceContext, informando qual
unidade de persistência configurada, conforme apresentado na Figura
40.
Os DAOs foram divididos em dois projetos, de acordo com a semântica do
modelo canônico, com o objetivo de minimizar a possibilidade de afetar os serviços
em produção, caso parte dos EJBs estejam fora do ar devido à manutenção ou
problemas. São eles:
 PropostaCliente – Conjunto de entidades referentes à proposta de
crédito para o cliente;
 ConcessaoCredito – Conjunto de entidades referentes à concessão do
crédito e oferta de contrato ao cliente.
A
Figura
42
apresenta
o
arquivo
persistence.xml
do
projeto
PropostaClienteEJB, responsável por fazer a configuração das conexões gerenciadas
pelos EJBs e o pool de conexões provido pelo servidor de aplicação.
Figura 42 - Persistence.xml do projeto PropostaClienteEJB
99
4.2.4 Implementação do Serviço
Para implementação do contrato do serviço, foi escolhido o framework JAXWS (também chamado de JWS – Java Web Services) presente na especificação
JEE6. Antes, em sua 1ª versão, o framework era chamado de JAX-RPC, e teve
mudança na nomenclatura por incorporar maiores funcionalidades e integração direta
com JAXB [Kalin, 2009]. O framework é capaz de incorporar integralmente, através
do uso de anotações, todas as capacidades de um WSDL 1.1 a uma interface Java.
O uso do JAX-WS se torna fundamental neste trabalho, uma vez que permite
utilizar um WSDL já elaborado, tornando possível aplicar a abordagem contract-first
para desenvolver os serviços, e obter as vantagens observadas na seção 3.6.
Além disso, optou-se por desenvolver manualmente uma interface do serviço
e a implementação do mesmo, com o intuito de evitar geração automática de classes
e obter domínio tanto do contrato (WSDL) quanto da implementação do serviço. A
ligação entre ambas as classes é feita pelo arquivo de configuração sun-jaxws.xml,
conforme Figura 43. Este arquivo é capaz de configurar diversos endpoints para o
serviço, ou seja, configurar várias implementações para um mesmo serviço
diferenciando a url-pattern para acesso de cada uma das implementações. A
possibilidade de ter implementações distintas de um mesmo serviço demonstra a
importância do desenvolvimento utilizando contract-first em conjunto com o padrão
de projeto de modularização do WSDL, conforme apresentada na seção 3.5.
Figura 43 - Arquivo de configuração sun-jaxws.xml
A seguir, serão apresentadas as anotações do JAX-WS utilizadas neste
trabalho e sua respectiva aplicação aos serviços desenvolvidos. É importante ressaltar
que toda vez que uma anotação ou propriedade da anotação faz referência a alguma
100
definição contida no WSDL, a mesma deve estar idêntica. Caso contrário, pode
causar erro de despacho em uma chamada pelo consumidor ou até mesmo fazer com
que o framework ignore o WSDL elaborado e gere automaticamente um novo,
entrando em desacordo com a abordagem contract-first.
Web Service
A anotação @WebService é usada para especificar que a classe é um serviço
ou que a interface define um serviço. As seguintes propriedades podem ser definidas:
 endpointInterface – Nome completo da interface Java que define o
serviço. Deve seguir o padrão Java de: pacote + nome da classe.
 name – Nome que representa a interface do serviço. Deve ser o
mesmo definido na tag portType do WSDL abstrato.
 targetNamespace – targetNamespace do serviço e de seus elementos.
Deve ser o mesmo definido na tag definitions do WSDL concreto.
 serviceName – Nome do serviceName do serviço. Deve ser o mesmo
definido na tag service do WSDL concreto.
 portName – Nome do binding do serviço. Deve ser o mesmo definido
na tag port do WSDL concreto.
 wsdlLocation – Caminho relativo do WSDL. É obrigatório para o
framework que o arquivo esteja disponível no contexto para o
container web e contido na pasta “wsdl”, ou seja, deve estar no
formato “WEB-INF/wsdl/nome do arquivo.wsdl”
A Figura 44 e a Figura 45 apresentam o uso da anotação na interface e na
implementação do serviço. As propriedades são definidas somente na classe que
implementa o serviço.
Figura 44 - Anotação @WebService usada na interface do serviço
101
Figura 45 - Anotação @WebService usada na classe do serviço
SoapBinding
A anotação @SOAPBinding (Figura 46) é usada para definir o estilo de
comunicação do serviço. É uma referência a tag soap:binding definida no WSDL
concreto dos serviços. Neste trabalho, foi utilizado somente o estilo RPC-Literal. As
seguintes propriedades podem ser definidas:
 style – Estilo de binding do serviço. Valores possíveis são: RPC ou
DOCUMENT. O padrão é document;
 use – Estilo de codificação das mensagens do serviço. Valores
possíveis são: ENCODED ou LITERAL. O padrão é literal;
 parameterStyle – Define se os dados das mensagens virão em forma
de objetos ou em vários parâmetros. Valores possíveis são: BARE ou
WRAPPED, respectivamente. O padrão é wrapped.
Figura 46 - Anotação @SOAPBinding
WebMethod
A anotação @WebMethod (Figura 47) expõe um método da classe como uma
operação do serviço. As seguintes propriedades podem ser definidas:
 operationName – Nome da operação. Deve ser o mesmo definido na
tag operation do WSDL abstrato;
102
 action – Nome da ação SOAP. Deve ser o mesmo definido na tag
operation do WSDL concreto. Caso necessário, deve ser utilizado
somente na implementação da operação, não na interface. Alguns
servidores de aplicação possuem métodos para validação da ação
SOAP chamada, e para isso este atributo deve estar em igualdade com
o atributo do WSDL;
 exclude – Permite excluir a operação da lista de operações expostas
pelo serviço.
A utilização da anotação pode ser observada na Figura 47.
Figura 47 - Anotação @WebMethod
WebParam
A anotação @WebParam (Figura 48) é usada para definir um parâmetro de
uma operação. Cada parâmetro é referente a um part da mensagem definida utilizada
no parâmetro input da operação. O parâmetro name deve referenciar o nome do part
da mensagem.
Figura 48 - Anotação @WebParam
WebResult
A anotação @WebResult (Figura 49) é usada para definir o retorno de uma
operação. O retorno é referente ao part da mensagem definida e utilizada no
parâmetro output da operação.
Figura 49 - Anotação @WebResult
103
Com a utilização dessas anotações em conjunto, é possível programar toda a
interface do contrato elaborada. A Figura 50 e a Figura 51 apresentam a interface e a
implementação do serviço TratarCliente, respectivamente.
Figura 50 - Interface do serviço TratarCliente
104
Figura 51 – Trecho da implementação do serviço TratarCliente
É importante observar o uso do localizador de serviços (método lookup na
Figura 51) na implementação do serviço. Neste caso, o serviço é um objeto DAO
para acesso a dados. Esta abordagem faz parte do padrão Service Locator, onde a
classe desenvolvida, neste caso o serviço, não precisa conhecer as complexidades
envolvidas para instanciação de outro objeto [Alur et al., 2003]. A especificação
JEE6 permite o uso deste tipo de injeção através da API JNDI (Java Naming and
Directory Interface), utilizando propriedades de nomenclatura do servidor de
aplicação para encontrar o EJB publicado informando: ip, porta e um nome único
dado pelo servidor de aplicação durante o deploy de cada EJB. Neste trabalho, os
EJBs foram instanciados através lookup nos construtores dos web services
implementados, como pode ser observado na classe TratarClienteImpl.
105
4.2.5 Composição de serviços
A composição de serviços é a utilização de um ou mais serviços para gerar
um novo serviço. Conforme abordado na seção 2.9, é possível compor serviços
através de coreografia ou orquestração, sendo a última mais utilizada. O padrão para
composição de serviços com orquestração para web services é o padrão WS-BPEL.
Entretanto, o estudo dessa abordagem está fora do escopo deste trabalho. Neste
trabalho, a composição de serviço foi feita utilizando a interface de serviços já
publicados em classes que utilizam a anotação @WebServiceClient, fornecendo uma
instância destes serviços. As interfaces dos serviços cliente especificam o endpoint
de onde estão publicados. O serviço responsável pela composição utiliza o serviço
cliente diretamente para invocar suas operações.
O serviço ManterCadastroCliente é um exemplo desse tipo de composição. A
Figura 52 apresenta a classe TratarCliente, que representa a interface do serviço
TratarClienteDataService que é utilizado na composição. A Figura 53 apresenta a
classe responsável pela obtenção de uma instância desse serviço para ser utilizada no
serviço ManterCadastroCliente. Como é possível observar na Figura 54, no momento
que o serviço ManterCadastroClienteLogicSevice é iniciado, este obtém uma
instância do serviço TratarClienteDataService.
Figura 52 - Interface do serviço utilizado na composição do ManterCadastroCliente
106
Figura 53 - Classe responsável pela obtenção do serviço TratarCliente
Figura 54 – Composição de serviços
107
4.2.6 Testes de desenvolvimento
Após o desenvolvimento dos serviços, devem ser realizados os testes dos
mesmos, antes que o projeto seja entregue a uma equipe de testes. Neste trabalho, os
testes foram divididos em duas fases: testes unitários e testes funcionais.
4.2.6.1 Testes Unitários
Antes da implementação dos serviços as funcionalidades básicas do DAO
genérico e as consultas avançadas passaram por testes unitários, garantindo que a
camada de acesso a dados estivesse operacional. Para realizar esses testes foi
utilizado o framework TestNG, que trabalha com uso de anotações para definir os
testes.
Neste trabalho foram abordadas apenas as seguintes anotações da ferramenta:
 Test – Define a classe ou a função como um teste. É possível definir
operações dependentes, onde uma determinada operação depende da
execução de outra operação. Entretanto, esse recurso deve ser
utilizado com cautela. Como exemplo, se a lógica do teste for
construída considerando que uma operação sempre será executada
com sucesso para em seguida testar outra operação, caso a primeira
operação falhe por um motivo não esperado, pode ser complicado
identificar onde se encontra o erro real, uma vez que o objetivo do
teste é testar a segunda operação e não a primeria. Todas as classes e
operações de teste foram anotadas @Test.
 BeforeClass – Define que a função será a primeira função executada
no teste. Esta anotação permite que o EJB seja carregado através de
lookup antes que as operações do DAO sejam executadas pelos testes.
Isto permitiu também garantir que estas chamadas estavam de acordo
com a JNDI e poderiam ser utilizadas posteriormente pelos serviços.
A Figura 55 apresenta um exemplo da classe de teste para o DAO de Proposta
de Contrato.
108
Figura 55 - Classe de testes do DAO PropostaContrato
Após a execução do teste, a ferramenta apresenta um resumo das operações
em que houve sucesso ou fracasso, conforme apresentado pela Figura 56.
Figura 56 - Resultado da realização de um teste com TestNG
109
4.2.6.2 Testes Funcionais
Após a implementação de cada serviço, o mesmo passou por testes manuais,
onde foram verificadas as invocações de cada operação do contrato e avaliado o
retorno esperado das mesmas.
Para realização dos testes dos serviços, foi utilizada a ferramenta SoapUI,
voltada principalmente para testes funcionais de web services. Para serviços já
publicados em um servidor, basta criar um projeto no SoapUI com a URL do WSDL,
e automaticamente serão criados requests para cada operação do serviço com as
mensagens definidas. A partir daí, basta informar os valores dos parâmetros de
acordo com o desejado, invocar uma chamada e será apresentada a resposta do
serviço, seja de erro ou sucesso.
Figura 57 - Criação de Teste com SoapUI
Figura 58 - Teste de chamada com SoapUI
110
A Figura 57 apresenta a criação de novos testes com a ferramenta, a partir de
um wsdl publicado. É possível ainda gerar simuladores (Mocks) para o teste, caso o
serviço não esteja em produção, mas ainda podendo simular resultados esperados. A
Figura 58 mostra uma chamada da operação consultarCliente do serviço, onde a
partir da requisição gerada automaticamente, é possível verificar a resposta do
serviço para validar com o contrato.
4.3 Teste de serviço
Esta é a última etapa da fase de projeto do ciclo de vida do serviço. Neste
momento, uma equipe de testes assume o papel e deve, não somente testar de novo e
garantir aderência aos requisitos, como assegurar qualidade do serviço.
A ferramenta SoapUI também pode ser utilizada para realizar simulação e
testes unitários de chamadas SOAP com objetivo de mitigar erros, falhas e assegurar
o atendimento aos requisitos. Salvo os requisitos, os testes devem atender a métricas
tais como acessos simultâneos, tempo de resposta e disponibilidade. Para isso, o
SoapUI oferece também recursos específicos para garantia de qualidade, entre eles:
casos de teste, testes de integração contínua, testes de carga e testes de segurança.
As análises e métricas coletadas pela equipe de testes devem servir de base
para adquirir vantagens competitivas no mercado ou estipular garantias de contrato
pelo provedor do serviço.
Finalizada esta fase, e o serviço tendo passado nas métricas definidas, a fase
de projeto do ciclo de vida se encerra, e o mesmo torna-se habilitado para publicação
e provimento.
4.4 Publicação de serviço
4.4.1 Compilação de serviço com Ant
Antes de publicar um web service, é preciso compilar e empacotar o projeto
do serviço, incluindo ou referenciando as bibliotecas e/ou projetos associados para
que possam ser publicados em um servidor de aplicação.
111
Em projetos simples, a construção manual é completamente viável. Porém,
quando os projetos se tornam complexos, interdependentes e compartilhando
bibliotecas em um servidor de aplicação, o trabalho manual pode se tornar lento e
passível de erros. Neste caso, ferramentas devem ser utilizadas para automatizar a
publicação dos serviços como, por exemplo, o Ant. O framework Ant é um
automatizador simples, escalável e extensível para construção de projetos [Hatcher e
Loughran, 2003]. Descrita em linguagem XML, a ferramenta possibilita facilidades
como compilar código, copiar arquivos, referenciar bibliotecas, empacotar um
projeto e publicar em um servidor de aplicação. A Figura 59 exemplifica o arquivo
de compilação do serviço Tratar Cliente.
A Tabela 12 apresenta os principais elementos de um arquivo Ant. Já a Figura
59 mostra um exemplo prático de utilização dos recursos deste framework como
compilação de classes, empacotamento e implantação automática no servidor.
Tabela 12 - Principais elementos Ant
Elemento
path
target
war
jar
javac
exec
antcall
Descrição
Define o conjunto de bibliotecas (arquivos ou diretórios) necessários para
compilação das classes
Define um conjunto de operações. Funcionamento similar à uma função.
Empacota um projeto na estrutura WAR (Web Application Resource)
Empacota um projeto na estrutura JAR (Java Application Resource) para ser
utilizado como biblioteca ou EJB.
Compila uma ou um conjunto de classes.
Permite executar linhas de comando. Funciona com comandos bat e shell.
Realiza uma chamada para outro target definido anteriormente.
112
Figura 59 - Build.xml - Tratar Cliente
Ant é um framework extenso e permite uma série de outros artifícios de
automação como integração com sistema de controle de versão (por exemplo, CVS),
execução automática de testes unitários com JUnit , envio de e-mail, entre outros que
não serão abordados neste trabalho.
113
4.4.2 Implantação do Serviço
Sendo o serviço um projeto web, o mesmo deve ser implantado em um
servidor de aplicação web, para que então possa estar disponível para utilização e
consumo.
Para isso, foi o escolhido o servidor GlassFish em sua versão 3.1.2, um
servidor robusto, presente na especificação JEE 6, open-source e largamente
utilizado no mercado. Além disso, possui uma interface completa de administração
pelo navegador, que permite facilidade e praticidade para efetuar operações
fundamentais, tais como:
 Criação de pool de EJB;
 Criação, configuração e teste de conexão com banco de dados;
 Criação de pool de conexões;
 Implantação de EJB;
 Implantação de Web Service.
4.5 Considerações
sobre
o
desenvolvimento
dos
serviços
Este capítulo apresentou o desenvolvimento dos serviços e dos demais
projetos que constituem a arquitetura do projeto. O diagrama de arquitetura que
representa a relação de cada projeto e suas dependências é apresentado na Figura 60.
114
Figura 60 - Diagrama de Arquitetura do Projeto
O modelo canônico elaborado do processo de análise de crédito foi matériaprima para a elaboração de um esquema centralizado de tipos de dados e os
esquemas de visões propostos para cada entidade presente no modelo canônico.
Os WSDLs foram criados manualmente considerando: as exigências do BP; o
padrão sugerido por Azevedo et al. [2009a], que define como serviços de dados
aqueles que executam apenas operações de persistência e serviço de lógica; aqueles
responsáveis pelo processamento de regras de negócio da organização, mas que
possam porventura fazer acesso a dados para seu processamento; o padrão de projeto
de modularização, que proporciona um desacoplamento da parte conceitual em
relação à parte física do WSDL; e os tipos de dados dos esquemas de visão definidos
para o projeto.
Após o desenvolvimento do contrato dos serviços, foi necessário não somente
o desenvolvimento dos web services, mas a elaboração de uma arquitetura que desse
suporte ao desenvolvimento dos mesmos. Inicialmente foi escolhido o servidor de
aplicação GlassFish devido a sua robustez e facilidade de configuração de pool de
conexões. Em seguida, fez-se necessário o mapeamento do esquema centralizado de
115
dados e suas visões para classes Java. Assim, foi criado o projeto ModeloCanonico
contendo as classes Java (POJO) que representam simultaneamente as entidades que
devem ser persistidas em banco, os tipos de dados do esquema centralizado
utilizados na transferência de dados entre cliente e servidor e as classes (POJO) que
representam cada um dos esquemas de visão elaborados.
Após a definição e criação das classes que representam o modelo canônico,
foram desenvolvidos dois projetos EJB responsáveis pela persistência dos dados:
PropostaClienteEJB, responsável pelas operações de persistência das entidades
Cliente, Funcionario, Peca e PropostaCredito; e ConcessaoCreditoEJB, responsável
pelas operações de persistência das entidades CreditoConcedido, Parcela,
PropostaContrato, TaxaContrato e TaxaJuros. A escolha de utilização de EJBs se deu
pela característica destes serem escaláveis, transacionais, terem facilidade de
distribuição
e
permitir
injeção
automática
de
contexto
de
persistência
(EntityManager), eliminando necessidade de criação de fábrica de conexões. Foi
desenvolvida uma classe utilizando o padrão DAO para cada entidade tratada pelos
EJBs, o que garantiu a separação da camada de persistência de dados da
implementação dos serviços. Tanto o projeto PropostaClienteEJB quanto o projeto
ConcessaoCreditoEJB têm uma dependência com o projeto ModeloCanonico, onde
foram desenvolvidas as entidades que devem sofrer as operações de persistência.
Os web services foram implementados utilizando o framework JAX-WS
devido à facilidade de desenvolvimento utilizando anotações, integração direta com o
framework JAX-B e por sua aderência ao BP. Utilizando as anotações presentes no
JAX-WS foi possível fazer o mapeamento do WSDL gerado manualmente para as
classes Java (POJO) desenvolvidas. Devido à centralização do desenvolvimento das
classes que representam as visões e entidades, cada projeto de serviço desenvolvido
tem uma dependência com o projeto ModeloCanonico. Projetos de serviços que
precisam efetuar operações de persistência de uma determinada entidade através do
seu respectivo DAO utilizaram o padrão Service Locator. A abordagem utilizada foi
a instanciação através de lookup, onde uma instância do DAO é obtida através do
localizador de serviços JNDI. Desta forma, o serviço não precisa ter conhecimento
sobre a complexidade de criação do DAO e se a implementação do mesmo for
alterada o serviço que o utiliza não será afetado.
116
É importante ressaltar que a dependência gerada com a utilização do padrão
de centralização de esquema foi propagada para o desenvolvimento do esquema
centralizado e suas visões na linguagem de programação Java (projeto
ModeloCanonico). Contudo, os benefícios desse padrão também se fizeram presentes
na codificação, proporcionando uma governança mais eficiente sobre as classes de
entidades que devem ser utilizadas no processo de análise de crédito. Com o intuito
de facilitar o desenvolvimento e implantação dos serviços, as classes presentes no
projeto ModeloCanonico foram importadas em um arquivo .jar para a pasta
[GLASSFISH_HOME]/domains/analise_credito/lib/ext. Desta forma, todos os
projetos presentes no domínio analise_credito podem utilizar as classes do
ModeloCanonico sem tê-las diretamente em seus projetos.
Finalmente, após o desenvolvimento dos EJBs (que contém os DAOs das
entidades) e dos serviços, estes foram compilados com suas devidas dependências e
empacotados utilizando a ferramenta de automatização de publicação Ant. Após
publicação no servidor de aplicação GlassFish, foram testados. Os EJBs passaram
por testes unitários utilizando o framework TestNG; já os web services foram
testados funcionalmente utilizando a ferramenta SoapUI.
117
Capítulo 5:
Conclusão
Web services são desenvolvidos majoritariamente utilizando a abordagem
code-first. Apesar de facilitar e agilizar o desenvolvimento dos serviços, esta técnica
traz impactos negativos à governança de uma arquitetura orientada a serviços, tais
como:
 Maior acoplamento dos serviços com as tecnologias que os implementaram;
 Baixo índice de reusabilidade dos serviços;
 Maior impacto nos consumidores após mudanças;
 Baixo grau de durabilidade devido à necessidade de geração de novo contrato
a cada manutenção;
 Impossibilidade de utilização de versionamento;
 Impossibilidade de utilização de tipos de dados centralizados.
Neste trabalho, foi abordada a utilização do padrão de desenvolvimento
contract-first como alternativa ao code-first e suas implicações negativas. Para isso,
foi dada seqüência ao desenvolvimento dos serviços candidatos identificados e
projetados em Souza et al [2011], dando seguimento ao ciclo de vida de
desenvolvimento de serviços proposto por Gu e Lago [2007].
Em uma abordagem contract-first, o contrato do serviço é desenvolvido
orientado ao negócio, para que depois seja codificado. Assim, a confecção do
contrato antes da codificação possibilitou um acoplamento positivo de lógica para
contrato em detrimento do acoplamento negativo do contrato com uma tecnologia
específica [Erl, 2008]. Utilizando code-first, também é possível desenvolver
orientado ao negócio. Entretanto, neste caso, haverá um acoplamento com a
tecnologia, pois o contrato será gerado a partir da codificação, causando uma
dependência em relação à linguagem ou framework.
Devido ao baixo acoplamento possibilitado pelo contract-first, é possível
obter alto índice de durabilidade dos serviços desenvolvidos, uma vez que alterações
na lógica do serviço podem ser realizadas sem que haja alteração do contrato. Em
118
code-first também é possível fazer alterações que não levem a mudanças no contrato,
desde que se utilize na manutenção a mesma tecnologia utilizada no
desenvolvimento inicial. Se o serviço foi desenvolvido utilizando linguagem Java e
framework JAX-WS, sua manutenção deve ser feita utilizando a linguagem Java e o
framework JAX-WS.
Neste trabalho, para que fosse possível promover interoperabilidade dos
serviços, os mesmos foram desenvolvidos tomando como base os padrões de
desenvolvimento de serviço presentes no Basic Profile (BP), que é o principal
produto do consórcio Web Service Interoperability (WS-I). A utilização do BP
garante homogeneidade diante das muitas possibilidades de configuração das
especificações necessárias ao desenvolvimento de serviços. Essa padronização
possibilita que um maior número de plataformas tecnológicas utilize os serviços.
O framework JAX-WS, utilizado para o desenvolvimento dos serviços, está
em conformidade com o BP. Isso significa que tanto utilizando contract-first quanto
utilizando code-first é possível obter interoperabilidade. Entretanto, conforme
demonstrado, a utilização de contract-first permitiu não apenas a conformidade com
o BP como permitiu a utilização dos tipos de dados em esquemas centralizados e a
modularização do WSDL.
A padronização de tipos de dados por domínio (centralização de esquema),
desenvolvido a partir do modelo canônico proposto em Souza et al [2011],
proporcionou a eliminação de tipos de dados redundantes, melhorando a governança
sobre os tipos de dados, tornando desnecessária transformações de dados e,
conseqüentemente, melhorando o desempenho e interoperabilidade dos serviços.
O desempenho também foi otimizado devido à utilização do padrão Jardim do
Éden, associado ao esquema de visões elaborado no projeto. Essas visões
proporcionaram diminuição do tráfego de informações em mensagens SOAP, pois
apenas os dados definidos no esquema de visão são trafegados. Entretanto, não foi
possível comprovar a melhoria de desempenho relativa às validações diretamente no
esquema sem a necessidade de criação de uma instância do serviço. As chamadas do
serviço iniciavam uma instância do mesmo, sem que fosse bloqueado pela validação
do esquema, fazendo com que as validações ocorressem apenas na codificação, assim
como seria em code-first.
119
Já a modularização do WSDL possibilitou a separação da parte concreta da
parte abstrata do contrato do serviço, o que é uma boa prática de projeto em
desenvolvimento de software. Hewitt [2009] menciona que é possível utilizar
diferentes estilos de binding, codificação e endpoint para uma mesma interface de
serviço. Entretanto, utilizando o framework JAX-WS 2.2 não foi possível utilizar
diferentes estilos de binding, uma vez que a definição do estilo deve ser configurada
diretamente na interface do serviço. Apesar disso, o framework possibilita
codificações e endpoints diferentes para uma mesma interface. Isto possibilita
implementações de regras ou requisitos distintos, como por exemplo, serviços em
diferentes idiomas, restrição de informações de acordo com o perfil, elaboração de
conteúdo de acordo com a região de acesso, entre outros.
Durante o desenvolvimento dos serviços, foi possível identificar melhorias
nas fases de análise e projeto. Seguem abaixo as oportunidades de melhorias
observadas:
 A heurística de cluster do método de identificação dos serviços candidatos prevê
apenas operações básicas de dados (CRUD) que devem ser implementadas em
cada serviço identificado. Contudo, de acordo com o objetivo da modelagem de
processos, o detalhamento da modelagem pode não conter todos os detalhes das
operações necessárias às implementações dos serviços. Desta forma, a definição
de operações de serviços na fase de projeto deve considerar a identificação de
novas operações como serviços necessários aos serviços de dados.
 Foi observado que o serviço de cálculo de taxas de contrato foi identificado tanto
pela heurística de múltiplas instâncias (Tabela 7, índice 37) quanto pela
heurística de requisitos de negócio (Tabela 7, índice 34). Durante a
implementação, um dos serviços foi escolhido e removido. Dessa forma, é
necessário, durante a fase de projeto, que um projetista analise os serviços
identificados a fim de remover duplicidades que não puderam ser identificadas
durante a aplicação da heurística de eliminação de serviços duplicados.
Foi possível seguir a abordagem contract-first proposta com o uso do
framework JAX-WS. No entanto, algumas dificuldades ou bugs foram identificados
durante o processo do desenvolvimento:
120
 Apesar de o estilo RPC estar de acordo com o WS-I BP, o estilo mais
utilizado é Document. Entretanto, os serviços desenvolvidos utilizando este
estilo não funcionaram, pois durante a tentativa de consumo ocorreu erro de
despacho e a operação não foi encontrada. Assim, foi decidido implementar
os serviços utilizando o estilo RPC, que não apresentou o mesmo problema.
Vale ressaltar que utilizando code-first, o estilo Document funciona
perfeitamente;
 A utilização de listas com estilo RPC e abordagem contract-first retornava
mensagens vazias ou parâmetros de entrada vazios. Desta forma, para superar
este problema foi necessária a substituição de listas por arrays. Foi validado o
que ocorreria se fosse utilizada abordagem code-first e foi verificado que é
possível a utilização de listas perfeitamente neste caso;
 Foi detectado um problema na composição de serviços utilizando as
anotações para consumo de serviço do JAX-WS. Ao iniciar o servidor de
aplicação Glassfish, o mesmo entende que existe uma duplicata do serviço
que está sendo registrado. No entanto, não foi possível precisar se este
problema é relativo ao framework ou a alguma configuração no servidor de
aplicação.
Como proposta para trabalhos futuros, o desenvolvimento dos serviços
poderia ser melhorado com a utilização de BPEL para composição dos serviços,
publicação dos serviços básicos e compostos em um ESB e registro dos mesmos em
um UDDI.
121
Referências Bibliográficas
ALUR D., CRUPI, J., MALKS, D., 2003, Core J2EE Patterns: Best Practices and
Design Strategies. Prentice Hall / Sun Microsystems Press.
AZEVEDO, L.G., BAIAO, F., SANTORO, F., SOUZA, J., REVOREDO, K.,
PEREIRA, V., HERLAIN, I. 2009a. Identificação de serviços a partir da
modelagem de processos de negócio. In: Simpósio Brasileiro de Sistemas de
Informação (SBSI), Brasília.
AZEVEDO, L.G., SANTORO, F., BAIAO, F., SOUZA, J., REVOREDO, K.,
PEREIRA, V., HERLAIN, I., 2009b. A Method for Service Identification from
Business Process Models in a SOA Approach. In: 10th International Workshop
on Business Process Modeling, Development, and Support (BPMDS), 2009,
Amsterdam. Enterprise, Business-Process, and Information Systems Modelling. v.
29.
AZEVEDO, L.G., SOUZA, J.F., SANTORO, F ., BAIÃO, F. 2009c. Metodologia
para Análise e Projeto de Serviços em uma abordagem SOA. Relatórios
Técnicos do DIA/UNIRIO (RelaTe-DIA), 0023/2009.
AZEVEDO, L.G., SOUSA, H.P., SOUZA, J.F., SANTORO, F., BAIÃO, F. 2009d.
Identificação Automática de Serviços Candidatos a partir de Modelos de
Processos de Negócio. In: Conferencia IADIS Ibero Americana
WWW/INTERNET 2009, Alcalá de Henares, Madri,Espanha.
AZEVEDO, L.G., SOUZA, J.F., SANTORO, F ., BAIÃO, F. 2009e. Metodologia
para Análise e Projeto de Serviços em uma abordagem SOA. Relatórios
Técnicos do DIA/UNIRIO (RelaTe-DIA), 0023/2009.
AZEVEDO, L.G., SOUZA, J.F., BAIÃO, F., SANTORO, F. 2009f. Inspeção da
Ferramenta Oracle BPEL PM. Relatórios Técnicos do DIA/UNIRIO (RelaTeDIA), 0016/2009.
AZEVEDO, L. G., BAIAO, F., SANTORO, F. SOUZA, J. F., (2011) “A Business
Aware Service Identification and Analysis Approach”. In: IADIS International
Conference Information Systems 2011, March, 11-13, Avila, Spain.
BURKEE, B. MONSON-HAEFEL, R., 2007. Enterprise JavaBeans 3.0. O´Reilly.
CHINNICI, R., MOREAU, J.-J., RYMAN, A., WEERAWARANA, S., 2007. Web
Services Description Language (WSDL) Version 2.0. World Wide Web
Consortium (W3C). Disponível em <http://www.w3.org/TR/wsdl20/>. Acessado
em Junho de 2012.
CHRISTENSEN, E., CURBERA, F., MERDITH, G., WEERAWARANA, S. 2001.
Web Services Description Language (WSDL) 1.1. World Wide Web
Consortium (W3C). Disponível em <http://www.w3.org/TR/wsdl>. Acessado em
Junho de 2012.
DAMASCENO, J. C., Introdução à Composição de Serviços Web. Disponível em:
http://www.ufpi.br/subsiteFiles/ercemapi/arquivos/files/minicurso/mc8.pdf.
Acesso em 05 jun. 2012.
122
DIIRR, T.; SOUZA, A.; AZEVEDO, L.; SANTORO, F. Modelo de Processos de
Negócio Analisar Pedido Crédito. Relatórios Técnicos do DIA/UNIRIO
(RelaTe-DIA),
RT-0008/2010,
2010.
Disponível
(também)
em: http://seer.unirio.br/index.php/monografiasppgi.
ERL, T., 2004, Oriented Architecture: A Field Guide to Integrating XML and
Web Services. Prentice Hall.
ERL, T., 2005, Service-Oriented Architecture: concepts, technology, and Design,
Prentice Hall.
ERL, T., 2008, SOA Principles of Service Design, Prentice Hall.
FATINATO, M. Uma abordagem baseada em características para o
estabelecimento de contratos eletrônicos para services web. Tese de
Doutorado, Unicamp, 2007.
GONCALVES, A., 2009, Beginning Java™ EE 6 Platform with GlassFish™ 3,
Apress.
GU, Q., LAGO, P., A stakeholder-driven service life cycle model for SOA, 2007.
HANSEN , M. D., 2007, SOA Using Java Web Services.
HATCHER, E., LOUGHRAN, S., 2003, Java Development with Ant, Manning.
HEWITT, E., Java SOA Cookbook, 2009. O´Reilly.
IYENGAR, ASHOK., JESSANI, VINOD., CHILANTI, MICHELE, WebSphere
Business Integration Primer, Process Server, BPEL, SCA and SOA, 2008.
JOSUTTIS, N. M., SOA in Practice – The Art of Distributed System Design,
Beijing; Cambridge; Farnham; Köln; Paris; Sebastopol; Taipei; Tokyo: O’Reilly,
2007, 324 p.
JURIC, M., A Hands-on Introduction to BPEL, 2007. Disponível em:
http://www.oracle.com/technetwork/articles/matjaz-bpel1-090575.html. Acesso
em 05 jun. 2012.
KALIN, M., Java Web Services: Up and Running, 2009. O´Reilly.
KELLER, G, TEUFEL T., SAP R/3 Process Oriented Implementation, AddisonWesley, 1998.
MAGALHAES, A. et al.: Uma Estratégia para Gestão Integrada de Processos e
Tecnologia da Informação através da Modelagem de Processos de Negócio
em Organizações. Revista Cientefico – Faculdade Ruy Barbosa. 45-53 (2007)
MARKS, E., BELL, M. Service-Oriented Architecture: A Planning and
Implementation Guide for Business and Technology, 2006, Wiley.
METHA, E. Java Architecture for XML Binding (JAXB), 2003. Disponível em:
http://www.oracle.com/technetwork/articles/javase/index-140168.html.
Acesso
em 09 jun. 2012.
MELLQVIST, P., Don't repeat the DAO!, 2006. Disponível
http://www.ibm.com/developerworks/java/library/j-genericdao/index.html.
Acesso em 12 jun. 2012.
em:
123
MINISTRO, A., LEÃO, F., FARIA, F., LOPES, S., AZEVEDO, L.G., 2011. BPEL:
Principais Conceitos e Uso Prático, Relatórios Técnicos do DIA/UNIRIO
(RelaTe-DIA), 0011/2011.
OASIS, Modelo de Referência para Arquitetura Orientada a Serviço 1.0,
disponível em http://www.pcs.usp.br/~pcs5002/oasis/soa-rm-csbr.pdf, OASIS,
2006.
PELTZ, C., Web Services Orchestration and Choreography, 2003. Disponível em
<http://soa.sys-con.com/node/39800>. Acesso em 25 ago. 2012.
PUNTAR, S., LENDRIKE, A., MAGDALENO, A., BAIÃO, F., SANTORO, F.,
2009. Estudo Conceitual sobre BPMS. Relatórios Técnicos do DIA/UNIRIO
(RelaTe-DIA), 0007/2009.
QuickStartTutorial, Oracle BPEL Process Manager 10.1.2.0.x Quick Start
Tutorial,
2009.
Disponível
em
http://download.oracle.com/otndocs/products/bpel/quickstart.pdf. Acesso em 29
mai. 2009.
SCHEER, A.-W., 2000. ARIS - Business Process Modelling. Springer, Berlin,
Alemanha.
SHARP, A., McDermott, P., 2001. Workflow Modeling: Tools for Process
Improvement and Application Development. Artech House.
SOSNOSKI, D., Serviços da Web Java : Entendendo e Modelando o WSDL 1.1,
2011.
Disponível
em
<http://www.ibm.com/developerworks/br/library/jjws20/index.html>. Acessado em 4 Jun. 2012.
THOM, L., IOCHPE, C., REICHERT, M.: Workflow Patterns for Business Process
Modeling. In: 8th Int. Workshop on Business Process Modeling, Development,
and Support (BPMDS), pp. 349–358 (2007)
VAJJHALA, S., FIALLI, J., 2006, The Java™ Architecture for XML Binding
(JAXB) 2.0.
VASILIEV, Y., SOA and WS-BPEL: Composing Service-Oriented Solutions with
PHP and ActiveBPEL. Birmingham: Packt Publishing, 2007.
WYKE, R.A., WATT, A. , 2002, XML Schema Essentials.
124
Apêndice 1 – Padrões de Projeto para Centralização de
Esquema
1. Boneca Russa
125
2. Fatia de Salame
126
3. Veneziana
127
4. Jardim do Éden
128