SlideShare uma empresa Scribd logo
@ Alguns direitos Reservados
http://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 Reservados
                        http://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 Reservados
                        http://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
    – Drools
      D




                      @ Alguns direitos Reservados
                      http://www.edgarsilva.com.br
Agenda

•   Visão Geral de Arquitetura Orientada a                       •     E
                                                                       Entendento o que são Providers (protocolos)
    Serviços                                                     •     Clientes ESB Unware e ESB Aware
•   WebServices: Até onde eles vão e quais suas                  •     Entendendo os Serviços e seus Listeners
    maiores limitações
                                                                 •     Compreendendo Actions do ESB
•   Visão geral dos Enterprise Integration Patterns
    - EIPs                                                       •     Actions out-of-the-box
•   Conceitos de Programação Orientada a                         •     Actions Personalizadas
    Mensagens e MOMs                                             •     Actions baseadas em Annotations
•   Visão geral de um Enterprise Service Bus
                                                                 •     Integrando o ESB a Serviços de Regras do
•   Apresentando o JBoss ESB
                                                                       Drools
•   Entendendo as distribuições do JBoss ESB
                                                                 •     Integrando o ESB a BPM com jBPM
•   Recompilando o JBoss ESB com base nos
    fontes do JBoss.ORG                                          •     Construindo consumidores e provedores de
                                                                       WebServices com JBoss ESB
•   Ferramentas embarcadas com o JBoss ESB
•   Executando os primeiros Exemplos do JBoss
    ESB                                  @ Alguns direitos Reservados
                                                 http://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 Reservados
                      http://www.edgarsilva.com.br
Visão Geral de
Arquitetura Orientada a Serviços
S
SOA (Service Oriented Architecture)




                             @ Alguns direitos Reservados
                             http://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 Reservados
                       http://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
    p
    princípios de qualidade(SLA por exemplo)




                         @ Alguns direitos Reservados
                         http://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 Reservados
                http://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 Reservados
                      http://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 Reservados
                       http://www.edgarsilva.com.br
Foco do Workshop

• ESB (Enterprise Service Bus)
  E
  – JBoss ESB




                      @ Alguns direitos Reservados
                      http://www.edgarsilva.com.br
WebServices:
Até onde eles vão e quais suas maiores limitações




              @ Alguns direitos Reservados
              http://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 Reservados
                     http://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 Reservados
                             http://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 Reservados
                         http://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 Reservados
                        http://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 Reservados
                      http://www.edgarsilva.com.br
Conclusão WebServices

• Grandes meios de ponto de exposição de
           E
  Serviços(Endpoints)
• Ótima solução de Interoperabilidade
• Padronizações para requisitos corporativos
  padronizadas pelo mercado (ex: WS-Security, WS-
  A
  Addressing, WS-Transactions etc)
• Apenas não tenha em mente que apenas de
  WebServices uma Arquitetura de Serviços sobrevive.

                     @ Alguns direitos Reservados
                     http://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 Reservados
                        http://www.edgarsilva.com.br
Visão Geral dos EIPs




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
EAI como Disciplina de SOA

                                                   • Necessidade de Integrações entre
                                                       sistemas:
                                                        – Enterprise Integrations
                                                           Patterns
                                                             • http://www.eaipatterns.com
                                                   • Estilos de Integração
                                                        – Transferência de Arquivos
                                                        – Banco de Dados
                                                           Compartilhado
Detalhes (Amazon):
                                                        – RPC
                                                        – Mensageria
http://www.amazon.com/dp/0321200683?tag=enterpriseint-20&camp=14573&creative=327641&linkCode=as1&cre




                                       @ Alguns direitos Reservados
                                       http://www.edgarsilva.com.br
Enterprise Integration Patterns




               @ Alguns direitos Reservados
               http://www.edgarsilva.com.br
Estrutura de um EAI Pattern
                   Splitter




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 Reservados
                                     http://www.edgarsilva.com.br
Conceitos de
Programação Orientada a Mensagens e
                              MOMs




           @ Alguns direitos Reservados
           http://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 Reservados
                        http://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 Reservados
                         http://www.edgarsilva.com.br
JBoss Messaging 2.0_alpha - Benchmark




                 @ Alguns direitos Reservados
                 http://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 Reservados
                     http://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 (Choreographyquot;)
        C
    –   Security management
                              @ Alguns direitos Reservados
                              http://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
•   E
    EDA (Event-Driven Architecture)

                         @ Alguns direitos Reservados
                         http://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 Reservados
                         http://www.edgarsilva.com.br
