You are on page 1of 143

Universidade Federal do Maranho UFMA Campus do Bacanga So Lus

Web Services

Dr. Denivaldo Lopes Ano: 2006.1 maio, 2006


1

Objetivos da disciplina
Formar profissionais capazes de desenvolver sistemas computacionais baseados em servios Web. Estudar as especificaes e implementaes de ferramentas baseadas em servios Web; Desenvolver aplicaes em que a interoperabilidade seja assegurada: aplicaes distintas, ambientes heterogneos, integrao de sistemas.
2

Servios Web na Engenharia Eltrica


Vrias utilizaes de SW em engenharia:
Estabelecer a comunicao entre aplicaes ou partes de um sistema. Interoperabilidade entre partes de um sistema. Integrao de aplicaes.

Contedo Programtico
Introduo a Java Desenvolvimento de aplicaes para a Web
Camada de apresentao Camada de lgica Camada de base de dados Exemplos com HTML, Servlets, SQL e JDBC.

Middlewares: RPC, CORBA e Web Services Introduo a XML:


DTD (Document Type Definitions), XSD (XML Schema Definition Language) e XSLT (eXtensible Stylesheet Language Transformations).
4

Contedo Programtico
As principais tecnologias de servios Web
SOA (Service-Oriented Architecture) WSDL (Web Services Definition Language) SOAP (Simple Object Access Protocol) UDDI (Universal Description, Discovery, and Integration)

Desenvolvendo servios Web com Java Web Services Developer Pack (JWSDP)
Exemplos de sistemas com servios Web.
5

Contedo Programtico
Servios Web compostos
Importncia da composio. Ferramentas de composio. BPEL (Business Process Execution Language) Eclipse e o Framework da Oracle para servios Web compostos.

Utilizao de Servios Web na Engenharia Eltrica. Especificaes para segurana de servios Web: uma introduo. O futuro de servios Web.
6

Metodologia
Aulas expositivas e discusses em classe, enfatizando a importncia da interoperabilidade entre aplicaes. Estudo das especificaes criadas para servios Web da W3C e da OASIS. Estudos de caso para exemplificar a utilizao de servios Web. Os alunos sero orientados no desenvolvimento de aplicaes baseadas em servios Web. Pesquisa de assuntos avanados. Trabalhos individuais para sedimentar a aprendizagem.

Ms Julho Agosto

Cronograma de Aulas, Trabalhos e Avaliaes Dias da disciplina 3, 4, 10, 11, 17, 18, 24, 25, 31 1, 7, 8, 14, 15, 21, 22, 28, 29 4, 5, 11, 12, 18, 19

Setembro

Prova escrita Apresentao de trabalho


3 horrios por dia : horrios 8/9/10 23 de setembro trmino do semestre letivo 2006.1

Reposio Final
8

BIBLIOGRAFIA: Thomas Erl, Service-Oriented Architecture: A Field Guide to Integrating XML and Web Services, Prentice Hall, 2004. Gustavo Alonso, Fabio Casati, Harumi Kuno, Vijay Machiraju, Web Services: Concepts, Architectures and applications, Springer, 2004. Sanjiva Weerawarana, Francisco Curbera, Frank Leymann, Tony Storey, Donald F. Ferguson, Web Services Platform Architecture, Prentice Hall, 2005. T. Andrews, F. Cubera et al, Business Process Execution Language for Web Services, 2001. Disponvel on-line: http://www128.ibm.com/developerworks/library/specifica-tion/ws-bpel/ W3C, WSDL, Avaliable at http://www.w3.org/TR/wsdl20/ W3C, SOAP, Avaliable at http://www.w3.org/TR/soap12-part0/ OASIS, UDDI, Avaliable at http://www.uddi.org/
9

H.M. Deitel e P. I. Deitel, Java Como Programar,6ed, Prentice Hall, 2005

Introduo a linguagem de programao Java


Conceitos da orientao objetos: Classe, Atributos, Mtodos, Objeto Primeiro programa em Java: HelloWorld Aritmtica em programas Java Operadores relacionais e lgicos Classes, objetos, mtodos e variveis de instncia e construtores Instrues de controle (if...else, while, for, do...while, switch, break e continue) Herana Programando com Threads Programao em rede com Java: Sockets

10

Conceitos da orientao objetos


Uma linguagem orientada objetos. O que um objeto?
De uma forma geral, podemos ver um objeto um tanto que uma abstrao do mundo real.

Uma abordagem usando objeto tem como finalidade permitir a modelagem das propriedades estticas e dinmicas do ambiente no qual esto definidas as necessidades, denominadas de domnio do problema.
11

Conceitos da orientao objetos


A orientao objeto se baseia em cinco conceitos bsicos:
Objeto; Mensagens; Classe; Generalizao; Polimorfismo.

12

Conceitos da orientao objetos


Objeto
Um objeto uma unidade atmica formada da unio de um estado e de comportamento. Um objeto fornece uma relao de coeso interna muito forte e um fraco acoplamento com o exterior. Os objetos se comunicam entre si atravs de troca de mensagens.

13

Conceitos da orientao objetos


Objeto
Cada objeto contm um estado interno que prprio dele mesmo e um comportamento visvel pelos outros objetos. Um objeto tambm tem uma identidade que o diferencia dos outros objetos. A identidade permite distinguir todo objeto de forma no ambgua, e isto independe de seu estado. Objeto = Estado + Comportamento + identidade 14

Conceitos da orientao objetos


Objeto
A identidade um conceito, no se representa de uma maneira especfica. Cada objeto possui uma identidade atribuda de maneira implcita no momento da criao do objeto e nunca modificada.
:Um objeto A
Estados de A
Mensagem

:Um objeto B
Estados de B
15

Conceitos da orientao objetos


Objeto: exemplo
s Pou ar

a1:Avio
[Em vo]

t1:Torre de controle
Estados
De c ola r

a2:Avio
[No solo]

16

Conceitos da orientao objetos


Classe
O mundo real composto de inmeros objetos em interao. Os objetos so geralmente muito complexos para serem compreendidos em sua integridade. Para reduzir a complexidade, ou para gerencila, o ser humana aprendeu a agrupar os elementos que se assemelham e a distinguir as estruturas de mais alto nvel de abstrao, 17 excluindo os detalhes inteis.

Conceitos da orientao objetos


Classe
Uma classe descreve um domnio de definio de objetos. Cada objeto originado de uma classe. As generalidades so contidas na classe e as particularidades so contidas nos objetos. O processo de criao de um objeto partir de uma classe chamado de instanciao.
18

Conceitos da orientao objetos


Classe: representao

Classe A
atributo1: TipoAtributo atributo2: TipoAtributo atributoN: TipoAtributo mtodo1(parmetro:TipoParmetro):TipoRetorno mtodo2(parmetro:TipoParmetro):TipoRetorno mtodoN(parmetro:TipoParmetro):TipoRetorno

19

Conceitos da orientao objetos


Classe e Objeto
Cachorro Raa: String Cor: String Peso: Float Altura:Float Idade:Integer

<<Instncia de>>

spike:Cachorro Raa= Pastor Alemo Cor= Preto e marrom Peso= 6,5 Altura=0,8 Idade=8

20

Conceitos da orientao objetos


Classe e Objeto
Abstrao Objetos Tipos de dados abstratos Funes Mnemnicos Cdigos Binrios Facilidade de Programao
21

Conceitos da orientao objetos


Classe: Visibilidade de atributos e mtodos
O nvel de visibilidade pode ser:
Pblico: atributos e mtodos so visveis e acessveis partir de mtodos da prpria classe ou de uma outra classe. Privado: os atributos privados somente podem ser acessados por mtodos da classe. Da mesma forma, os mtodos privados somente podem ser acessados por outros mtodos da prpria classe. Protegido: os atributos e mtodos podem ser vistos e acessados somente por mtodos da prpria classe ou partir de classes derivadas. 22

Conceitos da orientao privados somente Atributos objetos


Classe: representao de v
Representao:
Classe + atributo pblico # atributo protegido - atributo privado + mtodo pblico( ) # mtodo protegido( ) - mtodo privado( ) Mtodos pblicos podem ser chamados por mtodos de outra classe. podem ser acessados e modificados por mtodos da isibilidade prpria classe.

Exemplo:
NmeroComplexo -ParteReal:Float -ParteImaginria:Float +adio(num1:NmeroComplexo):NmeroComplexo +sub(num1:NmeroComplexo):NmeroComplexo +mult(num1:NmeroComplexo):NmeroComplexo +div(num1:NmeroComplexo):NmeroComplexo +getReal():Float +getImag():Float
23

Conceitos da orientao objetos


Generalizao.
A generalizao consiste em capturar os elementos comuns (atributos e operaes) de um conjunto de classes em uma classe mais genrica, chamada de superclasse. As classes so organizadas segundo uma hierarquia que pode ser vista como uma rvore: uma superclasse uma abstrao de suas sub-classes.
24

Conceitos da orientao objetos


Generalizao: exemplo.
Abstraes mais gerais

Veculo

Veculo Terrestre

Veculo Areo

Carro

Caminho

Moto

Avio

Helicptero

Extenso pela especializao


25

Conceitos da orientao objetos


Generalizao: exemplo.
Abstraes mais gerais

Animal

Carnvoro

Herbvoro

Leo

Ona

Coiote

Ovelha

Cavalo

Extenso pela especializao

A generalizao e a especializao so dois pontos de vista antagnicos do conceito de classificao.

26

Conceitos da orientao objetos


Generalizao: exemplo.
SuperClasse
Classe mais geral

Classe mais especializada

SubClasse A especializao a base para a programao por extenso e para a reutilizao.

27

Conceitos da orientao objetos


Generalizao: caractersticas.
A A A
Proibido

B B
Proibido

C
Transitividade

A generalizao no reflexiva e nem simtrica. A generalizao transitiva.

28

Conceitos da orientao objetos


Herana: permite a construo de uma classe partir de uma ou vrias outras classes, compartilhando atributos e operaes, e formando uma hierarquia de classes. As classes filhas herdam as caractersticas das classes pais.
A -attrA1 : Double -attrA2 : Integer +attrA3 : String #attrA4 : Double +getA1() : Double +getA2() : Integer

B -attrB1 : Boolean -attrB2 : Long +getB1() : Boolean +getB2() : Boolean


29

Conceitos da orientao objetos


Colises de nomes na herana.

30

Conceitos da orientao objetos


Polimorfismo: descreve a caracterstica de um elemento que pode ter vrias formas. O polimorfismo de operao permite fazer chamadas de uma operao de diversas formas. No confundir com sobrecarga de mtodos.
31

Conceitos da orientao objetos


Sobrecarga de mtodos: permite que mtodos compartilhem o mesmo nome, mas com diferentes parmetros e/ou retorno.
32

Introduo a Java
Em 1991, a Sun Microsystems financiou um projeto de pesquisa corporativa interno com o codinome Green (Patrick Naughton, Mike Sheridan, e James Gosling). No projeto Green, uma linguagem baseada em C++ foi desenvolvida e denominada de Oak. Mais tarde, esta linguagem foi introduzida na Web e se passou a chamar Java. Em 1995, Java despertou o interesse da comunidade, pois aprimorava as funcionalidades de servidores Web, possibilitando a criao de pginas Web dinmicas.
33

Introduo a Java
Java um ambiente de execuo presente em:
web browsers; Mainframes; SOs; celulares; palmtops; cartes inteligentes, entre outros.

34

Introduo a Java
Caractersticas: Orientao a objeto baseada no modelo Smalltalk
e Simula 67.

Portabilidade - independncia de plataforma - "write


once run anywhere";

Recursos de Rede suporte para Socket e TCP/IP. Segurana atravs do Sandbox. Bytecode interpretado cdigo executado pela JVM
(Java Virtual Machine).

Sintaxe similar a Linguagem C/C++. Facilidades de Internacionalizao: atravs de


caracteres Unicode.
35

Introduo a Java
Caractersticas:

Simplicidade na especificao (JVM): qualquer


empresa pode implementar a especificao da JVM.

Um vasto conjunto de bibliotecas (APIs): bibliotecas


disponveis com o J2SDK.

Suporte programao distribuda e multitarefa:


suporta threads, monitor, e chamada remota de procedimento.

Alocao/Desalocao dynmica de memria:


atravs do Garbage Collector (Coletor de lixo) a memria no mais utilizada pode ser recuperada e usada outra vez pelo SO ou pela prpria JVM.

Carga Dinmica de Cdigo: o cdigo pode ser carregado


segundo a demanda.
36

Introduo a Java

37

Introduo a Java
Java est disponvel em 3 edies:
Java 2 Standard Edition (J2SE): a tecnologia Java para
computadores pessoais, notebooks e arquiteturas com elevado poder de processamento. J2SE possui duas divises: Java Standard Development Kit (JSDK): constudo por um conjunto
de ferramentas (compiladores, debugger, ...) que suportam a criao de programas Java. Java Runtime Edition (JRE): contm o necessrio para a execuo dos programas Java.

Java 2 Mobile Edition (J2ME): a tecnologia Java para


dispositveis mveis com limitao de processamento e memria. Pode ser encontratado em duas formas: Connected Limited Device Configuration (CLDC): destinado a
celulares, smartphones e dispositivos limitados. Connected Device Configuration (CDC): destinado para Palmtops, PocketPCs e dispositivos com maior poder de processamento e memria.

