Implementando SOA TM Usando Java EE Implementando SOA TM Usando Java EE B. V. Kumar Prakash Narayan Tony Ng Rio de Janeiro, 2012 Para minha mãe – Sra. M. N. Lakshmidevamma — Dr. B. V. Kumar Aos meus pais – Sr. K. N. Krishnamoorthy e Sra. Sharada Krishnamoorthy — Prakash Narayan A Kaitlyn, Tyler e Sophia — Tony Ng Sumário Prefácio de Robert Brewin ............................................................. xvii Prefácio de Raj Bala ......................................................................xviii Agradecimentos ............................................................................. xxi Sobre os Autores ........................................................................... xxiii Parte I Visão Geral ........................................................................... 1 Capítulo 1 Introdução ................................................................. 3 Produtos e Serviços Serviços Guiados por Software Web Services SOA Web Services e Oportunidades SOA Resumo Notas Finais Capítulo 2 4 4 6 8 12 13 13 Evolução das Arquiteturas TI .................................. 15 Evolução da Arquitetura no Lado Servidor Evolução da Arquitetura do Mainframe Evolução da Arquitetura Cliente/Servidor Evolução da Arquitetura Distribuída Internet e World Wide Web 16 17 19 21 26 vii viii SUMÁRIO Evolução da Arquitetura no Lado Cliente Terminais como Clientes Thick Clients Thin Clients Clientes do Navegador Clientes Móveis Arquitetura Orientada a Serviços e Web Services Web Services Chegada da Infraestrutura SOAP, WSDL e UDDI Resumo Notas Finais Capítulo 3 28 29 30 30 31 31 32 32 34 35 35 Evolução da Arquitetura Orientada a Serviços ..... 37 Arquitetura Orientada a Serviços – Descrição Primeiras Arquiteturas IMS CICS CORBA DCOM Mudanças do Paradigma Java e Java 2 Enterprise Edition Linguagem de Marcação Extensiva Web Service – XML-RPC e SOAP Chegada dos Web Services e SOA Web Services da Primeira Geração Web Services da Segunda Geração SOA Usando Web Services Vantagens e Desafios com SOA Tecnologias da Implementação SOA Tecnologias .NET da Microsoft Tecnologias Java Enterprise Edition da Sun Microsystems Resumo Notas Finais 38 38 39 40 41 41 42 43 44 44 44 45 46 46 47 47 48 48 50 50 Parte II O Básico da Arquitetura Orientada a Serviços ............... 53 Capítulo 4 Serviços Orientados a Mensagens e SOAP ............ 55 Convenções SOAP Envelope da Mensagem Regras da Codificação Convenção RPC Vinculação 56 56 56 56 57 SUMÁRIO Anatomia do SOAP Modelo SOAP Básico Modelo SOAP Detalhado 'HWDOKHVGD&RGL¿FDomR62$3 Codificação do Tipo Simples Codificação do Tipo Complexo Vinculação SOAP Para o Protocolo de Transporte Interação Usando o Protocolo SOAP Modelo de Troca de Mensagens Resposta SOAP e Mecanismo de Tratamento de Erros <Fault> do SOAP <faultcode> do SOAP <faultstring> do SOAP <faultactor> do SOAP <detail> do SOAP Diferenças e Dependências da Versão SOAP Versionamento SOAP Nova Versão SOAP Resumo Notas Finais Capítulo 5 ix 57 57 60 65 66 68 68 69 71 72 72 73 73 73 73 73 74 75 76 Web Services e Linguagem de Descrição de Web Services ..................................................... 77 WSDL – Um Vocabulário da Descrição de Web Services do XML O Triângulo Web Services Fundamentos da Chamada/Invocação de Serviços Chamada Síncrona e Fundamentos do Mecanismo RPC Chamada de Serviços e WSDL Criação do Serviço Geração da Descrição do Web Service para o Serviço Registro do Web Service Publicação do Web Service Descoberta do Web Service Compreendendo a Semântica dos Web Services Chamada do Web Service Descrevendo Web Service – O Modo XML Elementos WSDL e sua Sequência de Aparecimento Anatomia do Documento WSDL Diferenças e Dependências da Versão WSDL Resumo Notas Finais 78 78 80 81 85 86 87 87 87 87 87 88 91 92 93 100 100 101 x Capítulo 6 SUMÁRIO Registros e UDDI .................................................... 103 'H¿QLQGRR8'', Informações de Negócio Baseadas na Taxonomia Especificações e Serviços UDDI Registros Públicos Versus Registros Privados Nomenclatura UDDI Conjuntos de API do Nó Nó UDDI Registros UDDI Estrutura de Dados Modelo de Informações Núcleo do UDDI Estrutura de Dados <businessEntity> Estrutura de Dados <businessService> Estrutura de Dados <bindingTemplate> Estrutura de Dados <tModel> Publicação das Informações de Negócio Criação e Modificação das Informações de Negócios Eliminação das Informações de Negócios Descoberta dos Web Services Navegação e Recuperação de Informações Informações de Exploração Detalhadas Resumo #AP¿TULO /RQUESTRAºOE#OREOGRAkA ................................ 119 Importância do Processo de Negócio e do Fluxo de Trabalho Orquestração WS-Linguagem de Execução do Processo de Negócio Processamento BPEL &RUHRJUD¿D Orquestração e SOA &RUHRJUD¿DH62$ Resumo Notas Finais Capítulo 8 104 105 105 106 106 106 106 107 107 107 108 109 110 111 112 113 114 115 116 117 118 120 121 122 124 129 130 131 Infraestrutura de Web Services Avançados para Implementar o SOA ...................................... 133 Padrões de Troca de Mensagens WS-* — A Nova Geração WS-Endereço WS-Transação Atômica 135 136 137 137 SUMÁRIO WS-Coordenação WS-Evento WS-Troca de Metadados WS-Notificação WS-Estrutura de Política WS-Confiabilidade/WS-Mensagem Confiável WS-Segurança :6²'H¿QLomRGH7UDEDOKR Endereçamento Confiabilidade e Mensagem Confiável Segurança WS-* e SOA WS-Mensagem Confiável WS e SOA WS-Segurança e SOA 3HU¿O%iVLFR:6, Resumo Notas Finais xi 137 137 138 138 138 138 138 139 140 142 146 147 147 148 148 Parte III Plataforma Java Enterprise Edition e ESB ........................ 149 Capítulo 9 Visão Geral da Plataforma Java Enterprise Edition (JavaEE)...................................................... 151 Categorias da Tecnologia Java EE Tecnologias do Aplicativo Web Tecnologias Web Services Tecnologias do Aplicativo Comercial Tecnologias da Plataforma Comum O Que há de Novo no Java EE 5 Anotações Java Modelo POJO Produtividade do Desenvolvedor Modelo de Componente Java EE Cliente do Aplicativo Uma Aplicação Web Componentes EJB Adaptador de Recursos Qualidade do Serviço do Java EE Distribuição Integridade dos Dados Segurança Performance e Escalabilidade Disponibilidade 153 153 155 158 161 163 163 165 166 167 168 168 168 169 169 169 169 170 170 170 xii SUMÁRIO Interoperabilidade Concorrência Resumo Notas Finais Capítulo 10 Tecnologias Web no Java EE................................. 173 Java Servlet JSP %LEOLRWHFDGH7DJV3DGUmR-63 JSF Paradigma MVC no JSF Framework do Componente da Interface do Usuário Modelo de Navegação Beans Gerenciados Linguagem de Expressão Unificada Conversão e Validação de Dados Eventos JSF $ERUGDJHPGR%DFNLQJ%HDQ Resumo Nota Final Capítulo 11 174 176 178 178 179 180 182 183 184 185 187 187 Enterprise JavaBeans e Persistência .................... 189 1~FOHRGR(-%$3, Injeção de Dependência Serviços de Contêiner Interceptadores Novo JPA Classe de Entidade Relacionamentos Herança Gerenciador de Entidades Operações do Ciclo de Vida da Entidade Linguagem de Consulta Java de Persistência Mapeamento Objeto-Relacional Mapeamento dos Relacionamentos Mapeamento de Herança Resumo Capítulo 12 171 171 171 172 191 191 193 193 194 195 196 197 197 200 203 203 204 205 Visão Geral dos Web Services Java ..................... 207 Implementando um Web Service Mapeamento entre Java e WSDL 208 208 SUMÁRIO Anotações do Web Service @WebService @WebMethod @Oneway @WebParam @WebResult @HandlerChain @SOAPBinding Acessando Web Services Protocolo e Transporte Recursos Avançados no JAX-WS Estrutura da Sub-rotina Interações Assíncronas API da Mensagem Arquitetura Java para a Vinculação XML Evolução do Esquema Resumo Capítulo 13 xiii 210 210 211 211 211 211 211 212 212 213 213 213 214 215 217 220 222 Barramento de Serviço Corporativo e Integração de Negócio Java .................................................... 223 %DUUDPHQWRGH6HUYLoRH&RUSRUDo}HV ESB – Uma Perspectiva de Negócio Recursos Importantes do ESB Integração de Negócio Java – Java e ESB Resumo 224 226 227 230 Parte IV Implementando o SOA usando a Plataforma Java EE.... 231 Capítulo 14 Arquitetura Orientada a Serviços e a Camada Web ........................................................ 233 Disponibilizando Serviços Através da Camada Web Visão Geral Padrões de Projeto da Camada Web e SOA Padrões de Projeto da Camada de Apresentação Frameworks e Disponibilização de Serviços Disponibilização de Serviços Usando o JSF Decisão Sobre o Framework Correto Resumo Notas Finais 234 235 236 236 237 238 244 245 246 xiv Capítulo 15 SUMÁRIO Arquitetura Orientada a Serviços e a Camada de Negócio ............................................ 247 Disponibilizando Serviços Através da Camada de Negócio Visão Geral da Camada de Negócio Padrões de Projeto da Camada de Negócio e SOA Padrões de Projeto da Camada de Negócio Padrões de Projeto entre a Camada de Apresentação e a Camada de Negócio Padrões de Projeto de Objeto de Transparência Padrões de Projeto da Camada de Integração O Padrão Data Acess Object Padrões de Projeto da Camada Intracomercial Padrão de Projeto do Application Service Resumo Notas Finais Capítulo 16 248 248 250 251 251 252 254 255 257 258 259 260 Arquitetura Orientada a Serviços Avançados ..... 261 Padrões no SOA Padrões de Mensagens Assíncronas Padrões de Conversação Padrões de Orquestração Padrões de Fluxos de Trabalho Resumo Notas Finais 261 263 267 269 273 279 280 Parte V Estudo de Caso .................................................................281 Capítulo 17 Desenvolvendo Aplicações Orientadas a Serviços — Um Estudo de Caso......................... 283 A Perspectiva da Indústria Distribuição de Mensagens na OTA Objetivos da OTA Planos e Especificações da OTA Membros da Aliança Estudo de Caso Desafios Estratégias de Implementação da Solução Serviço de Reservas de Viagem Fluxo de Trabalho ou Definição do Processo Considerações da Plataforma de Solução Resumo Notas Finais 285 285 286 286 287 288 289 290 291 294 296 298 299 SUMÁRIO Capítulo 18 xv Disponibilizando SOA Usando o Pacote NetBeans SOA: Estudo de Caso — Solução .......................... 301 Estratégia de Implementação — Visão Geral 1HW%HDQV,'( Invocando o NetBeans Explorando o IDE O Básico de Projeto Criação de Projetos Resumo Notas Finais 302 304 304 305 306 319 319 Referências .................................................................................... 321 Referências da Web AJAX BPEL CICS Padrão de Projeto ESB Importância do ESB GDS Hibernate Implementação do SOA com o Java EE 5 IMS IMS TM Melhores práticas do J2EE Padrões J2EE J2EE versus .NET Produtividade do desenvolvedor Java EE 5 Solicitação da especificação Java jRuby OTA Mudança de paradigma Mudança de paradigma na TI Benchmark de performance Portlet Ruby Sabre, GDS SOA SOA geral SOAP 321 321 321 322 322 322 322 322 322 323 323 323 323 323 323 323 324 325 325 325 325 325 325 325 325 325 326 326 xvi SUMÁRIO Padrões SOA Tango Web Services WSDL WSDL e UDDI XML Yahoo! Livros Padrões de Projeto ESB J2EE Java Java, XML MDA NetBeans SOA Arquitetura do software Web Services XML 326 326 326 326 327 327 327 327 327 327 327 327 328 328 328 328 328 328 328 Índice ............................................................................................. 329 Prefácio Robert Brewin Recentemente, analistas experientes, tais como Anne Thomas Manes, têm dito que o SOA está morto e falhou em cumprir as vantagens prometidas. Têm havido pontos de vista opostos para isto. O blogueiro da ZDNet Joe McKendrick organizou uma discussão sobre “Como evitar a desilusão SOA”, onde os participantes concluíram que qualquer desilusão percebida originou-se da falta de planejamento e medida por parte do ambiente corporativo, e não de uma falha do SOA. Na verdade, as corporações que trabalhavam com as práticas e as metodologias do SOA permanecem irredutíveis sobre a abordagem e reconhecem que o SOA continua a manter a promessa como um modelo para a integração e como uma ajuda para reduzir taticamente os custos em tempos difíceis. A promessa do SOA é oferecer uma abordagem arquitetural para suportar a proliferação e a adoção de serviços reutilizáveis. É uma abordagem que as empresas devem adotar para simplificar seus processos de desenvolvimento e melhorar a qualidade e manutenção de seu código. Na Sun, desenvolvemos a plataforma Java Enterprise Edition (Java EE) como um padrão da indústria e ela forma a base ideal sobre a qual os desenvolvedores podem implementar o SOA no nível corporativo e as aplicações web da próxima geração. Estou satisfeito por ver este livro de Kumar, Narayan e Ng, que adota uma abordagem prática para implementar SOA com Java EE. O foco está nas técnicas de implementação reais, alavancando o servidor de aplicações GlassFish e o IDE NetBeans. Falando sobre essa abordagem, os autores desmistificaram o SOA em relação a uma confusão de padrões de web services e mostraram como os leitores podem implementá-lo rápido e facilmente em sua empresa. Além de explicar os conceitos do SOA e os conceitos do Java EE, os autores mergulham fundo na implementação SOA com Java EE e mostram como os serviços podem ser enviados dentro das diferentes camadas de uma arquitetura corporativa. xvii xviii PREFÁCIO Arquitetos, desenvolvedores, gerentes e outros profissionais de TI, educadores e alunos aproveitarão os diferentes aspectos deste livro, desde os conceitos até a arquitetura, implementação, configuração e otimização. Acredito que você achará este livro vantajoso e instrutivo. 5REHUW%UHZLQ Diretor de Tecnologia, Software. Sun Microsystems Raj Bala Agora mais do que nunca, conceitos como disponibilidade, investimento, escalabidade, expansão, extensão e segurança, permeiam toda discussão sobre a arquitetura da tecnologia. Como empresas que ficaram mais conscientes do máximo valor sustentável resultante dos investimentos da tecnologia, a fraternidade da arquitetura sempre gritou alto o quanto os fundamentos importam. A integridade arquitetural é medida por todas as suas “particularidades” que mencionei em minha primeira frase e é encorajador ver como as respostas têm existido e, de fato, estão ficando melhores. A arquitetura orientada a serviços (SOA), como uma correção fundamental para os futuros problemas, evoluiu para fronteiras mais novas e mais avançadas. Dominando tecnologias eficientes, tais como o Java EE, o SOA está ficando mais atraente e convincente do que nunca. Na Cognizant, estamos desenvolvendo e enviando soluções corporativas usando o SOA. E sinto-me privilegiado em escrever um Prefácio para um livro de um dos nossos – Kumar é coautor com Prakash e Tony. O livro desvenda com cuidado o vasto tópico da arquitetura orientada a serviços através de uma abordagem definitiva e ilustrativa. Ele segmenta os web services nos web services da Primeira Geração para a composição dos serviços, web services da Segunda Geração para ligar esses serviços no processo/fluxo de trabalho da corporação e WS-* para endereçar as necessidades não funcionais da aplicação corporativa. Este livro também se desdobrará como um guia de implementação eficiente sobre os recursos avançados da nova plataforma Java, a Enterprise Edition, e indicará como as diferentes APIs, tais como JAX-WS e JAXB, da nova plataforma ajudam nos diferentes aspectos da orientação a serviços para a aplicação corporativa. Este livro deve ser muito importante para os vários envolvidos, inclusive arquitetos, desenvolvedores corporativos sêniores e integradores de aplicativos. Este livro também é um ótimo material de consulta para alunos da Ciência da Computação, Software e Arquitetura de Sistemas. PREFÁCIO xix De acadêmicos a arquitetos, profissionais a pessoas exigentes, alunos a especialistas, codificadores a Diretores de Experiência com clientes, este livro deve ser uma fonte vital de inspiração SOA – sobre como construir uma ótima arquitetura sem comprometer as “particularidades”. 5DM%DOD Vice-presidente e Diretor de Tecnologia Cognizant Technology Solutions Agradecimentos Gostaria de reconhecer e agradecer imensamente a Cognizant pelo encorajamento e suporte deste trabalho de colaboração, que foi iniciado há dois anos com Prakash e Tony. Um obrigado em especial vai para Frank (diretor executivo) e Chandra (presidente e diretor-geral) por seu encorajamento neste trabalho de colaboração. Obrigado a Raj Bala (vice-presidente e diretor de tecnologia) e Dr. Appa Rao (vice-presidente, diretor de tecnologia) por seu encorajamento contínuo e apoio durante a escrita deste livro. Tenho um débito elevado com Viswakumar (vice-presidente, Projetos) por sua ajuda incessante e suporte deste trabalho de colaboração. O apoio de minha esposa Sujatha Kumar, minha filha Nayana Kumar e meu filho Govind Kashyap foi enorme durante a correção deste livro e reconheço, sinceramente, o apoio contínuo deles neste projeto nos últimos dois anos. Devemos o nosso sincero apreço a Ramesh Srinivasaraghavan e Arijit Chatterjee, da Adobe (Índia), pela ajuda oportuna ao dar forma ao site complementar a este livro. Também Sujit Reddy e Shyam Prasad da Adobe (Índia) por nos ajudarem no conteúdo e design do site. ²'U%9.XPDU xxi xxii AGRADECIMENTOS Gostaria de agradecer a Chris Atwood e Octavian Tanase, na Sun, seu apoio e encorajamento neste projeto. Um agradecimento especial e amor para minha família – Jayanthi, minha esposa, e Akshay, Madhuri e Roahn, meus filhos, por sempre estarem por perto e apoiarem meus esforços com vigor. Tive sorte por trabalhar com uma ótima equipe de coautores: B. V. Kumar e Tony Ng. Cada um trouxe suas habilidades especializadas para tornar isto uma experiência recompensadora. Obrigado a Gopalan Suresh Raj, Binod P. G., Keith Babo e Rick Palkovic por seu texto de base, Implementing Service-Oriented Architecture (SOA) with the Java EE 5 SDK (Implementando a Arquitetura Orientada a Serviços (SOA) com o Java EE 5 SDK), que me inspirou a explorar mais o tema e a ficar envolvido na escrita deste livro. Este livro é sobre implementação. A base para este livro é o IDE NetBeans. A equipe com a qual trabalhei – Todd Fast, Chris Webster, Girish Balachandran, Nam Nguyen, Rico Cruz, Jiri Lopsa, Ajit Bhate, PCM Reddy e Hong Lin (entre muitos outros) – contribuiu ao ajudar a tornar o produto NetBeans um grande sucesso. Na parte editorial e de produção, obrigado a Greg Doench, Michelle Housley, Anne Goebel e ao resto da equipe editorial na Pearson por sua orientação. ²3UDNDVK1DUD\DQ Gostaria de agradecer a Jeet Kayl e Tom Kincaid o encorajamento e apoio, Bill Shannon e Eduardo Pelegri-Llopart a orientação e à equipe inteira da GlassFish, que trabalhou na plataforma Java EE e SDK. ²7RQ\1J Sobre os Autores 'U%9.XPDU, atualmente diretor e arquiteto-chefe na Cognizant Technology, é pós-graduado na IIT Kanpur e doutor pela IIT Kharagpur. Possui mais de 19 anos de experiência no campo da tecnologia de informação em vários níveis e em organizações como ComputerVision Corporation (Cingapura), Parametric Technologies (Seul, Coreia do Sul) e Sun Microsystems (Índia). Antes de se juntar à Cognizant, Dr. Kumar era o principal pesquisador e técnico na Infosys Technologies e responsável pela pesquisa e desenvolvimento de atividades e novas iniciativas no SETLabs. Dr. Kumar vem trabalhando com tecnologias corporativas por mais de 7 anos, focando no J2EE e nas tecnologias de web services. Como arquiteto-chefe e diretor no Global Technology Office da Cognizant (Índia), Dr. Kumar está gerenciando o IP e a criação de recursos, divulgação da tecnologia, desenvolvimento da comunidade e suporte de projetos. Dr. Kumar registrou duas patentes no espaço IP e publicou muitos documentos tecnológicos em jornais internacionais e conferências. Ele é coautor de web services – An Introduction e J2EE Architecture. 3UDNDVK1DUD\DQ é diretor de tecnologia e cofundador da Micello, Inc. Micello é uma pioneira no Vale do Silício que foca no envio de dados com alto valor para usuários de ponta, fornecendo informações dentro de um mapa de localização interna. Antes de fundar a Micello, Prakash estava na Sun Microsystems, onde foi um dos fundadores do Zembly – uma rede social para os desenvolvedores construírem serviços, componentes e aplicativos sociais. Antes do Zembly, Prakash era responsável pelo Java EE e a ferramenta SOA no NetBeans. xxiii xxiv SOBRE OS AUTORES Prakash tem mestrado em Ciência da Computação no Indian Institute of Technology, Deli, e é bacharel em Engenharia Eletrônica no Birla Institute of Technology and Science, Pilani, Índia. 7RQ\ 1J é diretor sênior de engenharia no Yahoo!, onde é responsável pelas plataformas e tecnologias do desenvolvedor Yahoo!, inclusive a plataforma Yahoo! Application (UAP), Yahoo! Query Language (YQL) e Yahoo! Developer Network (YDN). Antes de se juntar ao Yahoo!, Tony era diretor de engenharia na Sun Microsystems, onde gerenciou o desenvolvimento da plataforma Java EE e do servidor de aplicativos GlassFish. Tony é coautor do J2EE Connector Architecture and Enterprise Application Integration. Ele tem mestrado em Ciência da Computação no Massachusetts Institute of Technology e MBA na Universidade da Califórnia, Berkeley. Parte I Visão Geral • Capítulo 1 Introdução • Capítulo 2 Evolução das Arquiteturas TI • Capítulo 3 Evolução da Arquitetura Orientada a Serviços 1 1 Introdução A s empresas estão em um estado de fluxo. Novas exigências de negócios são desafiadoras o bastante para conduzir as inovações nas tecnologias da informação. Tais avanços estão empurrando as empresas para desafios de negócios mais novos. Inovações importantes sempre impactam as exigências arquiteturais. Isto tem transformado as empresas, de um estado no qual não havia nenhum conceito de arquitetura em um estado no qual uma quantidade significativa de planejamento arquitetural é a etapa mais importante em uma solução corporativa. Embora a funcionalidade dos aplicativos corporativos tenha conduzido as exigências das empresas em uma época anterior, as partes não funcionais agora estão controlando as exigências da arquitetura corporativa. A natureza variada dos negócios corporativos tem tornado necessário que os negócios reorientem a arquitetura para permitir a automação. Isto é vantajoso para as empresas, seus parceiros e colaboradores a longo prazo. A Arquitetura Orientada a Serviços (em inglês, Service Oriented Architecture - SOA) é o último jargão arquitetural que toma de assalto as empresas. As exigências corporativas para as empresas estão mudando mais rapidamente do que nunca e estão trazendo vários desafios, que colocam uma enorme pressão nos envolvidos comercialmente para que eles empurrem os negócios, buscando soluções de longa duração. Embora não haja nenhuma arquitetura milagrosa (ou nova arquitetura) de solução corporativa implementar, SOA parece prometer uma solução duradoura e, talvez, até futurista para as empresas. Mas, é o SOA a tendência mais nova? Se virmos as tendências históricas na evolução arquitetural, podemos observar que as tentativas para a orientação a serviços na arquitetura existiam, mas nunca foram reconhecidas por essa terminologia. Nas seções seguintes, iremos explorar a evolução do termo SOA e explicar seu impacto nas corporações. 3 4 CAPÍTULO 1 INTRODUÇÃO Produtos e Serviços Inicialmente, as corporações dependiam de meios tradicionais de condução das transações de negócios, inclusive o marketing e a promoção de produtos e serviços. Embora os modos tradicionais de comercializar produtos e serviços fossem simples, as maneiras inovadoras e criativas buscadas por muitas corporações eram poderosas o bastante para sustentar o negócio em um ambiente competitivo. A vida útil de comercialização de um produto ou serviço envolvia estas etapas simples: • • • • • Criação de produtos ou serviços e formas de comercializar. Descoberta de produtos e serviços pelos clientes. Confluência e negociação entre revendedores e clientes. Venda de produtos e serviços. Manutenção de produtos e serviços até o término da vida útil. Serviços Guiados por Software Produtos e serviços eram referidos quanto à comercialização como o ponto de vista. Observe aqui que os produtos são tangíveis por natureza, ao passo que a natureza dos serviços é mais intangível. O treinamento técnico, manutenção e proteção, instalação de maquinário (ou hardware), envio de produtos ou pacotes etc. são alguns exemplos de “serviços”. Os serviços são apresentados e usados como parte do processo ou do fluxo de trabalho em quase todas as empresas. A exigência de serviços1 como parte do processo/fluxo de trabalho está ganhando mais importância. O crescimento das tecnologias de informação nas indústrias parece ter estimulado a exigência e o envio de serviços de uma maneira profunda. Serviços como um negócio estão se tornando uma proposição atraente para muitas corporações. O negócio de entrega de serviços tem diversas vantagens, inclusive o fato de que eles podem ser enviados ou usados direta ou indiretamente. Um serviço direto é tangível por natureza. Um serviço de entrega poderia ser considerado tangível, ao passo que um serviço de ações e títulos não pode ser considerado tangível. E mais, qualquer serviço pode ser simples ou complicado por natureza. Um serviço simples pode ser uma tarefa precisa com uma etapa, ao passo que um serviço complexo pode ser composto de vários serviços simples, que podem ser associados a implicações tangíveis e intangíveis. Um serviço de correio pode também usar um serviço de rastreio de entrega, no qual os serviços de software são usados para controlar a rota e outros detalhes do envio do pacote. A importância crescente da TI em geral e a demanda ascendente por serviços tangíveis e intangíveis aumentaram a demanda por negócios de serviços guiados por software. Esses serviços desempenharam um papel importante ao permitir o envio de serviços em várias corporações, que alavancaram ativamente seu negócio ao utilizá-los. Cadeias de SERVIÇOS GUIADOS POR SOFTWARE 5 fornecimento, varejistas, serviços bancários e financeiros, educação, fabricação, produtos farmacêuticos, assistência médica etc. são exemplos de algumas indústrias verticais que alavancaram continuamente os serviços base em software como parte de seu processo/fluxo de trabalho. Quando os serviços guiados por software são usados para entregar ou utilizar serviços, existem implicações adicionais, com base na natureza e no uso do software. Um serviço entregue usando um sistema mainframe pode ser isolado dentro do ambiente do sistema autônomo. Do mesmo modo, a entrega de serviços em um sistema cliente/ servidor pode ocorrer em qualquer lugar dentro da Local Area Network (LAN). Por outro lado, a entrega de um serviço de software na internet pode acontecer além da LAN ou em ambientes em redes maiores, tais como a Wide Area Network (WAN) ou a Metropolitan Area Network (MAN). Da mesma forma que o requisito de entrega de serviço guiado por software cresce, também aumenta a complexidade da entrega de serviços. É importante entender a natureza e o papel do “serviço” ou processo de serviço, o “cliente” ou aplicativo do cliente, e o cliente que usa o serviço. Um serviço guiado por software pode ser definido como um processo do servidor (um programa executado em um sistema) que atende a solicitação do cliente realizando uma tarefa especificada no sistema servidor. Os exemplos incluem um aplicativo que pode recuperar as informações mais atualizadas sobre uma determinada transação de ações ou um aplicativo que pode fornecer um relatório de tráfego em tempo real sobre qualquer rota que o usuário solicita. Entre outras coisas, o processo do servidor envolve o sistema operacional hospedeiro, servidor de arquivos e outros aplicativos afins. Observe que o processo do servidor geralmente estará sendo executado como um processo daemon* e sempre estará aguardando uma solicitação. O cliente pode ser um usuário ou um aplicativo do computador. Os aplicativos do cliente têm duas variedades. Um aplicativo exibe as consultas para o usuário humano e obtém as entradas em tempo real. Tais aplicativos do cliente geralmente são associados às Interfaces Gráficas do Usuário (em inglês, Graphic User Interface - GUI), que são projetadas para coletar as entradas do usuário. O outro aplicativo do cliente acessa e usa automaticamente os serviços sem nenhuma interação humana. São aplicativos completos e podem lidar com todas as possíveis situações. Tais clientes ajudam a automatizar o processo/fluxo de trabalho. Quando o processo do servidor recebe a solicitação de um aplicativo cliente, ele aceita e a analisa, gerando uma resposta adequada que é comunicada de volta para o cliente. A solicitação e a resposta entre o cliente e o servidor são síncronas e usam o mesmo protocolo para a comunicação. Isto é análogo a duas pessoas se comunicando usando um idioma em comum. * N.R.T.: Daemon é um processo executado em segundo plano. 6 CAPÍTULO 1 INTRODUÇÃO Antes do advento da internet e da World Wide Web, os sistemas e as arquiteturas de software eram projetados para oferecer serviços aos clientes na LAN/WAN da intranet da empresa. Os processos do servidor e os aplicativos do cliente eram desenvolvidos em sistemas operacionais idênticos (e ambientes de programação) e distribuídos em sistemas compatíveis. Porém, se tais serviços fossem desenvolvidos e distribuídos em um hardware e sistemas operacionais diferentes, eles não poderiam comunicar-se. Assegurar a compatibilidade entre tais sistemas heterogêneos, embora possível, tornou-se dependente do revendedor. O surgimento da World Wide Web e da internet e a popularidade do Protocolo de Transferência de Hipertexto (em inglês, Hypertext Traster Protocol - HTTP) como um protocolo de comunicação leve mudaram profundamente o cenário dos serviços guiados por software. Um navegador web padrão podia ser usado como um cliente eficiente na intranet e na internet. Inicialmente, a web e a internet eram usadas exclusivamente por universidades, academias de pesquisa e estabelecimentos de pesquisa militares. A proliferação da web e da internet na esfera corporativa e a aceitação da mesma como uma mídia comercial adequada por empresas forneceram um impulso tremendo para a internet, ao passo que a aceitação do HTTP2 como um protocolo de comunicação de negócio também ganhou força. O serviço enviado pelo processo do servidor para o aplicativo cliente (navegador) está em HTML. O conteúdo dos serviços pode ter uma das três formas: informações estáticas, informações geradas dinamicamente ou uma combinação de informações estáticas e geradas dinamicamente. Embora as informações estáticas possam ser adaptadas, o conteúdo gerado dinamicamente indica a disponibilidade de informações mais atualizadas. Homens de negócios e corporações, geralmente, requerem uma mistura adequada de ambos. Web Services Os web services estão disponíveis, na maioria dos computadores em todo o mundo, em Assistentes Digitais Pessoais (em inglês, Portable Digital Assistants - PDA) e telefones móveis. A maior vantagem que a web forneceu aos negócios foi a disponibilidade e a acessibilidade dos serviços guiados por software na internet. A escala e a distribuição de clientes também apresentam oportunidades únicas para os negócios expandirem, embora a escala e a distribuição também tragam muitos desafios para os negócios. Como as vantagens superam as desvantagens, os negócios e as indústrias estão dependendo cada vez mais da web e da internet para o crescimento. O crescimento e a proliferação de corporações Business-to-Consumer (B2C) podem ser vistos como um resultado imediato da revolução da internet. O advento na internet e na web não trouxe o mesmo tipo de crescimento para o Business-to-Business (B2B). Os problemas predominantes podem ser atribuídos WEB SERVICES 7 a alguns fatores, tais como: sistemas muito diferentes, aplicativos incompatíveis e um protocolo de comunicação proprietário. Na verdade, o meio de comunicação foi identificado como o obstáculo predominante na realização da automação corporativa. Quando duas ou mais organizações precisavam concordar sobre os procedimentos B2B, elas eram confrontadas com um cenário complicado e eram vencidas por problemas graves de integração e interoperabilidade. A interoperabilidade é a chave para a automação corporativa e promove-a de forma eficiente entre parceiros e colaboradores. Interoperabilidade é a capacidade de um aplicativo se comunicar com qualquer outro aplicativo, independentemente do hardware no qual é distribuído, do ambiente operacional no qual o aplicativo é executado ou da linguagem de programação usada para desenvolvê-lo. Em outras palavras, os aplicativos distribuídos em sistemas muito diferentes devem comunicar-se e trocar informações corporativas. A tecnologia web services promete a interoperabilidade entre vários aplicativos corporativos distribuídos em sistemas diferentes. Os web services também prometem alavancar totalmente a web e a internet para tornar a interoperabilidade possível além dos limites geográficos. A inauguração da Linguagem de Marcação Extensiva (em inglês, Extensible Markup Language - XML), em meados dos anos 1990, introduziu a possibilidade da interoperabilidade através do uso da linguagem de marcação baseada em texto. O XML pode ser usado para representar qualquer informação relacionada com negócios. Tem a capacidade de tornar a troca de informações independente da rede, do sistema operacional ou da plataforma de distribuição, assim permitindo a interoperabilidade das informações corporativas. O XML é a linguagem fundamental, suportando vários dialetos avançados (ou padrões), geralmente referidos como vocabulários. Há mais de 450 vocabulários, representando diferentes requisitos verticais da indústria. Os aplicativos web services podem ser usados para implementar serviços síncronos e assíncronos. Observe que os web services não se referem a uma única tecnologia, aplicativo ou especificação, mas a uma combinação de várias tecnologias e especificações baseadas em XML. Os três vocabulários considerados mais importantes em relação aos web services são Protocolo Simples de Acesso a Objetos (em inglês, Simple Object Access Protocol - SOAP), Linguagem de Descrição de web services (em inglês, web services Descripton Language - WSDL) e Descrição, Descoberta e Integração Universais (em inglês, Universal Description, Discovery and Integration - UDDI). Segundo o Gartner Group, um web service pode ser definido como: [...] os componentes de software que utilizam uma ou mais das seguintes tecnologias – SOAP, WSDL e UDDI – para realizar computação distribuída. O uso de qualquer uma das tecnologias básicas – SOAP, WSDL ou UDDI – constitui um web service. O uso de todas elas não é requerido [...]. 8 CAPÍTULO 1 INTRODUÇÃO Utilizar serviços através da rota dos web services basicamente envolve três categorias de participantes, como mostrado na Figura 1.1. São eles o provedor de serviço, o solicitador do serviço e o agente de serviço (em inglês, service provider, service requester and service broker). Um provedor seria uma indústria, negócio ou empresa, capaz de criar e fornecer serviços baseados em software. Do mesmo modo, um solicitante seria uma empresa ou um negócio que gostaria de usar o serviço. Por outro lado, o agente seria um lugar, entidade ou sistema, que ajuda o solicitante a descobrir o provedor: Agente Internet / www Provedor Solicitador Figura 1.1 Os web services da primeira geração As setas na Figura 1.1 indicam as interações entre os três participantes. As interações entre o provedor e o agente são basicamente a publicação dos serviços. A interação entre o solicitador e o agente é a tarefa de pesquisar os serviços e o provedor de serviços. Finalmente, a interação entre o provedor e o solicitante é chamada de vínculo (em inglês, bind). Embora o papel do provedor de serviços e do solicitante do serviço seja simples e direto, o papel do agente requer um esclarecimento adicional. O papel do agente é permitir que o provedor e o solicitante se reúnam para descobrirem e entenderem um ao outro, discutirem e negociarem. A exigência do agente e de seus serviços não pode mais ser requerida depois de provedor e solicitante concordarem com a transação entre eles. O provedor e/ou solicitador, geralmente, não precisam visitar o agente depois de concordarem entre si sobre os termos e as condições da transação dos serviços. Contudo, a necessidade dos serviços do agente pode surgir apenas quando há uma mudança nos serviços e informações relacionados aos mesmos. Esta situação é provável quando o provedor do serviço prefere notificar as alterações no registro. SOA SOA é um método de arquitetar o aplicativo corporativo como um conjunto de serviços de cooperação que todos os usuários empresariais desejam. O usuário corporativo pode ser um usuário humano ou uma aplicação cliente. Vamos consi- 9 SOA derar um aplicativo corporativo como uma loja de animais de estimação online. Uma loja online, por exemplo, pode oferecer vários itens que os clientes remotos podem comprar. Quando um botão Submit (Enviar) é pressionado para finalizar a compra, vários outros serviços entram em ação, como mostrado na Figura 1.2. Por exemplo, o serviço de inventário inicializou a verificação do status do inventário de todos os itens selecionados. O serviço de envio pode ser chamado para iniciar o envio de diferentes materiais. Um serviço de controle pode, então, ser chamado para gerar o número de controle para localizar o pedido enviado. O processo inteiro, desde o pedido inicial até o envio, pode ser gerenciado pelas interações entre os vários programas que cooperam. Figura 1.2 Os serviços e a interação entre os serviços formando o SOA SOA é perfeito para a elaboração de programas como conjuntos de serviços de cooperação que podem interagir entre si através da internet. O termo “serviço” refere-se essencialmente às operações envolvendo negócios. Um aplicativo coporativo projetado para usar o SOA é composto de vários serviços, apresentando, geralmente, baixo acoplamento por natureza, para que novos serviços possam ser adicionados ou os existentes possam ser modificados (ou até aposentados) rapidamente, com base na natureza dinâmica da situação dos negócios. As organizações que utilizam SOA podem ser mais competitivas e, portanto, têm mais probabilidade de sobreviverem e prosperarem no mundo corporativo empresarial. Resumindo, uma aplicação corporativa criada com o SOA seria um conjunto de componentes de serviço distribuídos em uma rede. Esses componentes de serviço comunicam-se, através de padrões de mensagem, com os usuários finais e intermediários, usando os padrões web services reconhecidos no ambiente da computação. Os provedores de serviço podem, algumas vezes, publicar informações relacionadas a serviços, conhecidas como exposição do serviço. 10 CAPÍTULO 1 INTRODUÇÃO E mais, o conceito de SOA não é inteiramente novo. Ele existia anonimamente até antes do advento das linguagens orientadas a objetos.3 Iremos explorar algumas abordagens iniciais para o SOA. Uma das primeiras tentativas de implementar a arquitetura orientada a serviços foi o Ambiente de Computação Distribuído (em inglês, Distributed Computing Environment - DCE), que precedeu a internet e a web. Com o DCE, você podia implementar serviços em diferentes locais (algumas vezes em diferentes cidades) e em diferentes tipos de sistemas e ambientes operacionais. Os aplicativos cliente podiam solicitar diferentes serviços de qualquer lugar na rede, sem levar em conta de onde o serviço era acessado. As abordagens posteriores no SOA incluíam o Modelo de Componente Distribuído (em inglês, Distributed Component Model - DCOM) da Microsoft. Uma abordagem multiplataforma chamada Arquitetura Comum para Agente de Requisição de Objetos (em inglês, Common Object Request Brokered Architecture - CORBA), do Grupo de Modelos de Objetos (em inglês, Object Modeling Group - OMG), incluída a abordagem IDL. A solicitação de serviços por um usuário ou aplicativo a partir de outro aplicativo ou serviço pode ser agenciada, permitindo que aplicativos em diferentes ambientes operacionais e usando bancos de dados diferentes se comuniquem com eficiência. Porém todas as três abordagens4 anteriores – DCE, DCOM e CORBA – não foram abençoadas com a internet e o HTTP. As duas abordagens de criação do SOA e utilização de web services para implementá-lo são a abordagem top-down e a abordagem de bottom-up. Na abordagem top-down você define o negócio geral em torno de seus processos, como eles fluem e como são separados como serviços. Na abordagem de bottom-up você pode iniciar com alguns serviços e depois integrá-los na aplicação que a corporação já está usando. Alguns arquitetos defendem um meio termo para que as pessoas de negócio e os engenheiros TI elaborem uma abordagem pragmática que se desenvolva gradualmente em uma representação real do mundo de negócios, desenvolvendo aplicativos em componentes usando os web services. Qualquer que seja a abordagem usada é importante saber quais são os principais padrões e quais produtos são necessários para a construção dos componentes de serviço que tornam a empresa realmente orientada a serviços, ágil e dinâmica. O HTTP desempenhou um papel importante na proliferação das transações B2C e desempenha um papel importante nas transações B2B. Outro padrão chamado Protocolo de Acesso a Objetos Simples (em inglês, Simple Object Access Protocol - SOAP) se adiciona ao HTTP, portando as informações na forma de uma mensagem que pode ser síncrona ou assíncrona por natureza. E mais, em um cenário corporativo, a existência de uma combinação de padrões de troca de mensagens síncronas e assíncronas é comum. Outro avançado vocabulário XML padrão da indústria chamado Linguagem de Descrição de web services (em inglês, web services Description Language – WSDL, pronunciado como “Wisdel”) permite descrever os serviços que uma corporação pode oferecer. Esses serviços podem ser listados em um diretório ou registro conhecido como UDDI, algo como fosse as “páginas amarelas” eletrônicas para os serviços gerais.