2016-05-01 14 views
-2

私はfelix osgi + ds + weld cdi + pax cdiを使用しています。私は、これはDSのxmlファイルを生成する近代的な方法である知っているように、私はMavenのバンドル・プラグインを使用ds.xmlファイルを生成するにはOSGI DS:xmlファイルなしの宣言型サービス

import org.osgi.service.component.annotations.Component; 
import org.osgi.service.component.annotations.ServiceScope; 

@Component(
    immediate = false, 
    property={"label=stub"}, 
    scope=ServiceScope.PROTOTYPE 
) 
public class ServiceImpl implements ServiceI{ 

    @Override 
    public String getMyString() { 
     Component t=null; 
     return "This is my string:"+t; 
    } 

} 

:だから私は、次のサービスがあります。だからすべてがうまくいくようです。 Ds xmlファイルはmavenプラグインによって生成され、OSGI-INFに入れられます。このds.xmlファイルを削除すると、felixの動作を確認することにしました。だから私はこのXMLファイルを削除し、osgiキャッシュをきれいにしました。私は結果に非常に驚いていました。サービスはまだ機能し、正常に注入されます。私はただメッセージを受け取る:コンポーネント記述子エントリ 'OSGI-INF/.... xml'が見つかりません。私は@Componentアノテーションがコンパイル後に削除されると思った。だから私はosgiにorg.osgi.service.componentバンドルをインストールしなかったのです。しかし、すべて正常に動作し、すべてのバンドルが解決されます。

ので質問 -

  1. はなぜDSサービスがxmlファイルなしで動作しますか?
  2. なぜ私のosgiフレームワークはorg.osgi.service.component.annotations.Componentを必要としませんか?フェリックスバンドルはパッケージですが、org.osgi.service.component.annotations.Componentアノテーションはありません。

答えて

2
  1. xmlファイルなしではDSは動作しません。

OSGiフレームワークにデプロイされたバンドルからではなく、ファイルシステムから削除した可能性があります。

  1. これらの注釈はビルド時のみであり、実行時依存関係は作成されません。
+0

ありがとうございます。私は3回チェックした!私は瓶の中で削除しました。証拠は非常に簡単です - osgiフレームワークは私に警告を与えました。あなたは自分で試すことができます。 –

+0

私は2004年からOSGiを使っていますが、私は試してみる必要はありません。正確に何が間違っているのかわかりませんが、私はDSがXMLなしでは動作しないことを保証します。 –

+0

OSGIが私にそのメッセージを伝えているのはなぜですか? –

0

私はNeilが正しいことを認めなければなりません。注釈はビルド時間です。たとえFelix SCRのメンバーがクーデターを実行し、ランタイムを実行しようとしたとしても、アノテーションにはCLASSの保持があるため、クラスファイルを解析しない限り実行時には利用できません。

あなたは何か他のものを見る必要があります。

+0

あなた自身を試すことができます。あなたが望むなら、私はあなたにjarファイルを与えることができます。 –

+0

私にリンクを送ってください... –

+0

何が問題なのか理解しました。私は '@Osject'を' @ OsgiService'なしで使用しました。そこで、POJOが注入されました。 –

関連する問題