1. Red Hat JBoss Fuse: conceitos bsicos para desenvolvedores
Rafael T. C. Soares Arquiteto de Solues, Red Hat Janeiro, 2015
2. 6 ADD NAME (View > Master > Slide master) J uso Apache
Camel em minha aplicao! Camel um Framework de Integrao, no um ESB.
Implementa os principais EIPs Oferece mecanismos para: Validao
Enriquecimento (tratamento) Transformao Rotamento de mensagens
3. 7 ADD NAME (View > Master > Slide master) Por que
JBoss Fuse? Quando seu projeto de integrao se torna complexo...
Onde implantar minhas integraes? Como escalar e garantir alta
disponibilidade? Como versionar e atualizar minha aplicao?
4. 8 ADD NAME (View > Master > Slide master) Por que
JBoss Fuse Quando seu projeto de integrao se torna complexo...
Preciso de um meio para realizar debug e o trace de mensagens em
minhas integraes... Preciso implementar comunicao assncrona por
meio de mensageria... etc
5. 9 ADD NAME (View > Master > Slide master) Por que
JBoss Fuse Quando seu projeto de integrao se torna complexo...
Preciso de suporte para implantao em larga escala... Como atualizar
a aplicao sem afetar o ambiente inteiro? Quero implantar minha
integrao em um container leve e flexivel!
6. 10 Red Hat JBoss Fuse Red Hat JBoss Fuse Container:
arquitetura
7. 11 Red Hat JBoss Fuse JBoss Fuse The Big Picture Tooling
Frameworks Containers Message Broker Service Bus
Monitoring/Operation
8. 12 Red Hat JBoss Fuse JBoss Fuse The Big Picture Soluo
composta por vrios Projetos Open Source JBoss Fuse Apache CXF Fuse
Fabric Apache Camel Apache ServiceMix Apache ActiveMQ Apache
Karaf
9. 13 Red Hat JBoss Fuse JBoss Fuse Container Suporta vrios
tipos de deployment
10. 14 Red Hat JBoss Fuse Modelo de Desenvolvimento
11. 15 ADD NAME (View > Master > Slide master) Modelo de
Desenvolvimento Linguagem de programao JavaSE 1.6 Vrias linguages
dinmicas como DSL Scala JS Groovy Injeo de Dependncia DI Spring
Blueprint (OSGI) Construo e gesto de dependncias Apache Maven
12. 16 ADD NAME (View > Master > Slide master) Ambiente
JavaSE 1.6 ou > Apache Maven 3 Red Hat JBoss Fuse IDE ECLIPSE
plugin JBoss Developer Studio (JBDS)
13. 17 ADD NAME (View > Master > Slide master) Modelo de
Desenvolvimento JBoss Fuse Project Metadados OSGI Bundle
METAINF/MANIFEST.MF Fuse Application Bundle (FAB)
METAINF/maven/groupId/artifactId/pom.xml Web ARchive
WEBINF/web.xml
14. 18 ADD NAME (View > Master > Slide master) Maven:
conceitos Ciclo de vida mvn Estrutura do projeto
15. 19 ADD NAME (View > Master > Slide master) Maven:
conceitos Resources/Descriptors Spring
ProjectDir/src/main/resources/METAINF/spring/ Blueprint XML
ProjectDir/src/main/resources/OSGI INF/blueprint/ Packaging Fuse
Application Bundle (Fuse JAR) Bundle (OSGI JAR) WAR (Web
Archive)
16. 20 ADD NAME (View > Master > Slide master) Maven:
conceitos Maven Coordinates groupdId:arctifactId:version Dentro do
JBoss Fuse container mvn:groupid/artifactid/version Dependncias
Escopo build, test e run time OSGI Bundle provided no tem efeito
Fuse Application Bundle provided implantada separadamente (shared
library)
17. 21 ADD NAME (View > Master > Slide master) Maven:
conceitos Repositrios Local Repository /home//.m2/repository Remote
Repository Online Maven Central Fuse Source Maven Repo JBoss Maven
Central etc System Repository (acessado apenas pelo Fuse em
runtime) $FUSE_HOME/system
18. 22 ADD NAME (View > Master > Slide master) Maven:
conceitos Repositrios Remotos Build Time /home//.m2/settings.xml
Run Time $FUSE_HOME/etc/org.ops4j.pax.url.mvn.cfg
org.ops4j.pax.url.mvn.repositories=
http://my.corporate.nexus.com/nexus/content/groups/public@snapshots
http://repo1.maven.org/maven2@id=maven.central.repo,
https://repo.fusesource.com/nexus/content/repositories/releases@id=fusesource.release.repo,
https://repo.fusesource.com/nexus/content/groups/ea@id=fusesource.ea.repo,
http://svn.apache.org/repos/asf/servicemix/m2repo@id=servicemix.repo,
http://repository.springsource.com/maven/bundles/release@id=springsource.release.repo,
http://repository.springsource.com/maven/bundles/external@id=springsource.external.repo,
https://oss.sonatype.org/content/groups/scalatools@id=scala.repo
19. 23 ADD NAME (View > Master > Slide master) Injeo de
Dependncia Frameworks Suportados Spring XML Blueprint XML OSGI Spec
(osgi.org) Similiar ao Spring. Antigo Spring DM (implementao da
spec OSGI). Mais leve Resolve dependncias automaticamente em
runtime
20. 24 ADD NAME (View > Master > Slide master) Injeo de
Dependncia Spring XML Injeo de dependncia POJO Beans Configurao
Camel CXF ActiveMQ OSGI toolkit OSGI Services (OSGI Compendium)
Containers Services Persistence Security Transactions
21. 25 ADD NAME (View > Master > Slide master) Injeo de
Dependncia Spring XML Descritor
/src/main/resources/META-INF/spring/*.xml
22. 26 ADD NAME (View > Master > Slide master) Injeo de
Dependncia Blueprint XML Injeo de dependncia Mais leve Especfico
para containers OSGI Configurao Camel CXF ActiveMQ OSGI toolkit
OSGI Services (OSGI Compendium) Containers Services Persistence
Security Transactions
23. 27 ADD NAME (View > Master > Slide master) Injeo de
Dependncia Blueprint XML Descritor
/src/main/resources/OSGI-INF/blueprint/*.xml
24. 28 Red Hat JBoss Fuse Apache CXF Web Service Demo: WS Code
First Approach
25. 29 Red Hat JBoss Fuse Maven Fuse Source Repository
26. 30 Red Hat JBoss Fuse Gerando o projeto Maven Maven
archetype Maven Project $mvnarchetype:generate
>DarchetypeGroupId=org.apache.servicemix.tooling
>DarchetypeArtifactId=servicemixcxfcodefirstosgibundle
>DarchetypeVersion=2012.01.0.redhat60024
>DgroupId=org.fusesource.example >DartifactId=cxfbasic
>Dversion=1.0SNAPSHOT
27. 31 Red Hat JBoss Fuse Spring XML Configuration Build
cdcxfbasic mvninstall
29. 33 Red Hat JBoss Fuse JBoss Fuse: instalao express
unzipjbossfusefull6.1.0.redhat379.zip cdjbossfuse6.1.0.redhat379/
vimetc/users.properties cdbin/ ./fuse * Inicia o Fuse no modo
standalone
#Allusersspecifiedinthisfile,willbeuploadedtothefabricregistryandwill
#beavailabletoallcontainersthatjointhefabric.
#Thepasswordofthefirstuserinthefilewillalsobeusedasaregistry(zookeeper)password
#unlessapasswordisexplicitlyspecified. admin=admin,admin
30. 34 Red Hat JBoss Fuse JBoss Fuse Shell
31. 35 Red Hat JBoss Fuse Deploy do WS
JBossFuse:karaf@root>install
mvn:org.fusesource.example/cxfbasic/1.0SNAPSHOT BundleID:251
JBossFuse:karaf@root>start251 JBossFuse:karaf@root>list
[251][Active][][Started][60]ApacheServiceMix::CXF
CodeFirstOSGiBundle(1.0.0.SNAPSHOT) obs: por padro o Fuse acessa o
repositrio local do Maven (~/.m2/repository) para baixar um
artefato. Caso necessrio possvel configurar um repositrio remoto no
arquivo de configurao: $FUSE_HOME/etc/org.ops4j.pax.url.mvn.cfg
atravs da propriedade org.ops4j.pax.url.mvn.repositories
32. 36 Red Hat JBoss Fuse Localizao de dependncias em
runtime
33. 37 Red Hat JBoss Fuse Testando o Servio WS Endpoint
http://localhost:8181/cxf/PersonServiceCF WSClient cdcxfbasic
mvnPclient INFO:CreatingService
{http://example.fusesource.org/}PersonServicefromclassorg.fusesource.example.Person
InvokinggetPerson... getPerson._getPerson_personId=Guillaume
getPerson._getPerson_ssn=0000000000
getPerson._getPerson_name=Guillaume
34. 38 Red Hat JBoss Fuse Camel Route Demo: Http Bridge
35. 39 Red Hat JBoss Fuse Gerando o projeto Maven Maven
archetype Maven Project mvnarchetype:generate
DarchetypeGroupId=org.apache.camel.archetypes
DarchetypeArtifactId=camelarchetypeblueprint
DarchetypeVersion=2.10.0.redhat60024
DgroupId=org.fusesource.example DartifactId=camelbasic
Dversion=1.0SNAPSHOT
36. 40 Red Hat JBoss Fuse Blueprint XML Configuration Build
cdcamelbasic mvninstall 5000
37. 41 Red Hat JBoss Fuse Build Desabilitar Teste unitrio
(gerado pelo archetype) #comentar@Testdaclasse
vimsrc/test/java/org/fusesource/example/RouteTest.java Adicionar
dependencia do componente cameljetty vimpom.xml Build cdcamelbasic
mvninstall org.apache.camel cameljetty 2.10.0.redhat60024
38. 42 Red Hat JBoss Fuse Deploy do WS
JBossFuse:karaf@root>install
mvn:org.fusesource.example/camelbasic/1.0SNAPSHOT BundleID:252
JBossFuse:karaf@root>start252 JBossFuse:karaf@root>list
[252][Active][][Started][60]ACamelBlueprintRoute
(1.0.0.SNAPSHOT)(1.0.0.SNAPSHOT)
39. 43 Red Hat JBoss Fuse Testando o Servio WSClient
cd../cxfbasic mvnPclient
Dexec.args="http://localhost:8282/cxf/PersonServiceCF"
INFO:CreatingService{http://example.fusesource.org/}PersonServicefrom
classorg.fusesource.example.Person InvokinggetPerson... Aps5seg...
getPerson._getPerson_personId=Guillaume
getPerson._getPerson_ssn=0000000000
getPerson._getPerson_name=Guillaume
40. 44 Red Hat JBoss Fuse Agrupando projetos com Maven
41. 45 Red Hat JBoss Fuse Agregao de projetos no Maven Maven
Aggregate POM cdgetstarted/ vimpom.xml org.fusesource.example
getstarted 1.0SNAPSHOT pom 4.0.0 GettingStarted::AggregatePOM
GettingStartedexample cxfbasic camelbasic Build mvninstall
42. 46 Red Hat JBoss Fuse Definindo uma Feature para a Aplicao:
Apache Karaf Feature
43. 47 Red Hat JBoss Fuse OSGI Bundles vs. Application Feature
Bundle = unidade de deployment isolada Application Feature =
conjunto de bundles que formam o ncleo da aplicaao Mecanismo mais
inteligente e conveniente de implantao de aplicaes dentro do JBoss
Fuse Ex: get-started project feature xml descriptor
44. 48 Red Hat JBoss Fuse OSGI Bundles vs. Application Feature
Como compor uma Feature? Depende das dependncias de sua aplicao
Depende dos bundles e features disponveis (pr- implantadas) no
container JBossFuse:karaf@root>features:list ...
[installed][2.12.0.redhat610379]camel
[installed][2.12.0.redhat610379]camelcore
[installed][2.12.0.redhat610379]camelspring
[installed][2.12.0.redhat610379]camelblueprint
45. 49 Red Hat JBoss Fuse Fuse Application Bundles mecanismo de
packaging utilizado para definio de Features Capaz de resolver
dependncias automaticamente em runtime Modos de deployments
suportados Hot Deploy $FUSE_HOME/deploy Feature URL Fuse Fabric
Profile
46. 50 Red Hat JBoss Fuse Criando um repositrio de Features
customizado
47. 51 Red Hat JBoss Fuse Feature XML descriptor Definindo a
Feature Na raiz do projeto Maven getstarted
mkdirpfeatures/src/main/resources/
vimfeatures/src/main/resources/getstarted feature.xml
48. 52 Red Hat JBoss Fuse Empacotando a Feature Feature
Packaging Na raiz do projeto Maven getstarted
vimfeatures/pom.xml
49. 53 Red Hat JBoss Fuse Empacotando a Feature 4.0.0
org.fusesource.example getstarted jar 1.0SNAPSHOT
GettingStartedFeatureRepository org.codehaus.mojo
buildhelpermavenplugin 1.5 attachartifacts package attachartifact
target/classes/getstarted.xml xml features
50. 54 Red Hat JBoss Fuse Build da Feature Feature Packaging Na
raiz do projeto Maven getstarted cdfeatures/pom.xml mvninstall
Observe que o JAR gerado contm o XML Descriptor da Feature criada
$jartvftarget/getstarted1.0SNAPSHOT.jar
0TueJan1300:15:08BRT2015METAINF/
132TueJan1300:15:06BRT2015METAINF/MANIFEST.MF
394TueJan1300:12:26BRT2015getstartedfeature.xml
0TueJan1300:15:08BRT2015METAINF/maven/
0TueJan1300:15:08BRT2015METAINF/maven/org.fusesource.example/
0TueJan1300:15:08BRT2015METAINF/maven/org.fusesource.example/getstarted/
1487TueJan1300:14:52BRT2015METAINF/maven/org.fusesource.example/getstarted/pom.xml
125TueJan1300:12:26BRT2015METAINF/maven/org.fusesource.example/getstarted/pom.properties
51. 55 Red Hat JBoss Fuse Deploy da Feature Feature Deployment
No Fuse Shell Remova os OSGI Bundles: camelcxf e camelbasic
JBossFuse:karaf@root>list JBossFuse:karaf@root>uninstall251
JBossFuse:karaf@root>uninstall252 Informe ao Container onde
localizar as features instaladas
JBossFuse:karaf@root>features:addurl
mvn:org.fusesource.example/getstarted/1.0
SNAPSHOT/xml/features
52. 56 Red Hat JBoss Fuse Deploy da Feature No Fuse Shell
Confira se a Feature getstartedbasic foi carregada no Container
JBossFuse:karaf@root>features:list|grepgetstarted
[uninstalled][0.0.0]getstartedbasicgetstarted Instale a Feature
JBossFuse:karaf@root>features:installgetstartedbasic
JBossFuse:karaf@root>features:list|grepgetstarted
[installed][0.0.0]getstartedbasicgetstarted
53. 57 Red Hat JBoss Fuse OSGI Config Service: configurando a
aplicao em runtime
54. 58 Red Hat JBoss Fuse Mecanismo de configurao de aplicaes
Permite alterar propriedades e/ou configuraes de suas aplicaes em
tempo de implantao e execuo Conceitos Persistent ID (PID) Conjunto
de propriedades Nome segue o padro Java Package Ex:
org.ops4j.pax.web (configura o conatiner web do Jboss Fuse Jetty
WebServer) Properties Propriedade (nome=valor) pertencente um
PID
55. 59 Red Hat JBoss Fuse Mecanismo de configurao de aplicaes
Definio de PIDs dentro do Fuse Arquivo texto (estilo properties
file) $JBOSS_FUSE_HOME/etc .cfg Ex: org.ops4j.pax.web.cfg Fuse
Profiles Utilizando a console de gerncia HawtIO Utilizando o Shell
atravs do comando fabric:profileedit
56. 60 Red Hat JBoss Fuse Mecanismo de configurao de aplicaes
Substituio de propriedades (property placehoders) Altere o projeto
cxfbasic Removaodescritor(SpringXML)
cxfbasic/src/main/resources/METAINF/spring/beans.xml
Crieumnovodescritor(BlueprintXML)
cxfbasic/src/main/resources/OSGIINF/blueprint/blueprint.xml Dessa
forma podemos utilizar o mecanismo OSGI Config Admin service
properties> placeholder> PID name Default value Property name
Placehoder
57. 61 Red Hat JBoss Fuse Mecanismo de configurao de aplicaes
Faa o build do projeto cxf-basic instale a feature get-started-cxf
cdcxfbasic/ mvncleaninstall Instale a feature get-started-cxf
JBossFuse:karaf@root>features:uninstallgetstartedbasic
JBossFuse:karaf@root>features:installgetstartedcxf Teste o Web
Service utilizando a porta configurada no PID:
$JBOSS_FUSE_HOME/etc/org.fusesource.example.get.started.cfg
mvnPclientDexec.args="http://localhost:8182/PersonServiceCF"
InvokinggetPerson... getPerson._getPerson_personId=Guillaume
getPerson._getPerson_ssn=0000000000
getPerson._getPerson_name=Guillaume
58. 62 Red Hat JBoss Fuse Fuse Fabric: escalando sua
aplicao
59. 63 Red Hat JBoss Fuse Fabric Gesto e Provisionamento de:
Containers Configuraes Artefatos em mltiplos Hosts Garante Alta
disponibilidade Escalabilidade
60. 64 Red Hat JBoss Fuse Fabric: composio Fabric Registry
Service Banco de Dados compartilhado mantm informaes sobre o estado
do Fabric Info sobre provisionamento e gesto da topologia de
containers Fabric Conjunto de containers que compartilham um
registro comum Fabric Ensemble Grupo de Fabric Servers: Para manter
a alta disponibilidade, utiliza sempre um nmero impar (1, 3, 5,
etc) de Servers
61. 65 Red Hat JBoss Fuse Fabric: composio Fabric Server Mantm
o Registry Service Fabric Container (Fuse Instance) Runtime da
aplicao Tipos Root container Child container Profile Unidade de
implantao Composto por: features, bundles e configuraes
(properties)
62. 66 Red Hat JBoss Fuse Divider SlideCriando um Fabric
63. 67 Red Hat JBoss Fuse Meu primeiro Fabric: server registry
JBossFuse:karaf@root>fabric:createnewuserAdminUsernew
userpasswordAdminPasszookeeperpasswordZooPasswait
forprovisioningresolvermanualipmanualip127.0.0.1 Use um IP Fixo
para evitar problemas com trocas de endereo IP
64. 68 Red Hat JBoss Fuse Meu primeiro Fabric: containers
JBossFuse:karaf@root>fabric:containercreatechildrootchild2
Thefollowingcontainershavebeencreatedsuccessfully:
Container:child1. Container:child2.
JBossFuse:karaf@root>fabric:containerlist
[id][version][connected][profiles][provisionstatus]
Root*1.0truefabric,fabricensemble00001,jbossfusefullsuccess
child11.0truedefaultsuccess child21.0truedefaultsuccess
65. 69 Red Hat JBoss Fuse Meu primeiro Fabric: feature deploy
Profile Base
JBossFuse:karaf@root>fabric:profilecreateparentsfeaturecxfgscxfbase
Adicionando o repositrio de features
JBossFuse:karaf@root>profileeditrmvn:org.fusesource.example/get
started/1.0SNAPSHOT/xml/featuresgscxfbase
Addingfeaturerepository:mvn:org.fusesource.example/getstarted/1.0
SNAPSHOT/xml/featurestoprofile:gscxfbaseversion:1.0 Deploy da
feature getstartedcxf
JBossFuse:karaf@root>profileeditfeaturesgetstartedcxfgscxfbase
Addingfeature:getstartedcxftoprofile:gscxfbaseversion:1.0 NOTA:
caso seja necessrio configurar um repositrio maven corporativo
remoto (ex. Nexus, Archiva, etc), consulte as intrues descritas em:
https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.1/html/Configuring_and_Running_Red_Ha
66. 70 Red Hat JBoss Fuse Meu primeiro Fabric: criando o
profile Herana de profiles: criando dois profiles devirados do
profile Base (gs cxfbase)
JBossFuse:karaf@root>profilecreateparentsgscxfbasegscxf01
JBossFuse:karaf@root>profilecreateparentsgscxfbasegscxf02
67. 71 Red Hat JBoss Fuse Meu primeiro Fabric: profile property
placeholder Alterando a propriedade portNumber em cada profile
gs-cxf-01 JBossFuse:karaf@root>profileeditp
org.fusesource.example.get.started/portNumber=8185gscxf01
Settingvalue:8185key:portNumberonpid:org.fusesource.example.get.startedand
profile:gscxf01version:1.0 gs-cxf-02
JBossFuse:karaf@root>profileeditp
org.fusesource.example.get.started/portNumber=8186gscxf02
Settingvalue:8186key:portNumberonpid:org.fusesource.example.get.startedand
profile:gscxf02version:1.0
68. 72 Red Hat JBoss Fuse Meu primeiro Fabric: deploy
JBossFuse:karaf@root>fabric:containerchangeprofile child1gscxf01
JBossFuse:karaf@root>fabric:containerchangeprofile
child2gscxf02
69. 73 Red Hat JBoss Fuse Meu primeiro Fabric: testando os
endpoints cdgetstarted/cxfbasic mvnPclient
Dexec.args="http://localhost:8185/PersonServiceCF" mvnPclient
Dexec.args="http://localhost:8186/PersonServiceCF"
InvokinggetPerson... getPerson._getPerson_personId=Guillaume
getPerson._getPerson_ssn=0000000000
getPerson._getPerson_name=Guillaume