ESB: Visão Tradicional




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Visão JBoss ESB


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




                      @ Alguns direitos Reservados
                      http://www.edgarsilva.com.br

      Varios ESB's atuando em balanceamento ou clustering
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 Reservados
                      http://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 ou
                     mais protocolos
                      (
                      (ws,jms,ftp etc)

                                                      Os Serviços
                                                      Respondem
                                                      A estimulos
                                                     dos protocolos
                      @ Alguns direitos Reservados
                      http://www.edgarsilva.com.br
Cenários ESB


Pasta
 X




         JBoss ESB




        DB
             @ Alguns direitos Reservados
             http://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 Reservados
                    http://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 Reservados
                    http://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 Reservados
                         http://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 Reservados
                    http://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 Reservados
                      http://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 Reservados
                    http://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 Reservados
                         http://www.edgarsilva.com.br
“ Run Forest, run...”




                        @ Alguns direitos Reservados
                        http://www.edgarsilva.com.br
Executando o JBoss ESB pela primeira vez

• <Jboss_ESB_Install_dir>/bin/run.sh




                      @ Alguns direitos Reservados
                      http://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 Reservados
                         http://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 Reservados
                        http://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 Reservados
                                  http://www.edgarsilva.com.br
Usando o esbgen




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
A primeira Aplicação JBoss ESB




                 @ Alguns direitos Reservados
                 http://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 Reservados
                      http://www.edgarsilva.com.br
Providers no JBoss ESB
(
(protocolos de escuta de serviço)




                                    @ Alguns direitos Reservados
                                    http://www.edgarsilva.com.br
Provider

• Do inglês:
  – Provider Pro*vidquot;er, n.
     • One who provides, furnishes, or supplies; one who
       procures
     • what is wanted.
• Evite confundir com a tradução “ provedor”




                         @ Alguns direitos Reservados
                         http://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 Reservados
                       http://www.edgarsilva.com.br
JBoss ESB possui os seguintes providers
Protocolos de Escuta

• JMSProvider
• FSProvider
• FTPProvider                         Em todos estes providers
                                    Informações podem chegar.
• JBRProvider
                        Estas informações servem de subsídios
• SQLProvider                        pros serviços
• HibernateProvider
• JCAProvider
• BusProvider
• SchedulerProvider
                       @ Alguns direitos Reservados
                       http://www.edgarsilva.com.br
Clientes “ Aware” e “ Unaware” para
o JBoss ESB




                    @ Alguns direitos Reservados
                    http://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 Reservados
                        http://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 Reservados
                       http://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 Reservados
                     http://www.edgarsilva.com.br
ESB Message/ SOAP Message
                                                <xs:complexType name=quot;Envelopequot;>
public interface Message
                                                <xs:attribute ref=quot;Headerquot;
{
                                                   use=quot;requiredquot;/>
public Header getHeader ();
                                                <xs:attribute ref=quot;Contextquot;
public Context getContext ();                      use=quot;requiredquot;/>
public Body getBody ();                         <xs:attribute ref=quot;Bodyquot; use=quot;requiredquot;/>
public Fault getFault ();                       <xs:attribute ref=quot;Attachmentquot;
                                                   use=quot;optionalquot;/>
public Attachment getAttachment ();
                                                <xs:attribute ref=quot;Propertiesquot;
public URI getType ();
                                                   use=quot;optionalquot;/>
public Properties getProperties ();
                                                <xs:attribute ref=quot;Faultquot;
}                                                  use=quot;optionalquot;/>
                                                </xs:complexType>




                                  @ Alguns direitos Reservados
                                  http://www.edgarsilva.com.br
JBoss ESB Gateways

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




                      @ Alguns direitos Reservados
                      http://www.edgarsilva.com.br
Gateways para ESB Message

 PHP
 Client



 Cobol      Gateway                                                 ESB
                                                                    Aware
           (
           (recebe um dado)                           Mensagem padrão dentro do barramento




  .net
 Client
                       @ Alguns direitos Reservados
                       http://www.edgarsilva.com.br
Visualizando os
Providers no jboss-esb.xml




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Declarando Serviços




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
Declarando Serviços

<services>
  <service category=quot;Simplesquot;
           name=quot;MySimpleServicequot;>
     ...
   </service>
</services>




                    @ Alguns direitos Reservados
                    http://www.edgarsilva.com.br
Declarando Listeners de Serviços

<listeners>
  <jms-listener name=quot;JMS-Gatewayquot;
              busidref=quot;myesbprojectsimpleGwChannelquot;
              maxThreads=quot;1quot; is-gateway=quot;truequot; />
  <jms-listener name=quot;JMS-ESBAwarequot;
              busidref=quot;myesbprojectsimpleEsbChannelquot;
              maxThreads=quot;1quot; />
</listeners>




                        @ Alguns direitos Reservados
                        http://www.edgarsilva.com.br
Declarando Actions do
JBoss ESB




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
Declarando ESBActions

<actions mep=quot;OneWayquot;>

 <action name=quot;dumpquot;
 class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;>
 <property name=quot;printfullquot; value=quot;truequot; />
 </action>

</actions>


                    @ Alguns direitos Reservados
                    http://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 Reservados
                           http://www.edgarsilva.com.br
Actions “ Out-of-the-box” no
JBoss ESB




                   @ Alguns direitos Reservados
                   http://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 Reservados
                        http://www.edgarsilva.com.br
Actions
V
Veja Programmers Guide (Pág 80 a 111)


•   Transformers & Converters                           •     PersistAction Management
•   ByteArrayToString                                   •     jBPM BpmProcessor.
•   LongToDateConverter                                 •     GroovyActionProcessor
•   ObjectInvoke                                        •     EJBProcessor
•   ObjectToCSVString                                   •     EIPs Actions
•   ObjectToXStream                                     •     EchoRoutr, HttpRouter JMSRouter
•   XStreamToObject                                     •     ContentBasedRouter, StaticRouter, StaticWiretap
•   SmooksTransformer                                   •     Notifier
•   SmooksAction                                        •     SOAPProcessor
•   XML, EDI, CSV e Input Payloads
•   Java Input Payload
•   Specifying the Result Type




                                        @ Alguns direitos Reservados
                                        http://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 Reservados
                       http://www.edgarsilva.com.br
Exemplo de Action de Transformação

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




                          @ Alguns direitos Reservados
                          http://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 Reservados
                     http://www.edgarsilva.com.br
Smooks em Ação
<?xml version='1.0' encoding='UTF-8'?>
<smooks-resource-list xmlns=quot;http://www.milyn.org/xsd/smooks-1.0.xsdquot;>
   <profiles>
       <profile base-profile=quot;source-csvquot; />
       <profile base-profile=quot;canonical-xmlquot; />
   </profiles>
   <resource-config target-profile=quot;source-csvquot; selector=quot;org.xml.sax.driverquot;>
       <resource>org.milyn.csv.CSVParser</resource>
       <param name=quot;fieldsquot; type=quot;string-listquot;>
            transacao,valor
       </param>
   </resource-config>
<resource-config target-profile=quot;canonical-xmlquot; selector=quot;csv-setquot;>
        <resource type=quot;xslquot;>
            <![CDATA[
<ROOT>
                <xsl:for-each select=quot;csv-recordquot;>
                    <Transacao>
                       <numero><xsl:value-of select=quot;transacaoquot;/></numero>
                       <valor><xsl:value-of select=quot;valorquot;/></valor>
                    </Transacao>
                 </xsl:for-each>
</ROOT>
            ]]>
        </resource>
        <param name=quot;is-xslt-templateletquot;>true</param>
        </resource-config>
    <!-- Popular Transacao -->
<resource-config selector=quot;Transacaoquot;>
        <resource>org.milyn.javabean.BeanPopulator</resource>
        <param name=quot;beanIdquot;>transacao</param>
<param name=quot;beanClassquot;>bpmesb.Transacao</param>
        <param name=quot;bindingsquot;>
            <binding property=quot;idquot; selector=quot;Transacao/@numeroquot; />
            <binding property=quot;valorquot; selector=quot;Transacao/@valorquot; type=quot;Doublequot;/>
        </param>
    </resource-config>
</smooks-resource-list>
                                                  @ Alguns direitos Reservados
                                                  http://www.edgarsilva.com.br
Ações Smooks
Aqui cai como CSV:
<action
   class=quot;org.jboss.soa.esb.smooks.SmooksActionquot;
   name=quot;transform-from-csvquot;>
     <property name=quot;smooksConfigquot; value=quot;/smooks-res.xmlquot;/>
     <property name=quot;messageProfilequot; value=quot;source-csvquot;/>
</action>

Depois Transforma para um XML estruturado
<action
    class=quot;org.jboss.soa.esb.smooks.SmooksActionquot;
    name=quot;transform-to-xmlquot;>
     <property name=quot;smooksConfigquot; value=quot;/smooks-res.xmlquot;/>
     <property name=quot;messageProfilequot; value=quot;canonical-xmlquot;/>
</action>




                             @ Alguns direitos Reservados
                             http://www.edgarsilva.com.br
Actions Personalizadas




                 @ Alguns direitos Reservados
                 http://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 Reservados
                            http://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 Reservados
                        http://www.edgarsilva.com.br
Exemplo de Action
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 {

    ConfigTree tree;

    public Workshop(ConfigTree t) {

        tree = t;
    }

    public Message execute(Message m) {

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

         return m;
     }

}
                                 @ Alguns direitos Reservados
                                 http://www.edgarsilva.com.br
Laboratórios & Demos

Quickstarts




                @ Alguns direitos Reservados
                http://www.edgarsilva.com.br
Quickstarts

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



                       @ Alguns direitos Reservados
                       http://www.edgarsilva.com.br
Material de Documentação neste ponto

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




                        @ Alguns direitos Reservados
                        http://www.edgarsilva.com.br
Lab 1
Criando um Projeto ESB com esbgen




                @ Alguns direitos Reservados
                http://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
  q
  quickstarts)
                        @ Alguns direitos Reservados
                        http://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 Reservados
                          http://www.edgarsilva.com.br
Resumo da Solução - jboss-esb.xml
 <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?>
 <jbossesb
 xmlns=quot;http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbosse
 sb-1.0.1.xsdquot;
 parameterReloadSecs=quot;5quot;>

 <providers>
 <jms-provider name=quot;JBossMessagingquot; connection-factory=quot;ConnectionFactoryquot;>
   <jms-bus busid=quot;workshoplab1GwChannelquot;>
      <jms-message-filter dest-type=quot;QUEUEquot; dest-name=quot;queue/workshoplab1_GateWayquot; />
   </jms-bus>
   <jms-bus busid=quot;workshoplab1EsbChannelquot;>
      <jms-message-filter dest-type=quot;QUEUEquot; dest-name=quot;queue/workshoplab1_ESBquot; />
    </jms-bus>

 </jms-provider>

 </providers>




                                     @ Alguns direitos Reservados
                                     http://www.edgarsilva.com.br
Resumo da Solução - jboss-esb.xml
 <services>

 <service category=quot;workshoplab1ESBServicequot; name=quot;workshoplab1ESBServiceListenerquot;
 description=quot;Service Samplequot;>

 <listeners>

    <jms-listener name=quot;JMS-Gatewayquot;
                  busidref=quot;workshoplab1GwChannelquot; maxThreads=quot;1quot;
                  is-gateway=quot;truequot; />

    <jms-listener name=quot;JMS-ESBListenerquot;
                  busidref=quot;workshoplab1EsbChannelquot; maxThreads=quot;1quot; />

 </listeners>

 <actions mep=quot;OneWayquot;>

   <action name=quot;dumpquot; class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;>
           <property name=quot;printfullquot; value=quot;truequot; />
   </action>

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

 </jbossesb>


                                       @ Alguns direitos Reservados
                                       http://www.edgarsilva.com.br
Resumo da Solução - jboss-esb.xml
 <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?>
 <jbossesb
 xmlns=quot;http://anonsvn.labs.jboss.com/labs/jbossesb/tr
 unk/product/etc/schemas/xml/jbossesb-1.0.1.xsdquot;
 parameterReloadSecs=quot;5quot;>

 <providers>
 <jms-provider name=quot;JBossMessagingquot; connection-
 factory=quot;ConnectionFactoryquot;>
   <jms-bus busid=quot;workshoplab1GwChannelquot;>
      <jms-message-filter dest-type=quot;QUEUEquot; dest-
 name=quot;queue/workshoplab1_GateWayquot; />
   </jms-bus>
   <jms-bus busid=quot;workshoplab1EsbChannelquot;>
      <jms-message-filter dest-type=quot;QUEUEquot; dest-
 name=quot;queue/workshoplab1_ESBquot; />                        <services>
    </jms-bus>
                                                         <service category=quot;workshoplab1ESBServicequot; name=quot;workshoplab1ESBServiceListenerquot;
 </jms-provider>                                         description=quot;Service Samplequot;>
 </providers>                                            <listeners>

                                                             <jms-listener name=quot;JMS-Gatewayquot;
                                                                           busidref=quot;workshoplab1GwChannelquot; maxThreads=quot;1quot;
                                                                           is-gateway=quot;truequot; />

                                                             <jms-listener name=quot;JMS-ESBListenerquot;
                                                                           busidref=quot;workshoplab1EsbChannelquot; maxThreads=quot;1quot; />

                                                         </listeners>

                                                         <actions mep=quot;OneWayquot;>

                                                            <action name=quot;dumpquot; class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;>
                                                                    <property name=quot;printfullquot; value=quot;truequot; />
                                                            </action>

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

                                                         </jbossesb>




                                                          @ Alguns direitos Reservados
                                                          http://www.edgarsilva.com.br
jbm-queue-service.xml (Filas JMS)
j
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<server>
  <mbean code=quot;org.jboss.jms.server.destination.QueueServicequot;
    name=quot;jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_GateWayquot;
    xmbean-dd=quot;xmdesc/Queue-xmbean.xmlquot;>
    <depends optional-attribute-
name=quot;ServerPeerquot;>jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>

  </mbean>

<mbean code=quot;org.jboss.jms.server.destination.QueueServicequot;
    name=quot;jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_ESBquot;
    xmbean-dd=quot;xmdesc/Queue-xmbean.xmlquot;>
    <depends optional-attribute-
name=quot;ServerPeerquot;>jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
</server>




                                    @ Alguns direitos Reservados
                                    http://www.edgarsilva.com.br
Criando uma Action




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
WorkshopAction
package 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(quot;Passou no ESB e recebeu os dadosquot;);
   return m;
}
}




                                  @ Alguns direitos Reservados
                                  http://www.edgarsilva.com.br
