2016-09-26 7 views
1

Ich versuche, JBoss Fuse als eine Integrationsplattform zu bewerten, und ich habe die folgende Frage bezüglich der Bereitstellung.Wie kann die Bereitstellung der Feature-Konfiguration in JBoss Fuse 6.2.1 ordnungsgemäß verwaltet werden?

Ich versuche, eine Fabric einzurichten und Profile zu verwenden, insbesondere Feature-Repositories für die Bereitstellung von Kamel/Blueprint-Komponenten. Ich habe das folgende Problem mit der Externalisierung der Komponentenkonfiguration: Wenn ich den Snapshot des Artefakts der Konfigurationsdatei aktualisiere, werden die Konfigurationsänderungen nicht vom Container übernommen.

Darüber hinaus, wenn ich das Profil vollständig aus dem Container entfernen, bleibt die PID-Konfigurationsdatei auf dem Server in etc/Ordner.

Auch gibt es ein zusätzliches Problem während der Bereitstellung, wo das Kamelbündel aktiviert wird, bevor die Konfigurations-PID-Datei geladen wird, was zu einer Ausnahme in Aries Blueprint führt, und ich muss zusätzlich das OSGI-Bündel manuell aktualisieren.

Hier ist, wie die Feature-Repository-Datei wie folgt aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<features name="fuse-poc"> 
    <feature name="fuse-poc-common" version="${project.version}"> 
     <bundle>mvn:com.myorg.fuse/common/${project.version}</bundle> 
    </feature> 
    <feature name="fuse-poc-camel" version="${project.version}"> 
     <feature>fuse-poc-common</feature> 
     <config name="com.myorg.fuse.poc.camel"> 
      test.value=ENC(5XdDgfKwwhMTmbo1z874eQ==) 
     </config> 
     <bundle>mvn:com.myorg.fuse/fuse-poc-camel/${project.version}   </bundle> 
    </feature> 
    <feature name="fuse-poc-activemq" version="${project.version}"> 
     <feature>fuse-poc-common</feature> 
     <configfile finalname="etc/com.myorg.fuse.poc.jms.cfg"> 
      mvn:com.myorg.fuse/feature/${project.version}/cfg/dev 
     </configfile> 
     <bundle>mvn:com.myorg.fuse/fuse-poc-camel- activemq/${project.version}</bundle> 
    </feature> 
</features> 

Die Projekte selbst sind einfach Kamel Urbild Projekte mit einer einer Basisroute mit der Protokollierung und eine mit Route mit activemq und cm Verwendung: Immobilien-Platzhalter in blueprint.xml

Hier der entsprechende Build-Abschnitt in maven ist:

<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> 
    <parent> 
    <groupId>com.myorg.fuse</groupId> 
    <artifactId>fuse-poc-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>feature</artifactId> 
    <packaging>pom</packaging> 


    <name>FUSE PoC Feature Repository</name> 
    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
    <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <id>filter</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>resources</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
    <execution> 
    <id>attach-artifacts</id> 
    <phase>package</phase> 
    <goals> 
    <goal>attach-artifact</goal> 
    </goals> 
    <configuration> 
    <artifacts> 
    <artifact> 
    <file>target/classes/fuse-poc.xml</file> 
    <type>xml</type> 
    <classifier>features</classifier> 
    </artifact> 
           <artifact> 
            <file>src/main/resources/env/dev/com.myorg.fuse.poc.jms.cfg</file> 
            <type>cfg</type> 
            <classifier>dev</classifier> 
           </artifact> 
    </artifacts> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

Hier sind die Befehle, die ich th bereitstellen verwenden e-Funktion:

Stoff: Version erstellen 1.1 Stoff: Profil erstellen --parent jboss-Sicherung-full-Sicherungs poc Stoff: Profil-edit --repository mvn: com.myorg.fuse/Merkmal /1.0.0-SNAPSHOT/xml/features Fuse-PoC-1,1

Gewebe: Profil-edit --feature Fuse-PoC-Kamel-Fuse PoC 1.1 Gewebe: Profil-edit --feature Fuse-PoC-activemq Sicherungs -poc 1.1

Gewebe: Behälter-upgrade 1,1 root Gewebe: Behälter-Additions-profile root Sicherungs PoC

Nachdem ich manuell tun osgi:refresh <bundle id> das Bündel beginnt es gut.

Gewebe: Behälter-remove-profile root Sicherungs PoC

Alle Konfigurationseinträge pid bleiben in der Konfiguration, und alle OSGi Bündel installiert sind auch zu bleiben. Wie nehme ich Artefakte korrekt zurück, damit der Container sauber ist und eine aktualisierte Version desselben Artefakts ohne Nebenwirkungen bereitgestellt werden kann?

Ich vermute, ich mache etwas konzeptionell falsch, weil das oben genannte Problem letztlich zu dem folgenden Problem führt: wenn ich entweder das Element in Features hinzufügen, oder die .cfg-Datei und das Projekt erneut mit Maven installieren, und dann container-remove-profile, profile-refresh und container-add-profile, die config ändert sich überhaupt nicht. Es kann nur korrekt repliziert werden, wenn ich manuell den config: delete-Befehl auf meiner PID in der Konsole mache.

