JBoss Fuse - Guia Rápido

Neste capítulo, começaremos com os fundamentos do Enterprise Service Bus. A seguir, é fornecida uma explicação detalhada sobre o ESB, juntamente com suas vantagens, desvantagens e alguns diagramas para facilitar o entendimento.

O que é ESB?

ESB significa Enterprise Service Bus. O ESB em sua forma mais simples é um middleware que atua como uma rodovia de informações, auxiliando a comunicação de vários aplicativos.

No mundo empresarial, desenvolvemos soluções para muitas coisas. Essas soluções podem usar diferentes tecnologias e diferentes formatos de dados. É complicado usar essas soluções juntas devido à variação de compatibilidade de comunicação ou formato de dados nessas tecnologias. Portanto, precisamos de uma tecnologia que permitaloosely coupled integration entre essas diferentes soluções.

O ESB visa simplificar esse problema de integração, tornando-se um 'HUB' que fica no meio de todos os seus aplicativos e facilita o roteamento de mensagens entre eles. O ESB atua como um mediador, atuando como uma auto-estrada de informações, cuidando do roteamento da transformação dos dados, deixando o Coder ou o Desenvolvedor se concentrar na lógica de sua própria aplicação.

Entender o ESB se torna muito simples quando entendemos o problema para o qual ele foi especialmente projetado e a solução se torna fácil. Deve-se ter uma compreensão clara de como habilitar muitos sistemas distintos, escritos em diferentes linguagens e rodando em diferentes máquinas usando diferentes formatos de dados para compartilhar informações e formar uma plataforma de negócios integrada.

O problema de integração

Na plataforma corporativa, é comum que vários aplicativos colaborem e forneçam funcionalidade de negócios como um todo, mas a integração desses aplicativos é o problema mais recorrente. Isso se torna ainda mais difícil com o tempo, conforme os aplicativos aumentam.

Cada aplicativo pode inserir e produzir dados em seu próprio formato. Essa abordagem funciona bem se o número de aplicativos for menor, mas conforme o número de aplicativos aumenta, as rodas de integração também precisam ser agitadas com uma abordagem melhor. Por exemplo, se um determinado aplicativo para um negócio precisa ser alterado, sua saída ou formato de dados de entrada para todos os aplicativos que dependem desse aplicativo Mestre são afetados.

Tal abordagem serve como o maior obstáculo para a integração, que espera uma arquitetura fortemente acoplada. É aqui que o ESB entra em cena. Cada aplicativo não precisa se comunicar diretamente com outro aplicativo; em vez disso, todos os aplicativos se comunicam com o ESB e o ESB lida com o roteamento de informações e a conversão do formato de dados interno.

Por que ESB?

A seguir estão alguns pontos que explicam por que o Enterprise Service Bus é essencial.

  • O ESB visa simplificar o problema de integração com aplicativos compatíveis com variantes.

  • Ele atua como um Middleware, que atua como mediador de todos os seus aplicativos e facilita o roteamento de mensagens entre eles.

  • Em vez de cada aplicativo interagir diretamente com todos os outros aplicativos, cada aplicativo agora tem apenas uma interface para o ESB.

  • O ESB é responsável por traduzir mensagens de / para um formato comum e encaminhá-las para seus destinos.

  • A principal economia nessa abordagem é uma bênção se você precisar substituir qualquer um dos aplicativos existentes. Em vez de escrever um monte de novas interfaces, agora você só tem uma interface com a qual se preocupar (entre seu aplicativo e o ESB).

SOA e ESB?

SOA e ESB são comumente usados ​​de forma intercambiável, mas são completamente diferentes.

SOA é um padrão de design que permite que o aplicativo exponha suas funcionalidades como um serviço na rede por meio de protocolos de comunicação, enquanto o ESB é um modelo que facilita a comunicação entre sistemas distintos, mas o ESB pode ser usado como um backbone durante a implementação de SOA.

JBoss Fuse é uma solução ESB de código aberto da Redhat. É uma solução empresarial baseada no projeto da comunidade, Apache Servicemix.

Integração para Fusível

O JBoss Fuse é uma plataforma de integração leve e flexível que permite a integração rápida de aplicativos corporativos.

O Fuse foi inicialmente desenvolvido pela Progressive software Inc., que foi adquirida pela Redhat em 2012. JBoss Fuse 6.1.0.redhat-379 GA é uma versão estável do Fuse que pode ser baixada de seu site oficial.

Arquitetura

A Fuse combina várias tecnologias em um único produto.

Componentes

Apache CXF

Apache CXF é uma estrutura de desenvolvimento de serviços da web de código aberto que também oferece suporte ao desenvolvimento de serviços da web SOAP e Rest.

Apache Camel

Apache Camel é uma estrutura de integração baseada em EIP. Os padrões EIP ou Enterprise Integration são soluções identificadas para problemas recorrentes na Enterprise Integration. Uma solução de integração completa pode ser alcançada meteoricamente com combinações desses padrões predefinidos prontos para uso.

Ele permite escrever a lógica de roteamento em várias linguagens específicas de domínio como Java, Spring DSL e Scala etc.

Apache AMQ

Apache AMQ é um JMS que fornece um sistema de mensagens confiável de acordo com os padrões JMS. Ele não apenas suporta a especificação JMS, mas também fornece alguns recursos interessantes e úteis que não estão incluídos nas especificações JMS.

Apache Karaf

Apache Karaf é um contêiner OSGi leve que atua como tempo de execução para os artefatos. O Apache Karaf é de natureza mais dinâmica em comparação com o JVM. Ele permite instalar ou desinstalar módulos em tempo de execução. Todos os artefatos no Fuse são implantados no Karaf.

Tecido

