Skip to content

Instantly share code, notes, and snippets.

@hodrigohamalho
Last active September 6, 2016 15:08
Show Gist options
  • Select an option

  • Save hodrigohamalho/5c3e492bd54a873ae2ab3be58f3e9fba to your computer and use it in GitHub Desktop.

Select an option

Save hodrigohamalho/5c3e492bd54a873ae2ab3be58f3e9fba to your computer and use it in GitHub Desktop.
Fuse Course

Fuse

Frameworks de DI

  • Spring - Karaf

  • Blueprint - Karaf

  • CDI - EAP

A recomendação é utilizar o Blueprint Karaf. As dependencias do blueprint são importadas no blueprint.xml, no spring do contrário tem que declarar explicitamente todas as dependencias no pom.xml.

AMQ / AMQ-artemis / HornetQ

HornetQ foi doado para Apache, a Apache fez o merge do HornetQ com o AMQ e criou o amq-artemis. Parece que o artemis vai virar o AMQ 6. Atualmente esta na versão 5.

Deploy módulo maven:

install -s mvn:com.redhat.workshop.fuse/rest-basic/1.0

Aqui é listado os web services do CXF:

WRAP

Embrulha um jar existente transformando em um bundle. Os nomes ficam bem zoneados e talz, mas em último caso é uma alternativa. Não funciona sempre

install -s wrap:mvn:G/A/V

Exercicio da manha do dia 1

  • Instala o fuse

    unzip jboss-fuse-full-6.2.1.redhat-084.zip

Descomenta a linha admin=admin no jboss-fuse/etc/users.properties

  • Gera um projeto

    mvn archetype:generate -DarchetypeGroupId=io.fabric8.archetypes -DarchetypeArtifactId=karaf-rest-archetype -DarchetypeVersion=1.2.0.redhat-621084 -DgroupId=com.redhat.workshop.fuse -DartifactId=rest-basic -Dversion=1.0 -Dfabric8-profile=cxf-basic-profile -s ../settings.xml
  • Faz o deploy no Fuse

    install -s mvn:com.redhat.workshop.fuse/rest-basic/1.0
  • Roda os testes unitários

    mvn -Ptest
  • Gera outro projeto (Content base router)

    mvn archetype:generate -DarchetypeGroupId=io.fabric8.archetypes -DarchetypeArtifactId=karaf-camel-cbr-archetype -DarchetypeVersion=1.2.0.redhat-621084 -DgroupId=com.redhat.workshop.fuse -DartifactId=camel-basic -Dversion=1.0 -Dfabric8-profile=camel-basic-profile
  • Troca o route do cbr.xml

    <route id="http-bridge">
        <from uri="jetty:http://localhost:8282/cxf/crm/customerservice?matchOnUriPrefix=true" />
        <delay><constant>5000</constant></delay>
        <to uri="jetty:http://localhost:8181/cxf/crm/customerservice?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" />
    </route>
  • Troca as portas do teste na classe CrmTest.java

    public static final String CUSTOMER_TEST_URL = "http://localhost:8282/cxf/crm/customerservice/customers/123";
    public static final String PRODUCT_ORDER_TEST_URL = "http://localhost:8282/cxf/crm/customerservice/orders/223/products/323";
    public static final String CUSTOMER_SERVICE_URL = "http://localhost:8282/cxf/crm/customerservice/customers";
  • Roda os testes

    mvn -Ptest
  • Pra fazer o redeploy do serviço

    update <ID>
  • Durante a entrega dos projetos, tem projetos que tem varios outros módulos dependentes, cada um sendo um projeto separado mas diriamos que a entrega não faz sentido se não tiver todos, é como se fosse um EAR. Um super pacote com todas as dependencias do projeto, para isso temos o conceito de features.

    • Criar um pom.xml parent

    • Criar um pom.xml dentro da pasta feature

      mkdir -p feature/src/main/resources
      vim feature/pom.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
          http://maven.apache.org/POM/4.0.0
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.redhat.workshop.fuse</groupId>
        <artifactId>workshop</artifactId>
        <packaging>jar</packaging>
        <version>1.0</version>
        <name>Workshop Feature Repository</name>
        <build>
          <plugins>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <version>1.5</version>
              <executions>
                <execution>
                  <id>attach-artifacts</id>
                  <phase>package</phase>
                  <goals>
                    <goal>attach-artifact</goal>
                  </goals>
                  <configuration>
                    <artifacts>
                      <artifact>
                        <file>target/classes/workshop.xml</file>
                        <type>xml</type>
                        <classifier>features</classifier>
                      </artifact>
                    </artifacts>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </project>
      vim feature/src/main/resources/worshop.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <features name="workshop">
        <feature name="workshop-basic">
          <bundle>mvn:com.redhat.workshop.fuse/rest-basic/1.0</bundle>
          <bundle>mvn:com.redhat.workshop.fuse/camel-basic/1.0</bundle>
        </feature>
        <feature name="workshop-cxf">
          <bundle>mvn:com.redhat.workshop.fuse/rest-basic/1.0</bundle>
        </feature>
      </features>
  • Pra fazer uma feature funcionar é necessário habilitar o repositório de features

    features:addurl mvn:com.redhat.workshop.fuse/workshop/1.0/xml/features
    features:list-repositories
  • Install feature

    features:install workshop-basic
  • Instalando Fuse como serviço

    wrapper:install -d jboss-fuse
  • Usar o Persistence ID para colocar as configurações editaveis em um .properties.

    <!-- osgi blueprint property placeholder -->
    <cm:property-placeholder id="placeholder" persistent-id="com.redhat.workshop.fuse">
      <cm:default-properties>
        <cm:property name="portNumber" value="8282"/>
      </cm:default-properties>
    </cm:property-placeholder>
  • Criar o arquivo com.redhat.workshop.fuse.cfg no diretório jboss-fuse/etc/

    portNumber=8183
  • Sempre que tiver um bug abrir no http://issues.jboss.org

