SOA Workshop - JBoss ESB v1.1

Post on 01-Nov-2014

7.632 views 3 download

Tags:

description

Material do Workshop de JBoss ESB Autor: Edgar Silva Revisor: Ricardo Ferreira

Transcript of SOA Workshop - JBoss ESB v1.1

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Bem vindo ao Workshop SOA

• Objetivo:– Fazer com que a audiência compreenda os principais

conceitos de Arquiteturas Orientadas a Serviços - SOA , como foco no barramento de serviços: JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Instrutor

Edgar A. Silva– edgar.silva@gmail.com – http://www.edgarsilva.com.br– http://ankiewsky.blogspot.com – http://jbossbrasil.ning.com/profile/edgar

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Softwares que vão ser usados neste Workshop

• Eclipse Ganymed• JBoss Tools• JBoss ESB Server 4.4 GA• Opcionais:

– jBPM 3.2– DroolsD

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Agenda

• Visão Geral de Arquitetura Orientada a Serviços

• WebServices: Até onde eles vão e quais suas maiores limitações

• Visão geral dos Enterprise Integration Patterns - EIPs

• Conceitos de Programação Orientada a Mensagens e MOMs

• Visão geral de um Enterprise Service Bus

• Apresentando o JBoss ESB

• Entendendo as distribuições do JBoss ESB

• Recompilando o JBoss ESB com base nos fontes do JBoss.ORG

• Ferramentas embarcadas com o JBoss ESB

• Executando os primeiros Exemplos do JBoss ESB

• Entendento o que são Providers (protocolos)E

• Clientes ESB Unware e ESB Aware

• Entendendo os Serviços e seus Listeners

• Compreendendo Actions do ESB

• Actions out-of-the-box

• Actions Personalizadas

• Actions baseadas em Annotations

• Integrando o ESB a Serviços de Regras do Drools

• Integrando o ESB a BPM com jBPM

• Construindo consumidores e provedores de WebServices com JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Planejamento

• Início: 09:00 • Break: 10:30 (10 minutos)B• Almoço: 13:00• Retorno: 14:00• Break: 16:20 (15 minutos)B• Término: 18:00• Bate-papo: 18:10 (20 minutos)B

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Visão Geral de Arquitetura Orientada a Serviços

SOA (Service Oriented Architecture)S

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

SOA Transformou TI em Tecnologia da Inovação

• Respostas mais rápidas• Aceitação das

Mudanças• Foco em entrega de

Valor• Integrações• Você!

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

O que SOA é então?

• Arquitetura Orientada a Serviços - SOA– Um modelo Arquitetural que visa proporcionar resiliência,

respostas rápidas a mudanças, integrações com o novo e o legado, fortemente baseada em contratos/serviços, proporcionando monitorações dos mesmos, bem como princípios de qualidade(SLA por exemplo)p

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Enão o que SOA não é?

• Uma Solução vendida em Caixinha

• A necessidade da compra de licenças de 982983298 produtos.

• Uma Tecnologia...• Uma Linguagem...• Uma tendência....• Um monte de

WebServices!!!!!!!!!!!!!!!!!!!!!• Um cara que diz: “Eu uso

SOA”

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

SOA e OpenSource

• A chance de aprender primeiro• A chance de errar e não ter prejuízo• Use OpenSource não só usando mas:

– Contribuindo– Testando– Perguntando/Reclamando nos Foruns das Comunidades

• Quando tudo estiver pronto para entrar em produção procure usar Opensource que possuir Suporte Oficial de uma grande empresa como garantia de atendimento, continuidade e SLA.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Soluções de Tecnologia OSS para SOA

• Enterprise Service Bus - ESB– JBoss ESB, Mule, Apache ServiceMix

• BPM– JBoss jBPM, OSWorkflow, Intalio

• Rules Engines (Regras)R– Drools, TeamWare

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Foco do Workshop

• ESB (Enterprise Service Bus)E– JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices: Até onde eles vão e quais suas maiores limitações

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices

• Alternativa bem sucedida em termos de RPC• Contract Enforcement (WSDL, XSD)• Stateless (Http)S• SOAP• WSDL• XML, XML Schema• WS * (* = Transações, Segurança, Colaboração etc)W• Interoperabilidade (Java, .net, Ruby, PHP, etc)I

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Stacks Java para WebServices

• Sun Metro– https://metro.dev.java.net/

• Apache CXF– http://cxf.apache.org/

• JBossWS– http://www.jboss.org/jbossws/

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices nos dias de hoje

• EJB 3.0– Suporte a anotações sobre os POJOs– Capacidade de expor um EJB como um endpoint SOAP

controlado pelo contêiner EJB– Facilita a exposição / ocultamento de operações no

endpoint através de anotações (ver limitações nas specs)

• Spring Framework– Simplificadores para proporcionar o uso de WebServices.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices são formidáveis porém....

• Da mesma forma que você resolve inúmeros problemas complexos com WebServices, eles acabam acarretando uma complexidade alta mesmo para serviços simples.

• Casos Reais onde WebServices atrapalharam alguns clientes:– Tamanho do pacote XML trafegado no HTTP– Autenticações entre domínios de segurança diferentes– Dificuldade de manter transações consistentes devido a

