2017-06-27 6 views
0

Hello Worldアプリケーションで作業しています。私のアプリケーションはMaven(3.5.0)でビルドされ、Apache Felixアノテーションを使い、Apache Karaf(4.1.1)で動作します。私のアプリケーションは、すぐに起動する必要のあるAppという単一のコンポーネントで構成されています。バンドルは正常に構築されます。私は正常に私のmvnリポジトリからKarafにインストールすることができます。 Karafはバンドルを「アクティブ」と表示します。問題は、コンポーネント(App)のコンストラクタとactivateメソッドが呼び出されないことです。私はなぜこれが起こるのか理解するのを助ける目の第二のセットが必要です。 pom.xmlには何が欠けていますか?OSGIバンドルが有効になっていますが、DSとApache Karafを使用しているときにコンポーネントが作成されていません

私はBundleActivatorを実装するプロジェクトでActivatorクラスを作成しました。私はMavenにこの新しいクラスにBundle-Activatorを設定するよう指示しました。今、私のバンドルをKarafにインストールすると、Activatorから出力されたログを見ることができます。開始メソッドがヒットしています。だから私のバンドルが実際に始まっていることは分かっています私はなぜ私のAppコンポーネントが決して作成され、活性化されるのか理解できません。

ここに関連ファイルがあります。

App.java

package myCompany; 

import org.apache.felix.scr.annotations.Activate; 
import org.apache.felix.scr.annotations.Component; 

@Component(immediate=true) 
public class App 
{ 
    public App() 
    { 
     System.out.println("App constructed"); 
    } 

    @Activate 
    public void activate() 
    { 
     System.out.println("App activated"); 
    } 
} 

Activator.java

package myCompany; 

import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 

public class Activator implements BundleActivator{ 

    public void start(BundleContext context) throws Exception { 
     System.out.println("Activator started"); 
    } 

    public void stop(BundleContext context) throws Exception { 
     System.out.println("Activator stopped"); 
    } 
} 

の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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>myCompany</groupId> 
    <artifactId>myProject</artifactId> 
    <packaging>bundle</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myProject</name> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.osgi</groupId> 
      <artifactId>org.osgi.core</artifactId> 
      <version>6.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>org.apache.felix.scr.annotations</artifactId> 
      <version>1.9.6</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-scr-plugin</artifactId> 
       <version>1.24.0</version> 
       <executions> 
        <execution> 
         <id>generate-scr-scrdescriptor</id> 
         <goals> 
          <goal>scr</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <version>3.3.0</version> 
       <configuration> 
        <instructions> 
         <_dsannotations>*</_dsannotations> 
         <_metatypeannotations>*</_metatypeannotations> 
         <Bundle-Activator>myCompany.Activator</Bundle-Activator> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

答えて

2

Karafはsupporが含まれていません。宣言的なサービスをそのままの状態で提供します。あなたはDSのサポートを有効にするには、SCRの機能をインストールする必要があります:あなたはBNDによって認識または処理されていないorg.apache.felix.scr.annotationsパッケージから廃止された注釈を、使用している

feature:install scr 
+0

これはうまくいきました。私のバンドルはすでにKarafにロードされているが(何もしていない)、私は機能を実行した:scrをインストールして、私はついに私の "App configured"と "App activated"というメッセージが現れる。ありがとう。 – jonathan

1

- 彼らが動作するように、追加のMavenプラグインが必要です。

パッケージのOSGi標準アノテーションを使用するようにコードを移行する方がよいでしょう。 OSGi Compendium Release 6仕様、第112.8節を参照してください。

+0

クリスチャンシュナイダーは私のすぐ下の解決策を以下に提供しました。私は実際に標準的なOSGIアノテーションから始めましたが、私のバンドルを正しく生成するのに問題がありましたので、よく知っているもの、Felix SCRアノテーションに切り替えました。 FelixのSCRアノテーションが機能するようになったので、標準のOSGIアノテーションを再訪します。 – jonathan

関連する問題