2016-09-26 7 views
1

JBoss Fuseを統合プラットフォームとして評価しようとしていますが、私は展開に関する以下の質問があります。JBoss Fuse 6.2.1で機能設定のデプロイメントを正しく管理する方法は?

私はファブリックをセットアップしてプロファイルを使用しようとしています。具体的には、ラクダ/ブループリントコンポーネントの展開用のフィーチャリポジトリです。 コンポーネント構成の外部化に関する次の問題があります。構成ファイル成果物のスナップショットを更新すると、構成変更がコンテナによって取得されません。

さらに、コンテナからプロファイルを完全に削除すると、PID設定ファイルはetc/folderのサーバーに残ります。

また、config pidファイルがロードされる前にラクダバンドルがアクティブになり、ariesブループリントで例外が発生し、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> 

プロジェクト自体が一つのActiveMQやCMを使用して、基本的なログのルートとルートとの1つを有するとともに、簡単なラクダの原型のプロジェクトです:プロパティ・プレースホルダーでここでblueprint.xml

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

は、私が目を展開するために使用するコマンドです電子機能:

生地:1.1 生地をバージョン作成:プロファイル作成--parentのJBossヒューズフルヒューズ-POC ファブリック:プロフィール編集--repository MVN:com.myorg.fuse /機能/1.0.0-SNAPSHOT/xml/features fuse-poc 1.1

ファブリック:プロファイル編集 - フィーチャヒューズ - ポップアップ - ラクダヒューズ-poc 1.1 ファブリック:プロファイル編集 - フィーチャヒューズ-poc-activemqヒューズ-poc 1.1

ファブリック:コンテナアップグレード1.1ルート ファブリック:コンテナ追加プロファイルルートfuse-poc

手動でosgi:refresh <bundle id>を手作業で実行した後、正常に起動します。

生地:コンテナ・削除・プロファイルルートヒューズ-POC

すべての設定PIDエントリは、設定に滞在し、すべてのOSGiバンドルもインストール滞在しています。コンテナがきれいで、同じアーティファクトの更新されたバージョンを副作用なしで配備できるように、アーティファクトを正しくアンデプロイするにはどうすればよいですか?

私は何か概念的に間違っていると思うのですが、最終的に上記の問題は次の問題につながります。フィーチャーの要素または.cfgファイルにプロパティを追加し、再度Mavenを使用してプロジェクトをインストールするとcontainer-remove-profile、profile-refresh、およびcontainer-add-profileを実行すると、configはまったく変更されません。それは、私が手動でコンソールの自分のPIDでconfig:deleteコマンドを実行する場合にのみ、正しく再デプロイできます。

答えて

1

最後に、ソースとクロスリファレンスkaraf、fabric、jbossのドキュメントを掘り下げる時間がありました。ここではどのように動作
は次のとおりです。

  • 機能リポジトリシステムを通じてロード/アンロード・バンドルを担当するコードは、ファブリック・エージェント1.2.0.redhat-621084.jar特に
  • 、クラスに位置していますio.fabric8.agent.service.FeatureConfigInstallerは設定エントリを担当し、クラスio.fabric8.agent.service.Agentは全体的な配備を行っています
  • 設定ファイルをアンインストールするコードはありません。エントリ。
  • しかし、<configfile>要素で指定できる有用な「オーバーライド」プロパティがあります。これがtrueに設定されている場合、configのPIDファイルはデプロイメント時に上書きされます
  • <config>要素には、文書化されていない 'append'プロパティがあります。これをtrueに設定すると、configに新しいエントリを追加することになっています。しかし、それは陽気に盗んだ - それはまた、追加しようとすると、以前に定義されたすべてのプロパティを削除します。結論 - 代わりに<configfile>機能を使用してください
  • また、環境設定を外部化するために、最も簡単な方法は、同じファイルから複数のビルドプロファイルを使用して複数のfeature 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'以外のすべてのプロファイルのフィーチャモジュールを構築する

最後に、設定処理の問題が解決され、バンドルが正しくデプロイされると、プラットフォームはまた、コンテナからプロファイルを削除するときにバンドルのアンデプロイを開始しました。元のデプロイメントが失敗したときにバンドルをアンインストールする際に問題があると思われます。

関連する問題