O Fabric fornece uma maneira fácil de gerenciar implementações de artefatos em um ambiente grande e distribuído. Ele fornece gerenciamento centralizado para todas as instâncias de fusíveis múltiplas.

Instalando Fusível

Instalar o Fuse é bastante simples. Como outros produtos JBoss, o Fuse vem como um arquivo zip que pode ser extraído e, após algumas pequenas alterações na configuração, pode ser iniciado diretamente.

A instalação do fusível é um processo de quatro etapas -

Baixar

Baixe o Fuse 6.1.0 GA no link a seguir. http://www.jboss.org/

Descompactar

Como todos os outros produtos JBoss, o Fuse também é um zip independente de plataforma.

Descompacte o arquivo baixado no diretório de destino que você deseja que seja o diretório de instalação do Fuse. Escolha este diretório com sabedoria, pois ele deve permanecer o mesmo durante a vida útil da instância do Fuse.

Note - Embora o Fuse descompacte e inicie como outros produtos JBoss, não é recomendado mover a instalação do Fuse de um local para outro após a conclusão da instalação.

Configurar

Depois de descompactar o Fuse, você encontrará os seguintes diretórios dentro do diretório extraído -

  • bin
  • etc
  • deploy
  • lib
  • licenses
  • extras
  • quickstarts

Dos quais usaremos apenas dois diretórios bin E etc.

Praticamente após extrair o Fuse, devemos ser capazes de iniciar o Fuse diretamente, mas isso iniciará o Fuse com todas as configurações padrão, o que não é aconselhável para ambiente de produção. É altamente recomendável fazer as seguintes alterações antes de iniciar o Fuse.

Definir variáveis ​​de ambiente

  • Defina as seguintes variáveis ​​de ambiente - JAVA_HOME

  • A variável deve apontar para o diretório de instalação java - M2_HOME

  • A variável deve apontar para o diretório de instalação do Maven - PATH

  • Defina a variável de caminho para incluir executáveis ​​Java e Maven.

janelas

No Windows, as configurações podem ser feitas seguindo as instruções fornecidas abaixo -

Iniciar → Meu computador → Clique com o botão direito → Propriedades → Configurações avançadas do sistema → Variáveis ​​de ambiente.

UNIX e clones

Para cada usuário, há um perfil bash no *nixsistemas operacionais. Podemos adicionar ou editar a variável de sistema existente, alterando este arquivo.

$ vi ~/.bash_proflle

Note- Quaisquer alterações neste arquivo são permanentes. É altamente recomendável fazer um backup do arquivo existente antes de alterar o original.

Configuração básica