heterogêneidade de plataformas (C++, COBOL, Java)

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Alternativas ao WebServices

• Soluções dos “velhos tempos” muito comum em C++, PHP e outras soluções:– XML-RPC

• Dias de Hoje:– REST (REpresentational State Transfer)R

•Liberdade de Escolha de Padrão de Comunicação•Baseado em URLs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Conclusão WebServices

• Grandes meios de ponto de exposição de Serviços(Endpoints)E

• Ótima solução de Interoperabilidade• Padronizações para requisitos corporativos

padronizadas pelo mercado (ex: WS-Security, WS-Addressing, WS-Transactions etc)A

• Apenas não tenha em mente que apenas de WebServices uma Arquitetura de Serviços sobrevive.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Pense bem também em:

• Oferecer diferentes possibilidade de acesso aos seus serviços e não só WebServices– REST, Http, Sockets, JMS e etc

• Se você tiver isto em mente, nunca vai abusar demais das capacidades que WS podem lhe oferecer, mantendo assim a questão de “baixo acoplamento+contratos” sempre real na sua arquitetura.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Visão Geral dos EIPs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

EAI como Disciplina de SOA

• Necessidade de Integrações entre sistemas:– Enterprise Integrations

Patterns• http://www.eaipatterns.comhttp://www.eaipatterns.com

• Estilos de Integração– Transferência de Arquivos– Banco de Dados

Compartilhado– RPC– Mensageria

Detalhes (Amazon):

http://www.amazon.com/dp/0321200683?tag=enterpriseint-20&camp=14573&creative=327641&linkCode=as1&creativeASIN=0321200683&adid=1FD4YKBA2G6QMH71706H&

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Enterprise Integration Patterns

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Estrutura de um EAI PatternSplitter

Contexto:Um cenário para ser processado deve ser tratado como partes independentes que carregam informações íntrinsicas para o negócio

Problema:Como processamos uma mensagem que contêm várias informações distintas e cada informação é processada em um sistema ou forma diferente?

Solução:Usar um splitter para separar as informações de uma mensagem, e que envie cada parte da mensagem a seu respectivo sistema para processamento.

Consequências:Overhead no desempenho do processamento da mensagem original, splitter deve conhecer o contrato do emissor da mensagem para saber o que responder, acoplamento funcional do splitter com os sistema que executarão as partes da mensagem, mecanismos transacional centrado no splitter (All or Nothing)

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Conceitos de Programação Orientada a Mensagens e

MOMs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Programação Assíncrona

• Tradicional:– Requisita => Espera Resposta

• Assíncrona:– Requisita=>Não Espera => Após terminar o processamento

pode ser enviada uma resposta

• Cenário de Negócio:– Pagamento de Cartão de Crédito

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Mensagens – JMS (Java Message Services)M

• Poder de trocar informações de forma assíncrona• Publicação de Mensagens• Conceitos:

– Queue – 1 Mensagem 1 Interessado (ex: e-mail)Q– Topic – 1 Mensagem N Interessados (ex: mailing-list)T

• MOM - Message Oriented Middleware– WebSphere MQ

– SonicMQ

– ActiveMQ

– JBossMQ, NOVO JBoss Messaging

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss Messaging 2.0_alpha - Benchmark

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JMS

• Usado em larga escala em integrações e aplicações críticas, principalmente em bancos e grandes empresas.

