You are on page 1of 49

Desenvolvimento de Aplicações

Corporativas Avançadas

Web Services

Marcelo Iury
iury@dsc.ufcg.edu.br
Agenda

Introdução
Web Service
Arquitetura
Soluções
Passos básicos
Implementando com Apache Axis
Novos protocolos
Conclusão
O cenário de TI nas corporações
 Novas tendências batiam à porta das
corporações
Migraram o foco do “gerenciamento de dados” para o
“gerenciamento dos processos e clientes”
Redesenho dos processos e implantação dos grandes
sistemas de gestão empresarial (ERP)
 Sucesso da Internet
Disponibilizar parte das informações corporativas a
usuários ou sistemas que extrapolam as fronteiras
corporativas
E-commerce
Enterprise Application Integration

A diversidade de sistemas coexistindo nas


empresas é enorme
Grandes pacotes comerciais a aplicações
desenvolvidas sob-medida
Diferentes “software houses”
Diferentes tecnologias (host-centric, cliente-
servidor, n-tier, etc),
Diferentes plataformas (mainframes, Unix,
Windows, etc).
Service Oriented Architecture (SOA)

SOA é uma arquitetura que representa


funcionalidades do software como
serviços
Já existiam tecnologias para SOA
Ex.: CORBA, RMI, etc...
Interoperabilidade é muito importante
Padronização
Fraco acoplamento
Exemplo: Aplicação 3 camadas

boa arquitectura
DNA

Aplicação Central Compras

Data Layer Business Presentation


Layer Layer

Interface da aplicação
dá acesso aos dados
aplicacionais
Service Oriented Architecture

Interface desacoplado
da lógica de
processamento dos
dados
troca de mensagens
boa arquitectura
3-tier service

Serviço Central Compras UI

Data Layer Business Service Presentation


Layer Façade Layer

Web Service Standards


Dados e Lógica Negócio permitem ligações
encapsulados por uma cross-platform
Web Service Façade
Serviços Contabilidade
Automação de Processos de Negócio

integração com diferentes


plataformas

Serviço Central Compras UI Processo Compras

Business
Process
Automation

Serviço RH
Múltiplos serviços
combinados num único
processo de negócio
Web Services
Visão Tecnológica

 Web Services é uma tecnologia de chamada


remota de objetos
 Permite a infra-estrutura para criação de
aplicações distribuídas (web ou não)
 Permitem a criação de pequenos módulos de
código reutilizáveis e disponibilizados para
construção de aplicações “LEGO”
 Utiliza protocolos Web como meio de transporte
e comunicação
 Alto grau de abstração em relação a linguagens
de programação e plataformas de hardware /
software
Arquitetura Web Service

SOAP
Message
/ XML

Transport
HTTP(S)

Discovery
UDDI

Description
WSDL

Implementation
.NET/J2EE

Business
Logic Data
Invocação de Web Services

<soap:Envelope
<soap:Body>
Client <add> Web Server
<i1>10</i1>
(e.g. CalcClient.java) calculator.add(10, 5) (e.g. Apache Tomcat)
<i2>5</i2>
</add>
Java </soap:Body>
</soap:Envelope> Web Service Toolkit
(e.g. Apache Axis)
SOAP Binding
Java to SOAP
Web Service
add(10, 5)
Code
(e.g. Calculator.java)
SOAP Request SOAP
to Java Java
Vantagens
 Padrão adotado pelo W3C e pela
indústria.
 Atravessa firewalls, roteadores e
servidores de proxy.
 Abordagem simples e fácil de distribuição
e de interoperabilidade.
Consórcio WS-I- www.ws-i.org
Garantir a interoperabilidade
 Padrões abertos
 Independente de plataforma
www.ws-i.org

 170+ fabricantes software envolvidos


 Interoperabilidade entre plataformas,
aplicações e linguagens
 Maior evidência de que a indústria está
alinhada com os web services
Soluções
Fatores decisivos para a escolha

Maturidade da solução
Integração com IDEs
Reutilização da segurança
Escalabilidade (implementação server-
side e stateless)
Documentação
Tecnologias mais conhecidas

Framework .NET
 Java
Apache Axis
JaxRPC
IBM SOAP Toolkit
Qualquer plataforma que tenha rotinas de
comunicação HTTP e saiba manipular
dados em XML pode implementar Web
Services.
Passo 1: Definição do serviço

SOA – Service Oriented Architecture


Um serviço é uma função bem definida, auto-
contida e que não depende do estado ou
contexto de outros serviços;
Passo 2: Implementação

Implementação do serviço:
O serviço a ser fornecido via web service deve
ser identificado e “isolado” em uma API
tipicamente stateless;
Normalmente este serviço já está
implementado no “legado”, bastando definir e
implementar uma API para seu acesso na
plataforma original.
Passo 3: Value Objects