Plugando a Action no Serviço do ESB




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
Plugando a Action ao Serviço
 <actions mep=quot;OneWayquot;>
   <action class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot; name=quot;dumpquot;>
    <property name=quot;messagequot;/>
    <property name=quot;printfullquot; value=quot;truequot;/>
   </action>

   <action name=quot;workshopActionquot;
           class=quot;org.demo.workshoplab1.WorkshopActionquot;
           process=quot;processarAcaoDentroDoESBquot;/>

  </actions>




                package org.demo.workshoplab1;
                ...

                public class WorkshopAction extends AbstractActionLifecycle {

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

                }               @ Alguns direitos Reservados
                                http://www.edgarsilva.com.br
Entendendo o empacotamento .esb




                @ Alguns direitos Reservados
                http://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 Reservados
                      http://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 Reservados
                      http://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 Reservados
                                   http://www.edgarsilva.com.br
Integração
JBoss ESB
com o Drools




               @ Alguns direitos Reservados
               http://www.edgarsilva.com.br
Drools
http://www.jboss.org/drools/




                  @ Alguns direitos Reservados
                  http://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 Reservados
                     http://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 Reservados
                     http://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 Reservados
                     http://www.edgarsilva.com.br
Drools Guvnor: Login




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
Drools: Tela Principal




                   @ Alguns direitos Reservados
                   http://www.edgarsilva.com.br
Drools: “ Ativos” de Regras




                    @ Alguns direitos Reservados
                    http://www.edgarsilva.com.br
Drools: “ Ativos” de Regras




                    @ Alguns direitos Reservados
                    http://www.edgarsilva.com.br
Drools: Edição de Regras




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Drools: Edição de DSLs




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Drools: Repositórios




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Arquiteturas


 Provider




            JBoss ESB




                   Action


                            @ Alguns direitos Reservados
                            http://www.edgarsilva.com.br
Exemplo Drools
try {
     Properties props = new Properties();
     props.load(OrderRunner.class.getResourceAsStream(quot;Guvnor.propertiesquot;));
     RuleAgent agent = RuleAgent.newRuleAgent(props);
     RuleBase ruleBase = agent.getRuleBase();
     WorkingMemory workingMemory = ruleBase.newStatefulSession();
                Customer customer = new Customer();
                customer.setFirstName(quot;Edgarquot;);
                customer.setLastName(quot;Silvaquot;);
                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(quot;See the Tax: quot; + order.getTax());
     workingMemory.fireAllRules();
     System.out.println(quot;See the Discount: quot; + order.getOrderDiscount());
     System.out.print(quot;See the changed Tax: quot; + order.getTax());


} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
                                       @ Alguns direitos Reservados
                                       http://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 Reservados
                          http://www.edgarsilva.com.br
ESB & BPM




            @ Alguns direitos Reservados
            http://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 Reservados
                      http://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 Reservados
                        http://www.edgarsilva.com.br
JBoss jBPM
Arquitetura do Projeto




Abstração de qualquer linguagem de Processo



                              @ Alguns direitos Reservados
                              http://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)Alguns direitos Reservados
  M                             @
                                http://www.edgarsilva.com.br

• Pode rodar dentro do JBoss AS ou fora, ou até mesmo em outros AS.
Boas soluções de BPM devem Possibilitar ...
 Que uma pessoa não
 técnica possa criar                                    Que o mesmo modelo
 modelos de negócio e                                   criado possa inspirar a
 mapas mentais sem                                      criação de um
 auxilio da TI                                          processo executável!




                                                          Padrões de coreofrafia,
                                                          orquestração de serviços
 A geração, extração e                                    e gerenciamento de
 analise de métricas e                                    tarefas humanas para
 indicadores que                                          acomodar a execução
 viabilizem a analise                                     dos processos.
 do processo e sua
 melhoria contínua.


                         @ Alguns direitos Reservados
                         http://www.edgarsilva.com.br
Como o jBPM é visto Atualmente?

                                                              Excelente!
                Bom!




Arquiteto Corporativo +
Analista de Negócio
                                                                    Integrador de Dados e
                                                                   Serviços + Desenvolvedor

                      Fraco!                                  Excelente!




                               @ Alguns direitos Reservados
                               http://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 Reservados
                    http://www.edgarsilva.com.br
JBpm: Opção #1 ao embarcar soluções de
Workflow/BPM




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
JBpm: Casos de Uso

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



      Cliente Asp.Net                      Cliente Desktop VB.Net


       C
       Camada de Serviços (WebServices)

        J
        JBoss jBPM (motor de processos)
                        @ Alguns direitos Reservados
                        http://www.edgarsilva.com.br
jBpm: Casos de Uso

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


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

      EJBs          WebServices                      REST



        J
        JBoss jBPM (motor de processos)
                      @ Alguns direitos Reservados
                      http://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 Reservados
                      http://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 Reservados
                      http://www.edgarsilva.com.br
jBpm: Designer




                 @ Alguns direitos Reservados
                 http://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 Reservados
                        http://www.edgarsilva.com.br
jBpm: Console




                @ Alguns direitos Reservados
                http://www.edgarsilva.com.br
Orquestrando Processos com jBPM
no JBoss ESB




                @ Alguns direitos Reservados
                http://www.edgarsilva.com.br
Camada: JBoss ESB

• 1. Service Orchestration
• 2. Human Task Management




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
JbpmAction : JBoss ESB
<action
     class=quot;org.jboss.soa.esb.services.jbpm.actions.BpmProcessorquot;

    name=quot;$ActionJBPMquot;>

       <property name=quot;commandquot; value=quot;StartProcessInstanceCommandquot; />

       <property name=quot;process-definition-namequot; value=quot;$PROCESSO JBPMquot; />

       <property name=quot;keyquot; value=quot;body.businessKeyquot; />

       <property name=quot;esbToBpmVarsquot;>

            <mapping bpm=quot;xmlquot; esb=quot;BODY_CONTENTquot; />

        </property>