• Meio comum de comunicação com legados (ex: Websphere MQ + COBOL)(

• JMS motivou bastante a indústria para criar uma centralização de Serviços, gerando o conceito de Barramento de Serviços ou ESB.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Enterprise Services Bus - ESB• Uma forma de intregar padrões de

comunicação, tranformação e roteamento entre serviços.

• ESB pode ser visto como um conjunto de componentes que interligam camadas de negócios com serviços de integração tais como:– Roteamento de Dados– Transformação de Dados– Transformação de Protocolos– Mapeamentos de Serviços de Nomes– Processamento de Mensagens– Gerenciamento de Transações– Coordenação da implementação de Serviços (Orchestration)C– Coordenação de Processos de Negócios (Choreography")C– Security management

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB

• Roteamento– Baseado em Conteúdo (CBR)B– Lista de Destinos (Static routing)L

• Orquestração– BPM - Business Process Management (jPDL)B– Web Services Orchestration (WS-BPEL)W

• Web services• Rules services• Transformation Services• EDA (Event-Driven Architecture)E

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Enterprise Service Bus

• Barramento de Serviços– Escutar os eventos dentro dos protocolos– Responder com Ações– As Ações podem chamar ou serem os serviços.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESB: Visão Tradicional

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Visão JBoss ESB

Governança SOA (RAS, APM, Regras, DSLs)G

Varios ESB's atuando em balanceamento ou clustering

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Necessidade de um ESB

• Você precisa de integração, mas precisa se focar no negócio e não como Java gerencia um socket ou as threads para ler um arquivo texto

• Você está participando de um projeto multi-departamental e ao longo prazo, e não, uma simples aplicação que acessa vários legados.

• Lembre-se: Foco

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Como a maioria dos ESB's funcionam

Um Serviço fica registrado

no ESB de alguma forma.

Um Serviço pode estar

associado a 1 oumais protocolos(ws,jms,ftp etc)(

Os Serviços Respondem A estimulos

dos protocolos

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Pasta X

JBoss ESB

DB

Cenários ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Instalando o JBoss ESB

• Realizando o Download do JBoss ESB Server • Realizando o Download do JBoss ESB• Baixando os Fontes do JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Instalando o JBoss ESB

• Realizando o Download do JBoss ESB Server • Realizando o Download do JBoss ESB• Baixando os Fontes do JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB Server

• http://www.jboss.org/jbossesb/downloads/ • Utilize o JBoss Esb Server <VERSAO>

– Forma mais simples de você utilizar o JBoss ESB, pois ele já traz o ESB embarcado dentro do JBoss App Server

– Instalação: •Descompacte o zip•Entre no diretórios jboss-as/bin•Digite ./run.sh para Unix OS ou run para Windows

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Instalando o JBoss ESB

• Realizando o Download do JBoss ESB Server • Realizando o Download do JBoss ESB• Baixando os Fontes do JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB

• Se você precisar instalar em um JBoss App Server, você vai executar um script ant para isto:

• Na pasta install leia o readme.txt

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Instalando o JBoss ESB

• Realizando o Download do JBoss ESB Server • Realizando o Download do JBoss ESB• Baixando os Fontes do JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB acesso ao SVN

• http://www.jboss.org/jbossesb/subversion.html• Cliente SVN• Comandos:

– svn co http://anonsvn.jboss.org/repos/labs/labs/jbossesb/

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

“ Run Forest, run...”

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Executando o JBoss ESB pela primeira vez

• <Jboss_ESB_Install_dir>/bin/run.sh

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Estrutura do JBoss ESB

• |-- bin (binário do App Server)|• |-- client (bibliotecas cliente)|• |-- docs (Documentações)|• |-- jar-versions.xml (Versões dos Jars)|• |-- javadocs• |-- lib • |-- samples (Exemplos diversos)|• |-- server (perfis do Jboss App Server)|

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

QuickStarts

• install_dir/samples/quickstarts– Inúmeros exemplos para cenários reais onde você pode

aplicar o uso de um ESB, no caso: JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESBGEN

• esbgen.sh – É basicamente uma simples ferramenta que cria um projeto

básico com suas bibliotecas requeridas, arquivos e scripts ants para compilação, deploy e teste.

• documentação/download:http://ankiewsky.blogspot.com/2008/10/esbgen-easy-way-to-create-jboss-esb.html

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Usando o esbgen

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

A primeira Aplicação JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Ingredientes de um Projeto ESB

• build.xml – Script ANT• jbm-queue-service.xml – Definição das filas JMS• deployment.xml – Ordem e dependência de

deployment• jboss-esb.xml – Definição dos Serviços ESB• jbossesb-properties.xml – Propriedades do Serviços• src – Códigos Java :)s

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Providers no JBoss ESB(protocolos de escuta de serviço)(

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Provider

• Do inglês:– Provider \Pro*vid"er\, n.

•One who provides, furnishes, or supplies; one who procures

•what is wanted.

• Evite confundir com a tradução “provedor”

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Providers no JBoss ESB

• São os “protocolos” onde os eventos de Integração podem acontecer

• Event-Driven Architecture– Arquitetura Dirigida por Eventos– Um modelo muito comum em arquiteturas SOA

• Eventos?– Copiar um TXT para uma pasta– Publicar uma mensagem num Queue JMS– Realizar a chamada de um Método de um WS

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB possui os seguintes providersProtocolos de Escuta

• JMSProvider

• FSProvider

• FTPProvider

• JBRProvider

• SQLProvider

• HibernateProvider

• JCAProvider

• BusProvider

• SchedulerProvider

Em todos estes providersInformações podem chegar.

Estas informações servem de subsídiospros serviços

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Clientes “ Aware” e “ Unaware” para o JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Na doc do JBoss ESB estes conceitos aparecem bastante

• As informações publicadas nos providers são tratadas como Mensagens

• Estas mensagens podem ser:

– ESB Aware – No formato que o JBoss ESB compreende

– ESB Unaware – Um cliente externo está publicando uma mensagem que ainda não é do formato que o ESB compreende

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESB Unaware

• São clientes que podem ser Java ou não:– Um ERP que gera um TXT numa pasta– Um cliente que envia um xml via FTP– Um cliente PHP que chama uma operação via HTTP

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESB Aware

• O JBoss ESB possui um formato para suas mensagens, uma vez esta mensagem dentro do barramento (pipeline), este formato se mantém conhecido e na mesma estrutura por toda sua execução.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESB Message/ SOAP Message<xs:complexType name="Envelope">

<xs:attribute ref="Header" use="required"/>

<xs:attribute ref="Context" use="required"/>

<xs:attribute ref="Body" use="required"/>

<xs:attribute ref="Attachment" use="optional"/>

<xs:attribute ref="Properties" use="optional"/>

<xs:attribute ref="Fault" use="optional"/>

</xs:complexType>

public interface Message

{

public Header getHeader ();

public Context getContext ();

public Body getBody ();

public Fault getFault ();

public Attachment getAttachment ();

public URI getType ();

public Properties getProperties ();

}

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss ESB Gateways

• São providers que vão servir de porta de entrada para clientes “Unaware”

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Gateways para ESB Message

Gateway

(recebe um dado)(

ESBAware

Mensagem padrão dentro do barramento

PHPClient

Cobol

.netClient

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Visualizando os Providers no jboss-esb.xml

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Declarando Serviços

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Declarando Serviços

<services>

<service category="Simples"

name="MySimpleService">

...

</service>

</services>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Declarando Listeners de Serviços

<listeners>

<jms-listener name="JMS-Gateway"

busidref="myesbprojectsimpleGwChannel" maxThreads="1" is-gateway="true" />

<jms-listener name="JMS-ESBAware"

busidref="myesbprojectsimpleEsbChannel" maxThreads="1" />

</listeners>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Declarando Actions do JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Declarando ESBActions

<actions mep="OneWay">

<action name="dump"

class="org.jboss.soa.esb.actions.SystemPrintln">

<property name="printfull" value="true" />

</action>

</actions>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Visualiazando a Árvore que forma um Serviço

• Há Providers• Há Serviços

– Que possuem Listeners– Estes Listeners escutam os Providers

•Quando algo acontece nos Providers– As Actions do Listeners são disparadas

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Actions “ Out-of-the-box” no JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Actions

• O JBoss ESB possui várias Actions prontas que respondem aos eventos que acontecem nos providers

• Estas Actions desempenham inúmeros papéis, entre eles:– Transformar conteúdos das Mensagens– Rotear a Mensagem pro destino apropriado– Capturar Informações e inserir num banco de Dados– Chamar outros Serviços de dentro do barramento

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ActionsVeja Programmers Guide (Pág 80 a 111)V

• Transformers & Converters

• ByteArrayToString

• LongToDateConverter

• ObjectInvoke

• ObjectToCSVString

• ObjectToXStream

• XStreamToObject

• SmooksTransformer

• SmooksAction

• XML, EDI, CSV e Input Payloads

• Java Input Payload

• Specifying the Result Type

• PersistAction Management

• jBPM BpmProcessor.

• GroovyActionProcessor

• EJBProcessor

• EIPs Actions

• EchoRoutr, HttpRouter JMSRouter

• ContentBasedRouter, StaticRouter, StaticWiretap

• Notifier

• SOAPProcessor

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Utilizando Actions do JBoss ESB

• Sempre consulte o catálogo de Action já prontas antes de começar uma do zero.

• Actions mais comuns:– Transformação– Roteamento– As que implementam os EIPs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Exemplo de Action de Transformação

• Smooks – Framework codehaus• org.jboss.soa.esb.smooks.SmooksAction

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Caso de Uso

• Transformar um arquivo TXT em XML • Conteúdo do Arquivo:

compras.edgarsilva.2812072359.txt

123131090903190931,45.43

098928938298193819,9.56

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Smooks em Ação<?xml version='1.0' encoding='UTF-8'?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">

<profiles> <profile base-profile="source-csv" /> <profile base-profile="canonical-xml" /> </profiles>

<resource-config target-profile="source-csv" selector="org.xml.sax.driver"> <resource>org.milyn.csv.CSVParser</resource> <param name="fields" type="string-list"> transacao,valor </param> </resource-config>

<resource-config target-profile="canonical-xml" selector="csv-set"> <resource type="xsl"> <![CDATA[<ROOT> <xsl:for-each select="csv-record"> <Transacao> <numero><xsl:value-of select="transacao"/></numero> <valor><xsl:value-of select="valor"/></valor> </Transacao> </xsl:for-each></ROOT> ]]> </resource> <param name="is-xslt-templatelet">true</param> </resource-config>

<!-- Popular Transacao --><resource-config selector="Transacao"> <resource>org.milyn.javabean.BeanPopulator</resource> <param name="beanId">transacao</param><param name="beanClass">bpmesb.Transacao</param> <param name="bindings"> <binding property="id" selector="Transacao/@numero" /> <binding property="valor" selector="Transacao/@valor" type="Double"/> </param> </resource-config>

</smooks-resource-list>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Ações SmooksAqui cai como CSV:<action class="org.jboss.soa.esb.smooks.SmooksAction" name="transform-from-csv"> <property name="smooksConfig" value="/smooks-res.xml"/> <property name="messageProfile" value="source-csv"/></action>

Depois Transforma para um XML estruturado<action class="org.jboss.soa.esb.smooks.SmooksAction" name="transform-to-xml"> <property name="smooksConfig" value="/smooks-res.xml"/> <property name="messageProfile" value="canonical-xml"/></action>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Actions Personalizadas

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Actions Personalizadas

• Implementar a interface:– org.jboss.soa.esb.actions.ActionPipelineProcessor

– org.jboss.soa.esb.actions.BeanConfiguredAction

• Para Ajudar a ler propriedades do Contexto do ESB

• Herdar da classe (mais comum e recomendável)H– org.jboss.soa.esb.actions.AbstractActionPipelineProcessor

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Regras para as Actions

• Ao herdarem de AbstractActionLifeCycle devem:– Receber um ConfigTree no Construtor– Ter um método que receba como parametro um ESB

Message e que o devolva alterado ou não como retorno deste método.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Exemplo de Actionimport org.jboss.soa.esb.actions.AbstractActionLifecycle;import org.jboss.soa.esb.helpers.ConfigTree;import org.jboss.soa.esb.message.Message;

public class WorkshopAction extends AbstractActionLifecycle {

ConfigTree tree;

public Workshop(ConfigTree t) {

tree = t; }

public Message execute(Message m) {

System.out.print("Action executada ...");

return m; }

}

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Laboratórios & Demos

Quickstarts

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Quickstarts

• helloworld_action• helloworld_db_registration• helloworld_file_action• helloworld_ftp_action• helloworld_hibernate_action• helloworld_sql_action

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Material de Documentação neste ponto

• JBoss ESB Programmers Guide– esb_install_dir/docs/ProgrammersGuide.pdf

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Lab 1Criando um Projeto ESB com esbgen

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Solução

• Configurar o esbgen e Apache ANT• Chamar o esbgen

– Confirmar a workspace– Informar o nome workshoplab1 no nome do projeto– Confirmar as outras sugestões do esbgen

• Entrar no diretório workshoplab1• Verificar se todos os arquivos foram gerados• Abrir o Eclipse e importar o Projeto para a

Workspace (lembre-se que a workspace será a pasta quickstarts)q

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Cont.

• Vá no esb_install_dir/bin/ e inicie o ESB server via o comando ./run.sh ou run

• Vá até o diretório workshoplab1 e digite run deploy

Objetivo do Lab: Fazer com que você tenha os primeiros contatos com o

Jboss ESB e com os artefatos que compoem um Projeto usando esta tecnologia.

Resultado : No final você deve ter visto a mensagem de deploy com sucesso do seu servico worshoplab1.esb

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Resumo da Solução - jboss-esb.xml<?xml version = "1.0" encoding = "UTF-8"?><jbossesbxmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"parameterReloadSecs="5">

<providers><jms-provider name="JBossMessaging" connection-factory="ConnectionFactory"> <jms-bus busid="workshoplab1GwChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/workshoplab1_GateWay" /> </jms-bus> <jms-bus busid="workshoplab1EsbChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/workshoplab1_ESB" /> </jms-bus>

</jms-provider>

</providers>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Resumo da Solução - jboss-esb.xml<services>

<service category="workshoplab1ESBService" name="workshoplab1ESBServiceListener" description="Service Sample">

<listeners>

<jms-listener name="JMS-Gateway" busidref="workshoplab1GwChannel" maxThreads="1" is-gateway="true" />

<jms-listener name="JMS-ESBListener" busidref="workshoplab1EsbChannel" maxThreads="1" />

</listeners>

<actions mep="OneWay">

<action name="dump" class="org.jboss.soa.esb.actions.SystemPrintln"> <property name="printfull" value="true" /> </action>

</actions></service></services>

</jbossesb>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Resumo da Solução - jboss-esb.xml

<services>

<service category="workshoplab1ESBService" name="workshoplab1ESBServiceListener" description="Service Sample">

<listeners>

<jms-listener name="JMS-Gateway" busidref="workshoplab1GwChannel" maxThreads="1" is-gateway="true" />

<jms-listener name="JMS-ESBListener" busidref="workshoplab1EsbChannel" maxThreads="1" />

</listeners>

<actions mep="OneWay">

<action name="dump" class="org.jboss.soa.esb.actions.SystemPrintln"> <property name="printfull" value="true" /> </action>

</actions></service></services>

</jbossesb>

<?xml version = "1.0" encoding = "UTF-8"?><jbossesbxmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"parameterReloadSecs="5">

<providers><jms-provider name="JBossMessaging" connection-factory="ConnectionFactory"> <jms-bus busid="workshoplab1GwChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/workshoplab1_GateWay" /> </jms-bus> <jms-bus busid="workshoplab1EsbChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/workshoplab1_ESB" /> </jms-bus>

</jms-provider>

</providers>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

jbm-queue-service.xml (Filas JMS)j<?xml version="1.0" encoding="UTF-8"?><server> <mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_GateWay" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute- name="ServerPeer">jboss.messaging:service=ServerPeer</depends><depends>jboss.messaging:service=PostOffice</depends>

</mbean>

<mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_ESB" xmbean-dd="xmdesc/Queue-xmbean.xml"> <depends optional-attribute- name="ServerPeer">jboss.messaging:service=ServerPeer</depends><depends>jboss.messaging:service=PostOffice</depends></mbean></server>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Criando uma Action

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WorkshopActionpackage org.demo.workshoplab1;

import org.jboss.soa.esb.actions.AbstractActionLifecycle;import org.jboss.soa.esb.helpers.ConfigTree;import org.jboss.soa.esb.message.Message;

public class WorkshopAction extends AbstractActionLifecycle {

protected ConfigTree configTree;

public WorkshopAction(ConfigTree t) { configTree = t;}

public Message processarAcaoDentroDoESB(Message m){ System.out.println("Passou no ESB e recebeu os dados"); return m;}

}

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Plugando a Action no Serviço do ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Plugando a Action ao Serviço <actions mep="OneWay"> <action class="org.jboss.soa.esb.actions.SystemPrintln" name="dump"> <property name="message"/> <property name="printfull" value="true"/> </action>

<action name="workshopAction" class="org.demo.workshoplab1.WorkshopAction" process="processarAcaoDentroDoESB"/>

</actions>

package org.demo.workshoplab1;...

public class WorkshopAction extends AbstractActionLifecycle {

public Message processarAcaoDentroDoESB(Message m){ System.out.println("Passou no ESB e recebeu os dados"); return m;}

}

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Entendendo o empacotamento .esb

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Empacotamento .esb

• No JBoss ESB, o(s) serviço(s) são “deployados” com a extensão .esb

• Um .esb é um Archive como um jar, war, ear mas assim como o sar, é especifico do JBoss Esb

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Estrutura do .esb

├───METAINF

│ ├───jbossesb.xml (descritor dos serviços)j

│ ├───deployment.xml (dependência de deployment)d

│ └───MANIFEST.MF

├───<java classes> (classes compiladas .class)<

├───<jars> (bibliotecas)<

└───<queueservice.xml> (Serviços JMS)<

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Actions baseadas em Annotations

• http://ankiewsky.blogspot.com/2008/09/posos-plain-old-services-objects-in.html

• Possível reaproveitar POJOs dentro do Barramento de Serviços

• DEMO

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Integração JBoss ESBcom o Drools

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools

http://www.jboss.org/drools/

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools

• Engine de Regras • Permite separar regras de negócios das outras

atividades.• Atualização “hot” de Regras.• BRMS – Business Rules Management System• JSR 094• DSL – Domain Specific Language• Guvnor

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools Guvnor

• Interface Web de Gerenciamento de Regras de Negócios Java

• Repositório de Regras• AtomPub, JCR, WebDav• Garante que as regras fiquem separadas dos códigos

de Infra-estrutura• http://www.jboss.org/community/docs/DOC-9834

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Importância para o ESB

• CBRs• Regras em Gerais para implementações de vários

EIPs• Validações• Permissões• Re/Encaminhamento de Processamento

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools Guvnor: Login

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: Tela Principal

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: “ Ativos” de Regras

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: “ Ativos” de Regras

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: Edição de Regras

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: Edição de DSLs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Drools: Repositórios

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Arquiteturas

JBoss ESB

Provider

Action

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Exemplo Droolstry { Properties props = new Properties(); props.load(OrderRunner.class.getResourceAsStream("Guvnor.properties")); RuleAgent agent = RuleAgent.newRuleAgent(props); RuleBase ruleBase = agent.getRuleBase(); WorkingMemory workingMemory = ruleBase.newStatefulSession();

Customer customer = new Customer(); customer.setFirstName("Edgar"); customer.setLastName("Silva"); customer.setStatus(9); OrderHeader order = new OrderHeader(); order.setOrderDiscount(0); order.setOrderPriority(1); order.setTax(17.2); workingMemory.insert(customer); workingMemory.insert(order);

System.out.println("See the Tax: " + order.getTax()); workingMemory.fireAllRules(); System.out.println("See the Discount: " + order.getOrderDiscount()); System.out.print("See the changed Tax: " + order.getTax()); } catch (Exception e) {System.out.println(e.getMessage());e.printStackTrace();}

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Guvnor.properties

url=http://192.168.161.1:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/org.acme.ordermanagement/LATEST#file=/opt/java/eclipse/workspace/fidelity/src/main/java/org.acme.fidelity.pkg

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESB & BPM

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Business Process Management - BPM

• Quando falamos de BPM em nível de serviços o sentido está em buscar uma forma de orquestrar o a ordem e o funcionamento dos serviços.

• Orquestração é uma capacidade muito importante para o desenho e execução de uma Arquitetura Orientada a Serviço

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Business Process Management

• Gerenciar Processos de Negócios em resumo:– Workflows– Gerenciar Estado+Informações– Representar Graficamente o Estado– Permitir extrair informações estatísticas a exemplo:

•Quantos Processos estão parados na “Análise de Crédito”

•Qual o nó do processo que mais demanda tempo•Quais usuários mais tem processos associados em

execução

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss jBPMArquitetura do Projeto

Abstração de qualquer linguagem de Processo

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBoss jBPM 3.2

• Permite Gerenciamento de Processos de Negócios de forma visual e via código(xml).

• Processos podem ser adicionados e ou removidos com a mesma facilidade de hotDeployments.

• Gerencia a Execução de Processos de Negócios.

• Eclipse jBPM Designer – Edição Visual de Processos

• Console Web de Processos

• jPDL – para BPM and workflow

• Suporte ao PVM (Novo)P

• Suporte a BPEL (WS-BPEL)S

• Gerenciamento de Estados / Tarefas

• Salva estados do processo em Banco de Dados

• Gerencia associação de usuários e grupos

• Multi-Banco de Dados (Hibernate)M

• Pode rodar dentro do JBoss AS ou fora, ou até mesmo em outros AS.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Boas soluções de BPM devem Possibilitar ...

Que uma pessoa não técnica possa criar modelos de negócio e mapas mentais sem auxilio da TI

Que o mesmo modelo criado possa inspirar a criação de um processo executável!

Padrões de coreofrafia, orquestração de serviços e gerenciamento de tarefas humanas para acomodar a execução dos processos.

A geração, extração e analise de métricas e indicadores que viabilizem a analise do processo e sua melhoria contínua.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Como o jBPM é visto Atualmente?

Bom!Excelente!

Excelente!Fraco!

Arquiteto Corporativo +Analista de Negócio

Integrador de Dados eServiços + Desenvolvedor

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Problemas das ferramentas de BPM

• Algumas muito boas no Desenho, porém fracas em Execução

• Outras muito boas mas somente em Execução e fracas no Desenho

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBpm: Opção #1 ao embarcar soluções de Workflow/BPM

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBpm: Casos de Uso

• Como motor de processos e aplicações• Exemplo de uso com Microsoft .net

JBoss jBPM (motor de processos)J

Camada de Serviços (WebServices)C

Cliente Asp.Net Cliente Desktop VB.Net

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

jBpm: Casos de Uso

• Como motor de Processos• Cliente habilitando SOA na sua empresa

JBoss jBPM (motor de processos)J

EJBs WebServices REST

Vários Clientes (Java, PHP, Delphi etc)V

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBpm : Framework

• Oferece um framework sofisticado para tratamento de processos de negócios e workflow

• Fácil aprendizado• Open-Source

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JBpm: Designer

• Plugins do Eclipse• Permite que o desenvolvedor traduza o desenho do

processo de quaquer linguagem para a notação do jBPM.

• Suporte a Interações Humanas• Suporte a Interações Sistemicas• Suporte a Eventos• Futuro: Exportador para BPMN/XPDL

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

jBpm: Designer

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

jBpm: Console• Ferramenta Web que permite:

– Visualizar os Processos Instalados e suas versões– Visualizar as instâncias em execução de cada

processo– Simular a execução dos Processos– Instalar novos processos– Controlar acessos de usuários aos processos– Mostrar gráficamente em que passo o processo

está parado– Permite personalização de cores, fontes, idiomas e

etc, proporcionando uma melhor experiência visual para os clientes.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

jBpm: Console

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Orquestrando Processos com jBPM no JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Camada: JBoss ESB

• 1. Service Orchestration• 2. Human Task Management

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JbpmAction : JBoss ESB

<action class="org.jboss.soa.esb.services.jbpm.actions.BpmProcessor"

name="$ActionJBPM">

<property name="command" value="StartProcessInstanceCommand" />

<property name="process-definition-name" value="$PROCESSO JBPM" />

<property name="key" value="body.businessKey" />

<property name="esbToBpmVars">

<mapping bpm="xml" esb="BODY_CONTENT" />

</property></action>

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JbpmAction : JBoss ESB

org.jboss.soa.esb.services.jbpm.actions.BpmProcessor

•Esta Action é responsável por gerenciar a execução dos processos do jBpm•Comandos Disponíveis:

– StartProcessInstanceCommand– SignalCommand– CancelProcessInstanceCommand

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Na camada do Jbpm: ESBNode

• Podemos desenhar os processos de negócios, onde um dos nós do processo pode ser exatamente a representação de um serviço.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

ESBService Node

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Quickstarts & Labs

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

QuickStarts

• bpm_orchestration1• bpm_orchestration2• bpm_orchestration3• bpm_orchestration4

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Documentação

• esb_install_dir/doc/Service Doc.pdf• Páginas 49 a 59

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Lab

Demonstração de BPM + ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices no JBoss ESB

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Valores da Solução

• Transporte– HTTP, SMTP, JMS

• Padronização de Dados– XML

• Soluções Leves podem ser usadas– XML sobre HTTP

• Padrões de Mercado : XML é a chave– WSDL : definição

– UDDI : registro– SOAP : Protocolo

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

SOAP

• Simple Object Access Protocol• Sucesso de Mercado há mais de 1 decada

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

De acordo com a W3C spec

• SOAP is a lightweight protocol for exchange of information in a decentralized, distributed environment. It is an XML based protocol that consists of three parts:– an envelope that defines a framework for describing what is

in a message and how to process it

– a set of encoding rules for expressing instances of application-defined datatypes

– a convention for representing remote procedure calls and responses.

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

JSR 181

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Anotações JSR 181

• @WebService– Faz com que uma classe Java “vire” um WS

• @WebMethod– Identifica um método do WS dentro da classe

• @SOAPBinding– Configura o modo SOAP de exposição

• @WebParam– Personaliza o mapeamento de um paremetro

• @WebReturn– Personaliza um mapeamento de retorno

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

Cont.

@WebService pode anotar uma classe ou interface

@WebMethod pode anotar um método

@WebParam pode anotar parametros

@WebResult pode anotar o retorno

@ Alguns direitos Reservadoshttp://www.edgarsilva.com.br

WebServices e o JBoss ESB

• InBound – Produtores de Serviços – Dentro do barramento– Exposição de Serviços via WebService

• Outbound – Consumidores de Serviços – Fora do barramento– Centralizadores de Serviços– Orquestração– Interoperabilidade .net por exemplo

Inboud WebServices

• O JBoss ESB pode ser seu repositório de Serviços• O JBoss ESB tem a capacidade de trafegar uma

Mensagem SOAP dentro do barramento de Serviço, convertendo-a para uma mensagem de conhecimento para os serviços do ESB.

Quickstart: webservice_producer

import javax.jws.WebService;import javax.jws.WebMethod;import javax.jws.Oneway;import javax.jws.WebParam;import org.jboss.soa.esb.message.Message;import org.jboss.soa.esb.actions.soap.SOAPProcessor;

@WebService(name = "GoodbyeWorldWS", targetNamespace="http://webservice_producer/goodbyeworld")// @SOAPBinding(style = SOAPBinding.Style.RPC)public class GoodbyeWorldWS {

@WebMethod public String sayGoodbye(@WebParam(name="message") String message) {

Message esbMessage = SOAPProcessor.getMessage();

if(esbMessage != null) { System.out.println("**** SOAPRequest perhaps mediated by ESB:\n" + esbMessage.getBody().get()); } System.out.println("Web Service Parameter - message=" + message); return "... Ah Goodbye then!!!! - " + message; }}

O JBoss ESB vai injetar esta mensagem neste ponto em nosso WebService, quando elefor chamado por um Gateway ou via um envelope SOAP

WebService e o WAR file com a JSR 118<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<servlet> <servlet-name>GoodbyeWorldWS</servlet-name> <servlet-class>meu.meupacote.GoodbyeWorldWS</servlet-class> </servlet>

<servlet-mapping> <servlet-name>GoodbyeWorldWS</servlet-name> <url-pattern>/GoodbyeWorldWS</url-pattern> </servlet-mapping>

</web-app>

Relação Classe Java com web.xmlimport javax.jws.WebService;import javax.jws.WebMethod;import javax.jws.Oneway;import javax.jws.WebParam;import org.jboss.soa.esb.message.Message;import org.jboss.soa.esb.actions.soap.SOAPProcessor;

@WebService(name = "GoodbyeWorldWS", targetNamespace="http://webservice_producer/goodbyeworld")// @SOAPBinding(style = SOAPBinding.Style.RPC)

public class GoodbyeWorldWS {

@WebMethod public String sayGoodbye(@WebParam(name="message") String message) {

Message esbMessage = SOAPProcessor.getMessage();

if(esbMessage != null) { System.out.println("**** SOAPRequest perhaps mediated by ESB:\n" + esbMessage.getBody().get()); } System.out.println("Web Service Parameter - message=" + message); return "... Ah Goodbye then!!!! - " + message; }}

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<servlet> <servlet-name>GoodbyeWorldWS</servlet-name> <servlet-class>meu.meupacote.GoodbyeWorldWS</servlet-class> </servlet>

<servlet-mapping> <servlet-name>GoodbyeWorldWS</servlet-name> <url-pattern>/GoodbyeWorldWS</url-pattern> </servlet-mapping>

</web-app>

Expondo o WebService como Serviçojboss-esb.xml

<action name="JBossWSAdapter"

class="org.jboss.soa.esb.actions.soap.SOAPProcessor">

<property name="jbossws-endpoint" value="GoodbyeWorldWS"/>

</action>

Visualizando o Contrato do WSDLhttp://localhost:8080/contract

Visualizando o Contrato do WSDLhttp://localhost:8080/contract

Testando com SoapUI

Saída no JBoss ESB

Volta no SoapUI

Funcionando no SoapUI :)

• Você pode provar que o seu serviço está aderente ao padrão WebServices

• Ponto de partida para interoperabilidade com outras plataformas

WebServices “ OutBound”

JBoss ESB colaborando com Serviços Externos

JBoss ESB

Evento Acontece....

Gateway passa a Mensagem para dentro do ESB

Action converte de TXT para XML

Mundo .net

WebService .net

Action Envoca umWebService

para completar dadosda Transação

para gerar o objeto Java

Action queSalva no

Banco de Dados

Questões importantes de observações

• Tipos complexos do mundo WebServices/XML

• Mecanismos de Segurança (NTLM, Kerberos etc)

• Federação de WebServices

Quickstart: webservice_consumer1

• Consome um WebService de dentro do JBoss ESB, mas poderia ser qualquer outro

Action SOAPClient

<action name="soapui-client-action"class="org.jboss.soa.esb.actions.soap.SOAPClient"><property name="wsdl" value="http://127.0.0.1:8080/ws/HelloWorldWS?wsdl" /> <property name="responseAsOgnlMap" value="true" /> <property name="SOAPAction" value="sayHello"/></action>

Conclusões

JBoss ESB

• Uma ótima solução que reúne o melhor dos dois mundos:– Código Aberto (opensource)

– Suporte de Fornecedor (Subscription)

– No Brasil :

• JBoss, a division of Red Hat

•Red Hat Brasil– 55 11 3529-6000

– http://www.br.redhat.com/jboss

Revisão de Aprendizado

• Você agora deve se sentir apto para:– Compreender e explicar as necessidades de um ESB/ Barramento de

Serviços

– Compreender os Conceitos de Eventos(EDA), e como responder via Serviços

– Instalar e executar o JBoss ESB

– Gateways, ESB Unaware e Aware Messages, Serviços, Listeners, Actions out-of-the-box e Actions personalizadas

– Uso do JBoss ESB com um engine de Regras

– Uso do JBoss ESB junto com um orquestrador como Jbpm

– Uso de JBoss ESB e WebServices

Outros Workshops SOA

• Consulte– SOAWorkShop – Educando profissionais SOA

•http://soaworkshop.wordpress.com

– SOA & JBoss ESB

– Breve: SOA & BPM

– Breve: SOA e Governança opensource