如何在JBoss Fuse 6.2.1中正确管理功能配置部署?

时间:2016-09-26 15:04:36

标签: deployment jbossfuse fabric8

我正在尝试评估JBoss Fuse作为集成平台,我有关于部署的以下问题。

我正在尝试设置结构并使用配置文件,更具体地说是用于驼峰/蓝图组件部署的功能存储库。 我在外部化组件配置时遇到以下问题:当我更新配置文件工件的快照时,容器不会选择配置更改。

此外,当我从容器中完全删除配置文件时,PID配置文件保留在etc /文件夹中的服务器上。

在部署期间还存在一个额外的问题,即在加载config pid文件之前激活了camel包,导致aries blueprint异常,我还需要手动刷新osgi包。

以下是功能存储库文件的外观:

<?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>  

项目本身就是简单的camel原型项目,其中一个具有记录的基本路径,另一个具有使用activemq和cm的路径:blueprint.xml中的property-placeholder

这是maven中相应的构建部分:

<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>  

以下是我用于部署功能的命令:

  

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

     

fabric:profile-edit --feature fuse-poc-camel fuse-poc 1.1   fabric:profile-edit --feature fuse-poc-activemq fuse-poc 1.1

     

fabric:container-upgrade 1.1 root   fabric:container-add-profile root fuse-poc

手动完成osgi:refresh <bundle id>捆绑后,它就可以了。

  

fabric:container-remove-profile root fuse-poc

所有配置pid条目都保留在配置中,并且所有osgi包也都保持安装状态。如何正确地取消部署工件以使容器清洁并且可以部署相同工件的更新版本而没有副作用?

我怀疑我在做一些概念错误的事情,因为最终上面的问题会导致以下问题:如果我将一个属性添加到要素中的元素,或者.cfg文件并再次使用maven安装项目,然后执行container-remove-profile,profile-refresh和container-add-profile,配置根本不会改变。如果我在控制台中的pid上手动执行config:delete命令,则只能正确重新部署。

1 个答案:

答案 0 :(得分:1)

所以我终于有时间挖掘资源并交叉引用karaf,fabric和jboss文档 以下是它的工作原理:

  • 负责通过功能存储库系统加载/卸载软件包的代码位于fabric-agent-1.2.0.redhat-621084.jar
  • 值得注意的是,类io.fabric8.agent.service.FeatureConfigInstaller负责配置条目,而类io.fabric8.agent.service.Agent正在进行整体部署
  • 根本没有代码可以卸载配置文件/删除配置条目。这使用SNAPSHOTs进行开发很麻烦。
  • 但是,有一个有用的'override'属性可以在<configfile>元素上指定 - 如果设置为true,配置PID文件将在部署时被覆盖,这正是我想要的本地发展
  • 对于<config>元素,有一个未记录的'append'属性,当设置为true时,应该将新条目附加到配置中。然而,它是有趣的窃听 - 结果是它还在尝试追加时删除所有已定义的先前存在的属性。结论 - 使用<configfile>功能
  • 此外,对于外部化环境配置,我得出结论,最简单的方法是通过不同的maven构建配置文件从同一文件生成多个特征xml描述符。项目文件因此如下所示:

的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>

这样,您可以在创建用于部署功能的配置文件时直接指定环境:

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

注意设置构建集成工具以构建除“local-dev”之外的所有配置文件的功能模块,因为开发人员需要在本地使用该功能模块,不应从中央存储库下载

最后一点,一旦我解决了配置处理问题并且捆绑包开始正确部署,平台也开始在从容器中删除配置文件时正确取消部署捆绑包。我怀疑在原始部署失败时卸载软件包存在一些问题