</action>




                                 @ Alguns direitos Reservados
                                 http://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 Reservados
                      http://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 Reservados
                     http://www.edgarsilva.com.br
ESBService Node




                  @ Alguns direitos Reservados
                  http://www.edgarsilva.com.br
Quickstarts & Labs




                 @ Alguns direitos Reservados
                 http://www.edgarsilva.com.br
QuickStarts

• bpm_orchestration1
• bpm_orchestration2
• bpm_orchestration3
• bpm_orchestration4




                       @ Alguns direitos Reservados
                       http://www.edgarsilva.com.br
Documentação

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




                       @ Alguns direitos Reservados
                       http://www.edgarsilva.com.br
Lab

Demonstração de BPM + ESB




                @ Alguns direitos Reservados
                http://www.edgarsilva.com.br
WebServices no JBoss ESB




                @ Alguns direitos Reservados
                http://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 Reservados
                          http://www.edgarsilva.com.br
SOAP

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




                      @ Alguns direitos Reservados
                      http://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 Reservados
                          http://www.edgarsilva.com.br
JSR 181




          @ Alguns direitos Reservados
          http://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
                        @ Alguns direitos Reservados


  – Personaliza um mapeamento de retorno
                        http://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 Reservados
                     http://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

                         @ Alguns direitos Reservados
                         http://www.edgarsilva.com.br
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;                                              O JBoss ESB vai injetar
import   org.jboss.soa.esb.message.Message;                               esta mensagem neste
import   org.jboss.soa.esb.actions.soap.SOAPProcessor;                    ponto em nosso
                                                                          WebService, quando ele