Java 2 Enterprise Edition (J2EE): a tecnologia Java para


aplicaes corporativas (inclui Java Enterprise Beans).
38

Introduo a Java

39

Fonte: http://java.sun.com/javase/technologies/index.jsp

Introduo a Java
Um ambiente de desenvolvimento Java tpico.

40

Primeiro programa em Java: HelloWorld


public class HelloWorld { // mtodo principal que inicia a execuo do aplicativo Java public static void main(String[] args) { // Imprime uma mensagem no console System.out.println("Hello World! I am a program in Java...!") } }

41

Primeiro programa em Java: HelloWorld

42

Conhecendo o compilador Java

43

Exemplo 2
import java.util.Scanner; // importa a classe Scanner do pacote java.util // Classe principal public class HelloWorld2 { // mtodo principal que inicia a execuo do aplicativo Java public static void main(String[] args) { //declao de variveis // cria variavel para armazenar o nome do usurio String userName="none "; // cria variavel para armazenar a idade do usurio int userAge=0; // cria um objeto da classe Scanner para ler o teclado Scanner inputKeyboard = new Scanner(System.in); // Imprime uma mensagem no console System.out.println("Hello World! I am a program in Java...!"); System.out.println("What is your name?"); // Ler uma string de caracteres do teclado userName = inputKeyboard.nextLine(); // Imprime o nome do usurio usando formatao System.out.printf("Hi %s",userName); // Imprime uma mensagem no console System.out.println("\nHow old are you?"); // Ler um nmero inteiro do console userAge = inputKeyboard.nextInt(); // Imprime uma mensagem no console com formatao, %s string e %d nmero inteiro System.out.printf("%s is %d years old.",userName,userAge); } }

44

Tipos de dados Primitivos


Tipos de Dados Primitivos Palavra-chaave Descrio Inteiros
byte short int long

Tamanho/Formato

Byte Short integer Integer Long integer

8-bit complemento de dois 16-bit complemento de dois 32-bit complemento de dois 64-bit complemento de dois

Nmeros reais
float double

Ponto flutuante preciso simples Ponto flutuante preciso dupla

32-bit IEEE 754 64-bit IEEE 754

Outros
char boolean

Um nico caractere

16-bit caractere Unicode


45

Um valor lgico (true ou false) true ou false

Exemplo 3
/* * Programa que retorna o valor mximo para tipos de dados simples * Fonte: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/ ex5/MaxVariablesDemo.java */ public class MaxVariablesDemo { public static void main(String args[]) { //integers byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; //real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; //other primitive types char aChar = 'S'; boolean aBoolean = true; //Display them all. System.out.println("The largest byte value is " + largestByte + ".");

46

Exemplo 3
System.out.println("The largest short value is " + largestShort + "."); System.out.println("The largest integer value is " + largestInteger + "."); System.out.println("The largest long value is " + largestLong + "."); System.out.println("The largest float value is " + largestFloat + "."); System.out.println("The largest double value is " + largestDouble + "."); if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is uppercase."); } else { System.out.println("The character " + aChar + " is lowercase."); } System.out.println("The value of aBoolean is " + aBoolean + "."); } }

47

Aritmtica em programas Java


Operadores Aritmticos Binrios Operador + * / % Uso op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2 Descrio Adiciona op1 e op2; tambm usado para concatenar Subtrai op2 de op1 Multiplica op1 por op2 Divide op1 por op2 Computa o resto da diviso de op1 por op2

48

Aritmtica em programas Java: Exemplo4


/* Fonte: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/ex5/Arithmet icDemo.java */ public class ArithmeticDemo { public static void main(String[] args) { //a few numbers int i = 37; int j = 42; double x = 27.475; double y = 7.22; System.out.println("Variable values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" x = " + x); System.out.println(" y = " + y); //adding numbers System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); //subtracting numbers System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y));

49

Aritmtica em programas Java: Exemplo4


//multiplying numbers System.out.println("Multiplying..."); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y)); //dividing numbers System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y)); //computing the remainder resulting from dividing numbers System.out.println("Computing the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); //mixing types System.out.println("Mixing types..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x)); } }
50

Operadores relacionais
Operadores Relacionais Operador Uso > >= < <= == != op1 > op2 Descrio Retorna true se op1 maior do que op2

op1 >= op2 Retorna true se op1 maior ou igual op2 op1 < op2 Retorna true se op1 menor do que op2

op1 <= op2 Retorna true se op1 menor ou igual op2 op1 == op2 Retorna true se op1 e op2 so iguais op1 != op2 Retorna true se op1 e op2 no so iguais

51

Operadores Condicionais
Ope radores Condicionais Ope rador Uso
&& op1 && op2

Descrio Retorna true se op1 e op2 so ambos verdadeiros; condicionalmente avalia op2 Retorna verdadeiro se op1 ou op2 verdadeiro; condicionalmente avalia op2 Retorna verdadeiro se op falso Retorna true se op1 e op2 so ambos lgicos e ambos verdadeiros; sempre avalia op1 e op2; se ambos so nmeros, realiza operao AND bit a bit. Retorna verdadeiro se ambos op1 e op2 so lgicos e nenhum op1 ou op2 verdadeiro; sempre avalia op1 e op2 ; se ambos operandos so nmeros, realiza a operao ou bit a bit. Retorna verdadeiro se op1 e op2 so diferentes isto , se um ou outro dos operandos, mas no ambos, verdadeiro.
52

|| !

op1 || op2 !op

&

op1 & op2

op1 | op2

op1 ^ op2

Operadores relacionais e condicionais: Exemplo 5


public class RelationalDemo { public static void main(String[] //a few numbers int i = 37; int j = 42; int k = 42; System.out.println("Variable System.out.println(" i = " System.out.println(" j = " System.out.println(" k = " args) {

values..."); + i); + j); + k);

//greater than System.out.println("Greater than..."); System.out.println(" i > j is " + (i > j)); //false System.out.println(" j > i is " + (j > i)); //true System.out.println(" k > j is " + (k > j)); //false //(they are equal) //greater than or equal to System.out.println("Greater System.out.println(" i >= System.out.println(" j >= System.out.println(" k >=

than j is i is j is

or equal to..."); " + (i >= j)); //false " + (j >= i)); //true " + (k >= j)); //true

53

Operadores relacionais e condicionais: Exemplo 5


//less than System.out.println("Less System.out.println(" i System.out.println(" j System.out.println(" k //less than or equal to System.out.println("Less System.out.println(" i System.out.println(" j System.out.println(" k than..."); < j is " + (i < j)); < i is " + (j < i)); < j is " + (k < j));

//true //false //false

than <= j <= i <= j

or is is is

equal to..."); " + (i <= j)); " + (j <= i)); " + (k <= j));

//true //false //true

//equal to System.out.println("Equal to..."); System.out.println(" i == j is " + (i == j)); System.out.println(" k == j is " + (k == j)); //not equal to System.out.println("Not equal to..."); System.out.println(" i != j is " + (i != j)); System.out.println(" k != j is " + (k != j)); } }

//false //true

//true //false

54

Operadores relacionais e condicionais: Exemplo 6


import java.util.Scanner; public class Aritmtica { public static void main(String[] args) { //Declarao de variveis float x1=0, x2=0, a=0, b=0, c=0, delta; // cria um objeto Scanner Scanner scannerKeyboard = new Scanner(System.in); System.out.println("Calcula as razes de uma eq. do 2 grau"); System.out.print("Please, enter with a:"); a= scannerKeyboard.nextFloat(); System.out.print("Please, enter with b:"); b= scannerKeyboard.nextFloat(); System.out.print("Please, enter with c:"); c= scannerKeyboard.nextFloat(); //calcula o valor de delta delta = ((float)Math.pow(b,2)) - (4*a*c);

55

Operadores relacionais e condicionais: Exemplo 6


/* * * * */ if verifica qual o tipo de raiz delta > 0 - duas razes reais distintas delta = 0 - duas razes reais e iguais delta < 0 - razes complexas (delta == 0){ // clculo das razes x1= (-b - (float) Math.sqrt(delta))/(2*a); x2= (-b + (float) Math.sqrt(delta))/(2*a);

// Imprime resultado System.out.printf("x1=%f x2=%f",x1,x2); }else if (delta > 0 ){ // clculo das razes x1=(-b - (float) Math.sqrt(delta))/(2*a);; x2= (-b + (float) Math.sqrt(delta))/(2*a); // Imprime resultado System.out.printf("x1=%7.3f x2=%7.3f",x1,x2);

56

Operadores relacionais e condicionais: Exemplo 6


}else if (delta < 0){ //declarao de variveis float x1Real, x1Imag, x2Real, x2Imag; // clculo das razes complexas x1Real= -b /(2*a); x1Imag = -(float) Math.sqrt(-1*delta)/(2*a); // x2Real = -b /(2*a); x2Imag= ((float) Math.sqrt(-1*delta))/(2*a); // Imprime resultado System.out.println("\nRaizes complexas:"); System.out.printf("x1=%5.3f + %5.3fj",x1Real,x1Imag); System.out.printf("\nx2=%5.3f - %5.3fj",x2Real,x2Imag); } } }

57

import java.util.Scanner;

Operadores relacionais e condicionais: Exemplo 7


public static void main(String[] args) { // cria um objeto Scanner Scanner scannerKeyboard = new Scanner(System.in); // cria um objeto FatorialCalculate FatorialCalculate fatCalculate = new FatorialCalculate(); // variveis para o numero do fatorail a ser calculado e o

public class Fatorial {

resutaldo long number =0; long result=0; // pede e l o nmeor System.out.print("\nPor favor, entre um nmero para calcular o fatorial:"); number=scannerKeyboard.nextLong(); // chama o mtodo fatorial de FatorialCalculate result = fatCalculate.fatorial(number); // imprime o resultado System.out.printf("\nFatorial de %d ! = %d",number,result); }

58
}

Operadores relacionais e condicionais: Exemplo 7


public class FatorialCalculate { // mtodo que calcula o fatorial de forma recursiva public long fatorial (long numero) { if (numero <= 1) return 1; else return numero * fatorial(numero-1); } }

59

Operadores relacionais e condicionais


Exerccio:
- Crie um programa que calcule a potncia de um circuito monofsico e trifsico dado tenso, corrente e fator de potncia. - Crie um programa que calcule o fator de potncia dado a potncia trifsica, tenso de linha e corrente.

60

Classes e objetos
Uma classe contm a descrio dos estados e do comportamento de um objeto. Um objeto uma instncia de uma classe. O estado de um objeto descrito pelos atributos. O comportamento descrito pelos mtodos.
61

Classes e objetos
Vrios objetos podem ser instncias de uma mesma classe, mas estes objetos so distintos e podem possuir estados iguais ou diferentes. Mesmo que vrios objetos tenham sido instanciado de uma mesma classe, estes objetos continuam sendo distintos, ainda que o estado seja igual.
62

Classes e Objetos
Declarao do pacote
package biblioteca;

Biblioteca usadas Declarao de classe Variveis (atributo)

import java.util.Scanner; public class Livro { private String tituloLivro; private String nomeAutor; private String nomeEditora; *** public Livro(String tituloLivro, String nomeAutor, ***) { super(); this.tituloLivro = tituloLivro; this.nomeAutor = nomeAutor; this.nomeEditora = nomeEditora; *** } public void print() { System.out.println("Titulo:" + tituloLivro); System.out.println("Autor:" + nomeAutor); System.out.println("Editora:" + nomeEditora); }

Construtor

Mtodos

public String getIsbn() { return this.isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } *** }

63

Variveis (Atributos)
Elemento Visibilidade
static final

Elementos de Declarao de Variveis Funo (Optional) Nvel de acesso para a varivel: private, public, protected (Optional) Declara uma varivel de classe (Optional) Indica que o valor da varivel no pode ser mudado (Optional) Indica que o valor voltil

transient (Optional) Indica que o valor transiente volatile

tipo nome O tipo e o nome da varivel

64

Variveis de Instncia (Atributos)


package basic; import java.util.Scanner; public class MathComplex { public static void main(String[] args) { // Declaracao de variaveis simples float real, imaginario; // Declaracao de variaveis de instancia (entrada de dados) Scanner keyboard = new Scanner(System.in); // Imprime mensagem System.out.println("Operacoes sobre numeros complexos"); // Le operando 1 System.out.println("Leitura do operando 1 "); System.out.println("Entre com a parte real : "); // Ler valor do teclado real = keyboard.nextFloat(); // Imprime mensagem System.out.println("Entre com a parte imag.:"); // Ler valor do teclado imaginario = keyboard.nextFloat(); // Cria um objeto instanciado de ComplexNumber // op1 a variavel de instancia para este objeto ComplexNumber op1 = new ComplexNumber(real, imaginario);

65

Variveis de Instncia (Atributos)


// Le operando 2 System.out.println("Leitura do operando 2 "); System.out.println("Entre com a parte real : "); // Ler valor do teclado real = keyboard.nextFloat(); // Imprime mensagem System.out.println("Entre com a parte imag.:"); // Ler valor do teclado imaginario = keyboard.nextFloat(); // Cria um objeto instanciado de ComplexNumber // op1 a variavel de instancia para este objeto ComplexNumber op2 = new ComplexNumber(real, imaginario); // Realiza calculo op1.add(op2); //Imprime o resultado System.out.println("\n\n\nResultado:"); op1.print(); } }

66

Mtodos
Nvel de acesso Nome do mtodo

public ComplexNumber add(ComplexNumber cNumber)

Tipo de retorno

Argumentos

67

Instrues de controle
Declaraes de Fluxo de Controle Tipo de declarao Lao Tomada de deciso Palavra-Chave while, do-while, for if-else, switch-case

Manipulao de exceo try-catch-finally, throw Saltos break, continue, label:, return

68

Instrues de controle Exemplo: Multiplicao de Matrizes


Primeiro ndice 0 1 2 3 4 5 6 7 8 ndices

Elemento no ndice 5

X
2 1 1 2

=
7 4
69

Instrues de controle Exemplo: Multiplicao de Matrizes


// Le os elementos da matraiz A for (int i=0; i < mB; i++) for(int j=0; j < nB; j++){ System.out.printf("A[%d,%d]=",i,j); matrizB[i][j]= keyboard.nextFloat(); }
// Realiza multiplicacao for (int i = 0; i < mA; i++) for (int j = 0; j < nB; j++) for (int k = 0; k < nA; k++) { matrizC[i][j] = matrizC[i][j] + matrizA[i][k]* matrizB[k][j]; }

70

Instrues de controle Exemplo: Biblioteca

71

Herana
Abstraes mais gerais

Veculo

Veculo Terrestre

Veculo Areo

Carro

Caminho

Moto

Avio

Helicptero

Extenso pela especializao


72

Herana
package veiculo; public class Veiculo { *** }

package veiculo; public class VeiculoTerrestre extends Veiculo { private int numeroRodas; private boolean tracaoAnimal; public VeiculoTerrestre(String nome, float velocidade, float peso,***) { super(nome, velocidade, peso,***); this.numeroRodas = numeroRodas; this.tracaoAnimal = tracaoAnimal; } *** }
73

Herana
package veiculo; public class Carro extends VeiculoTerrestre { private String renavam; private String placa; private String proprietario; private String fabricante; public Carro(String fabricante, String nome, String renavam, ***) { super(nome, velocidade, peso, ***); this.renavam = renavam; this.placa = placa; this.proprietario = proprietario; this.fabricante = fabricante; } ***

74

Interface
Uma interface define um protocolo de comportamento que pode ser implementado por uma classe. Define um conjunto de mtodos, mas no os implementa. Somente as classes implementam mtodos.

75

Interface
Nvel de acesso Nome da interface

public interface NomeInterface <extends> <ParentInteface>{ public TipoRetorno NomeMetodo(argumentos); *** }


Tipo de retorno Nome do mtodo
76

Argumentos

Interface
package pckinterf; public interface ItfCarro { public void parar(); public void acelerar(); public void stabilizar(float velocidade); public float getVelocidade(); public void estabelecerRota(String origem,String destino); }

77

Interface
package pckinterf; public class ControleSienaFire implements ItfCarro { private String name; private float velocidade; public ControleSienaFire(String name) { super(); this.name = name; } public void acelerar() { this.velocidade = 60; System.out.println("Carro " + name + " est acelerando..."); return; } public void estabelecerRota(String origem, String destino) { System.out.println("Carro " + name + " est traando nova rota de " + origem + " para " + destino); return; }

*** }
78

Interface
package pckinterf; public class MainCarro { public static void main(String[] args) { ItfCarro carro = new ControleSienaFire("Siena"); carro.acelerar(); carro.getVelocidade(); carro.parar(); carro.stabilizar(90); float velocidade = carro.getVelocidade(); System.out.println("Velocidade atual= " + velocidade); } }

79

Programando com Threads


Uma thread uma linha de execuo de um programa.
Programa Uma thread Programa Duas threads

80

Programando com Threads


A programao usando vrias threads permite a realizao de vrias tarefas ao mesmo tempo (paralelas). Exemplo de um thread em Java:
public class ClassName extends Thread { public void run() { // codigo do mtodo run return; } }
81

Programando com Threads


Mtodos da classe Thread:
run: primeiro mtodo executado pela thread; start: inicia a execuo da thread; join: espera pela finalizao da execuo da thread; sleep: faz a thread dormir durante um tempo determinado; isAlive: teste se a thread est viva setPriority: especfica o nvel de prioridade de execuo:
MAX_PRIORITY MIN_PRIORITY NORM_PRIORITY.

setName: especfica o nome da threa; getName: retorna o nome da thread.

82

Programando com Threads


Ciclo de vida de uma thread
start sleep 0 1 fin dispatch 0 2 4 Pronta para execuo 2 run yield timeout-sleep 3 4

Criada Em execuo

1 3

Morta

Suspendida/Bloqueada
83

Programando com Threads: Exemplo


package threadSample; public class ClassThread extends Thread { public ClassThread(String name) { super(name); } public void run() { for (long i = 0; i < 50; i++) { System.out.printf("%s> Eu estou executando... valor de i=%d\n", this.getName(), i); } return; } }

84

package threadSample;

Programando com Threads: Exemplo


A"); B"); C"); D"); E");

public class MainThread { public static void main(String[] args) { // Declarao de variveis ClassThread threadA = new ClassThread("Thread ClassThread threadB = new ClassThread("Thread ClassThread threadC = new ClassThread("Thread ClassThread threadD = new ClassThread("Thread ClassThread threadE = new ClassThread("Thread // Controlando a prioridade de execucao threadA.setPriority(Thread.MIN_PRIORITY); threadB.setPriority(Thread.MAX_PRIORITY); threadC.setPriority(Thread.NORM_PRIORITY); threadD.setPriority(Thread.NORM_PRIORITY); threadE.setPriority(Thread.NORM_PRIORITY); // Inicia a execucao dos threads threadA.start(); threadB.start(); threadC.start(); threadD.start(); threadE.start();

85

Programando com Threads: Exemplo


// Aguarda at que todos os threads tenham terminado try { threadA.join(); threadB.join(); threadC.join(); threadD.join(); threadE.join(); } catch (Exception e) { System.out.println(e); } // Imprime mensagem final System.out.println("Fim do programa principal"); } }
86

Programao em rede com Java


Java uma linguagem de programao que permite a passagem de mensagens:
Assncronas. Sncronas.

A passagem de mensagem assncrona implementada pela utilizao de datagramas e socket. A passagem de mensagem sncrona obtida pela utilizao de socket.
87

Programao em rede com Java


Conceitos bsicos para programao em rede com Java:
Noes bsicas de rede (TCP, UDP e Portas); URL (Uniform Resource Locator); IP (Internet Protocol)

88

Programao em rede com Java


Os computadores em rede/Internet se comunicam atravs de um protocolo chamado TCP(Transmission Control Protocol) ou UDP(User Datagram Protocol) .

Ordinateur A Application (HTTP, FTP, Telnet,) Transport (TCP, UDP,...) Network (IP, ) Link (device driver,...)

Ordinateur B Application (HTTP, FTP, Telnet,) Transport (TCP, UDP,...) Network (IP, ) Link (device driver,...)

Ordinateur C Application (HTTP, FTP, Telnet,) Transport (TCP, UDP,...) Network (IP, ) Link (device driver,...)

89

Programao em rede com Java


A URL um ponteiro para um recurso especfico em um site particular na Internet. Ex: http://www.dee.ufma.br A sintaxe de uma URL pode ser definida por:

protocolo://nomeHost[ :porta]/caminho/nomeArquivo#seoArquivo
Protocolos: file: um arquivo:file://C:\JDBC_drivers\Javadoc\allclasses-frame.html) http: uma pgina Web ou um servidor Web (ex. :http://www.dee.ufma.br) ftp: um servidor FTP (par exemple :ftp://ftp.dee.ufma.br)

nomeHost: um servidor (www.dee.ufma.br) que tem um recurso ou um


endereo IP (ex.: 208.172.48.254). No caso de um nome de servidor, um servidor de DNS(Domain Name System) necessrio para descobri o endereo IP.

90

Programao em rede com Java


protocolo://nomeHost[ :porta]/caminho/nomeArquivo#seoArquivo porta : quando a porta padronizada por um protocolo, ela opcional. Por exemplo, o protocolo HTTP usa a porta 80 (padro).
As portas padres esto registradas pelo IANA e so chamadas de Well Know Ports (http://www.iana.org/assignments/port-numbers).

caminho: indica o local dentro de um diretrio fsico ou lgico no qual o recurso pode ser encontrado. nomeArquivo: especfica o nome do arquivo que ser baixado pela aplicao cliente. #seoArquivo: um ponteiro dentro de um arquivo HTML. Ex.: http://www.dee.ufma.br/~dlopes/Links.html#_Business_Process
91

Programao em rede com Java


IP (Internet Protocol) uma camada de protocolo de rede (network) do protocolo de comunicao TCP/IP. Um endereo IP utilizado para identificar uma mquina das outras. Ex: 208.172.48.254. Um endereo IP representado por 32 bits (IPv 4). O endereo IP organizado em classes:
Classe A B C Numro de Classe 1-127 129-191 192-223 Maximum Rseau 127 16.383 2.097.151 de Maximum Hosts 16.777.214 65.534 254
92

de

Programao em rede com Java


Os endereos IPv4 so codificados em 32bits, seja um total de 4.294.967.296 de endereos nicos disponveis. Entretanto, estes nmeros IPs no so suficientes para atender a grande demanda. Por isso, criou-se o IPv6. O IPv6 tem 16 bytes (128bits) com o qual possvel se criar 228 endereos nicos.
93

Programao em rede com Java


O endereo IP somente assegura que o dado chegar uma mquina especfica. A porta assegura que o dado ser enviado a uma aplicao especfica em execuo na mquina com o endereo IP especificado.
Application 1 Application 2 Application 3 Application N

Port 50

Port 80

Port 5050

Port 8000 paquet Port 50 donne

TCP ou UDP

paquet Port 80 donne

paquet Port 5050 donne

paquet Port 8000 donne

94

Programao em rede com Java


Um nmero de porta pode ser de 0 65535, pois as portas so representada por 2 bytes (16 bits). As portas de 0-1023 so registradas por servios do sistema operacional ou outros servios especficos. Estas portas (de 0 1023) so registradas pelo IANA e so chamadas de Well Know Ports (http://www.iana.org/assignments/port-numbers).

95

Programao em rede com Java: Datagramas


Um datagrama uma mensagem de um bloco auto-contido (self-contained) enviado em uma rede. O tempo de chegado e a integridade do contedo de um datagrama no so garantidos. Uma mensagem transmitida por datagramas completamente assncrona, isto , o cliente e o servidor no precisam se sincronizar para realizar a transmisso. A ordem e a integridade da mensagem no 96 so asseguradas.

Programao em rede com Java: Datagramas


Biblioteca para datagramas: DatagramSocket: cria um socket para envio e
recebimento de pacotes de datagramas.

DatagramPacket: representa um pacote de


datagrama que usado para implementar um servio de transmisso de pacotes sem conexo.

97

Datagramas: Exemplo
// RECEIVER
int receiver_port = 6600; // port of server DatagramSocket receiver_connection = null; // connection of type // DatagramSocket (UDP) byte[] buffer = new byte[256]; // create a buffer to receive the // message String msg_read = null; try { receiver_connection = new DatagramSocket(receiver_port); DatagramPacket datagram = new DatagramPacket(buffer, buffer.length); do { // print message System.out.println("Receiver>waiting..."); System.out.print("Receiver>"); receiver_connection.receive(datagram); // read from the // datagramsocket (UDP) msg_read = new String(datagram.getData(), 0, datagram .getLength()); // transform the byte in String System.out.println("message: [" + msg_read + "] from:" + datagram.getAddress().getHostName()); } while (!msg_read.equals("exit")); } catch (Exception e) { System.out.println("Exception in receiver...\nException:\n" + e); } receiver_connection.close();

98

Datagramas: Exemplo
//SENDER
int sender_port = 5000; // port of client int receiver_port = 6600; // port of server DatagramSocket sender_connection = null; // connection of type DatagramSocket (UDP) String receiver_address = "leserc-03"; byte[] buffer = null; Scanner keyboard = new Scanner(System.in); String msg_keybd = null; String msg_read=null; try { // create a DatagramSocket with port of client sender_connection = new DatagramSocket(sender_port); // create an object InetAddress (IP) InetAddress server_inet = InetAddress.getByName(receiver_address); do{ System.out.println("Sender>type a message..."); System.out.print("Sender>"); msg_keybd = (String) keyboard.next(); // read from keyboard // get the bytes from the msg_keybd and put into the buffer buffer = msg_keybd.getBytes(); // create a datagram packet DatagramPacket datagram = new DatagramPacket(buffer, buffer.length, server_inet, receiver_port); // send the datagram packet to server sender_connection.send(datagram);

99

Datagramas: Exemplo
//SENDER - continuao
// get the message from the datagram packet msg_read = new String(datagram.getData()); System.out.println("Sender>sending message [" + msg_read + "] to :" + datagram.getAddress().getHostName()); }while(!msg_read.equals("exit")); } catch (Exception e) { System.out.println("Exception in sender...\nException:\n" + e); } sender_connection.close();

100

Programao em rede com Java: Sockets


Um socket um ponto final (endpoint) de um canal de comunicao de duas direes, entre dois programas em execuo na rede. Um socket referenciado por um nmero de porta, de maneira que a camada TCP possa identificar a aplicao de destino. Socket baseado no protocolo TCP que fornece um canal ponto--ponto para as aplicaes que requerem um canal de comunicao confivel. A ordem e a integridade da mensagem transmitida 101 so asseguradas.

Programao em rede com Java: Sockets


A biblioteca para sockets:
ServerSocket: esta classe permite criar um servidor de sockets. Um servidor de sockets atende a uma demanda de conexo via a rede. Socket: esta classe permite criar um client socket que um ponto final para a comunicao entre dois ns da rede (computadores).

102

Sockets: Exemplo Exemplo Server e Client Socket

103

Tutoriais sobre Java


Trail: Learning the Java Language.
Disponvel em: http://java.sun.com/docs/books/tutorial/java/TO C.html#data

104

Desenvolvimento de aplicaes para a Web

105

Desenvolvimento de aplicaes para a Web


As geraes de aplicaes Web:
1 gerao
Pginas Web estticas (HTML)

2 gerao
As aplicaes reais:
Pginas dinmicas usando: CGI, Servlets, ASP, JSP, PHP, ...)

3 gerao
Os servios Web (baseado sobre XML)
106

A evoluo da Web segundo ORFALI


funcionalidade
HiperText Web Resposta simples na Web Objeto Web Servios Web
Cliente/Servidor baseado em XML

Publicao Eletrnica

Formulrios

Cliente/Servidor

Servidor de arquivo baseado em URL

Formulrio CGI Tableau ISAPI NSAPI

HTML dinmico Scripts Cookies/Sessions ASPs CORBA plug-ins (WAI) Push WebObjects Servlets, JSP, PHP

JavaBeans/Applet ActiveX Controls Interactions bases sur ORB via CORBA et DCOM

XML SOAP WSDL UDDI ActiveXML

No est na obra de ORFALI

Evoluo da Web

Interactividade 107

As camadas de um sistema de informao distribudo


Cliente

Base de dados

Lgica de Aplicao

Gesto de recursos

Sistema de informao

Apresentao

108

Projeto Top-down

Projetos de um Sistema de Informao Projeto Bottom-up


cliente 1. Definir dos canais de acesso e as plataformas dos clientes. 2. Examinar os recursos existentes e as funcionalidades que devem ser fornecidas. 3. Arrumar os recursos existentes e integrar suas funcionalidades atravs de uma interface consistente. 4. Adaptar a sada da lgica da aplicao de forma que esta possa ser usada com os canais de acesso requisitados e com os 109 protocolos dos clientes.

1. Definir os canais de acesso e plataformas dos clientes. 2. Definir os formatos de apresentao e protocolos para os clientes. 3. Definir as funcionalidades necessrias para fornecer os contedos e os formatos a serem usados na camada de apresentao. 4. Definir as fontes de dados e organizao de dados necessrias para implementar a lgica de apresentao.

apresentao

Lgica de apresentao

Gesto de recursos Sistema de informao

Arquiteturas de um sistema de Informao


As camadas de apresentao, lgica de aplicao e gerenciamento de recursos so construes conceituais que separam logicamente as funcionalidades de um sistema de informao. Estas camadas podem ser combinadas ou organizadas de diferentes maneiras, sendo referenciadas como tiers (nveis). Tipos de um sistema de informao, conforme a organizao dos tiers: 1-tier, 2-tier, 3-tier e Ntier. 110

Arquitetura 1-tier
cliente

Lgica de aplicao

Gesto de recursos

Sistema de informao

1 - Tier

apresentao

111

Arquitetura 2-tier
cliente
2- Tier

Tier do cliente Tier do servidor


Sistema de informao

apresentao

Lgica de aplicao

Gesto de recursos

112

Arquitetura 3-tier
3- Tier

cliente apresentao
Sistema de informao

Tier do cliente ou front-end Tier da empresa ou middle-tier

Lgica de aplicao middleware Tier de base de dados ou back-end.

Gesto de recursos

113

Arquitetura N-tier
Cliente Browser Web

Tier do cliente ou front-end

Servidor Web Sistema de informao

Filtro HTML apresentao

Tier da empresa ou middle-tier

Lgica de aplicao middleware

Gesto de recursos

Tier de base de dados ou back-end.


114

Exemplo 1: Arquitetura N-tier


Client Tier (a.k.a Front End) (Thin Client) Client

Pode ser um pocket-PC, Smartphone, etc.


Web Browser
Workstation PC

Enterprise Tier (a.k.a Middle Tier)

HTML Pages dynamically generated Business Logic Servers

Servlets, ASP.NET, JavaServerPages, PHP, etc.


Web Servers (Apache Tomcat, IIS Microsoft)

DataBase Tier (a.k.a Back End)

Oracle Mainframe

MySQL Pentium Linux

Other DBs Orther servers


115

Exemplo 2: Arquitetura N-tier


CLIENTES REMOTOS

CLIENTES INTERNOS

INTERNET Firewall

SERVIDORES WEB EM CLUSTER Rede Local

Lgica de Aplicao (middlewares) Rede Local

Gesto de recursos Rede Local ou Gateway

Rede Local

Gesto de recursos

Banco de dados

Arquivos

Email

Aplicao e- Outras Commerce aplicaes

116

Exemplos com HTML, Servlets, SQL e JDBC.


O que HTML?
HTML (Hyper Text Markup Language) uma linguagem utilizada para concepo de pginas Web. HTML uma linguagem que permite descrever o contedo e a apresentao de pginas Web. Uma pgina Web lida e apresentada em Web browsers (navegador), tais como Internet Explorer, Mozilla e FireFox. HTML no uma linguagem de programao. HTML foi criada a partir de SGML.
117

HTML
O arquivo que contm a descrio de uma pgina HTML tem geralmente a extenso .htm ou .html. Um arquivo HTML basicamente constitudo de:
Texto e imagens. Balizas (por exemplo, <p> ... </p>) que determinam a maneira como os elementos sero apresentados no navegador.
118

HTML
Algumas balizas permitem transformar um texto ou uma imagem em um link hypertexto (por exemplo, <a>...</a>). Exemplos de tags HTML:
Determina o tamanho da fonte:
<font size=7>

Insere uma foto JPEG.


<img src=photo.jpg>
119

Exemplo de HTML

Cabealho Define o DTD de HTML

Define o tamanho do texto

Insere uma imagem Corpo

Insere uma enumerao


120

Exemplo de HTML

121

Servidor Web
1
GET /index.html HTTP/1.1

HTTP/1.0 200 OK

4 Pgina HTML
122

Servlets
Basicamente, um servidor Web capaz de enviar arquivos presentes no servidor em resposta uma requisio. Uma pgina HTML esttica tem seu contedo pr-determinado e armazenado em um arquivo com extenso *.HTML. Muitas vezes, o contedo de uma pgina HTML no pode ser pr-determinado.
123

Servlets
Exemplos quando o contedo no pode ser prdeterminado:
Quando a pgina deve ter seu contedo em funo de parmetros determinados pelo usurio. Ex: Pgina de E-mail em funo do perfil de usurio. Quando a informao que deve ser apresentado pela pgina Web buscada em uma base de dados. Exemplo: Conta Corrente, Boletim escolar, Produtos vendidos on-line, conversor de moedas.

Para estes casos, deve-se dinamicamente criar pginas HTML.


124

Servlets
Vrias solues existem para criar pginas HTML dinamicamente:
PHP. ASP. JavaServerPages. Servlets.

Um servlet um programa que executa do lado do servidor como uma extenso do mesmo.
125

Servlets
O servidor Web recebe a requisio do cliente (browser) e redireciona para a servlet. A servlet processa a requisio e devolve uma pgina Web para o servidor Web, que por sua vez, retorna para o cliente. Servlet escrito em Java, sendo assim fornece:
Portabilidade. Acesso a todas as APIs de Java, inclusive JDBC.
126

Servlets
package hello_servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setBufferSize(16384); PrintWriter out = response.getWriter();

127

// write the reponse of GET out.println( "<html>" + "<head><title>Hello World Servlet</title></head>"+ "<body>" + "<H1 ALIGN=CENTER>Hello World! I am a servlet...</H1>"+ "<P ALIGN=CENTER STYLE=\"margin-top: 0.17in; page-break-after: avoid\">"+ "<FONT FACE=\"Albany, sans-serif\">"+ "<FONT SIZE=4>created by Denivaldo LOPES </FONT></P>"+ "<P ALIGN=CENTER STYLE=\"margin-top: 0.17in; page-break-after: avoid\">"+ "<FONT FACE=\"Albany, sans-serif\">"+ "<FONT SIZE=4>(denivaldo.lopes@hotmail.com)</FONT>" + "</P>"+ "<P></P>" +"<hr style=\"width: 100%; height: 2px;\">"+ "</body>"+ "</html>" ); out.flush(); out.close(); } public String getServletInfo() { return "The HelloWorld servlet by Denivaldo Lopes"; }}

Servlets

128

Servlets

129

Middleware: RPC e CORBA

130

Por qu middlewares?
Client code (C++)

? ! # $ %
Como realizar a interoperabilidade?

Application Code (Java)

Pentium IV Windows XP

Power PC Mac OS X

Um middleware facilita e gerencia a interao entre aplicaes instaladas em plataformas computacionais heterogneas. Um middleware oferece abstraes de programao que escondem vrias complexidades 131 na construo de uma aplicao distribuda.

Middleware
Um middleware um software de conexo que constitudo por um grupo de servios que permite a execuo de vrios processos em um ou vrios computadores conectados em rede. Esta tecnologia fornece interoperabilidade entre:
aplicaes criadas em diferentes linguagens de programao; sistemas operacionais; 132 arquiteturas de computadores.

Middleware
Application Application Application

APIs (Application Programming Interface)


Middleware (Distributed System Services)

Platform Interface

Platform Interface

Platform Interface

Platform

Platform

Platform

OS hardware

OS hardware

OS hardware

133

Middleware
Exemplo de middleware: Distributed Computing Environment (DCE); Common Object Request Broker Architecture (CORBA); Distributed Component Object Model (DCOM); Java Remote Method Invocation (Java RMI); Simple Object Access Protocol (SOAP).
134

Middleware
Tipos de middlewares:
Sistemas baseados em Remote Procedure Call (RPC); Transactional Processing Monitors (Monitores de Processamento Transacional; Object brokers (intermedirio de objetos); Object monitors (monitores de objetos); Message-oriented (Orientado a mensagens); Message broker (intermedirio de mensagens).
135

RPC (Remote Procedure Call)


RPC foi introduzido nos anos 80 por Birell e Nelson como parte de seu trabalho sobre o ambiente de programao Cedar*. Neste ambiente, RPC fornecia uma maneira transparente de chamar procedimentos situados em outras mquinas.
* Andrew D. Birell e Bruce Jay Nelson, Implementing Remote Procedure Calls, ACM Transactions on Computer Systems, pages 39-59, February 1984. 136

RPC como uma camada de abstrao


Remote Procedure Call (RPC)

Sockets

TCP, UDP

Internet Protocol (IP)


RPC a base para a maioria dos middlewares.
137

RPC (Remote Procedure Call)


Desenvolvendo aplicaes com RPC
client client code Development environment IDL interface client stub server server code

IDL compiler

interface server stub

Interface headers
138

RPC
Funcionamento bsico de um RPC
client procedure call
client process

server procedure

server process

client stub bind marshal serialize send

server stub unmarshal deserialize receive

Dispatcher (select stub)

communication module

communication module 139

CORBA (Common Object Request Broker)


CORBA uma especificao e arquitetura padro (i.e. generalista) para Object Request Brokers (ORBs). ORB uma infraestrutura de comunicao pela qual os objetos acessam aos servios e as facilidades, e que permite a comunicao entre estes objetos.
140

CORBA
CORBA baseado no OMA (Object Management Architecture) que foi criado pela OMG (Object Management Group).
Application Objects

ORB

CORBA Services

CORBA Facilities
141

Object Management Architecture (OMA)

CORBA
Arquitetura
Objects Vertical facilities : Financials supply chain

Horizontal facilities : distributed information documents management

task management

Object Request Broker

naming concurrency

lifecycle trader

transaction security

events persistence

time relationships
142

Avaliao de CORBA
Pontos positivos de CORBA: A transparncia. A portabilidade. A interoperabilidade. A adaptabilidade. A disponibilidade. A estabilidade. Pontos negativos de CORBA: A complexidade. O preo elevado. A formao especializada para os desenvolvedores.

143

Middlewares e XML
A comunicao somente possvel quando o emissor e o receptor falam a mesma linguagem. D-se o nome de EDI (Electronic Data Interchange) a esta linguagem. Todos middlewares precisam definir um EDI, i.e. metadados e dados, a fim de permitir a comunicao. Ex.: CORBA utiliza CDR (Common Data Representation). Atualmente, a maioria dos middlewares tm sido estendidos ou desenvolvidos para permitir a representao de metadados e dados com XML (eXtensible Markup Language). Ex.: XML-RPC e SOAP. XML o EDI da atualidade.
144

Novas Necessidades
Interoperabilidade a habilidade de trocar e usar informaes.
-Interoperabilidade na Internet ? EDI-standards- Um middleware unificador ?
Travel Agency CORBA-IIOP DCOM/COM+

CORBA-IIOP

Airlines

XML-RPC DCOM/COM+ ? CORBA-IIOP

Internet/ Intranet

DCOM/COM+

RentCar RPC Java RMI ? EDI-standards HTTP/HTML ? CGI

Client

Os servios Web ! (XML, SOAP, WSDL e UDDI)

Hotel145

O que um servio Web?


Um servio Web uma maneira normalizada de integrar aplicaes baseadas na Web utilizando os padres abertos XML, SOAP, WSDL, UDDI e os protocolos de transporte da Internet. (cf. Webopedia).
UDDI SOAP

suporta a descoberta de

ligado

WSDL

XML a chave para a


interoperabilidade.
descreve

Suporta a comunicao de

Servios Web

146

Introduo a XML:
DTD (Document Type Definitions), XSD (XML Schema Definition Language) XSLT (eXtensible Stylesheet Language Transformations).

147

XML eXtensible Markup Language


Em meados de 1970, Charles F. Goldfarb apresentou seu trabalho sobre SGML (Standard Generalized Markup Language). SGML uma metalinguagem criada para representao de dados. SGML fornece uma maneira padro para a troca de informao entre organizaes.
148

XML eXtensible Markup Language


Em 1980, Tim Bernes-Lee concebeu a World Wide Web e fundou a World Wide Web Consortium (W3C). Uma das primeiras atividades da W3C foi criar uma especificao formal para HTML (HyperText Markup Language). HTML uma linguagem baseada em SGML.
149

XML eXtensible Markup Language


HTML fornece a sintaxe usada para descrever a formatao e layout de documentos textos. O tamanho compacto e simplicidade fizeram de HTML o formato padro de documentos para publicao na Web. Provavelmente, HTML a linguagem tcnica mais utilizada no mundo.
150

XML eXtensible Markup Language


Nos meados de 1990, empresas e organizaes notaram que a Internet tinha uma forte vocao para o comrcio global. Para isto, um formato para representao de dados para o comrcio eletrnico (e-business) se fez necessrio. Limitao: HTML podia suportar somente a apresentao de documentos. Outra vez se recorreu a SGML para criar uma nova metalinguagem para suportar o comrcio eletrnico (e-business), resultando em XML. 151

XML eXtensible Markup Language


XML permite a utilizao de meta informaes usando rtulos auto-descritivos para cada pedao de texto de um documento. Vantagens de XML:
Manipulao de dados atravs de computador. Importao de dados partir de uma base de dados. Armazenagem de dados dentro de um conjunto de documentos. Documentos auto-contidos. 152

XML eXtensible Markup Language


XML permite a utilizao de meta informaes usando rtulos auto-descritivos para cada pedao de texto de um documento. Vantagens de XML:
Manipulao de dados atravs de computador. Importao de dados partir de uma base de dados. Armazenar dados dentro de um conjunto de documentos. Documentos auto-contidos. 153

XML: Elementos, Documentos e Vocabulrios


Elementos XML:
os elementos de XML no so predefinidos. Os elementos XML podem ser criados para representar dados em um contexto especfico.

Vocabulrio:
Um conjunto de elementos XML relacionados podem ser classificados como um vocabulrio. Eles podem ser criados para descrever tipos especficos de documentos de negcios.

Documentos:
uma instncia de um vocabulrio XML. o mais fundamental bloco de construo de uma arquitetura XML.

154

XML: Elementos, Documentos e Vocabulrios


Exemplo:

<?xml version=1.0?> <!DOCTYPE book SYSTEM movie.dtd> <movie category=Fiction> <title>Star Trek</title> <author>Eugene Roddenberry </author> </movie>
155

XML: Elementos, Documentos e Vocabulrios


Vocabulrios podem ser definidos formalmente atravs de linguagens de definio de schemas. Schemas XML definem a estrutura de documentos XML. Schemas XML protegem a integridade de dados de documentos XML, pois fornece estrutura, regras de validao, restries de tipos, e relaes inter-elementos.
156

XML: Elementos, Documentos e Vocabulrios


Schemas XML ditam o que pode e o que no pode ser feito com dados XML. Existem duas linguagens de esquema XML:
Document Type Definition (DTD) XML Schema Definition Language (XSD)

157

Modelos de Programao para XML


Documentos XML podem ser manipulados usando modelos:
Baseado em rvores. Baseado em eventos. Baseado em classes.

158

Modelos de Programao para XML


Exemplos:
Document Object Model (DOM) uma API normalizada pela W3C. DOM baseado em rvore. Simple API for XML (SAX) uma API normalizada pela W3C. SAX baseado em evento.

159

Universo XML
Document Type Definition (DTD) XML Schema Definition Language (XSD) Extensible Stylesheet Language Transformation (XSLT) XML Query Language (XQuery) XML Path Language (XPath)
160

Universo XML
DTD substitui descreve

XSD

descreve

XML Documents

transforma

XSLT

procura

procura

utiliza

XQuery utiliza

XPath

161

utiliza

Document Type Definition (DTD)


DTD pode ser usado para definir schemas simples. DTD permite: Declarar tipos de elementos e atributos. Relao de herana. Atribuies de tipos de dados simples. Regras de validao.
162

Document Type Definition (DTD)


<DOCTYPE movie SYSTEM movie.dtd> <!DOCTYPE movie[ <!ELEMENT movie(title, author)> <!ATTLIST movie CATEGORY (Fiction|Romance)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> ]>
<?xml version=1.0?> <!DOCTYPE book SYSTEM movie.dtd> <movie category=Fiction> <title>Star Trek</title> <author>Eugene Roddenberry </author> </movie> 163

XML Schema Definition Language (XSD)


XSD uma linguagem de modelagem de dados para documentos XML que compreensvel e aceita pela indstria.

Um esquema criado com XSD tem uma sintaxe baseada em XML, ou seja, um esquema XSD um documento XML.

164

XML Schema Definition Language (XSD)


XSD fornece: estrutura e regras de validao. um extenso suporte para tipos de dados. suporte para namespace. formato flexvel e extensvel. cada schema pode conter outros documentos de schema. cada schema pode ser dinamicamente extendido com construes suplementares. partes da definio de um esquema pode ser redefinido.
165

Exemplo de schema XSD.


<?xml version=1.0?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema> <xsd:element name=movie> <xsd:complexType> <xsd:sequente> <xsd:element name=title type=xsd:string/> <xsd:element name=author type=xsd:string/> </xsd:sequence> <xsd:attribute name=category> <xsd:simpleType> <xsd:restriction base=xsd:string> <xsd:enumeration value=Fiction/> <xsd:enumeration value=Non-Fiction/> </xsd:restriction> <?xml version=1.0?> </xsd:simpleType/> <!DOCTYPE book SYSTEM movie.dtd> </xsd:attribute> <movie category=Fiction> </xsd:complexType> <title>Star Trek</title> <author>Eugene Roddenberry </author> </xsd:element> 166
</movie>

Extensible Stylesheet Language Transformation (XSLT)


Um documento XML pode ser transformado, pois XML fornece uma clara separao entre contedo, estrutura, e apresentao. XSLT fornece: Transformao estrutural. Transformao esttica
167

Extensible Stylesheet Language Transformation (XSLT)


Transformao estrutural
Converso de um tipo de documento XML em outro tipo.

XML document AA

XSLT style sheet

XML document BB

XML Schema A

XML Schema B

168

Extensible Stylesheet Language Transformation (XSLT)


Transformao esttica
A formatao de um documento XML em uma sada adaptada para humanos, atravs da converso para um vocabulrio de descrio de pgina.

XSLT style sheet A XML document AA XSLT style sheet B

HTML document

Alpha document

169

Exemplo de XSLT
<?xml version=1.0?> <xsl:transform xmlns:xsl=http://www.w3.org/1999/XSL/Transform version=1.0> <xsl:template match=/> <xsl:apply-templates /> </xsl:template> <xsl:template match=inventory> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Movies</title> </head> <body>

170

Exemplo de XSLT
<table border=1> <xsl:for-each select=movie> <tr> <td><xsdl:value-of select=@category/></td> <td><xsdl:value-of select=title/></td> <td><xsdl:value-of select=author/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:transform>

171

Exemplo de XSLT: Resultado


<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Movies</title> </head> <body> <table border="1"> <tr> <td>Fiction</td> <td>Star Trek</td> <td>Eugene Roddenberry</td> <?xml version=1.0?> </tr> <!DOCTYPE book SYSTEM movie.dtd> </table> <movie category=Fiction> <title>Star Trek</title> </body> 172 <author>Eugene Roddenberry </author> </html> </movie>

As principais tecnologias de servios Web


SOA (Service-Oriented Architecture) WSDL (Web Services Definition Language) SOAP (Simple Object Access Protocol) UDDI (Universal Description, Discovery, and Integration)

173

SOA (Service-Oriented Architecture)


SOA um estilo de arquitetura cuja meta realizar um fraco acoplamento entre agentes de softwares que interagem entre si. Um servio uma unidade de trabalho feita por um fornecedor de servio para fornecer resultados finais requeridos por um consumidor de servio. Fornecedor e consumidor so papis desempenhado por agentes de software.
174

SOA (Service-Oriented Architecture)


SOA: Caractersticas
Publica Procura Repositrio (Discovery Facility)

Bind Agente Fornecedor Troca de mensagem fornece

Agente Consumidor

Servios descreve

Descrio do servio Requesita


175

SOA (Service-Oriented Architecture)


Framework para SOA.
choreography Protocols

components Atomic

Composite Discovery, Negociation Reliable Messaging

Security

Transactions

Quality of Service

Interface+Bindings

Policy

Description

XML Transports

Non-XML

Messaging Transport
176

Servios Web: uma realizao de SOA


Consumidor de servios
Mensagem em Soap/HTTP Mensagem em Soap

Call Bind

Search

Publish

Provedor de servios
Servios

Mensagem em Soap

Servidor UDDI
repositrio de 177 Servios Web

WSDL des Services

WSDL (Web Services Definition Language)


Como descrever o comunicao entre o consumidor de servio? contrato de fornecedor e

WSDL a linguagem que permite descrever: - Um servio Web; - E como o invocar.


178

WSDL (Web Services Definition Language)


WSDL permite a representao de um servio Web de forma abstrata e mais adequada para a reutilizao.
Estrutura de WSDL: <?xml version="1.0" encoding="utf-8"?> <definitions> <types>!--abstract data types</types> <message>!--message structure</message> <interface>!--Web Service Interface</interface> <binding>!--how the service is accessed</binding> <service>!--who provides the service</service> </definitions>

179

SOAP (Simple Object Access Protocol)


SOAP um protocolo para realizar a transmisso de informaes estruturadas em ambientes distribudos e descentralizados [W3C].
O protocolo SOAP define: Um envelope; Funcionamento com HTTP (HTTP Extension Framework); Um conjunto de regras de codificao; Funcionamento no modelo cliente / servidor (RPC) 180

SOAP (Simple Object Access Protocol)


x
SOAP Message

A mensagem SOAP
Cabealho: Padro HTTP e cabealho SOAP HTTP Envelope Cabealho Cabealho individual Corpo da mensagem SOAP Chamada de mtodos e descrio dos dados 181

HTTP Headers
SOAP Envelope SOAP Header
Headers

SOAP Body
Method Call and Data

UDDI
(Universal Description, Discovery, and Integration)

Como disponibilizar os servios ao mundo exterior ?

UDDI um repositrio que permite:


- O cadastro de servios. - A descoberta das informaes sobre os servios.
182

UDDI
(Universal Description, Discovery, and Integration)

UDDI em detalhe: Uma estrutura de dados baseada em XML para facilitar a descoberta de servios. Similar a estrutura abaixo. UDDI
Pginas brancas
(para encontrar um servio pelo contato, nome e endereo)

Pginas amarelas
(para encontrar um servio pelo assunto de acordo com uma taxonomia padroniza)

Pginas verdes
(para encontrar um servio pelas caractersticas tcnicas)
183

UDDI
(Universal Description, Discovery, and Integration)

UDDI em detalhe: estrutura de dados


businessEntity: informaes
sobre a parte que publica o servio.

tModel: Descries das especificaes para servos ou taxonomias.


BindingTemplates tem referncias para tModels. Estas referncias designam as especificaes das interfaces para um servios.

businessService: informaes
descritivas sobre uma famlia de servios especficos.

bindingTemplate:
informaes tcnicas sobre o ponto de entrada e especificao de construes.
184

Resumo de um Servio Web


Repositrio

UDDI
2 : O cliente procura servi um servi o Web com as caractersticas X, caracter UDDI (XML) UDDI (XML) Y e Z.

UDDI (XML) UDDI (XML)

1 : O fornecedor de um servio servi publica seus Servios Servi

3 : O repositrio encontra um servio com as reposit servi caractersticas X, Z et Y, e envia a informao caracter informa do servidor que o abriga 4 : Qual o contrato do servio Web servi que voc prope?

5 : Meu contrato de chamada

Cliente

WSDL (XML) WSDL (XML) 6 : Eu chamo o teu servio Web servi SOAP (XML) SOAP (XML) SOAP (XML) SOAP (XML) 7 : O resultado do servio Web servi

Servidor

185

SOA (Service-Oriented Architecture)


Framework para SOA.
choreography Protocols

components Atomic

Composite Discovery, Negociation Reliable Messaging

Security

Transactions

Quality of Service

Interface+Bindings

Policy

Description

XML Transports

Non-XML

Messaging Transport
186

Arquitetura de Servios Web


BPEL WS-C.

components Atomic WS-AT, WS-BA

Composite Discovery, Negociation WS-Reliable WS-Security Messaging

Quality of Service

WSDL

WS-Policy

Description

SOAP, WS-Addressing

JMS,...

Messaging Transport
187

HTTP, SMTP, TCP/IP, RMI/IIOP

Desenvolvendo servios Web com Java Web Services Developer Pack (JWSDP)
Servidor de Aplicaes Web: Tomcat Ant: ferramenta de construo de programas em XML e Java Exemplos de sistemas com servios Web.

188

Tomcat: Servidor de aplicao Web


Quanto ao ambiente de execuo, um servio Web pode executar na forma:
Standalone; em um container de aplicaes Web.

Tomcat:
um container para execuo de Servlets e Java Server Pages; desenvolvido inteiramente em Java; criado conforme a licena Apache Software License.

189

Tomcat: Site oficial

190

Tomcat: Arquitetura
Servidor Servio* Motor
Logger Requisio Conector Vlvula

Host*

Contexto*
Servlet*

Requisio Conector Vlvula

JSP*

Requisio

Conector

Vlvula

HTML*
191

Tomcat: Servidor de aplicao Web


Servidor: representa o todo do servidor Tomcat. Nota: Um servidor por JVM; Servio: cria os conectores e os associa ao motor; Motor (Container): examina as requisies e as direciona para o host apropriado; Host: permite que mltiplos servidores sejam configurados como uma mesma mquina fsica e ser identificada por IPs 192 distintos.

Tomcat: Servidor de aplicao Web


Contexto: representa uma nica aplicao Web. Conector: so componentes que implementam os socket listeners. Conectam applicaes Web seus clientes. Vlvula: define o comportamento bsico para cada classe de container (autenticao, controle de acesso, logging);
193

Tomcat: Servidor de aplicao Web


Logger: fornece um mecanismo de registro de mensagens e excees (permite o registro de informaes sobre a execuo do servidor como um todo). Realm: representa um banco de dados de nomes de usurios, senhas e papis atribudos aos usurios.

194

Tomcat: ferramenta de administrao

195

Tomcat: ferramenta de administrao

196

Tomcat: ferramenta de gerenciamento

197

Tomcat: ferramenta de gerenciamento

198

Tomcat: principais pastas


$CATALINA_HOME bin

Startup, shutdown e outros scripts. Arquivos de configurao e seus DTD. Mais importante server.xml Arquivos de log. Contm as aplicaes Web
199

conf

logs webapp

JWSDP 2.0
Composto por:
Java API for XML Web Services (JAX-WS) Java Architecture for XML Binding (JAXB) Java API for XML Messaging (JAXM) Java API for XML Processing (JAXP) Java API for XML Registries (JAXR) Java API for XML-based RPC (JAX-RPC) SOAP with Attachments API for Java (SAAJ) Java API for XML Web Services Addressing (JAX-WSA) 200 XML Web Services Security

JWSDP 2.0: Principais pastas


$JWSDP_HOME apache-ant jaxb jaxp jaxr jaxrpc jaxws saaj sjsxp xmldsig xws-security
201

JWSDP 2.0: Exemplo com JAX-WS

Exemplo HelloWorld

202

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Diagrama de classes
ws_helloworld HelloWorld HelloWorld() +sayHello(name:String):String +sayHello(name:String):String ITFHelloWorld

client_helloworld Customer_HelloWorld +main(args:String[]):void

203

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Diagrama de sequncia
Chamada em HTTP/SOAP

resultado em HTTP/SOAP
204

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Implementao do Servio HelloWorld.java
package ws_helloworld; import javax.jws.WebService;

@WebService(endpointInterface="ws_helloworld.ITFHelloWorld") public class HelloWorld{ public HelloWorld() throws java.rmi.RemoteException{

} public String sayHello(String name){ return "Hello " + name +". This is HelloWorld example using Web Service (JWSDP)"; } }
205

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Interface do Servio ITFHelloWorld.java
package ws_helloworld; import import import import import import import import java.rmi.Remote; java.rmi.RemoteException; javax.jws.WebService; javax.jws.WebMethod; javax.jws.soap.SOAPBinding; javax.jws.WebResult; javax.jws.WebParam; javax.xml.ws.*;

@WebService(targetNamespace = "http://leserc.org", name="helloworld") @SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL) public interface ITFHelloWorld extends Remote { @WebMethod(operationName="sayHello", action="urn:helloworld") @WebResult(name="return") public String sayHello( @WebParam(name="name")String name) throws java.rmi.RemoteException; }

206

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Arquivos de configurao

sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8" ?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="helloworld" implementation="ws_helloworld.HelloWorld" url-pattern="/helloworld" /> </endpoints>

207

JWSDP 2.0: Exemplo com JAX-WS web.xml


<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <display-name>HelloWorld Example</display-name> <description>HelloWorld</description> <listener> <listener-class>com.sun. xml.ws.transport.http.servlet. WSServletContextListener</listener-class> </listener> <servlet> <servlet-name>helloworld</servlet-name> <display-name>helloworld</display-name> <description>JAX-WS endpoint - helloworld</description> <servlet-class>com.sun.xml.ws.transport. http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>helloworld</servlet-name> <url-pattern>/helloworld</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>

208

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Cliente
Customer_HelloWorld.java
package client_helloworld; import ws_helloworld.*; import helloworld.stubs.*; public class Customer_HelloWorld { public static void main(String[] args) { try { Helloworld service = (Helloworld) new HelloWorldService().getHelloWorldPort(); // System.out.println( "Calling HelloWorld Service:\n"+ service.sayHello("Denis")); } catch (Exception ex) { ex.printStackTrace(); } } } 209

JWSDP 2.0: Exemplo com JAX-WS


HelloWorld: Arquivo de Configurao

custom-client.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="http://leserc-02:8080/jaxwshelloworld/helloworld?wsdl" xmlns="http://java.sun.com/xml/ns/jaxws"> <bindings node="wsdl:definitions"> <package name="helloworld.stubs"/> </bindings> </bindings>
210

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Chamada do servio em HTTP/SOAP
POST /jaxws-helloworld/helloworld HTTP/1.1\r\n Request Method: POST Request URI: /jaxws-helloworld/helloworld Request Version: HTTP/1.1 Content-Length: 268\r\n SOAPAction: "urn:helloworld"\r\n Content-Type: text/xml; charset=utf-8\r\n Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n User-Agent: Java/1.5.0_07\r\n Host: leserc-02:8080\r\n Connection: keep-alive\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:sayHello xmlns:ans="http://leserc.org"> <name> Denis </name> </ans:sayHello> </soapenv:Body> </soapenv:Envelope>

211

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Retorno da execuo do servio em HTTP/SOAP
HTTP/1.1 200 OK\r\n Request Version: HTTP/1.1 Response Code: 200 Set-Cookie: JSESSIONID=DBB68BF1206D0809BB1DDA22BF30E98D; Path=/jaxws-helloworld\r\n Content-Type: text/xml;charset=utf-8\r\n Content-Length: 348\r\n Date: Tue, 29 Aug 2006 13:45:15 GMT\r\n Server: Sun-Java-System/Web-Services-Pack-1.4\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:sayHelloResponse xmlns:ans="http://leserc.org"> <return> Hello Denis. This is HelloWorld example using Web Service (JWSDP) </return> </ans:sayHelloResponse> </soapenv:Body> </soapenv:Envelope>

212

JWSDP 2.0: Criao do Projeto com Ant


Pastas e arquivos
$Project bin etc server client stubs build.properties custom-client.xml custom-schema.xml src sun-jaxws.xml web.xml client_helloworld ws_helloworld

build.xml

213

JWSDP 2.0: Criao do Projeto com Ant


build.properties
# Project name project.name=HelloWorld project.version=0.1 # Options to wsimport/apt debug=false keep=true verbose=false # Web Application Server information server.name=leserc-02 server.port=8080 username=admin password=webservices # Web Service Information service.package=ws_helloworld endpoint.name=helloworld service.implementation=HelloWorld service.interface=ITFHelloWorld url.pattern=/helloworld

214

JWSDP 2.0: Criao do Projeto com Ant


build.properties
# Compile and include service include.jar= compile.with.jar= # Description Web Service service.name= display.name= description= session.timeout= # Stubs stubs.jar.file=stubsHelloWorld.jar # customization files client.binding=custom-client.xml server.binding= client.package=client_helloworld client.class=Customer_HelloWorld
215

JWSDP 2.0: Criao do Projeto com Ant


build.xml
<?xml version="1.0" encoding="UTF-8" ?> - <project basedir="." default="show-help" name="general build for Web applications"> <property file="etc/build.properties" /> <property name="build.xml.version" value="0.1" /> <property name="build.home" value="${basedir}/build" /> <property name="build.client" value="${build.home}/client" /> <path id="stubs.classpath"> - <fileset dir="${build.stubs}"> <include name="*.jar" /> </fileset> </path> - <path id="jaxws.classpath"> <pathelement location="${java.home}/../lib/tools.jar" /> - <fileset dir="${jwsdp.home}/jaxb/lib"> <include name="*.jar" /> </fileset> *** <target name="run"> - <java fork="true" classname="${client}"> - <classpath> <path refid="jaxws.classpath" /> <path refid="stubs.classpath" /> <pathelement location="${build.client}" /> <pathelement location="${basedir}/etc" /> </classpath> </java> *** </project>

216

JWSDP 2.0: Exemplo com JAX-WS

Exemplo Conversor de Moeda

217

JWSDP 2.0: Exemplo com JAX-WS


Conversor de Moeda: Diagrama de classes
converter_dollar ConverterDollar ConverterDollar() +dollarToEuro(value:Double):Double +euroToDollar (value:Double):Double ITFConverterDollar +dollarToEuro(value:Double):Double +euroToDollar (value:Double):Double

client_converter Customer_Converter +main(args:String[]):void

218

JWSDP 2.0: Exemplo com JAX-WS


Conversor de moeda: Implementao do Servio ConverterDollar.java
package converter_dollar; import javax.jws.WebService; @WebService(endpointInterface="converter_dollar.ITFConverterDollar") public class ConverterDollar{ private double quotation_euro_dollar; public ConverterDollar() throws java.rmi.RemoteException{ quotation_euro_dollar=1.1768; } public double dollarToEuro(double value) { double dollar=0.0; dollar = value / quotation_euro_dollar; return (double) dollar; } public double euroToDollar(double value){ double euro=0.0; euro= value * quotation_euro_dollar; return (double) euro; } }

219

JWSDP 2.0: Exemplo com JAX-WS


Conversor de Moeda: Interface do Servio ITFConverterDollar.java
package converter_dollar; import import import import import import import import java.rmi.Remote; java.rmi.RemoteException; javax.jws.WebService; javax.jws.WebMethod; javax.jws.soap.SOAPBinding; javax.jws.WebResult; javax.jws.WebParam; javax.xml.ws.*;

@WebService(targetNamespace = "http://leserc.org", name="converterdollar") @SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL) public interface ITFConverterDollar extends Remote { @WebMethod(operationName="dollarToEuro", action="urn:converterdollar") @WebResult(name="return") public double dollarToEuro(double value) throws java.rmi.RemoteException; @WebMethod(operationName="euroToDollar", action="urn:converterdollar") @WebResult(name="return") public double euroToDollar(double value) throws java.rmi.RemoteException;

220
}

JWSDP 2.0: Exemplo com JAX-WS


Conversor de Moeda: Client Customer_Converter.java
package client_converter; import converterdollar.stubs.*; public class Customer_Converter{ public static void main(String[] args) { try { Converterdollar service = (Converterdollar) new ConverterDollarService().getConverterDollarPort(); // double salary_dollar = 3605; double salary_euro = service.dollarToEuro(salary_dollar); // System.out.println( "\nsalary: " + salary_dollar + " $ -> " + salary_euro + " euro"); } catch (Exception ex) { ex.printStackTrace(); } } }

221

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Chamada do servio em HTTP/SOAP
POST /jaxws-converterdollar/converterdollar HTTP/1.1\r\n Request Method: POST Request URI: /jaxws-converterdollar/converterdollar Request Version: HTTP/1.1 Content-Length: 277\r\n SOAPAction: "urn:converterdollar"\r\n Content-Type: text/xml; charset=utf-8\r\n Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n User-Agent: Java/1.5.0_07\r\n Host: leserc-02:8080\r\n Connection: keep-alive\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToEuro xmlns:ans="http://leserc.org"> <arg0> 3605.0 </arg0> </ans:dollarToEuro> </soapenv:Body> 222 </soapenv:Envelope>

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Retorno da execuo do servio em HTTP/SOAP
HTTP/1.1 200 OK\r\n Request Version: HTTP/1.1 Response Code: 200 Set-Cookie: JSESSIONID=F81E2FA15A2047ECFAEC3FA660D92D6F; Path=/jaxws-converterdollar\r\n Content-Type: text/xml;charset=utf-8\r\n Content-Length: 308\r\n Date: Thu, 31 Aug 2006 17:57:55 GMT\r\n Server: Sun-Java-System/Web-Services-Pack-1.4\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToEuroResponse xmlns:ans="http://leserc.org"> <return> 3063.392250169952 </return> </ans:dollarToEuroResponse> </soapenv:Body> </soapenv:Envelope>

223

JWSDP 2.0: Exemplo com JAX-WS

Exemplo TimeZone

224

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Diagrama de classes
ws_timezone MyTimeZone MyTimeZone() +getDate():String +getHelp():String +getIds():String +getTime(): String +setTimezone(timezone: String): String timezone_client CustomerTimeZone +main(args:String[]):void
225

ITFTimeZone +getDate():String +getHelp():String +getIds():String +getTime(): String +setTimezone(timezone: String): String

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Implementao do Servio MyTimeZone.java
package ws_timezone; import import import import java.util.TimeZone; java.rmi.*; java.util.*; javax.jws.WebService;

@WebService(endpointInterface = "ws_timezone.ITFTimeZone") public class MyTimeZone { private Calendar cal; private TimeZone timezone_current; public MyTimeZone() throws RemoteException { super(); timezone_current = TimeZone.getDefault(); cal = Calendar.getInstance(timezone_current); // create an object from Calendar } public String getDate() { cal = Calendar.getInstance(timezone_current);// create a new instance String msg = timezone_current.getID() + "\n"; msg = msg + "date:" + (cal.get(cal.MONTH) + 1) + "/" + cal.get(cal.DAY_OF_MONTH) + "/" + cal.get(cal.YEAR); return msg; }

226

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Implementao do Servio MyTimeZone.java
public String getHelp() { return "\n**Server TimeZone**\nmethods:\n help: shows all commands\n getIds: return the TimeZone know\n getTime: returns the current time of server based in the current TimeZone\n getDate: gets the current date of the server based in the current TimeZone\n setTimezone <TimeZone>: sets the timezone\n"; } public String getIds() { TimeZone time_zone = cal.getTimeZone(); String msg = timezone_current.getID() + "\n"; String[] st = TimeZone.getAvailableIDs(); for (int i = 0; i < st.length; i++) { msg = msg + st[i] + "\n"; } return msg; } public String getTime() { cal = Calendar.getInstance(timezone_current); // create a new instance String msg = timezone_current.getID() + "\n"; msg = msg + "time:" + cal.get(cal.HOUR_OF_DAY) + ":" + cal.get(cal.MINUTE) + ":" + cal.get(cal.SECOND) + ":" + cal.get(cal.MILLISECOND); return msg; }

227

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Implementao do Servio MyTimeZone.java
public String setTimezone(String timezone) { String[] st = TimeZone.getAvailableIDs(); String msg = " "; boolean know = false; for (int i = 0; i < st.length; i++) { if (st[i].equals(timezone)) know = true; } if (know) { timezone_current = TimeZone.getTimeZone(timezone); msg = timezone_current.getID() + "\n" + "timezone setted to " + timezone; } else msg = "unknow TimeZone:" + timezone; return msg; } }
228

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Interface do Servio ITFTimeZone.java
package ws_timezone; import import import import import import import import import java.rmi.Remote; java.rmi.RemoteException; javax.jws.WebService; javax.jws.WebMethod; javax.jws.soap.SOAPBinding; javax.jws.WebResult; javax.jws.WebParam; javax.xml.ws.*; java.rmi.*;

@WebService(targetNamespace = "http://leserc.org", name="timezone") @SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL) public interface ITFTimeZone extends Remote { @WebMethod(operationName="getDate", action="urn:timezone") @WebResult(name="return") public String getDate() throws RemoteException; @WebMethod(operationName="getHelp", action="urn:timezone") @WebResult(name="return") public String getHelp() throws RemoteException;
229

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Interface do Servio ITFTimeZone.java
@WebMethod(operationName="getIds", action="urn:timezone") @WebResult(name="return") public String getIds() throws RemoteException; @WebMethod(operationName="getTime", action="urn:timezone") @WebResult(name="return") public String getTime() throws RemoteException;

@WebMethod(operationName="setTimezone", action="urn:timezone") @WebResult(name="return") public String setTimezone(String timezone) throws RemoteException; }

230

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Client CustomerTimeZone.java
package timezone_client; import java.util.*; import java.io.*; import javax.xml.rpc.Stub; import ws_timezone.*; import timezone.stubs.*; public class CustomerTimeZone{ public static void main(String[] args) { BufferedReader input_kbd = new BufferedReader(new InputStreamReader(System.in)); //create a stream from keyboard String msg_keybd = " "; System.out.println("Client>starting client..."); try { // // make the Lookup to Timezone and get an Interface to invoke the server methods Timezone service = (Timezone) new MyTimeZoneService().getMyTimeZonePort(); // String[] messages_know = { "help", "getIds", "getTime", "getDate", "setTimezone" }; // System.out.println( "Client>Enter with the command:\n help, getIds, getTime, getDate, setTimezone and quit");

231

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Client CustomerTimeZone.java
while (!msg_keybd.equals("quit") && !msg_keybd.equals("QUIT")) { // System.out.print("Client>"); msg_keybd = input_kbd.readLine(); // read from keyboard // StringTokenizer tk = new StringTokenizer(msg_keybd, " "); // create a tokenizer // String first_token = tk.nextToken(); // first command // if (first_token.equals("quit") || first_token.equals("QUIT")) continue; // int index_message = -1; for (int i = 0; i < messages_know.length; i++) { // search for command if (first_token.equals(messages_know[i])) index_message = i; } //

232

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Client CustomerTimeZone.java
switch (index_message) { // select the command case 0 : // help { String msg_received = service.getHelp(); System.out.println( "Client>server returned the following message:" + msg_received); } break; case 1 : // getIds { String msg_received = service.getIds(); System.out.println( "Client>server returned the following message:" + msg_received); } break; case 2 : // getTime { String msg_received = service.getTime(); System.out.println( "Client>server returned the following message:" + msg_received); } break;

233

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Client CustomerTimeZone.java
case 3 : //getDate { String msg_received = service.getDate(); System.out.println( "Client>server returned the following message:" + msg_received); } break; case 4 : // setTimezone { if (tk.countTokens() >= 1) { String second_token = tk.nextToken(); String msg_received = service.setTimezone(second_token); System.out.println( "Client>server returned the following message:" + msg_received); } else { System.out.println("Client>sintax error:\n sintax: set_timezone <TimeZone>"); } } break;

234

JWSDP 2.0: Exemplo com JAX-WS


TimeZone: Client CustomerTimeZone.java
default : // default { System.out.println("Client>unknow command"); } break; } } // } catch (Exception e) { System.out.println("Exception in client...\nException:\n" + e); } System.out.println("Client finished..."); }

235

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Chamada do servio em HTTP/SOAP
POST /jaxws-timezone/timezone HTTP/1.1\r\n Request Method: POST Request URI: /jaxws-timezone/timezone Request Version: HTTP/1.1 Content-Length: 248\r\n SOAPAction: "urn:timezone"\r\n Content-Type: text/xml; charset=utf-8\r\n Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n User-Agent: Java/1.5.0_07\r\n Host: leserc-02:8080\r\n Connection: keep-alive\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:getTime xmlns:ans="http://leserc.org"> </ans:getTime> 236 </soapenv:Body> </soapenv:Envelope>

JWSDP 2.0: Exemplo com JAX-WS


Execuo: Retorno da execuo do servio em HTTP/SOAP
HTTP/1.1 200 OK\r\n Request Version: HTTP/1.1 Response Code: 200 Set-Cookie: JSESSIONID=F7A5D9A79C85757131D8B8F45DFBF221; Path=/jaxws-timezone\r\n Content-Type: text/xml;charset=utf-8\r\n Content-Length: 316\r\n Date: Tue, 05 Sep 2006 18:50:25 GMT\r\n Server: Sun-Java-System/Web-Services-Pack-1.4\r\n \r\n <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:getTimeResponse xmlns:ans="http://leserc.org"> <return> America/Sao_Paulo\ntime:15:50:25:609 </return> </ans:getTimeResponse> </soapenv:Body> </soapenv:Envelope>

237

Exemplo Servios Web e Servlet

238

JWSDP 2.0: Exemplo com Servlet


Conversor de Moeda: Diagrama de classes
converter_servlet Converter

+doGet (HttpServletRequest request,HttpServletResponse response):void +getServletInfo(): String ConverterResp +doGet(HttpServletRequest request, HttpServletResponse response):void +getServletInfo():String +converter(String from, String to, double value):double +createStub():Converterdollar
239

JWSDP 2.0: Exemplo com Servlet


Converter.java
package converter_servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Converter extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setBufferSize(16384); PrintWriter out = response.getWriter(); // write the reponse of GET out.println("<html>" + "<head><title>Converter</title></head>"+ "<body style=\"background-color: rgb(51, 204, 255); color: rgb(0, 0, 0);\" link=\"#0000ee\" alink=\"#0000ee\" vlink=\"#551a8b\">" + "<H1 ALIGN=CENTER>Converter of Money</H1>"+ "<P ALIGN=CENTER STYLE=\"margin-top: 0.17in; page-break-after: avoid\"><FONT FACE=\"Albany, sans-serif\"><FONT SIZE=4>created by Denivaldo LOPES </FONT></P>"+

240

JWSDP 2.0: Exemplo com Servlet


Converter.java
"<P ALIGN=CENTER STYLE=\"margin-top: 0.17in; page-break-after: avoid\"><FONT FACE=\"Albany, sans-serif\"><FONT SIZE=4>(dlopes@dee.ufma.br)</FONT></P>"+ "<P></P>"+ "<P ALIGN=CENTER>"+ "<img src=\"euro.gif\">" + "<img src=\"dollar.gif\">" + "<form method=\"get\">" + "</P>"+ "<hr style=\"width: 100%; height: 2px;\"/>"+ "<P>Money: <INPUT TYPE=TEXT NAME=\"money\" SIZE=15></P>"+ "<P>From:"+ "<SELECT NAME=\"from\">"+ "<OPTION SELECTED VALUE=\"0\">&euro;</OPTION>"+ "<OPTION VALUE=\"1\">$</OPTION>" + "</SELECT>"+ "</P>"+ "To:" + "<SELECT NAME=\"to\">"+ "<OPTION SELECTED VALUE=\"0\">&euro;</SELECTED>"+ "<OPTION VALUE=\"1\">$</OPTION>"+ "</SELECT>"+ "</P>" + 241 "<p></p>" +

JWSDP 2.0: Exemplo com Servlet


Converter.java
"<input type=\"submit\" name=\"Converter\" value=\"Converter\">" + "</form>"); String money = request.getParameter("money"); String from = request.getParameter("from"); String to = request.getParameter("to"); if ( money!= null && money.length() > 0 && from!= null && from.length() > 0 && to!= null && to.length() > 0 ) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Converter_resp"); if (dispatcher != null) dispatcher.include(request, response); } out.println("<hr style=\"width: 100%; height: 2px;\">"); out.println("</body></html>"); out.flush(); out.close(); } public String getServletInfo() { return "The Converter is a servlet that call a service of money convertion"; } }

242

JWSDP 2.0: Exemplo com Servlet


ConverterResp.java
package converter_servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import converterdollar.stubs.*; public class Converter_resp extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String str_from = null; String str_to = null; int from = 0; int to = 0; String str_money[] = { "&euro;", "$" }; double from_value = 0.0; // PrintWriter out = response.getWriter(); // write the response String money = request.getParameter("money"); if (money != null && money.length() > 0) { str_from = request.getParameter("from"); str_to = request.getParameter("to"); from = Integer.parseInt(str_from); to = Integer.parseInt(str_to); try { from_value = Double.parseDouble(money);

} catch (Exception e) {

243

JWSDP 2.0: Exemplo com Servlet


ConverterResp.java
out.println("<h5>This is not a valid number: " + money + "</h5>"); out.println("<h5>Exception:" + e + "</h5>"); return; } try { double to_value = converter(str_money[from], str_money[to], from_value); out.println("<h3>" + from_value + " " + str_money[from] + " --> " + to_value + " " + str_money[to] + "</h3>"); } catch (Exception e) { out.println("<h5>Error converting the value: " + money + "</h5>"); out.println("<h5>Exception:" + e + "</h5>"); return; } } } public String getServletInfo() { return "The DolarConverter_resp is a servlet that call a service of money convertion"; }

244

JWSDP 2.0: Exemplo com Servlet


ConverterResp.java
public double converter(String from, String to, double value) throws Exception { // =0 $=1 double new_value = 0; if (from.equals(to)) return value; Converterdollar serviceConverter = (Converterdollar) createStub(); // -> $ if (from.equals("&euro;") && to.equals("$")) { new_value = serviceConverter.euroToDollar(value); return new_value; } // $ -> if (from.equals("$") && to.equals("&euro;")) { new_value = serviceConverter.dollarToEuro(value); return new_value; } throw new Exception("This conversion " + from + " -> " + to + " is not available..."); } public Converterdollar createStub() { return (Converterdollar) new ConverterDollarService() .getConverterDollarPort(); } }

245

JWSDP 2.0: Exemplo com Servlet

246

Servios Web compostos


Importncia da composio. Ferramentas de composio. BPEL (Business Process Execution Language) Eclipse e o Framework da Oracle para servios Web compostos.

247

Importncia da composio de Servios Web

Travel Agency

Airlines

Internet/ Intranet
RentCar Client

Hotel 248

Importncia da composio
Um servio Web complexo pode ser formado partir de outros servios Web simples; Permite a reutilizao de servios; A evoluo de um sistema pode ser obtida com a insero de novos servios; O cliente somente percebe o servio composto, no tendo nenhuma interao direta com os servios simples.

249

Composio de Servios Web: Exemplo


R$ $ F $ Servio Web Composto R$ $

ConverterUniv

ConverterRealDollar

Internet/ Intranet
ClientConverterUniv

ConverterDollarEuro

250

Composio de Servios Web: Exemplo


- Diagrama de seqncia

251

Composio de Servios Web:


sem noo explcita de Processo - Exemplo service
package converter_univ; import javax.jws.WebService; import converter_real.stubs.*; import converterdollar.stubs.*; @WebService(endpointInterface = "converter_univ.ITFConverterUniversal") public class ConverterUniversal { ConverterReal serviceRealDollar; Converterdollar serviceEuroDollar; double quotation_euro_franc; public ConverterUniversal() throws java.rmi.RemoteException { quotation_euro_franc = 6.55957; serviceRealDollar = (ConverterReal) new ConverterRealService() .getConverterRealPort(); serviceEuroDollar = (Converterdollar) new ConverterDollarService() .getConverterDollarPort(); }

252

Composio de Servios Web:


sem noo explcita de Processo - Exemplo service
public double dollarToReal(double value) throws java.rmi.RemoteException { return (double) serviceRealDollar.dollarToReal(value); } public double realToDollar(double value) throws java.rmi.RemoteException { return (double) serviceRealDollar.realToDollar(value); } public double euroToDollar(double value) throws java.rmi.RemoteException { return (double) serviceEuroDollar.euroToDollar(value); } public double dollarToEuro(double value) throws java.rmi.RemoteException { return (double) serviceEuroDollar.dollarToEuro(value); }
253

Composio de Servios Web:


sem noo explcita de Processo - Exemplo service
public double francToEuro(double value) throws java.rmi.RemoteException { return (double) value / quotation_euro_franc; } public double euroToFranc(double value) throws java.rmi.RemoteException { return (double) value * quotation_euro_franc; } }

254

Composio de Servios Web:


sem noo explcita de Processo - Exemplo service
package converter_univ; import java.rmi.Remote; import java.rmi.RemoteException; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; import javax.jws.WebResult; import javax.jws.WebParam; import javax.xml.ws.*; @WebService(targetNamespace = "http://leserc.org", name = "converter_univ") @SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL) public interface ITFConverterUniversal extends Remote { @WebMethod(operationName = "dollarToReal", action = "urn:converter_univ") @WebResult(name = "return") public double dollarToReal(double value) throws java.rmi.RemoteException; @WebMethod(operationName = "realToDollar", action = "urn:converter_univ") @WebResult(name = "return") public double realToDollar(double value) throws java.rmi.RemoteException;

255

Composio de Servios Web:


sem noo explcita de Processo - Exemplo service
@WebMethod(operationName = "euroToDollar", action = "urn:converter_univ") @WebResult(name = "return") public double euroToDollar(double value) throws java.rmi.RemoteException; @WebMethod(operationName = "dollarToEuro", action = "urn:converter_univ") @WebResult(name = "return") public double dollarToEuro(double value) throws java.rmi.RemoteException; @WebMethod(operationName = "francToEuro", action = "urn:converter_univ") @WebResult(name = "return") public double francToEuro(double value) throws java.rmi.RemoteException; @WebMethod(operationName = "euroToFranc", action = "urn:converter_univ") @WebResult(name = "return") public double euroToFranc(double value) throws java.rmi.RemoteException; }
256

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: client
package client_univ; import converter_univ.stubs.*; public class ClienteConverterUniv { public static void main(String[] args) { try { ConverterUniv service = (ConverterUniv) new ConverterUniversalService() .getConverterUniversalPort(); // double salary_dollar = 5500; double salary_real = service.dollarToReal(salary_dollar); double salary_euro = service.dollarToEuro(salary_dollar); // System.out.println("\nsalary: " + salary_dollar + " $ -> " + salary_real + " reais"); System.out.println("\nsalary: " + salary_dollar + " $ -> " + salary_euro + " euros"); } catch (Exception ex) { ex.printStackTrace(); } } }

257

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: Execuo

C:\Exemplos_JWSDP2.0\ConverterUniversal>ant run Buildfile: build.xml run: [java] salary: 5500.0 $ -> 11770.0 reais [java] salary: 5500.0 $ -> 4673.691366417403 euros BUILD SUCCESSFUL

258

Composio de Servios Web: Exemplo


- Diagrama de seqncia

259

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: Execuo
Hypertext Transfer Protocol POST /jaxws-converter_univ/converter_univ HTTP/1.1\r\n Request Method: POST Request URI: /jaxws-converter_univ/converter_univ Request Version: HTTP/1.1 Content-Length: 277\r\n SOAPAction: "urn:converter_univ"\r\n Content-Type: text/xml; charset=utf-8\r\n Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n User-Agent: Java/1.5.0_07\r\n Host: leserc-02:8080\r\n Connection: keep-alive\r\n \r\n eXtensible Markup Language <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToReal xmlns:ans="http://leserc.org"> <arg0> 5500.0 </arg0> </ans:dollarToReal> </soapenv:Body> </soapenv:Envelope>

260

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: Execuo
Hypertext Transfer Protocol HTTP/1.1 200 OK\r\n Request Version: HTTP/1.1 Response Code: 200 Set-Cookie: JSESSIONID=9A47288D1EAB5AA19409CA99A7E1CFBF; Path=/jaxws-converter_univ\r\n Content-Type: text/xml;charset=utf-8\r\n Content-Length: 298\r\n Date: Tue, 07 Nov 2006 16:00:16 GMT\r\n Server: Sun-Java-System/Web-Services-Pack-1.4\r\n \r\n eXtensible Markup Language <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToRealResponse xmlns:ans="http://leserc.org"> <return> 11770.0 </return> </ans:dollarToRealResponse> </soapenv:Body> </soapenv:Envelope>
261

Composio de Servios Web: Exemplo


- Diagrama de seqncia

262

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: Execuo
Hypertext Transfer Protocol POST /jaxws-converter_univ/converter_univ HTTP/1.1\r\n Request Method: POST Request URI: /jaxws-converter_univ/converter_univ Request Version: HTTP/1.1 Content-Length: 277\r\n SOAPAction: "urn:converter_univ"\r\n Content-Type: text/xml; charset=utf-8\r\n Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n User-Agent: Java/1.5.0_07\r\n Host: leserc-02:8080\r\n Connection: keep-alive\r\n \r\n eXtensible Markup Language <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToEuro xmlns:ans="http://leserc.org"> <arg0> 5500.0 </arg0> </ans:dollarToEuro> </soapenv:Body> 263 </soapenv:Envelope>

Composio de Servios Web:


sem noo explcita de Processo - Exemplo: Execuo
Hypertext Transfer Protocol HTTP/1.1 200 OK\r\n Request Version: HTTP/1.1 Response Code: 200 Set-Cookie: JSESSIONID=30E7BC74826D9E380576218A2090C763; Path=/jaxws-converter_univ\r\n Content-Type: text/xml;charset=utf-8\r\n Content-Length: 308\r\n Date: Tue, 07 Nov 2006 16:00:16 GMT\r\n Server: Sun-Java-System/Web-Services-Pack-1.4\r\n \r\n eXtensible Markup Language <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soapenv:Body> <ans:dollarToEuroResponse xmlns:ans="http://leserc.org"> <return> 4673.691366417403 </return> </ans:dollarToEuroResponse> </soapenv:Body> 264 </soapenv:Envelope>

Composio de Servios Web:


sem noo explcita de Processo (Exemplo: Servlet)

265

Composio de Servios Web:


sem noo explcita de Processo

266

Composio de Servios Web:


sem noo explcita de Processo Limitaes da composio sem noo

explcita de processo:
O processo executado pelo servio composto est definido dentro do prprio cdigo (dependente da linguagem de programao). Complexidade composto. no desenvolvimento do servio

Difcil de manipular e alterar para atender novos requisitos. Inadequado para aplicaes B2B, pois no permite escalabilidade.
267

Composio de Servios Web:


com noo explcita de Processo Alguns pontos sobre a composio de

servios Web:
A composio de SW precisa ser definida independente de linguagem de programao. Do ponto de vista do cliente, o servio composto deve ser visto como um nico servio Web. Necessidade de uma nova linguagem de modelagem de processo para suportar a composio de servios Web. Esta linguagem de composio deve suportar o paralelismo, controle de fluxo, eventos, manipular excees, etc. Esta linguagem deve ser executada por um motor de 268 execuo que seja escalvel.

Linguagens de composio de Servios Web


XLANG (Web Services for Business Process Design)
(http://www.gotdotnet.com/team/xml_wsspecs/xlang-c/default.htm)

WSFL (Web Services Flow Language)


(http://www-3.ibm.com/software/solutions/webservices/pdf/WSFL.pdf)

BPEL (Business Process Execution Language for Web Services)


(http://www-128.ibm.com/developerworks/library/specification/ws-bpel/)

269

BPEL (Business Process Execution Language)

XLANG
Sequential and Parallel control flow Long-running transactions Correlation messages Exception handling

WSFL
Flow model: Actvities Control Global model

BPEL
270

BPEL (Business Process Execution Language) e Servios Web

BPEL

WS-C.

components Atomic WS-AT, WS-BA

Composite Discovery, Negociation WS-Reliable WS-Security Messaging

Quality of Service

WSDL

WS-Policy

Description

SOAP, WS-Addressing

JMS,...

Messaging Transport
271

HTTP, SMTP, TCP/IP, RMI/IIOP

BPEL (Business Process Execution Language)


BPEL uma linguagem que suporta a descrio da lgica do processo de um negcio. Caractersticas: Dividido em: Processo Abstrato permite a criao de um processo abstrato que descreve os protocolos do negcio. Processo Executvel compilado e executado. Do ponto de vista do cliente, um processo BPEL pode ser representado por documento WSDL (sem bindings implementao neutra).

272

BPEL (Business Process Execution Language)


Caractersticas: BPEL tem sua origem na fuso de XLANG e WSFL. BPEL uma linguagem baseada em XML. BPEL possui instrues de controle de fluxo, paralelismo, gerenciamento de excees, invocao de servios, atribuio de valores. BPEL pode suportar a Integrao de Aplicaes (EAI) desde que as aplicaes existentes sejam expostas como servios Web.

273

BPEL (Business Process Execution Language)

Application A

Application B

Suporte a EAI
(Enterprise Application Integration)

274

BPEL Estrutura bsica


process
partnerLinks partners variables correlationSets faultHandlers eventHandlers

activity
<receive> <reply> <invoke> <assign> <throw> <terminate> <wait> <empty> <sequence> <switch> <while> <pick> <flow> <scope> <compensate>
275

BPEL Exemplo

276

BPEL Exemplo

277

BPEL Exemplo

278

BPEL - PartnerLink

<partnerLinks>? <!-- Note: At least one role must be specified. --> <partnerLink name="ncname" partnerLinkType="qname" myRole="ncname"? partnerRole="ncname"?>+ </partnerLink> </partnerLinks>

279

BPEL - Partner

<partners>? <partner name="ncname">+ <partnerLink name="ncname"/>+ </partner> </partners>

280

BPEL - Variable

<variables>? <variable name="ncname" messageType="qname"? type="qname"? element="qname"?/>+ </variables>

281

BPEL - correlationSets
<correlationSets>? <correlationSet name="ncname" properties="qname-list"/>+ </correlationSets>

282

BPEL - faultHandlers
<faultHandlers>? <!-- Note: There must be at least one fault handler or default. --> <catch faultName="qname"? faultVariable="ncname"?>* activity </catch> <catchAll>? activity </catchAll> </faultHandlers>

283

BPEL - compensationHandler
<compensationHandler>? activity </compensationHandler>

284

BPEL - activity
Comunicao Atribuio Controle de fluxo

<receive> <reply> <invoke>


Declarao de execuo

<assign>

<switch> <while>

Outras

<sequence> <flow>

<throw> <empty> <wait> <terminate> <pick>

<scope> <compensate>

285

BPEL - eventHandlers
<eventHandlers>? <!-- Note: There must be at least one onMessage or onAlarm handler. -> <onMessage partnerLink="ncname" portType="qname" operation="ncname" variable="ncname"?> <correlations>? <correlation set="ncname" initiate="yes|no"?>+ <correlations> activity </onMessage> <onAlarm for="duration-expr"? until="deadline-expr"?>* activity </onAlarm> </eventHandlers>

286

You might also like