Transcript of Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
- 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
- 28. 32 Red Hat JBoss Fuse JBoss Fuse: tipos de instalao
Minimal: Apache Karaf Apache Camel core selected Apache Camel
components Medium: + Apache ActiveMQ + Fuse Management Console
(hawtio) Full: + Apache CXF + JBI components
- 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
- 70. 74 Red Hat JBoss Fuse Divider SlideDvidas?