Parâmetros de entrada e saída:


A API de um serviço deverá conter apenas
tipos “compatíveis” com web services (tipos
básicos, strings, arrays tipados ou estruturas –
VOs – destes tipos.
Passo 4: Criação do WS
 Definições de interesse público:
Definição da API (e value objects);
Geração da definição formal do web service (WSDL);
Se VOs forem compatíveis, o WSDL conterá uma
descrição completa das estruturas de dados (mesmo as
complexas);
O WS é, na prática, implementado por uma aplicação
web comum (HTTP/HTTPS), sem o uso de qualquer
extensão proprietária.
Passo 5: Publicação do WS
 A publicação do web service é, fisicamente,
como a publicação de uma aplicação web
comum
 A definição pública do web service (WSDL)
estará disponível para download pela própria
aplicação web que o implementa
 API de web services será estável –
modificações e atualizações serão divulgadas
com antecedência
Passo 6: Consumo do WS

Geração do cliente:
Acesso à definição do web service (WSDL) é
tudo que basta;
IDEs têm a capacidade de gerar stub cliente a
partir do WSDL;
Apache Axis

A SOAP Processing Engine


JAX-RPC Client System
JAX-RPC Server System ( Servlet based )
SAAJ
Arquitetura extensível e flexível
Tools, Exemplos, Documentação, …
Uma boa para começar com Web Services.
Open-source, Apache Software
Foundation
Executando Apache AXIS

 Instalação
Apache Tomcat (version 4.1.x)
 http://jakarta.apache.org/tomcat/
Java
 http://java.sun.com/
Apache Axis
 http://ws.apache.org/axis/
Teste – Happy Axis

 http://localhost:8080/axis
Exemplo simples

public class Calculator{


public int somar(int numA, int numB){
return numA + numB;
}
public int subtrair(int numA, int numB){
return numA - numB;
}

public int multiplicar(int numA, int numB){


return numA * numB;
}
}
Publicando WS com Axis

Depende da utilização de tipos


complexos.
 Tipos Primitivos
Copie o arquivo “.java” para a pasta webapps
do TomCat e trocando sua extensão de “.java”
para “.jws”
 Tipos Complexos
Deve-se prover o servidor da habilidade de
desserializar / serializar os objetos complexos.
Deployment Descriptors

 JWS é bastante simples, mas possui limitações:


 Código-fonte
 Não pode especificar handlers, mapeamentos, dispatchers
 O WSDD ( Web Services Deployment
Descriptors ) é um mecanismo que facilita a
instalação e configuração de um WS permitindo:
 Tipo de Mapeamento
 Diferentes tipos de transporte – HTTP/S e CP/IP
 Anexos Binários
 Etc.
Publicando um WS usando WSDD
 Escrevemos um WSDD com os dados de
configurações que desejamos para o nosso
Web Service.
 Copiamos os arquivos “.class” que utilizamos no
Web Service para a pasta /WEB-INF/classes do
Axis.
 Realizamos um deploy do WSDD utilizando a
ferramenta AdminClient do Axis com o seguinte
comando:
Java org.apache.axis.client AdminClient deploy.wsdd
Publicação de Web Services com Apache Axis
Consumindo o Web Service (Cliente)

 Dynamic Invocation Interface ( DII)


 Geração Stubs a partir do Service WSDL
description
 Pacotes
- axis.jar
- jaxrpc.jar
- commons-logging.jar
- commons-discovery.jar
- saaj.jar
- wsdl4j.jar
Consumindo um WS usando DII
import javax.xml.rpc.Call;
import javax.xml.rpc.Service;
import javax.xml.namespace.QName;

public class CalculadoraClient {


public static void main(String [] args) {
try {
String endpoint = "http://localhost:8080/axis/calculadora.jws";
Service service = new Service();
Call call = (Call) service.createCall();
call.setOperationName(new QName(endpoint, “somar"));
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
Integer ret = (Integer)call.invoke(new Object[]{new Integer(5), new Integer(6)});
System.out.println(“somar(5, 6) = " + ret);
} catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}
}
Consumindo um WS usando Stubs
Generate the stubs:
java org.apache.axis.wsdl.WSDL2Java \
http://localhost:8080/axis/Calculadora.jws?wsdl

Import localhost.*;
public class CalculadoraClient{
public static void main(String [] args) {
try {
CalculadoraService calcSF = new CalculadoraServiceLocator();
Calculadora calc = calcSF.getCalculadora();
System.out.println(“somar(5, 3) = " + calc.somar(5, 3));
} catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}
}
Generating Stubs, Compiling and
Running the Stub Client
Consumindo WS usando WSDL2Java

Clique com o botão direito


do mouse sobre o arquivo,
selecione a opção
WSDL2Java e depois
clique em Generate. As
classes serão criadas num
pacote padrão.
Himalayan X Alpine style
Alpine: a proposed alternative

 Abraçe XML & XPath


 Use as ferramentas
XML mais recentes
 Esqueça rpc/encoded
SOAP
 Queued/Asynchronous
API
 WSDL-first
Novos Protocolos
Limitações actuais:

Segurança?
Garantias de Entrega?
Transações?
Outros Transportes?
Mensagens Assíncronas (One-Way)?
Encaminhamento (Routing/Addressing)?
Outros padrões (Ex: Pub/Sub)?
Web Services Protocols (WS-*)
 Messaging Specifications
SOAP
Connected Business WS-Addressing
Applications Management … MTOM (Attachments)
Process WS-Eventing

 Security Specifications
WS-Security
WS-SecureConversation
WS-Trust

Metadata
WS-Federation
Security Reliability Transactions WS-Federation Active
Requestor Profile
WS-Federation Passive
Requestor Profile
Web Services Security
Messaging Kerberos Binding

 Reliable Messaging
XML Specifications
WS-ReliableMessaging

 Transaction Specifications
HTTP TCP SMTP … WS-Coordination
WS-AtomicTransaction
WS-BusinessActivity

 Metadata Specifications
Web Services Security Roadmap

SecureConversation Federation Authorization

Policy Trust Privacy

Hoje Security

SOAP Foundation

Security in a Web Services World – IBM/MSFT White Paper


http://msdn.microsoft.com/library/en-us/dnwssecur/html/securitywhitepaper.asp
Abril 2002

WS-Security Specification
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss
Conclusão
Existe muita propaganda sobre Web
Services
 Primeiramente: Eu adoro WS!!!
 O formato texto aumenta muito o overhead
 Não existe “neutralidade” de transporte
 Diferentes versões de padrões
 Existem muitos padrões que “interagem”, mas
não definem nenhuma restrição para
interagirem
 UDDI não atende as necessidades
 Ferramentas de geração automática atrapalham
 Não existe interoperabilidade 100%
WS-*
 ASAP (Asynchronous Service Access Protocol), BPEL4WS (Business
Process Execution Language), ebSOA TC (Electronic Business Service
Oriented Architecture), ebXML (Electronic Business XML), International
Health Continuum TC, oBIX TC , SAML (Security Assertion Markup
Language), SOAP (Simple Object Access Protocol), SOAP MTOM (SOAP
Message Transmission Optimization Mechanism), ranslation WS TC , UBL
(Universal Business Language), UDDI (Universal Description, Discovery,
and Integration), WS-Addressing, WS-AtomicTransaction, WSBPEL
(Business Process Execution Language), WS-CAF (WS Composite
Application Framework ), WS-CF (WS Coordination Framework), WS-
Choreography , WS-CDL (Web Services Choreography Description
Language), WS-Coordination, WS-CTX, WS Context, WS-Discovery (Web
Services Dynamic Discovery), WSDL (WS Description Language), WSDM
(WS Distributed Management), WS-Enumeration, WS-Eventing, WS-
Federation (Web Services Federation Language), WSIL (WS Inspection
Language), WS-Manageability, WS-MetadataExchange (Web Services
Metadata Exchange), WS-MessageDelivery, WS-Notification, WS-Policy,
WS-Provisioning, WS-Reliability, WS Reliable Messaging, WS-RF (WS-
Resource Framework), WS-Reliablemessaging , WSRP (WS Remote
Portals), WS-Security, WS-SecureConversation, WS-SecurityPolicy, WS
Security Services TC, WS-TM (WS Transaction Management), WS-
Transfer, WS-Trust, XML-Encryption, XML-Signature
Java Web Services Developer Pack
2.0
 Fast Infoset
 Service Registry
 XML
 JAXB
 JAXP
 JAXR
 JAX-RPC
 SAAJ
 JAXM
 XML Web Services Security
 Service Registry
 Sun Java Streaming XML Parser
 JSTL
Web Services Project @ Apache
 Addressing (WS-Addressing)
 Axis (SOAP)
 EWS (J2EE 1.4)
 JaxMe (JAXB)
 jUDDI (UDDI)
 Kandula (WS-Coordination, WS-AtomicTransaction, WS-
BusinessActivity)
 Mirae (J2ME)
 Muse (WSDM MUWS)
 Pubscribe (WS-Notification)
 Sandesha (WS-ReliableMessaging)
 Scout (JAXR)
 Woden (WSDL 2.0)
 WSIF
 WSRF (WS-ResourceFramework)
 WSS4J (WS-Security)
 XML-RPC
Fontes de consulta

http://java.sun.com/webservices
developers.ibm.com/webservices
JavaWorld: www.javaworld.com
webservices.org
www.uddi.org
xml.apache.org
http://www.tusc.com.au/tutorial/html/chap9
.html