Vamos discutir sobre a configuração básica do JBoss Fuse e para isso temos que começar com o seguinte comando Edit $FUSE_INSTALLATION_DIR/etc/

  • Dentro user.properties

    • #admin=admin,admin

    • Isso precisa ser alterado de acordo com o primeiro administrador com nome de usuário que desejamos, segundo administrador com senha, o terceiro pode ser mantido como está porque indica uma função e não se esqueça de remover #

    • Por exemplo - FuseAdmin = FusePAss, admin

    • Dentro System.properties

      • karafName = root

        • Isso indica o nome que você deseja dar à instância Karaf.

        • Podemos nomeá-lo como quisermos, como Cont1.

        • Certifique-se de que o nome fornecido seja um nome exclusivo e não esteja sendo usado por outra instância do Fuse.

    • Dentro org.ops4j.pax.web.cfg

      • Org.osgi.service.http.port = 8181

      • Esta propriedade indica a porta que deve ser usada para acessar a interface HAWTIO baseada em navegador fornecida pela Fuse

      • HAWTIO é uma interface de navegador embutida para Fuse que está disponível a partir de 6.0

    • Dentro org.ops4j.pax.url.mvn.cfg

      • org.ops4j.pax.url.mvn.localRepository = D: / repositório

      • Esta propriedade indica o caminho para localRepository de nosso Maven de onde o Fuse instalará seus artefatos.

      • org.ops4j.pax.url.mvn.settings = D: /Maven/conf/settings.xml

      • Esta propriedade indica settings.xml que o Fuse deve usar para obter artefatos do Maven.

    Configurando o Maven

    Maven é um pré-requisito para instalar o Fuse. Se você não sabe o que é maven, consulte

    Maven é uma ferramenta construída usada para construir artefatos Fuse. O Fuse primeiro procura no repositório local Maven por artefatos quando emitimos o comando para instalar o artefato. Portanto, devemos informar ao Fuse onde o Maven está instalado e o caminho do repositório local do Maven.

    Editar $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

    Atualize as duas propriedades a seguir -

    • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
    • org.ops4j.pax.url.mvn.localRepository = $ local_repo

    Note - Por favor mude $local_repo com o caminho real do seu repositório local mencionado em Mavens settings.xml.

    Corre

    Depois de fazer alterações básicas na configuração, podemos iniciar o Fuse. Todos os arquivos binários para trabalhar com o Fuse estão localizados em$FUSE_INSTALLATION_DIR.

    Existem duas maneiras de iniciar o Fuse -

    • Usando ./fuse

      • Isso permitirá que você veja todo o progresso e os registros na mesma janela em que iniciou o Fuse.

      • Ele lhe dará o console Karaf no mesmo terminal mostrado abaixo.

    Note- Isso iniciará o fusível no modo de console, o que significa que o processo do fusível também será interrompido quando o usuário fizer logout da sessão ou fechar o terminal, o que não é desejável no cenário de produção ou desenvolvimento. Este script deve ser usado apenas para depurar o Fuse.

    • Usando ./start

      • Isso não mostrará nenhum log na tela, nem mesmo o progresso, mas iniciará o Fuse em segundo plano e o serviço Fuse não será interrompido quando o usuário sair da sessão ou fechar o terminal.

      • No aplicativo do mundo real, esse tipo de comportamento é desejado. O fusível deve estar funcionando em segundo plano, mesmo se fecharmos o terminal.

      • Se você deseja se conectar ao Fuse rodando em segundo plano, você pode usar client script que está localizado na mesma pasta.

      • Você deve obter a exibição conforme mostrado na imagem a seguir.

      • Sair do script do cliente não interromperá o serviço Fuse. Isso simplesmente fechará o console do Fuse.

    HAWTIO

    O Fuse também fornece acesso GUI completo a ele usando FMC (console de gerenciamento do Fuse). Você pode encontrar a GUI no URL abaixohttp://localhost:8181.

    Tudo o que fizemos executando comandos também pode ser feito acessando esta GUI baseada em navegador. É extremamente útil quando temos mais de um contêiner e estamos executando em um ambiente Fabric.

    Neste capítulo, discutiremos sobre o Apache Karaf e por que ele é chamado de contêiner OSGi leve, juntamente com seus benefícios e outros recursos importantes.

    O problema JVM

    JVM ou Java virtual Machine não atua como uma máquina virtual real. Uma máquina que permitirá que você pare, inicie ou reinicie componentes em execução dentro dela instantaneamente. Às vezes, pode permitir implantações dinâmicas em nível de classe, mas não há como implantar ou cancelar a implantação de um componente de seu aplicativo em sua máquina virtual sem reiniciá-lo.

    Para resolver esse problema e permitir a modularidade no aplicativo Java, o Fuse usa um runtime baseado em OSGi conhecido como Apache Karaf.

    OSGi

    A tecnologia OSGi é um conjunto de especificações que definem um sistema de componentes dinâmicos para java. Essas especificações permitem um modelo de desenvolvimento em que os aplicativos são (dinamicamente) compostos de muitos componentes diferentes (reutilizáveis).

    Benefícios do OSGi

    • Reduced Complexity - O aplicativo é construído como componentes de colaboração que escondem seus detalhes de implementação uns dos outros, resultando em complexidade reduzida.

    • Reusability - Muitos componentes podem aproveitar o mesmo componente implantado em um contêiner.

    • Deployment - OSGi fornece suporte para iniciar, parar e atualizar os componentes em tempo real com suas APIs de gerenciamento de ciclo de vida sem reinicialização do contêiner.

    Recursos do Bundles Vs

    A seguir está a comparação entre bundles e recursos.

    Pacotes

    Os pacotes são equivalentes ao OSGi o que os jars são para a JVM. Pacotes configuráveis ​​são artefatos que podem ser implementados em um contêiner OSGi. Os pacotes são componentes que funcionam juntos ou independentemente para formar um aplicativo.

    Esses pacotes podem ser instalados, desinstalados, atualizados, iniciados ou interrompidos no tempo de execução sem reiniciar o contêiner.

    Características

    Os recursos são uma forma de implantar vários pacotes juntos. Às vezes, faz mais sentido implantar bundles em grupo. Os recursos nos permitem implantar um grupo de pacotes com apenas um comando.

    Por que outro container?

    Apache Karaf é um runtime baseado em OSGi, é onde nossos pacotes de aplicativos são executados. O Fuse usa o Apache Karaf como seu tempo de execução no qual os pacotes são executados e colaboram para fornecer funcionalidade de negócios.

    Karaf é construído em Felix e equinox, que são Frameworks OSGi.

    Arquitetura Karaf

    O Apache Karaf adiciona as seguintes funcionalidades adicionais ao tempo de execução OSGi básico.

    Hot Deployment

    O Karaf oferece suporte à implantação dinâmica. Ele contém um diretório hot deploy. Tudo o que é colocado neste diretório é automaticamente implantado e instalado no Karaf como um pacote.

    Exploração madeireira

    O Karaf fornece registro centralizado, gerando registros para todos os pacotes em $Fuse_home/data/log. Podemos editar a configuração do logger emorg.ops4j.pax.logging.cfg dentro $Fuse_home/etc directory.

    Admin console

    Karaf fornece um console de administração sofisticado e lúcido para interagir com a instância em execução do fusível. Ele também fornece um conjunto pré-instalado de comandos que podem ser usados ​​para gerenciar e monitorar componentes (Bundle) em tempo de execução. Este console é extensível, então nos permite adicionar novos comandos ao console, adicionando novos bundles ao console.

    Acesso SSH

    Karaf permite acesso remoto a este console de administração com SSH. Qualquer pessoa com credenciais válidas pode se conectar ao console de administração do karaf pelo terminal SSH.

    Neste capítulo, discutiremos o que é o Apache Camel e como ele efetivamente roteia os dados entre os terminais, junto com alguns exemplos.

    O que é Apache Camel?

    Apache Camel é uma estrutura de integração de código aberto que foi iniciada no início de 2007.

    É uma abordagem baseada em EIP (Enterprise Integration Pattern) que fornece várias implementações de padrões prontos para uso que podem ser usados ​​para resolver problemas de integração corporativa. EIP nada mais são do que soluções comprovadas para problemas bem documentados e recorrentes na integração empresarial.

    O Camel também é conhecido como mecanismo de roteamento e mediação, pois roteia efetivamente os dados entre os endpoints, ao mesmo tempo em que assume uma carga pesada como transformação de formatos de dados, conectividade de endpoint e muito mais.

    Exemplo Básico

    Os pré-requisitos para usar o Apache Camel são -

    • Java
    • Maven
    • Redhat JBoss Fuse 6.1-GA-379

    Crie o esqueleto básico do aplicativo

    mvn:archetype generate 
    –DgroupId = com.tutorialpoint.app 
    –DartifactId = camel-first-app 
    –DarchetypeGroupId = org.apache.camel.archetypes
    –DarchetypeArtifactId = camel-archetype-spring 
    –DinteractiveMode = false -X

    Isso deve gerar a seguinte estrutura de diretório.

    Este é um esqueleto básico de nosso aplicativo Camel sendo gerado.

    Editar camel-context.xml

    Editar camel-first-app → src → main → resources → META-INF\spring\camel-context.xml para corresponder conforme abaixo

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input file
             (leaving them in place - see the 'noop' flag) 
             then performs content based routing on the message using XPath -->
    			
          <route>
             <from uri = "file:///d:/src/data?noop=false"/>
             <choice>
                <when>
                   <xpath>/person/city = 'London'</xpath>
                   <log message = "UK message"/>
                   <to uri = "file:///d:/target/messages/uk"/>
                </when>
    				
                <otherwise>
                   <log message = "Other message"/>
                   <to uri = "file:///d:/target/messages/others"/>
                </otherwise>
    				
             </choice>
    			
          </route>
       </camelContext>
    </beans>

    Editar pom.xml

    Adicione o seguinte código dentro de <plugins> </plugins>

    <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <version>2.3.4</version>
       <extensions>true</extensions>
    	
       <configuration>
          <instructions>
             <Bundle-SymbolicName>
                ${project.artifactId}
             </Bundle-SymbolicName>
             <Import-Package>*</Import-Package>
          </instructions>
       </configuration>
    	
    </plugin>

    Alterar o tipo de embalagem de jar → bundle.

    <packaging>bundle</packaging>

    Construa o projeto usando o seguinte comando -

    mvn clean install

    Instale o projeto no fusível

    Comece o fusível usando Fuse.bat/start.bat. Se você iniciar o Fuse usandostart.bat, usar client.batpara conectar ao Fuse. Você deve obter a IU conforme mostrado na captura de tela a seguir.

    Esta é a CLI para acessar os comandos Karaf e Fuse.

    install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Teste se o seu projeto está em execução

    Agora seu aplicativo deve ser instalado no Fuse. Copie o diretório de dados para dentrocamel-first-app e coloque-o em D:/src/ e deve copiar a mensagem com city = London para D:/target/merssages/uk.

    Coloque o arquivo de entrada em D:/src/data

    Input

    Message1.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Message2.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    Output

    Em D: / target / messages / uk

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Em D: / target / messages / others

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    Neste capítulo, vamos entender os diferentes conceitos de camelo. Vamos começar dando um exemplo básico para entender os conceitos centrais para começar.

    CamelContext

    Cada aplicativo camelo terá pelo menos um CamelContext. Este é o lugar onde adicionamos rotas de camelos. É similar àApplicationContext da Primavera.

    O contexto do camelo pode ser pensado como um contêiner que mantém todas as coisas juntas. Um contexto de camelo pode ter várias rotas dentro dele.

    Rotas

    CamelContext pode conter uma ou mais rotas. As rotas são a lógica de integração que define como os dados fluirão no contexto do camelo de um ponto final para outro.

    Endpoint

    Endpoint é o fim do canal através do qual o sistema pode enviar ou receber mensagens. É o que chamamos de destino ou fonte na linguagem da comunicação.

    Componentes

    Os componentes são pontos de extensão no Camel. Os componentes podem ser uma interface para tecnologia, formato de dados, transformadores, etc. Eles também podem atuar como uma fábrica para terminais.

    EIP

    EIP significa Enterprise Integration Pattern. Estas são soluções identificadas e bem conhecidas para um problema recorrente. Camel suporta a maioria dos padrões de integração empresarial.

    Roteador baseado em conteúdo

    Os padrões CBR nos permitem rotear os dados de acordo com o conteúdo do arquivo de entrada.

    Este padrão é usado quando temos que rotear valores dependendo do conteúdo do corpo de entrada.

    O exemplo a seguir irá ler dados de D:/data/inputdiretório. Após a leitura, ele verificará a tag de valor dentro da tag de dados. Se a tag de valor contémvalue1, será enviado para D:/value1, Se contiver value2, será enviado para D:/value2 e se nenhum desses dois, então será enviado a outros.

    <CamelContext xmlns = "http://camel.apache.org/schema/spring">
       <route>
          <from uri = "file:///D:/data/input"/>
          <choice>
             <when>
                <xpath>/data/value = 'value1'</xpath>
                <to uri = "file:///D:/value1"/>
             </when> 
             <when>
                <xpath>/data/value = 'value2'</xpath>
                <to uri = "file:///D:/value2"/>
             </when>  
    			
             <otherwise>
                <to uri = "file:///D:/others "/>
             </otherwise>
    			
          </choice>
       </route>
    </camelContext>

    Input

    D: /data/input/message1.xml

    <data>
       <value>value1</value>
    </data>

    D: /data/input/message2.xml

    <data>
       <value>value2</value>
    </data>

    Output

    D: / valor1 /

    <data>
       <value>value1</value>
    </data>

    D: / valor2 /

    <data>
       <value>value2</value>
    </data>

    Divisor

    Um padrão de divisão é usado para dividir os dados de entrada em partes menores.

    Esse padrão é usado na maioria das vezes com grandes entradas de dados que precisam ser divididas em blocos, para que possam ser processados. Ele divide a entrada em fragmentos menores com base na string de token de entrada.

    <CamelContext xmlns = "http://camel.apache.org/schema/spring">
       <route>
          <from uri = "file:///D:/inbox"/>
          <split streaming = "true">
             <tokenize token = "order" xml = "true"/>
             <to uri = "activemq:queue:order"/>
          </split>
       </route>
    </CamelContext>

    Input

    D: /inbox/message.xml

    <order>
       <data>
          <value>value1</value>
       </data>
    </order>
    
    <order>
       <data>
          <value>value2</value>
       </data>
    </order>
    
    <order>
       <data>
          <value>value3</value>
       </data>
    </order>

    Output

    Se você verificar o AMQ, encontrará 3 mensagens postadas.

    <order>
       <data>
          <value>value4</value>
       </data>
    </order>

    Lista de destinatários

    Um padrão de lista de destinatários é usado quando uma lista de destinatários precisa ser recuperada do próprio corpo da mensagem.

    No exemplo a seguir, uma mensagem será enviada a todos os destinatários listados na tag do cliente como uma lista de strings separada por vírgulas.

    <CamelContext xmlns = "http://camel.apache.org/schema/spring">
       <route>
          <from uri = "jms:xmlOrders" />
          <recipientList>
             <xpath>/order/customer</xpath>
          </recipientList>
       </route>
    </camelContext>

    Outros EIPs

    O Camel oferece suporte a quase todos os EIPs identificados. Alguns dos EIP comumente usados ​​são mencionados abaixo.

    • Log - Para registrar a mensagem completa ou parte dela

    • Message Filter - Filtragem de conteúdo de mensagens

    • Re-Sequencer - Para obter todos os tokens em sequência

    • Wiretap - Para inspecionar mensagens de viagem

    A lista completa de EIP e seu uso pode ser encontrada na documentação oficial da Camel http://camel.apache.org/eip.html

    Tratamento de exceções em camelo

    Using Error Handler - Esta é a maneira mais fácil de lidar com exceções no camelo.

    Para usar isso, temos que configurar o bean de classe do manipulador de erro e fornecê-lo como referência para CamelContext errorHandlerRef atributo.

    <bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
       <property name = "logName" value = "mylogger.name"/>
       <property name = "level" value = "DEBUG"/>
    </bean>
    
    <camelContext errorHandlerRef = ” loggingErrorHandler” >
       …
    </camelContext>

    Usando Try Catch Finalmente

    Camel também suporta o estilo Java Try Catch Finally block para tratamento de erros.

    Assim como o Java, ele tem os três blocos a seguir -

    • doTry bloco contém código que pode gerar exceção.

    • doCatch bloco contém código que precisa ser executado em caso de exceção.

    • doFinallybloco tem código que deve ser executado independentemente da exceção. Ele sempre será executado, não importa se a exceção foi levantada ou não.

    Note- Mock é um componente de teste e não é recomendado para outros fins. É o componente no camel usado para teste, assim como o componente jMOck no desenvolvimento dirigido por teste.

    <route>
       <from uri = "direct:start"/>
       <doTry>
          <process ref = "someProcesorThatmayFail"/>
          <to uri = "mock:result"/>
    		
          <doCatch>
             <exception>java.io.IOException</exception>
             <exception>java.lang.IllegalStateException</exception>
             <to uri = "mock:catch"/>
          </doCatch>
    		
          <doFinally>
             <to uri = "mock:finally"/>
          </doFinally>
    		
       </doTry>
    </route>

    No exemplo acima, podemos fornecer uma lista de exceções que precisam ser tratadas pelo bloco catch.

    Implantando pacote no fusível

    Comece o fusível usando Fuse.bat/start.bat.

    Se você iniciar o Fuse usando start.bat, use client.bat para se conectar ao Fuse. Você deve obter a IU conforme mostrado na captura de tela a seguir.

    Esta é a CLI para acessar os comandos Karaf e Fuse.

    install –s mvn:group.id /artifact.id/version 
    e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Neste capítulo, vamos discutir sobre o que é Apache CXF e como ele pode ser útil no desenvolvimento de SOAP e Rest Web Services.

    O que é Apache CXF?

    Apache CXF é uma estrutura de desenvolvimento de serviço da web que pode ser utilizada para desenvolver serviços da web SOAP e Rest. CXF é totalmente compatível comJAX-RS and JAX-Ws padrão.

    É a estrutura de desenvolvimento de serviço da Web mais amplamente usada atualmente. O CXF aprendeu e aprimorou o Axis2, que agora está sendo gradualmente substituído pelo CXF.

    CXF vs Axis2

    CXF Axis2
    Melhorias

    CXF é a estrutura mais usada a partir de agora.

    Tem muitas melhorias em relação ao Axis2

    O Axis2 está sendo gradualmente substituído pelo CXf.

    Requer mais código em comparação com CXF

    Código requerido

    CXF requer menos código em comparação com Axis2

    Axis2 requer mais código comparativamente

    Conformidade Padrão

    CSF é totalmente compatível com JAX-RS e JAX-WS

    Axis2 não é totalmente compatível com JAX-RS e JAX-WS

    Compatível com Spring

    sim

    Não

    Separação de front-ends

    Limpar a separação do front-end do código JAX-WS

    Nenhuma separação limpa é fornecida

    SABONETE

    SOAP significa Simple Object Access Protocol. É um protocolo para troca de informações estruturadas em serviços da web entre dois sistemas. Ele se baseia principalmente em XML para estruturar dados e usa HTTP ou SMTP para negociação e transmissão de mensagens.

    Existem duas abordagens para desenvolver serviços da web SOAP -

    • Code first - Nesta abordagem, WSDL é gerado a partir do código.

    • Contract first - Primeiro no contrato, o código é gerado a partir de WSDL.

    Desenvolvimento SOAP usando CXF

    Configurar Maven

    Adicione o seguinte perfil ao seu settings.xml do Maven.

    <profiles>
       <profile>
          <id>Jboss-Fuse</id>
    		
          <activation>
             <activeByDefault>true</activeByDefault>
          </activation>
    		
          <repositories>
             <repository>
                <id>fusesource</id>
                <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
                <snapshots>
                   <enabled>false</enabled>
                </snapshots>
                <releases>
                   <enabled>true</enabled>
                </releases>
             </repository>
          </repositories>
    		
       </profile>
    </profiles>

    Criar esqueleto

    mvn archetype:generate
    -DarchetypeGroupId = org.apache.servicemix.tooling 
    -DarchetypeArtifactId = servicemix-cxf-code-first-osgi-bundle 
    -DarchetypeVersion=2012.01.0.redhat-60024 
    -DgroupId = org.fusesource.example 
    -DartifactId = cxf-basic 
    -Dversion = 1.0-SNAPSHOT

    Build Web Service Project.

    mvn clean install

    Install web-service into Fuse using the following command.

    JBossFuse:[email protected]>install -s mvn:org.fusesource.example/cxf-basic/1.0-SNAPSH

    Check if bundle has registered SOQP web-service

    Abrir URL http://localhost:8181/cxf

    O serviço da web deve ser listado da seguinte maneira.

    Testing Web-Service

    mvn -Pclient

    INFO - Criação de serviço {http://ws.totorials.com/} PersonService da classe com.to

    torials.ws.Person
    Invoking getPerson...
    getPerson._getPerson_personId = Guillaume
    getPerson._getPerson_ssn = 000-000-0000
    getPerson._getPerson_name = Guillaume
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 30.668 s
    [INFO] Finished at: 2016-02-15T21:01:20+05:30
    [INFO] Final Memory: 10M/37M
    [INFO] ------------------------------------------------------------------------

    Para começar, REST significa Transferência de Estado Representacional. É uma forma de desenvolver serviços da Web com base em protocolo cliente-servidor sem estado, armazenável em cache, que é HTTP na maioria dos casos.

    Os serviços da Web REST usam solicitações HTTP para postar, obter e excluir dados da rede.

    Desenvolvimento REST usando CXF

    Crie um projeto simples de início rápido Maven

    mvn archetype:generate 
    -DgroupId = com.tuts.abhinav 
    -DartifactId = rest-service
    -DarchetypeArtifactId = maven-archetype-quickstart 
    -DinteractiveMode = false

    Adicionar dependências

    <dependency>
       <groupId>org.apache.servicemix.specs</groupId>
       <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
       <version>1.9.0</version>
       <scope>provided</scope>
    </dependency>
    
    <dependency>
       <groupId>org.apache.servicemix</groupId>
       <artifactId>servicemix-http</artifactId>
       <version>2013.01</version>
    </dependency>
    
    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.16</version>
    </dependency>

    Adicionar instrução de construção

    <build>
       <defaultGoal>install</defaultGoal>
       <plugins>
          <plugin>
             <groupId>org.apache.felix</groupId>
             <artifalctId>maven-bundle-plugin</artifactId>
             <version>2.3.4</version>
             <extensions>true</extensions>
    			
             <configuration>
                <instructions>
                   <Bundle-SymbolicName>rest-example-database-post-method
                      </Bundle-SymbolicName>
                   <Import-Package>* </Import-Package>
                </instructions>
             </configuration>
    			
          </plugin>
       </plugins>
    </build>

    Adicionar repositórios de plug-ins de fusíveis

    <pluginRepositories>
       <pluginRepository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
       </pluginRepository>
    <pluginRepositories>

    Adicionar Repositórios

    <repositories>
       <repository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
    		
       </repository>
    	
       <repository>
          <id>fusesource.ea</id>
          <name>FuseSource Community Early Access Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
          <releases>
             <enabled>true</enabled>
          </releases>
       </repository>
    	
    </repositories>

    Criar classe de serviço

    Crie a classe UserService.java em com / tuts /

    package com.tuts;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/UserService_1")
    public class UserService {
       @GET
       @Path("/get_data")
       @Produces(MediaType.APPLICATION_JSON)
    	
       public String getUser() {
          String reponse = "This is standard response from REST";
          return reponse;
       }
    }

    Criar Blueprint.xml

    Crie blueprint.xml em / src / main / resources / OSGI-INF / blueprint blueprint.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <blueprint xmlns = "http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:jaxrs = "http://cxf.apache.org/blueprint/jaxrs"
       xsi:schemaLocation = "http://www.osgi.org/xmlns/blueprint/v1.0.0 
       http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
       http://cxf.apache.org/blueprint/jaxrs 
       http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
    	
       <jaxrs:server id = "service" address = "/users">
          <jaxrs:serviceBeans>
             <ref component-id = "userService" />
          </jaxrs:serviceBeans>
       </jaxrs:server>
    	
       <bean id = "userService" class = "com.tuts.UserService" />
    </blueprint>

    Instale o serviço Rest no Fuse

    install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

    Verifique se o pacote tem um serviço da web registrado

    Abrir URL http://localhost:8181/cxf

    Serviço da Web de teste

    Abrir URL http://localhost:8181/cxf/users12/UserService_1/get_data

    Neste capítulo, conheceremos o ActiveMQ e como ele atua como um intermediário de mensagens para permitir que os aplicativos se comuniquem entre si.

    O que é AMQ?

    ActiveMQ é um agente de mensagens de código aberto escrito em Java. É totalmente compatível com os padrões JMS 1.1.

    JMS é uma especificação que permite o desenvolvimento de sistema baseado em mensagem. O ActiveMQ atua como um intermediário de mensagens que fica entre os aplicativos e permite que eles se comuniquem de maneira assíncrona e confiável.

    Tipos de mensagens

    Existem dois tipos de opções de mensagens explicadas abaixo para uma melhor compreensão.

    Ponto a ponto

    Nesse tipo de comunicação, o broker envia mensagens para apenas um consumidor, enquanto os demais consumidores aguardam até receberem as mensagens do broker. Nenhum consumidor receberá a mesma mensagem.

    Se não houver consumidores, o Broker reterá as mensagens até chegar a um consumidor. Este tipo de comunicação também é chamado deQueue based communicationonde o produtor envia mensagens para uma fila e apenas um consumidor recebe uma mensagem da fila. Se houver mais de um consumidor, eles podem receber a próxima mensagem, mas não receberão a mesma mensagem do outro consumidor.

    Publicar / Assinar

    Nesse tipo de comunicação, o Broker envia a mesma cópia das mensagens para todos os consumidores ativos. Este tipo de comunicação também é conhecido comoTopic based communicationonde o corretor envia a mesma mensagem para todos os consumidores ativos que se inscreveram em um determinado Tópico. Este modelo suporta comunicação unilateral onde nenhuma verificação de mensagens transmitidas é esperada.

    Criação de fila e tópicos

    Fuse vem junto com ActiveMQ. Podemos acessar o ActiveMQ usando o console FMC (a interface baseada em navegador para trabalhar com AMQ).

    Faça login no FMC usando localhost:8181 e selecione ActiveMQ aba.

    • Clique em + Criar
    • Insira o nome da fila / tópico
    • Selecione Fila / Tópico no botão de opção
    • Clique em Criar fila / Criar tópico

    Agora você deve ser capaz de ver o TestQ criado na raiz → Fila →

    Para verificar o tópico criado, siga root → Tópico.

    Navegação / exclusão de conteúdo da fila

    • Faça login no FMC usando localhost:8181

    • Selecione a guia ActiveMQ

    • Raiz → Fila → TestQ <selecione a fila que deseja navegar> → Navegar

    • Para verificar o conteúdo desta mensagem, clique na mensagem em particular.
    • Você pode excluir uma mensagem em particular clicando no botão Excluir mostrado no canto superior direito

    Neste capítulo, aprenderemos o básico de como o ActiveMQ funciona com o Camel.

    Configurando para o componente ActiveMQ

    Antes de podermos usar a fila ou tópico ActiveMQ em nosso código, temos que configurar ActiveMQComponent. A configuração mínima de ActiveMQComponent pode ser feita conforme mostrado no programa a seguir -

    <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
       <property name = "brokerURL" value = "tcp://localhost:61616"/>
       <property name = "userName" value = "admin"/>
       <property name = "password" value = "admin"/>
    </bean>
    • brokerURL - Especifica o host e a porta para AMQ Broker.

    • username - Especifica o nome de usuário a ser usado para se conectar ao AMQ Broker.

    • password - especifica a senha para se conectar ao AMQ Broker.

    Conectando à fila

    Agora que configuramos ActiveMQComponent, podemos usá-lo em nosso CamelContext como terminal.

    Usaremos o endpoint AMQ no seguinte formato -

    Activemq:[queue|topic]:[queueName|topicName]

    Escrevendo mensagens para AMQ

    <?xml version = "1.0" encoding="UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

    Depois de implantar este pacote no contêiner Fuse, você deve ser capaz de ver as mensagens postadas no AMQ que foram colocadas como arquivos no D:/src/data.

    Input

    D: /src/data/input.txt

    Test me

    Output

    Lendo do AMQ

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "activemq:queue:TestQ"/>
             <to uri = "file:///d:/src"/>
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

    Input

    Depois de implantar este pacote, você deve ver um arquivo sendo gerado em D: / src e as mensagens são consumidas. Consumidor também deve ser mostrado para essa fila.

    Output

    D: / src

    Test me

    Escrevendo para o Tópico

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "file:///d:/src"/>
             <to uri = "activemq:topic:TestTopic” />
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

Lendo do Tópico

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring 
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "activemq:topic:TestTopic"/>
         <to uri = "file:///d:/src2"/>
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value="tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

Input

D: /src/file1.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

D: / src /

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

O que é tecido?

O Fabric fornece recursos de gerenciamento e orquestração para várias instâncias do Fuse. O Fabric nos permite controlar todas as instâncias do Fuse conectadas a ele a partir de um único ponto. Um recipiente de fusível normal pode ser convertido para atuar como um tecido. O Fabric tem registro de malha nele que serve como armazenamento de dados que contém todas as informações sobre contêineres, ele gerencia.

Por que fabricar?

O tecido possui as seguintes habilidades especiais, o que o torna um candidato ideal para uso em ambientes distribuídos.

  • Monitorar o estado de todos os contêineres da malha.
  • Iniciando e parando containers remotos.
  • Provê um contêiner remoto para executar um aplicativo específico.
  • Atualizando aplicativos e implementando patches no sistema ativo.
  • Iniciar e provisionar com novos contêineres rapidamente, por exemplo, para lidar com o aumento da carga no sistema.

Configuração de tecido

Criando Tecido

O recipiente de fusível normal pode ser convertido em tecido usando o seguinte comando

fabric: create --clean --zookeeper-password myZooPass

Conectando outro contêiner ao Fabric -

fabric:join --zookeeper-password myZooPass <fabric_host>:2181 Cont1

Note - Substitua <fabric_host> pelo nome do host real no qual a malha está em execução.

Ao fazer login no Fuse Management Console a partir do seu navegador usando localhost:8181, você deve ser capaz de ver dois contêineres, conforme mostrado na captura de tela a seguir. O contêiner de tecido é indicado por um pequeno símbolo de nuvem na frente dele.

Perfis

Um perfil contém as seguintes informações -

  • Pacotes a serem instalados
  • Recursos a serem instalados
  • Configurações a serem aplicadas

Um Perfil fornece uma maneira no ambiente de malha para instalar o mesmo conjunto de pacotes, recursos e configuração em vários servidores.

Se o mesmo perfil for aplicado a vários contêineres e fizermos alterações nesse perfil de qualquer contêiner, mudanças semelhantes serão implantadas automaticamente nos contêineres restantes aos quais ele é aplicado.

Criação de perfis

  • Faça login no FMC localhost:8181

  • Tempo de execução → Gerenciar

  • No lado esquerdo, no menu Perfil, clique em +

Digite o nome que deseja dar ao perfil e clique em criar.

Depois disso, o perfil deve ser criado.

Aplicando Perfil ao Contêiner

Tempo de execução → Containers → root (selecione o contêiner que você deseja)

Clique Addque levará a uma caixa pop-up. Procure o perfil que deseja e clique novamenteAdd.

O perfil deve ser mostrado na lista conforme mostrado na imagem a seguir.

Implantando um pacote

Para implantar um pacote, use o seguinte caminho -

Tempo de execução → Containers → root (selecione o contêiner que você deseja) → First_profile (selecione o perfil)

Clique na guia Bundles. Defina o caminho do pacote no seguinte formato e clique em+.

mvn:group.id/artifact.id/version

Por exemplo: mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Um pacote será adicionado ao perfil e implantado em todos os containers aos quais o perfil foi atribuído.

Desdobrando um pacote

Para desinstalar um pacote, use o seguinte caminho -

Tempo de execução → Containers → root (selecione o contêiner que você deseja) → First_profile (selecione o perfil)

Clique na guia Pacotes e pesquise o pacote que deseja excluir e clique em X. O pacote será excluído de todos os containers aos quais o perfil é aplicado.

Um contêiner filho fornece a maneira mais fácil de gerenciar a carga crescente. Quando o sistema está passando por uma carga repentina no tráfego e um único contêiner não é capaz de lidar com a carga, podemos criar facilmente um conjunto de contêineres filho e distribuir a carga entre eles, em vez de criar um novo contêiner completo.

Criação de um contêiner filho

Faça login no FMC usando localhost:8181

Agora, siga o caminho: Runtime → container → + Create (botão à direita)

Insira detalhes como nome do filho, número de contêiner pai de instâncias etc.

Clique Create And Start Container

Gerenciando um contêiner filho

Um contêiner filho atua apenas como um contêiner normal.

Parando um contêiner filho

Para interromper um contêiner filho, siga o caminho: Tempo de execução → Contêiner → Filho1

Clique em Parar para parar o recipiente filho.

Iniciando um contêiner filho

Para iniciar um container filho, siga o caminho: Runtime → Container → Child1

Clique em Iniciar para iniciar o contêiner filho.

Neste capítulo, discutiremos alguns problemas conhecidos que você pode encontrar ao trabalhar com o Fuse. Também discutiremos como você pode superar esses problemas.

Mudanças de código não são refletidas

Conecte-se à instância do Fuse usando um script de cliente. Pesquise o pacote para o qual você está enfrentando um problema, usando o seguinte comando.

JBossFuse:[email protected] > list|grep <Bundle Description>
For Example:
JBossFuse:[email protected] > list|grep Camel
[ 255] [Active ] [ ] [ ] [ 60] Fabric8 :: Camel Component (1.0.0.redhat-379)
[ 266] [Active ] [ ] [Started] [ 60] A Camel Spring Route (1.0.0.SNAPSHOT)

Note - ID do pacote para o pacote da saída do comando acima e use o comando abaixo.

JBossFuse:[email protected] > update <bundle id>
JBossFuse:[email protected] > update 266

O pacote não está sendo baixado

Isso pode acontecer pelos dois motivos a seguir -

  • Repositório Maven não especificado
  • Pacote não presente no repositório

Repositório Maven não especificado

Maven é uma ferramenta construída usada para construir artefatos Fuse. O Fuse primeiro procura no repositório local Maven por artefatos, quando emitimos o comando para instalar o artefato. Portanto, devemos informar ao Fuse onde o Maven está instalado e o caminho do repositório local do Mavens.

Editar $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

Atualize as duas propriedades a seguir -

  • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
  • org.ops4j.pax.url.mvn.localRepository = $ local_repo

Note - Altere $ local_repo com o caminho real do seu repositório local mencionado em Mavens settings.xml

Pacote não presente no repositório

Se as configurações do Maven estiverem em vigor, mas ainda se você enfrentar problemas ao baixar o pacote, certifique-se de que os pacotes JAR está presente no local correto no Repositório Maven.

Por exemplo, se o pacote a seguir está gerando erros durante o download -

mvn:com.tutorialpoint.app/camel-first-app/1.0-SNAPSHOT

Temos que verificar em $ M2_REPO / com / tutorialpoint / app / camel-first-app / 1.0-SNAPSHOT se o JAR real está presente.

Note - $ M2_REPO precisa ser substituído pelo caminho real do repositório Maven que configuramos o Fuse para usar.

Incapaz de fazer login no FMC (GUI baseada em navegador)

Users not Created - Se você está recebendo a seguinte IU, mas não consegue fazer o login com uma mensagem dizendo “Falha ao fazer login, proibido”.

Verifique se você adicionou usuários em $FUSE_INSTALLATION_HOME/etc/users.properties

O formato correto para adicionar usuários é -

Username = Password,Role

A porta HAWTIO é diferente

Se você nem mesmo conseguir obter a IU em localhost: 8181 no navegador, verifique se mencionou a porta correta no URL.

$FUSE_INSTALLATION_HOME/etc/org.ops4j.pax.web.cfg

Edite a seguinte propriedade no arquivo para usar a porta que você deseja acessar.

org.osgi.service.http.port=8181

AMQ Broker não está funcionando

Certifique-se de que a porta 61616 esteja aberta e não esteja sendo usada por outra porta. Se você deseja alterar a porta 61616 padrão para a mesma, você pode editá-la em$FUSE_INSTALLATION_HOME/etc/System.properties

activemq.port = 61616