@WebService(name = quot;GoodbyeWorldWSquot;,                                      for chamado por um
                                                                          Gateway ou via um
targetNamespace=quot;http://webservice_producer/goodbyeworldquot;)
                                                                          envelope SOAP
// @SOAPBinding(style = SOAPBinding.Style.RPC)
public class GoodbyeWorldWS {

   @WebMethod
   public String sayGoodbye(@WebParam(name=quot;messagequot;) String message) {

         Message esbMessage = SOAPProcessor.getMessage();

        if(esbMessage != null) {
            System.out.println(quot;**** SOAPRequest perhaps mediated by ESB:nquot; +
esbMessage.getBody().get());
        }
        System.out.println(quot;Web Service Parameter - message=quot; + message);
        return quot;... Ah Goodbye then!!!! - quot; + message;
    }
}
WebService e o WAR file com a JSR 118
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>


<web-app xmlns=quot;http://java.sun.com/xml/ns/j2eequot;
xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot;
         xsi:schemaLocation=quot;http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdquot;
         version=quot;2.4quot;>

   <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.xml
                                                                                  <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
import   javax.jws.WebService;
import   javax.jws.WebMethod;
import   javax.jws.Oneway;
import   javax.jws.WebParam;
import   org.jboss.soa.esb.message.Message;                                       <web-app xmlns=quot;http://java.sun.com/xml/ns/j2ee
import   org.jboss.soa.esb.actions.soap.SOAPProcessor;                            instancequot;
@WebService(name = quot;GoodbyeWorldWSquot;,                                                       xsi:schemaLocation=quot;http://java.sun.co
targetNamespace=quot;http://webservice_producer/goodbyeworldquot;)                        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
// @SOAPBinding(style = SOAPBinding.Style.RPC)
                                                                                           version=quot;2.4quot;>
public class GoodbyeWorldWS {

    @WebMethod                                                                       <servlet>
    public String sayGoodbye(@WebParam(name=quot;messagequot;)
      String message) {
                                                                                         <servlet-name>GoodbyeWorldWS</servlet-n
                                                                                         <servlet-class>meu.meupacote.GoodbyeWor
         Message esbMessage = SOAPProcessor.getMessage();                            </servlet>
         if(esbMessage != null) {
             System.out.println(quot;**** SOAPRequest perhaps mediated by ESB:nquot; +
               esbMessage.getBody().get());
                                                                                     <servlet-mapping>
         }                                                                               <servlet-name>GoodbyeWorldWS</servlet-n
         System.out.println(quot;Web Service Parameter - message=quot; + message);
         return quot;... Ah Goodbye then!!!! - quot; + message;
                                                                                         <url-pattern>/GoodbyeWorldWS</url-patte
    }                                                                                </servlet-mapping>
}

                                                                                  </web-app>
Expondo o WebService como Serviço
jboss-esb.xml
 <action name=quot;JBossWSAdapterquot;

 class=quot;org.jboss.soa.esb.actions.soap.SOAPProcessorquot;>

  <property name=quot;jbossws-endpointquot; value=quot;GoodbyeWorldWSquot;/>

 </action>
Visualizando o Contrato do WSDL
http://localhost:8080/contract
Visualizando o Contrato do WSDL
http://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

    Evento Acontece....


                                                    Gateway passa a Mensagem para dentro do ESB




                                           JBoss ESB



                  Action converte de TXT         Action Envoca um
                         para XML                   WebService                         Action que
                                               para completar dados                     Salva no
                                                   da Transação                      Banco de Dados
                                              para gerar o objeto Java
Mundo .net



                                                 WebService .net
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=quot;soapui-client-actionquot;
class=quot;org.jboss.soa.esb.actions.soap.SOAPClientquot;>
<property name=quot;wsdlquot;
       value=quot;http://127.0.0.1:8080/ws/HelloWorldWS?wsdlquot; />
         <property name=quot;responseAsOgnlMapquot; value=quot;truequot; />
         <property name=quot;SOAPActionquot; value=quot;sayHelloquot;/>
</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

Mais conteúdo relacionado

Semelhante a SOA Workshop - JBoss ESB v1.1

Apresentação sobre web 2.0
Apresentação sobre web 2.0Apresentação sobre web 2.0
Apresentação sobre web 2.0
Carlos Serrao
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web Services
Fabio Leal
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e Suportes
Edgar Silva
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Tiago Marchetti Dolphine
 
A Semântica do HTML5: a web 3.0
A Semântica do HTML5: a web 3.0A Semântica do HTML5: a web 3.0
A Semântica do HTML5: a web 3.0
Campus Party Brasil
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
Diego Pacheco
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
Igor Takenami
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application Insights
Renato Groff
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Giovanni Bassi
 
Soa conceitos
Soa conceitosSoa conceitos
Soa conceitos
João Abussamra Neto
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
Giovanni Bassi
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
Rildo (@rildosan) Santos
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Éberli Cabistani Riella
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
Cloves Moreira Junior
 
ESB TOTVS - Integração de Sistemas
ESB TOTVS - Integração de SistemasESB TOTVS - Integração de Sistemas
ESB TOTVS - Integração de Sistemas
BRAVA Tecnologia
 

Semelhante a SOA Workshop - JBoss ESB v1.1 (20)

Apresentação sobre web 2.0
Apresentação sobre web 2.0Apresentação sobre web 2.0
Apresentação sobre web 2.0
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web Services
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e Suportes
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
A Semântica do HTML5: a web 3.0
A Semântica do HTML5: a web 3.0A Semântica do HTML5: a web 3.0
A Semântica do HTML5: a web 3.0
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application Insights
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)
 
Soa conceitos
Soa conceitosSoa conceitos
Soa conceitos
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
 
ESB TOTVS - Integração de Sistemas
ESB TOTVS - Integração de SistemasESB TOTVS - Integração de Sistemas
ESB TOTVS - Integração de Sistemas
 

Mais de Edgar Silva

API Methodology by Skalena
API Methodology by SkalenaAPI Methodology by Skalena
API Methodology by Skalena
Edgar Silva
 
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Edgar Silva
 
Skalena - Finance Business Unit
Skalena - Finance Business UnitSkalena - Finance Business Unit
Skalena - Finance Business Unit
Edgar Silva
 
Plataforma de Consentimento (LGDP) Skalena
Plataforma de Consentimento (LGDP) SkalenaPlataforma de Consentimento (LGDP) Skalena
Plataforma de Consentimento (LGDP) Skalena
Edgar Silva
 
Casos de Sucesso WSO2 no Governo Brasileiro
Casos de Sucesso WSO2 no Governo BrasileiroCasos de Sucesso WSO2 no Governo Brasileiro
Casos de Sucesso WSO2 no Governo Brasileiro
Edgar Silva
 
DevOps Tour SP 2019
DevOps Tour SP 2019DevOps Tour SP 2019
DevOps Tour SP 2019
Edgar Silva
 
Skalena - Overview de Soluções
Skalena - Overview de Soluções Skalena - Overview de Soluções
Skalena - Overview de Soluções
Edgar Silva
 
WSO2 Governance Registry 5.4.0 - Overview
WSO2 Governance Registry 5.4.0 - OverviewWSO2 Governance Registry 5.4.0 - Overview
WSO2 Governance Registry 5.4.0 - Overview
Edgar Silva
 
WSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
WSO2 Enterprise Integrator 6.1 - Integração na Era da TransformaçãoWSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
WSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
Edgar Silva
 
Transformação Digital de Forma Pragmatica WSO2
Transformação Digital de Forma Pragmatica WSO2Transformação Digital de Forma Pragmatica WSO2
Transformação Digital de Forma Pragmatica WSO2
Edgar Silva
 
WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017
Edgar Silva
 
WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview
Edgar Silva
 
Workshop WSO2 BPS 3.5.x - BPMN
Workshop WSO2 BPS 3.5.x - BPMN Workshop WSO2 BPS 3.5.x - BPMN
Workshop WSO2 BPS 3.5.x - BPMN
Edgar Silva
 
WSO2 Telco MCX
WSO2 Telco MCXWSO2 Telco MCX
WSO2 Telco MCX
Edgar Silva
 
Workshop MSF4J - Getting Started with Microservices and Java
Workshop MSF4J - Getting Started with Microservices and JavaWorkshop MSF4J - Getting Started with Microservices and Java
Workshop MSF4J - Getting Started with Microservices and Java
Edgar Silva
 
WSO2 API Manager : Going beyond the just API Management
WSO2 API Manager : Going beyond the just API ManagementWSO2 API Manager : Going beyond the just API Management
WSO2 API Manager : Going beyond the just API Management
Edgar Silva
 
Workshop/Tutorial WSO2 Micro Services Server
Workshop/Tutorial WSO2 Micro Services ServerWorkshop/Tutorial WSO2 Micro Services Server
Workshop/Tutorial WSO2 Micro Services Server
Edgar Silva
 
WSO2 Micro Services Server - Basic Workshop Part 1
WSO2 Micro Services Server - Basic Workshop Part 1WSO2 Micro Services Server - Basic Workshop Part 1
WSO2 Micro Services Server - Basic Workshop Part 1
Edgar Silva
 
Conectando Turismo e Viagens - Plataforma WSO2
Conectando Turismo e Viagens - Plataforma WSO2Conectando Turismo e Viagens - Plataforma WSO2
Conectando Turismo e Viagens - Plataforma WSO2
Edgar Silva
 
WSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao TomcatWSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao Tomcat
Edgar Silva
 

Mais de Edgar Silva (20)

API Methodology by Skalena
API Methodology by SkalenaAPI Methodology by Skalena
API Methodology by Skalena
 
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
 
Skalena - Finance Business Unit
Skalena - Finance Business UnitSkalena - Finance Business Unit
Skalena - Finance Business Unit
 
Plataforma de Consentimento (LGDP) Skalena
Plataforma de Consentimento (LGDP) SkalenaPlataforma de Consentimento (LGDP) Skalena
Plataforma de Consentimento (LGDP) Skalena
 
Casos de Sucesso WSO2 no Governo Brasileiro
Casos de Sucesso WSO2 no Governo BrasileiroCasos de Sucesso WSO2 no Governo Brasileiro
Casos de Sucesso WSO2 no Governo Brasileiro
 
DevOps Tour SP 2019
DevOps Tour SP 2019DevOps Tour SP 2019
DevOps Tour SP 2019
 
Skalena - Overview de Soluções
Skalena - Overview de Soluções Skalena - Overview de Soluções
Skalena - Overview de Soluções
 
WSO2 Governance Registry 5.4.0 - Overview
WSO2 Governance Registry 5.4.0 - OverviewWSO2 Governance Registry 5.4.0 - Overview
WSO2 Governance Registry 5.4.0 - Overview
 
WSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
WSO2 Enterprise Integrator 6.1 - Integração na Era da TransformaçãoWSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
WSO2 Enterprise Integrator 6.1 - Integração na Era da Transformação
 
Transformação Digital de Forma Pragmatica WSO2
Transformação Digital de Forma Pragmatica WSO2Transformação Digital de Forma Pragmatica WSO2
Transformação Digital de Forma Pragmatica WSO2
 
WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017
 
WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview
 
Workshop WSO2 BPS 3.5.x - BPMN
Workshop WSO2 BPS 3.5.x - BPMN Workshop WSO2 BPS 3.5.x - BPMN
Workshop WSO2 BPS 3.5.x - BPMN
 
WSO2 Telco MCX
WSO2 Telco MCXWSO2 Telco MCX
WSO2 Telco MCX
 
Workshop MSF4J - Getting Started with Microservices and Java
Workshop MSF4J - Getting Started with Microservices and JavaWorkshop MSF4J - Getting Started with Microservices and Java
Workshop MSF4J - Getting Started with Microservices and Java
 
WSO2 API Manager : Going beyond the just API Management
WSO2 API Manager : Going beyond the just API ManagementWSO2 API Manager : Going beyond the just API Management
WSO2 API Manager : Going beyond the just API Management
 
Workshop/Tutorial WSO2 Micro Services Server
Workshop/Tutorial WSO2 Micro Services ServerWorkshop/Tutorial WSO2 Micro Services Server
Workshop/Tutorial WSO2 Micro Services Server
 
WSO2 Micro Services Server - Basic Workshop Part 1
WSO2 Micro Services Server - Basic Workshop Part 1WSO2 Micro Services Server - Basic Workshop Part 1
WSO2 Micro Services Server - Basic Workshop Part 1
 
Conectando Turismo e Viagens - Plataforma WSO2
Conectando Turismo e Viagens - Plataforma WSO2Conectando Turismo e Viagens - Plataforma WSO2
Conectando Turismo e Viagens - Plataforma WSO2
 
WSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao TomcatWSO2 Application Server como Alternativa ao Tomcat
WSO2 Application Server como Alternativa ao Tomcat
 

SOA Workshop - JBoss ESB v1.1

  • 1. @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 2. 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 Reservados http://www.edgarsilva.com.br
  • 3. 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 Reservados http://www.edgarsilva.com.br
  • 4. Softwares que vão ser usados neste Workshop • Eclipse Ganymed • JBoss Tools • JBoss ESB Server 4.4 GA • Opcionais: – jBPM 3.2 – Drools D @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 5. Agenda • Visão Geral de Arquitetura Orientada a • E Entendento o que são Providers (protocolos) Serviços • Clientes ESB Unware e ESB Aware • WebServices: Até onde eles vão e quais suas • Entendendo os Serviços e seus Listeners maiores limitações • Compreendendo Actions do ESB • Visão geral dos Enterprise Integration Patterns - EIPs • Actions out-of-the-box • Conceitos de Programação Orientada a • Actions Personalizadas Mensagens e MOMs • Actions baseadas em Annotations • Visão geral de um Enterprise Service Bus • Integrando o ESB a Serviços de Regras do • Apresentando o JBoss ESB Drools • Entendendo as distribuições do JBoss ESB • Integrando o ESB a BPM com jBPM • Recompilando o JBoss ESB com base nos fontes do JBoss.ORG • Construindo consumidores e provedores de WebServices com JBoss ESB • Ferramentas embarcadas com o JBoss ESB • Executando os primeiros Exemplos do JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 6. 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 Reservados http://www.edgarsilva.com.br
  • 7. Visão Geral de Arquitetura Orientada a Serviços S SOA (Service Oriented Architecture) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 8. 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 Reservados http://www.edgarsilva.com.br
  • 9. 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 p princípios de qualidade(SLA por exemplo) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 10. 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 Reservados http://www.edgarsilva.com.br
  • 11. 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 Reservados http://www.edgarsilva.com.br
  • 12. 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 Reservados http://www.edgarsilva.com.br
  • 13. Foco do Workshop • ESB (Enterprise Service Bus) E – JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 14. WebServices: Até onde eles vão e quais suas maiores limitações @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 15. 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 Reservados http://www.edgarsilva.com.br
  • 16. 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 Reservados http://www.edgarsilva.com.br
  • 17. 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 Reservados http://www.edgarsilva.com.br
  • 18. 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 Reservados http://www.edgarsilva.com.br
  • 19. 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 Reservados http://www.edgarsilva.com.br
  • 20. Conclusão WebServices • Grandes meios de ponto de exposição de E Serviços(Endpoints) • Ótima solução de Interoperabilidade • Padronizações para requisitos corporativos padronizadas pelo mercado (ex: WS-Security, WS- A Addressing, WS-Transactions etc) • Apenas não tenha em mente que apenas de WebServices uma Arquitetura de Serviços sobrevive. @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 21. 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 Reservados http://www.edgarsilva.com.br
  • 22. Visão Geral dos EIPs @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 23. EAI como Disciplina de SOA • Necessidade de Integrações entre sistemas: – Enterprise Integrations Patterns • http://www.eaipatterns.com • Estilos de Integração – Transferência de Arquivos – Banco de Dados Compartilhado Detalhes (Amazon): – RPC – Mensageria http://www.amazon.com/dp/0321200683?tag=enterpriseint-20&camp=14573&creative=327641&linkCode=as1&cre @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 24. Enterprise Integration Patterns @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 25. Estrutura de um EAI Pattern Splitter 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 Reservados http://www.edgarsilva.com.br
  • 26. Conceitos de Programação Orientada a Mensagens e MOMs @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 27. 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 Reservados http://www.edgarsilva.com.br
  • 28. 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 Reservados http://www.edgarsilva.com.br
  • 29. JBoss Messaging 2.0_alpha - Benchmark @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 30. 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 Reservados http://www.edgarsilva.com.br
  • 31. 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 (Choreographyquot;) C – Security management @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 32. 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 • E EDA (Event-Driven Architecture) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 33. 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 Reservados http://www.edgarsilva.com.br
  • 34. ESB: Visão Tradicional @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 35. Visão JBoss ESB G Governança SOA (RAS, APM, Regras, DSLs) @ Alguns direitos Reservados http://www.edgarsilva.com.br Varios ESB's atuando em balanceamento ou clustering
  • 36. 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 Reservados http://www.edgarsilva.com.br
  • 37. 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 ou mais protocolos ( (ws,jms,ftp etc) Os Serviços Respondem A estimulos dos protocolos @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 38. Cenários ESB Pasta X JBoss ESB DB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 39. 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 Reservados http://www.edgarsilva.com.br
  • 40. 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 Reservados http://www.edgarsilva.com.br
  • 41. 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 Reservados http://www.edgarsilva.com.br
  • 42. 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 Reservados http://www.edgarsilva.com.br
  • 43. 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 Reservados http://www.edgarsilva.com.br
  • 44. 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 Reservados http://www.edgarsilva.com.br
  • 45. 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 Reservados http://www.edgarsilva.com.br
  • 46. “ Run Forest, run...” @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 47. Executando o JBoss ESB pela primeira vez • <Jboss_ESB_Install_dir>/bin/run.sh @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 48. 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 Reservados http://www.edgarsilva.com.br
  • 49. 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 Reservados http://www.edgarsilva.com.br
  • 50. 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 Reservados http://www.edgarsilva.com.br
  • 51. Usando o esbgen @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 52. A primeira Aplicação JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 53. 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 Reservados http://www.edgarsilva.com.br
  • 54. Providers no JBoss ESB ( (protocolos de escuta de serviço) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 55. Provider • Do inglês: – Provider Pro*vidquot;er, n. • One who provides, furnishes, or supplies; one who procures • what is wanted. • Evite confundir com a tradução “ provedor” @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 56. 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 Reservados http://www.edgarsilva.com.br
  • 57. JBoss ESB possui os seguintes providers Protocolos de Escuta • JMSProvider • FSProvider • FTPProvider Em todos estes providers Informações podem chegar. • JBRProvider Estas informações servem de subsídios • SQLProvider pros serviços • HibernateProvider • JCAProvider • BusProvider • SchedulerProvider @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 58. Clientes “ Aware” e “ Unaware” para o JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 59. 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 Reservados http://www.edgarsilva.com.br
  • 60. 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 Reservados http://www.edgarsilva.com.br
  • 61. 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 Reservados http://www.edgarsilva.com.br
  • 62. ESB Message/ SOAP Message <xs:complexType name=quot;Envelopequot;> public interface Message <xs:attribute ref=quot;Headerquot; { use=quot;requiredquot;/> public Header getHeader (); <xs:attribute ref=quot;Contextquot; public Context getContext (); use=quot;requiredquot;/> public Body getBody (); <xs:attribute ref=quot;Bodyquot; use=quot;requiredquot;/> public Fault getFault (); <xs:attribute ref=quot;Attachmentquot; use=quot;optionalquot;/> public Attachment getAttachment (); <xs:attribute ref=quot;Propertiesquot; public URI getType (); use=quot;optionalquot;/> public Properties getProperties (); <xs:attribute ref=quot;Faultquot; } use=quot;optionalquot;/> </xs:complexType> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 63. JBoss ESB Gateways • São providers que vão servir de porta de entrada para clientes “ Unaware” @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 64. Gateways para ESB Message PHP Client Cobol Gateway ESB Aware ( (recebe um dado) Mensagem padrão dentro do barramento .net Client @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 65. Visualizando os Providers no jboss-esb.xml @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 66. Declarando Serviços @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 67. Declarando Serviços <services> <service category=quot;Simplesquot; name=quot;MySimpleServicequot;> ... </service> </services> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 68. Declarando Listeners de Serviços <listeners> <jms-listener name=quot;JMS-Gatewayquot; busidref=quot;myesbprojectsimpleGwChannelquot; maxThreads=quot;1quot; is-gateway=quot;truequot; /> <jms-listener name=quot;JMS-ESBAwarequot; busidref=quot;myesbprojectsimpleEsbChannelquot; maxThreads=quot;1quot; /> </listeners> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 69. Declarando Actions do JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 70. Declarando ESBActions <actions mep=quot;OneWayquot;> <action name=quot;dumpquot; class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;> <property name=quot;printfullquot; value=quot;truequot; /> </action> </actions> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 71. 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 Reservados http://www.edgarsilva.com.br
  • 72. Actions “ Out-of-the-box” no JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 73. 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 Reservados http://www.edgarsilva.com.br
  • 74. Actions V Veja Programmers Guide (Pág 80 a 111) • Transformers & Converters • PersistAction Management • ByteArrayToString • jBPM BpmProcessor. • LongToDateConverter • GroovyActionProcessor • ObjectInvoke • EJBProcessor • ObjectToCSVString • EIPs Actions • ObjectToXStream • EchoRoutr, HttpRouter JMSRouter • XStreamToObject • ContentBasedRouter, StaticRouter, StaticWiretap • SmooksTransformer • Notifier • SmooksAction • SOAPProcessor • XML, EDI, CSV e Input Payloads • Java Input Payload • Specifying the Result Type @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 75. 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 Reservados http://www.edgarsilva.com.br
  • 76. Exemplo de Action de Transformação • Smooks – Framework codehaus • org.jboss.soa.esb.smooks.SmooksAction @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 77. 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 Reservados http://www.edgarsilva.com.br
  • 78. Smooks em Ação <?xml version='1.0' encoding='UTF-8'?> <smooks-resource-list xmlns=quot;http://www.milyn.org/xsd/smooks-1.0.xsdquot;> <profiles> <profile base-profile=quot;source-csvquot; /> <profile base-profile=quot;canonical-xmlquot; /> </profiles> <resource-config target-profile=quot;source-csvquot; selector=quot;org.xml.sax.driverquot;> <resource>org.milyn.csv.CSVParser</resource> <param name=quot;fieldsquot; type=quot;string-listquot;> transacao,valor </param> </resource-config> <resource-config target-profile=quot;canonical-xmlquot; selector=quot;csv-setquot;> <resource type=quot;xslquot;> <![CDATA[ <ROOT> <xsl:for-each select=quot;csv-recordquot;> <Transacao> <numero><xsl:value-of select=quot;transacaoquot;/></numero> <valor><xsl:value-of select=quot;valorquot;/></valor> </Transacao> </xsl:for-each> </ROOT> ]]> </resource> <param name=quot;is-xslt-templateletquot;>true</param> </resource-config> <!-- Popular Transacao --> <resource-config selector=quot;Transacaoquot;> <resource>org.milyn.javabean.BeanPopulator</resource> <param name=quot;beanIdquot;>transacao</param> <param name=quot;beanClassquot;>bpmesb.Transacao</param> <param name=quot;bindingsquot;> <binding property=quot;idquot; selector=quot;Transacao/@numeroquot; /> <binding property=quot;valorquot; selector=quot;Transacao/@valorquot; type=quot;Doublequot;/> </param> </resource-config> </smooks-resource-list> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 79. Ações Smooks Aqui cai como CSV: <action class=quot;org.jboss.soa.esb.smooks.SmooksActionquot; name=quot;transform-from-csvquot;> <property name=quot;smooksConfigquot; value=quot;/smooks-res.xmlquot;/> <property name=quot;messageProfilequot; value=quot;source-csvquot;/> </action> Depois Transforma para um XML estruturado <action class=quot;org.jboss.soa.esb.smooks.SmooksActionquot; name=quot;transform-to-xmlquot;> <property name=quot;smooksConfigquot; value=quot;/smooks-res.xmlquot;/> <property name=quot;messageProfilequot; value=quot;canonical-xmlquot;/> </action> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 80. Actions Personalizadas @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 81. 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 Reservados http://www.edgarsilva.com.br
  • 82. 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 Reservados http://www.edgarsilva.com.br
  • 83. Exemplo de Action 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 { ConfigTree tree; public Workshop(ConfigTree t) { tree = t; } public Message execute(Message m) { System.out.print(quot;Action executada ...quot;); return m; } } @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 84. Laboratórios & Demos Quickstarts @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 85. Quickstarts • helloworld_action • helloworld_db_registration • helloworld_file_action • helloworld_ftp_action • helloworld_hibernate_action • helloworld_sql_action @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 86. Material de Documentação neste ponto • JBoss ESB Programmers Guide – esb_install_dir/docs/ProgrammersGuide.pdf @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 87. Lab 1 Criando um Projeto ESB com esbgen @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 88. 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 q quickstarts) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 89. 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 Reservados http://www.edgarsilva.com.br
  • 90. Resumo da Solução - jboss-esb.xml <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?> <jbossesb xmlns=quot;http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbosse sb-1.0.1.xsdquot; parameterReloadSecs=quot;5quot;> <providers> <jms-provider name=quot;JBossMessagingquot; connection-factory=quot;ConnectionFactoryquot;> <jms-bus busid=quot;workshoplab1GwChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest-name=quot;queue/workshoplab1_GateWayquot; /> </jms-bus> <jms-bus busid=quot;workshoplab1EsbChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest-name=quot;queue/workshoplab1_ESBquot; /> </jms-bus> </jms-provider> </providers> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 91. Resumo da Solução - jboss-esb.xml <services> <service category=quot;workshoplab1ESBServicequot; name=quot;workshoplab1ESBServiceListenerquot; description=quot;Service Samplequot;> <listeners> <jms-listener name=quot;JMS-Gatewayquot; busidref=quot;workshoplab1GwChannelquot; maxThreads=quot;1quot; is-gateway=quot;truequot; /> <jms-listener name=quot;JMS-ESBListenerquot; busidref=quot;workshoplab1EsbChannelquot; maxThreads=quot;1quot; /> </listeners> <actions mep=quot;OneWayquot;> <action name=quot;dumpquot; class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;> <property name=quot;printfullquot; value=quot;truequot; /> </action> </actions> </service> </services> </jbossesb> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 92. Resumo da Solução - jboss-esb.xml <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?> <jbossesb xmlns=quot;http://anonsvn.labs.jboss.com/labs/jbossesb/tr unk/product/etc/schemas/xml/jbossesb-1.0.1.xsdquot; parameterReloadSecs=quot;5quot;> <providers> <jms-provider name=quot;JBossMessagingquot; connection- factory=quot;ConnectionFactoryquot;> <jms-bus busid=quot;workshoplab1GwChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- name=quot;queue/workshoplab1_GateWayquot; /> </jms-bus> <jms-bus busid=quot;workshoplab1EsbChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- name=quot;queue/workshoplab1_ESBquot; /> <services> </jms-bus> <service category=quot;workshoplab1ESBServicequot; name=quot;workshoplab1ESBServiceListenerquot; </jms-provider> description=quot;Service Samplequot;> </providers> <listeners> <jms-listener name=quot;JMS-Gatewayquot; busidref=quot;workshoplab1GwChannelquot; maxThreads=quot;1quot; is-gateway=quot;truequot; /> <jms-listener name=quot;JMS-ESBListenerquot; busidref=quot;workshoplab1EsbChannelquot; maxThreads=quot;1quot; /> </listeners> <actions mep=quot;OneWayquot;> <action name=quot;dumpquot; class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot;> <property name=quot;printfullquot; value=quot;truequot; /> </action> </actions> </service> </services> </jbossesb> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 93. jbm-queue-service.xml (Filas JMS) j <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <server> <mbean code=quot;org.jboss.jms.server.destination.QueueServicequot; name=quot;jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_GateWayquot; xmbean-dd=quot;xmdesc/Queue-xmbean.xmlquot;> <depends optional-attribute- name=quot;ServerPeerquot;>jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> <mbean code=quot;org.jboss.jms.server.destination.QueueServicequot; name=quot;jboss.esb.workshoplab1.destination:service=Queue,name=workshoplab1_ESBquot; xmbean-dd=quot;xmdesc/Queue-xmbean.xmlquot;> <depends optional-attribute- name=quot;ServerPeerquot;>jboss.messaging:service=ServerPeer</depends> <depends>jboss.messaging:service=PostOffice</depends> </mbean> </server> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 94. Criando uma Action @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 95. WorkshopAction package 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(quot;Passou no ESB e recebeu os dadosquot;); return m; } } @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 96. Plugando a Action no Serviço do ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 97. Plugando a Action ao Serviço <actions mep=quot;OneWayquot;> <action class=quot;org.jboss.soa.esb.actions.SystemPrintlnquot; name=quot;dumpquot;> <property name=quot;messagequot;/> <property name=quot;printfullquot; value=quot;truequot;/> </action> <action name=quot;workshopActionquot; class=quot;org.demo.workshoplab1.WorkshopActionquot; process=quot;processarAcaoDentroDoESBquot;/> </actions> package org.demo.workshoplab1; ... public class WorkshopAction extends AbstractActionLifecycle { public Message processarAcaoDentroDoESB(Message m){ System.out.println(quot;Passou no ESB e recebeu os dadosquot;); return m; } } @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 98. Entendendo o empacotamento .esb @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 99. 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 Reservados http://www.edgarsilva.com.br
  • 100. 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 Reservados http://www.edgarsilva.com.br
  • 101. 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 Reservados http://www.edgarsilva.com.br
  • 102. Integração JBoss ESB com o Drools @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 103. Drools http://www.jboss.org/drools/ @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 104. 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 Reservados http://www.edgarsilva.com.br
  • 105. 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 Reservados http://www.edgarsilva.com.br
  • 106. 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 Reservados http://www.edgarsilva.com.br
  • 107. Drools Guvnor: Login @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 108. Drools: Tela Principal @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 109. Drools: “ Ativos” de Regras @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 110. Drools: “ Ativos” de Regras @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 111. Drools: Edição de Regras @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 112. Drools: Edição de DSLs @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 113. Drools: Repositórios @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 114. Arquiteturas Provider JBoss ESB Action @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 115. Exemplo Drools try { Properties props = new Properties(); props.load(OrderRunner.class.getResourceAsStream(quot;Guvnor.propertiesquot;)); RuleAgent agent = RuleAgent.newRuleAgent(props); RuleBase ruleBase = agent.getRuleBase(); WorkingMemory workingMemory = ruleBase.newStatefulSession(); Customer customer = new Customer(); customer.setFirstName(quot;Edgarquot;); customer.setLastName(quot;Silvaquot;); 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(quot;See the Tax: quot; + order.getTax()); workingMemory.fireAllRules(); System.out.println(quot;See the Discount: quot; + order.getOrderDiscount()); System.out.print(quot;See the changed Tax: quot; + order.getTax()); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 117. ESB & BPM @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 118. 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 Reservados http://www.edgarsilva.com.br
  • 119. 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 Reservados http://www.edgarsilva.com.br
  • 120. JBoss jBPM Arquitetura do Projeto Abstração de qualquer linguagem de Processo @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 121. 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)Alguns direitos Reservados M @ http://www.edgarsilva.com.br • Pode rodar dentro do JBoss AS ou fora, ou até mesmo em outros AS.
  • 122. Boas soluções de BPM devem Possibilitar ... Que uma pessoa não técnica possa criar Que o mesmo modelo modelos de negócio e criado possa inspirar a mapas mentais sem criação de um auxilio da TI processo executável! Padrões de coreofrafia, orquestração de serviços A geração, extração e e gerenciamento de analise de métricas e tarefas humanas para indicadores que acomodar a execução viabilizem a analise dos processos. do processo e sua melhoria contínua. @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 123. Como o jBPM é visto Atualmente? Excelente! Bom! Arquiteto Corporativo + Analista de Negócio Integrador de Dados e Serviços + Desenvolvedor Fraco! Excelente! @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 124. 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 Reservados http://www.edgarsilva.com.br
  • 125. JBpm: Opção #1 ao embarcar soluções de Workflow/BPM @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 126. JBpm: Casos de Uso • Como motor de processos e aplicações • Exemplo de uso com Microsoft .net Cliente Asp.Net Cliente Desktop VB.Net C Camada de Serviços (WebServices) J JBoss jBPM (motor de processos) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 127. jBpm: Casos de Uso • Como motor de Processos • Cliente habilitando SOA na sua empresa V Vários Clientes (Java, PHP, Delphi etc) EJBs WebServices REST J JBoss jBPM (motor de processos) @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 128. JBpm : Framework • Oferece um framework sofisticado para tratamento de processos de negócios e workflow • Fácil aprendizado • Open-Source @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 129. 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 Reservados http://www.edgarsilva.com.br
  • 130. jBpm: Designer @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 131. 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 Reservados http://www.edgarsilva.com.br
  • 132. jBpm: Console @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 133. Orquestrando Processos com jBPM no JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 134. Camada: JBoss ESB • 1. Service Orchestration • 2. Human Task Management @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 135. JbpmAction : JBoss ESB <action class=quot;org.jboss.soa.esb.services.jbpm.actions.BpmProcessorquot; name=quot;$ActionJBPMquot;> <property name=quot;commandquot; value=quot;StartProcessInstanceCommandquot; /> <property name=quot;process-definition-namequot; value=quot;$PROCESSO JBPMquot; /> <property name=quot;keyquot; value=quot;body.businessKeyquot; /> <property name=quot;esbToBpmVarsquot;> <mapping bpm=quot;xmlquot; esb=quot;BODY_CONTENTquot; /> </property> </action> @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 136. 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 Reservados http://www.edgarsilva.com.br
  • 137. 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 Reservados http://www.edgarsilva.com.br
  • 138. ESBService Node @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 139. Quickstarts & Labs @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 140. QuickStarts • bpm_orchestration1 • bpm_orchestration2 • bpm_orchestration3 • bpm_orchestration4 @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 141. Documentação • esb_install_dir/doc/Service Doc.pdf • Páginas 49 a 59 @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 142. Lab Demonstração de BPM + ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 143. WebServices no JBoss ESB @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 144. 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 Reservados http://www.edgarsilva.com.br
  • 145. SOAP • Simple Object Access Protocol • Sucesso de Mercado há mais de 1 decada @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 146. 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 Reservados http://www.edgarsilva.com.br
  • 147. JSR 181 @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 148. 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 @ Alguns direitos Reservados – Personaliza um mapeamento de retorno http://www.edgarsilva.com.br
  • 149. 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 Reservados http://www.edgarsilva.com.br
  • 150. 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 @ Alguns direitos Reservados http://www.edgarsilva.com.br
  • 151. 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.
  • 152. Quickstart: webservice_producer import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.Oneway; import javax.jws.WebParam; O JBoss ESB vai injetar import org.jboss.soa.esb.message.Message; esta mensagem neste import org.jboss.soa.esb.actions.soap.SOAPProcessor; ponto em nosso WebService, quando ele @WebService(name = quot;GoodbyeWorldWSquot;, for chamado por um Gateway ou via um targetNamespace=quot;http://webservice_producer/goodbyeworldquot;) envelope SOAP // @SOAPBinding(style = SOAPBinding.Style.RPC) public class GoodbyeWorldWS { @WebMethod public String sayGoodbye(@WebParam(name=quot;messagequot;) String message) { Message esbMessage = SOAPProcessor.getMessage(); if(esbMessage != null) { System.out.println(quot;**** SOAPRequest perhaps mediated by ESB:nquot; + esbMessage.getBody().get()); } System.out.println(quot;Web Service Parameter - message=quot; + message); return quot;... Ah Goodbye then!!!! - quot; + message; } }
  • 153. WebService e o WAR file com a JSR 118 <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <web-app xmlns=quot;http://java.sun.com/xml/ns/j2eequot; xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot; xsi:schemaLocation=quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdquot; version=quot;2.4quot;> <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>
  • 154. Relação Classe Java com web.xml <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.Oneway; import javax.jws.WebParam; import org.jboss.soa.esb.message.Message; <web-app xmlns=quot;http://java.sun.com/xml/ns/j2ee import org.jboss.soa.esb.actions.soap.SOAPProcessor; instancequot; @WebService(name = quot;GoodbyeWorldWSquot;, xsi:schemaLocation=quot;http://java.sun.co targetNamespace=quot;http://webservice_producer/goodbyeworldquot;) http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd // @SOAPBinding(style = SOAPBinding.Style.RPC) version=quot;2.4quot;> public class GoodbyeWorldWS { @WebMethod <servlet> public String sayGoodbye(@WebParam(name=quot;messagequot;) String message) { <servlet-name>GoodbyeWorldWS</servlet-n <servlet-class>meu.meupacote.GoodbyeWor Message esbMessage = SOAPProcessor.getMessage(); </servlet> if(esbMessage != null) { System.out.println(quot;**** SOAPRequest perhaps mediated by ESB:nquot; + esbMessage.getBody().get()); <servlet-mapping> } <servlet-name>GoodbyeWorldWS</servlet-n System.out.println(quot;Web Service Parameter - message=quot; + message); return quot;... Ah Goodbye then!!!! - quot; + message; <url-pattern>/GoodbyeWorldWS</url-patte } </servlet-mapping> } </web-app>
  • 155. Expondo o WebService como Serviço jboss-esb.xml <action name=quot;JBossWSAdapterquot; class=quot;org.jboss.soa.esb.actions.soap.SOAPProcessorquot;> <property name=quot;jbossws-endpointquot; value=quot;GoodbyeWorldWSquot;/> </action>
  • 156. Visualizando o Contrato do WSDL http://localhost:8080/contract
  • 157. Visualizando o Contrato do WSDL http://localhost:8080/contract
  • 161. 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
  • 163. JBoss ESB colaborando com Serviços Externos Evento Acontece.... Gateway passa a Mensagem para dentro do ESB JBoss ESB Action converte de TXT Action Envoca um para XML WebService Action que para completar dados Salva no da Transação Banco de Dados para gerar o objeto Java Mundo .net WebService .net
  • 164. Questões importantes de observações • Tipos complexos do mundo WebServices/XML • Mecanismos de Segurança (NTLM, Kerberos etc) • Federação de WebServices
  • 165. Quickstart: webservice_consumer1 • Consome um WebService de dentro do JBoss ESB, mas poderia ser qualquer outro
  • 166. Action SOAPClient <action name=quot;soapui-client-actionquot; class=quot;org.jboss.soa.esb.actions.soap.SOAPClientquot;> <property name=quot;wsdlquot; value=quot;http://127.0.0.1:8080/ws/HelloWorldWS?wsdlquot; /> <property name=quot;responseAsOgnlMapquot; value=quot;truequot; /> <property name=quot;SOAPActionquot; value=quot;sayHelloquot;/> </action>
  • 168. 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
  • 169. 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
  • 170. Outros Workshops SOA • Consulte – SOAWorkShop – Educando profissionais SOA • http://soaworkshop.wordpress.com – SOA & JBoss ESB – Breve: SOA & BPM – Breve: SOA e Governança opensource