Transcript
  1. 1. Red Hat JBoss Fuse: conceitos bsicos para desenvolvedores Rafael T. C. Soares Arquiteto de Solues, Red Hat Janeiro, 2015
  2. 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. 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. 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. 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. 6. 10 Red Hat JBoss Fuse Red Hat JBoss Fuse Container: arquitetura
  7. 7. 11 Red Hat JBoss Fuse JBoss Fuse The Big Picture Tooling Frameworks Containers Message Broker Service Bus Monitoring/Operation
  8. 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. 9. 13 Red Hat JBoss Fuse JBoss Fuse Container Suporta vrios tipos de deployment
  10. 10. 14 Red Hat JBoss Fuse Modelo de Desenvolvimento
  11. 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. 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. 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. 14. 18 ADD NAME (View > Master > Slide master) Maven: conceitos Ciclo de vida mvn Estrutura do projeto
  15. 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. 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. 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. 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. 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. 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. 21. 25 ADD NAME (View > Master > Slide master) Injeo de Dependncia Spring XML Descritor /src/main/resources/META-INF/spring/*.xml
  22. 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. 23. 27 ADD NAME (View > Master > Slide master) Injeo de Dependncia Blueprint XML Descritor /src/main/resources/OSGI-INF/blueprint/*.xml
  24. 24. 28 Red Hat JBoss Fuse Apache CXF Web Service Demo: WS Code First Approach
  25. 25. 29 Red Hat JBoss Fuse Maven Fuse Source Repository
  26. 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. 27. 31 Red Hat JBoss Fuse Spring XML Configuration Build cdcxfbasic mvninstall
  28. 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. 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. 30. 34 Red Hat JBoss Fuse JBoss Fuse Shell
  31. 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. 32. 36 Red Hat JBoss Fuse Localizao de dependncias em runtime
  33. 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. 34. 38 Red Hat JBoss Fuse Camel Route Demo: Http Bridge
  35. 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. 36. 40 Red Hat JBoss Fuse Blueprint XML Configuration Build cdcamelbasic mvninstall 5000
  37. 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. 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. 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. 40. 44 Red Hat JBoss Fuse Agrupando projetos com Maven
  41. 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. 42. 46 Red Hat JBoss Fuse Definindo uma Feature para a Aplicao: Apache Karaf Feature
  43. 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. 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. 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. 46. 50 Red Hat JBoss Fuse Criando um repositrio de Features customizado
  47. 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. 48. 52 Red Hat JBoss Fuse Empacotando a Feature Feature Packaging Na raiz do projeto Maven getstarted vimfeatures/pom.xml
  49. 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. 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. 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. 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. 53. 57 Red Hat JBoss Fuse OSGI Config Service: configurando a aplicao em runtime
  54. 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. 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. 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. 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. 58. 62 Red Hat JBoss Fuse Fuse Fabric: escalando sua aplicao
  59. 59. 63 Red Hat JBoss Fuse Fabric Gesto e Provisionamento de: Containers Configuraes Artefatos em mltiplos Hosts Garante Alta disponibilidade Escalabilidade
  60. 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. 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. 62. 66 Red Hat JBoss Fuse Divider SlideCriando um Fabric
  63. 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. 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. 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. 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. 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. 68. 72 Red Hat JBoss Fuse Meu primeiro Fabric: deploy JBossFuse:karaf@root>fabric:containerchangeprofile child1gscxf01 JBossFuse:karaf@root>fabric:containerchangeprofile child2gscxf02
  69. 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. 70. 74 Red Hat JBoss Fuse Divider SlideDvidas?

Top Related