Este documento fornece uma introdução ao Enterprise Service Bus (ESB) e ao JBoss ESB, incluindo uma explicação do que é um ESB, seus principais componentes, como o JBoss ESB é estruturado e como ele pode ser usado para integrar sistemas e orquestrar processos de negócios.
1. JBOSS-ESB
Robison G. Tesini
21/09/2010
d
Fábrica de Software
Sistemas e aplicações sob medida para as
necessidades do seu negócio. www.dextra.com.br
2. Overview
O que é ESB?
● Componentes Core de um ESB
● O JBoss ESB
● ESB & SOA
● Por que utilizá-los?
JBoss ESB
● Serviços e Mensagens
● Estrutura de um arquivo ESB
● Pipeline de Actions
● Transformação de Mensagem
● Registry
3. O que é ESB?
Enterprise Service Bus
● Evolução de softwares chamados de EAI
● Enterprise Application Integrator
ESBs possuem as mesmas características dos EAIs sem
ser “vendor locked”.
4. O que é ESB?
Enterprise Service Bus
● Software que atua como Barramento
● Padrões abertos de comunicação
• Mensagem
• Web Services
• Até mesmo File System e FTP/SFTP
A B
Web Service JMS
ESB
5. Componentes Core de um
ESB
Invocação: Prover suporte à protocolos de transporte
Roteamento: Rotear mensagens entre serviços (inclusive
baseado no conteúdo da mensagem – JBoss Rules)
Transformação: Transformação entre protocolos e
formatos de dados e mensagens (Smooks)
Registro: Ponto central onde são armazenadas
informações sobre serviços
Orquestração: Relacionado à descrição de processos
complexos com BPEL (Business Process Execution
Language – JBPM)
6. ESB & SOA
SOA
● Definição:
É uma abordagem arquitetural que permite a criação de
serviços de negócio interoperáveis que podem facilmente
ser reutilizados e compartilhados entre aplicações e
empresas.
7. ESB & SOA
O que SOA não é :
● Uma Tecnologia
● Um produto ou plataforma
● WebService
● Uma revolução
10. Cenários de utilização
Arquivo Arquivo
MQ MQ
WebService JBoss ESB WebService
etc. etc.
Transformação
Sistema A Sistema B
11. O JBoss ESB
Iniciando o uso
Pré-requisitos
● JDK 5 (v1.5.0_06 recommended)
● Ant (v1.6.5 recommended)
Instalação
Para instalar no JBoss AS :
● No arquivo deployment.properties, colocar
org.jboss.esb.server.home=/PATH/jboss-5.1.0.GA
ant deploy
12. Serviços e Mensagens
Tudo no JBoss ESB é considerado Serviço ou
Mensagem.
Serviço:
Encapsula lógica de negócio ou um ponto de integração
entre sistemas.
Mensagem:
Representa como clientes e serviços se comunicam, ou
seja, em um ESB toda integração é feita por troca de
Mensagens.
13. Estrutura de um Arquivo ESB
Durante a instalação do JBoss ESB, será colocado no
deploy do JBoss AS softwares que farão a
interpretação de arquivos com extensão “.esb”.
Estrutura de um arquivo “.esb”:
META-INF/
jboss-esb.xml
deployment.xml
<java classes>
<jars>
<queue-service.xml>
14. Estrutura de um Arquivo ESB
Explicando os arquivos e pacotes:
jboss-esb.xml
Contém as configuração de serviços, “Listeners” e “Actions” do
ESB.
deployment.xml
É opcional. Declarar as dependências do ESB.
<java classes>
Classes isoladas necessárias no seu ESB.
<jars>
Pacotes de classes que seu ESB depende
<queue-service.xml>
Se seu ESB depende de filas ou tópicos, elas devem estar
declaradas neste arquivo.
15. Estrutura de um Arquivo ESB
Primeiro exemplo: “helloworld”
(exemplos em jbossesb-<versão>/samples/quickstart)
Providers
<providers>
<jms-provider name="JBossMQ" connection-factory="ConnectionFac
tory">
<jms-bus busid="quickstartGwChannel">
<jms-message-filter dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_gw"
/>
</jms-bus>
<jms-bus busid="quickstartEsbChannel">
<jms-message-filter dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_esb"
/>
</jms-bus>
</jms-provider>
</providers>
16. Estrutura de um Arquivo ESB
Services
<service
category="FirstServiceESB"
name="SimpleListener"
description="Hello World">
[ Listeners ]
[ Actions ]
</service>
category e name são utilizados para registrar o ESB (a
combinação dos dois é como o nome JNDI do seu ESB).
17. Estrutura de um Arquivo ESB
Listeners
<listeners>
<jms-listener name="JMS-Gateway"
busidref="quickstartGwChannel"
is-gateway="true"
/>
<jms-listener name="helloWorld"
busidref="quickstartEsbChannel"
/>
</listeners>
busidref corresponde ao “busid” do provider
is-gateway faz com que o listener seja um “gateway”, ponto
de entrada para seu ESB.
18. Estrutura de um Arquivo ESB
Gateway Listener: Este tipo de listener configura um “Gateway” para
seu ESB. É capaz de receber uma mensagem qualquer, empacotá-la
como uma mensagem ESB e colocá-la em seu barramento para ser
processada.
Funcionalidades:
● Pode obter arquivos do disco
● Conectar com JMS
● Fazer FTP
● Ser webservice
ESB Aware Listener: Este listener é chamado de “ESB Aware”. É
capaz de receber mensagens do tipo ESB e devem ser utilizados para
troca de mensagem no barramento.
19. Estrutura de um Arquivo ESB
Actions
<actions mep="OneWay">
<action name="action1" class="MyJMSListenerAction"
process="displayMessage" />
[Quantas actions forem necessárias para sua troca de
mensagens]
</actions>
class: nome da classe Java que processará a mensagem
process: nome do método da classe
public class MyJMSListenerAction {
public Message displayMessage(Message message)
throws Exception {
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&");
System.out.println("Body: "+message.getBody().get());
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&");
return message;}
}
20. Pipeline de Actions
Em um ESB você pode colocar quantas actions forem
necessáriaspara que uma mensagem saia de um sistema A e
chegue no formato correto em um sistema B. O pipeline é feito
declarando-se as actions de maneira sequencial no jboss-
esb.xml
Transformação
Checagem
Sistema A Roteamento Sistema B
21. Pipeline de Actions
Um exemplo simples:
<actions mep="OneWay">
<action name="action1"
class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="printfull" value="false"/>
</action>
<action name="action2"
class="org.jboss.soa.esb.samples.quickstart.helloworl
d.MyJMSListenerAction"
process="transform" />
<action name="action3"
class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="printfull" value="false"/>
</action>
</actions>
No exemplo acima, o pipeline possui 3 actions, a primeira
imprime a mensagem na tela, a segunda transforma e a
terceira volta a imprimir a mensagem no formato novo.
22. Mensagem
Uma mensagem ESB tem um formato
semelhante à mensagens do tipo SOAP
<xs:complexType name="Envelope">
<xs:attribute ref="Header" use="required"/>
<xs:attribute ref="Context" use="required"/>
<xs:attribute ref="Body" use="required"/>
<xs:attribute ref="Attachment" use="optional"/>
<xs:attribute ref="Properties" use="optional"/>
<xs:attribute ref="Fault" use="optional"/>
</xs:complexType>
public interface Message{
public Header getHeader ();
public Context getContext ();
public Body getBody ();
public Fault getFault ();
public Attachment getAttachment ();
public URI getType ();
public Properties getProperties ();}
23. Transformação de Mensagens
Smooks
● Transformação de mensagens utilizando-se do projeto
Smooks (www.smooks.org)
● Transformação é feita de forma declarativa com auxílio
de um arquivo de configuração
● Basta declarar uma “action” do tipo
org.jboss.soa.esb.smooks.SmooksAction
<action name="simple-transform"
class="org.jboss.soa.esb.smooks.SmooksAction">
<property name="smooksConfig" value="/smooks-res.xml" />
</action>
24. Transformação de Mensagens
Action: Pode-se também fazer uma “action” específica para
transformação de mensagem em casos em que o smooks não atende
a transformação. Isso deve ser feito de maneira programática na
action.
public Message transform(Message message) throws Exception
{
String m = message.getBody().get().toString();
String arr[] = m.split(";");
Document doc =
DocumentFactory.getInstance().createDocument();
Element root = doc.addElement("teste-xml");
Element elem = root.addElement("elem0");
CSV elem.addText(arr[0]);
XML elem = root.addElement("elem1");
elem.addText(arr[1]);
m = doc.asXML();
Message esbMessage =
MessageFactory.getInstance().getMessage();
esbMessage.getBody().add(m);
return esbMessage;
}
25. Registry
O que é?
● É um das principais funções de um ESB
● É análogo ao serviço de JNDI para os SessionBeans
Registry
Publish Find
Provider Requester
Bind
26. Registry
UDDI (originado do acrônimo inglês Universal Description,
Discovery and Integration) é um protocolo aprovado
como padrão pela OASIS(Organization for the
Advancement of Structured Information Standards) e
especifica um método para publicar e descobrir
diretórios de serviços em uma arquitetura orientada a
serviços (SOA).
(http://pt.wikipedia.org/wiki/UDDI)
28. Registry
Invocação por um client (exemplo)
Message esbMessage =
MessageFactory.getInstance().getMessage();
esbMessage.getBody().add(“Hello World !!”);
new ServiceInvoker("FirstServiceESB", "SimpleListener"
).deliverAsync(esbMessage);
Note que toda complexidade de localização do
serviço e transporte da mensagem está
encapsulada na classe do JBoss ESB.