Antwort

1

So hatte ich endlich Zeit, durch die Quellen zu graben und karaf, Stoff und jboss Dokumentation zu referenzieren.
Hier ist, wie es funktioniert:

  • Der Code verantwortlich für das Laden/Entladen Bündel durch das Feature-Repository-System ist in Stoff-Agent-1.2.0.redhat-621084.jar
  • Insbesondere befindet sich die Klasse io.fabric8.agent.service.FeatureConfigInstaller ist verantwortlich für die Konfigurationseinträge, und die Klasse io.fabric8.agent.service.Agent führt die gesamte Implementierung durch.
  • Es gibt keinen Code, um die Konfigurationsdatei/remove config zu deinstallieren Einträge. Dies macht die Entwicklung mit SNAPSHOTs problematisch
  • Es gibt jedoch eine nützliche "override" -Eigenschaft, die auf dem Element <configfile> angegeben werden kann - wenn es auf True festgelegt ist, wird die Konfigurations-PID-Datei bei der Bereitstellung überschrieben, die genau ist Was ich für die lokale Entwicklung wollte
  • Für <config> Element, gibt es eine undokumentierte "append" -Eigenschaft, die, wenn auf True festgelegt ist, neue Einträge an die Config anhängen soll. Es ist jedoch urkomisch abgehört - stellt fest, es entfernt auch alle zuvor definierten Eigenschaften beim Anhängen. Fazit - verwenden Sie stattdessen <configfile> Funktionalität
  • Darüber hinaus bin ich zur Externalisierung der Umgebungskonfiguration zu der Schlussfolgerung gekommen, dass die einfachste Methode die Erstellung mehrerer XML-Deskriptoren aus derselben Datei über verschiedene Maven-Build-Profile ist. Die Projektdateien suchen daher wie folgt aus:

pom.xml:

<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> 
    <parent> 
     <groupId>com.myorg.fuse</groupId> 
     <artifactId>fuse-poc-parent</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>feature</artifactId> 
    <packaging>pom</packaging> 


    <name>FUSE PoC Feature Repository</name> 

    <properties> 
     <build.environment>dev</build.environment> 
    </properties> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <id>filter</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>resources</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>1.10</version> 
       <executions> 
        <execution> 
         <id>attach-artifacts</id> 
         <phase>package</phase> 
         <goals> 
          <goal>attach-artifact</goal> 
         </goals> 
         <configuration> 
          <artifacts> 
           <artifact> 
            <file>target/classes/fuse-poc.xml</file> 
            <type>xml</type> 
            <classifier>features-${build.environment}</classifier> 
           </artifact> 
           <artifact> 
            <file>src/main/resources/env/${build.environment}/com.myorg.fuse.poc.cfg</file> 
            <type>cfg</type> 
            <classifier>${build.environment}</classifier> 
           </artifact> 
          </artifacts> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>local</id> 
      <properties> 
       <build.environment>local-dev</build.environment> 
      </properties> 
     </profile> 
     <profile> 
      <id>dev</id> 
      <properties> 
       <build.environment>dev</build.environment> 
      </properties> 
     </profile>  
     <profile> 
      <id>uat</id> 
      <properties> 
       <build.environment>uat</build.environment> 
      </properties> 
     </profile> 
     <profile> 
      <id>prod</id> 
      <properties> 
       <build.environment>prod</build.environment> 
      </properties> 
     </profile>  
    </profiles> 
</project> 

feature.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<features name="fuse-poc"> 
    <feature name="fuse-poc-common" version="${project.version}"> 
     <bundle>mvn:com.myorg.fuse/common/${project.version}</bundle> 
    </feature> 
    <feature name="fuse-poc-camel" version="${project.version}"> 
     <feature>fuse-poc-common</feature> 
     <configfile finalname="etc/com.myorg.fuse.poc.cfg" override="true"> 
      mvn:com.myorg.fuse/feature/${project.version}/cfg/${build.environment} 
     </configfile> 
     <bundle>mvn:com.myorg.fuse/fuse-poc-camel/${project.version}</bundle> 
    </feature> 
</features> 

diese Weise können Sie direkt die Umgebung angeben können bei der Profilerstellung für die Bereitstellung von das Merkmal:

fabric:profile-create --parent jboss-fuse-full fuse-poc fabric:profile-edit --repository mvn:com.myorg.fuse/feature/1.0.0-SNAPSHOT/xml/features-local-dev fuse-poc 

Hinweis Einrichten des Build-Integrationstools zum Erstellen des Feature-Moduls für alle Profile außer 'local-dev', da dieses lokal von den Entwicklern verwendet werden muss und nicht vom zentralen Repository heruntergeladen werden sollte

Nachdem ich die Probleme bei der Konfiguration behoben und die Bundles korrekt installiert hatten, begann die Plattform auch, die Bundles korrekt zu deimplementieren, wenn das Profil aus dem Container entfernt wurde. Ich vermute, dass es ein Problem mit der Deinstallation der Bundles gibt, wenn die ursprüngliche Bereitstellung fehlgeschlagen ist

Verwandte Themen