-
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.
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:
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
-
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&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
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.