Fabric8

fabric:create --new-user fabricAdmin --new-user-password fabricAdmin --new-user-role Administrator --resolver manualip --manual-ip 127.0.0.1 --zookeeper-password redhat@123 --wait-for-provisioning

Quando implementado em HA as outras instâncias irão fazer um join na fabrica criada. No momento que faz o join ele já cria uma fábrica.

fabric:join --zookeeper-password redhat@123 10.216.23.91 rodrigoramalho

A porta que ele usa por padrão é 2181.

Existe alta disponibilidade do Fabric, nomeado de Fabric emsemble. E existe a alta disponibilidade do serviço que é a alta disponibilidade dos containers.

  • Cria o profile novo fabric:profile-create --parent feature-cxf workshop-rest-base

  • Cria um container root com o nome child e duas instâncias

    fabric:container-create-child root child 2
  • Adicionar um repositório de features

    fabric:profile-edit -r mvn:com.redhat.workshop.fuse/workshop/1.0/xml/features workshop-rest-base
  • Adicionando features no profile

    profile-edit --feature cxf-http-jetty workshop-rest-base
    profile-edit --feature workshop-cxf workshop-rest-base
  • Persistence ID

    fabric:profile-edit -p com.redhat.workshop.fuse/portNumber=8185 workshop-rest-01
    fabric:profile-edit -p com.redhat.workshop.fuse/portNumber=8182 workshop-rest-02
  • Altera o nome dos containers

    fabric:container-change-profile child1 workshop-rest-01
    fabric:container-change-profile child2 workshop-rest-02
  • A recomendação é sempre utilizar um repositório (Nexus/Artifactory) externo. Exclui todos internos do fuse e utiliza um externo.

Comandos CLI usados

list
osgi:start <ID>
cxf:list-busses
cxf:list-endpoints
cxf:stop-endpoint
camel:route-info <nome-da-rota>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment