心に留めておくべき2つのことがあります。1)バンドルには、依存性注入フレームワーク用の追加のメタデータが必要になる可能性があります。2)DIフレームワークのランタイムをデプロイする必要があります。
依存性注入はコアOSGi(つまり、Felixフレームワーク)の一部ではないため、独自のバンドルをデプロイする前に、まずiPOJOバンドルをデプロイする必要があります。さらに、詳細については、IPOJO、グーグル「maven-ipojo-plugin」に必要なメタデータを追加する必要があります。
Felix自体よりも必要最低限のコンテナを探している場合は、Karafを試してください(エンタープライズエクストラがたくさん付属しています)。
個人的には、宣言型サービス(+1 Dmytro)が非常にシンプルで、OSGiからボイラープレートコードを削除するだけなので、気に入っています(これもデプロイし、バンドルにcomponent.xmlを提供することを忘れないでください。詳細については、maven -scr-pluginを参照してください) 。 。
編集
(以下のコメントとtarballへのリンクへの回答として)
@ServiceアノテーションをProducerからProducerImplに移動しました。
生成されたSCRcomponent.xmlは、unbind()メソッドを追加し、@ Referenceを変更することにより、コンシューマーに対して完全に正しくありませんでした。
//...
import static org.apache.felix.scr.annotations.ReferenceCardinality.MANDATORY_UNARY;
import static org.apache.felix.scr.annotations.ReferencePolicy.DYNAMIC;
//...
@Component
public class Consumer
{
@Reference(policy = DYNAMIC, cardinality = MANDATORY_UNARY)
private Producer producer;
public void unbindProducer() {
System.out.println("Producer unbound.");
this.producer = null;
}
//...
}
Mavenのデプロイ
Mavenを使用している場合は、MavenにPax Urlをインストールします。これにより、ローカルおよびリモートのリポジトリからバンドルを簡単にインストールできます。
最初にMavenにバージョンをダウンロードしてもらい(pax-url-mvnバージョン1.3.5が利用可能です)、次にファイルをインストールします(またはFelixバンドルディレクトリにコピーします)
-> install file:/YOUR_PATH_TO_MAVEN_REPO/.m2/repository/org/ops4j/pax/url/pax-url-mvn/1.3.5/pax-url-mvn-1.3.5.jar
Bundle ID: 7
-> start 7
DEBUG: WIRE: [7.0] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl) -> [0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers) -> [0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.0.0)(!(version>=2.0.0))) -> [0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.service.cm)(version>=1.0.0)(!(version>=2.0.0))) -> [2.0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.service.url)(version>=1.0.0)(!(version>=2.0.0))) -> [0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (osgi.wiring.package=org.w3c.dom) -> [0]
DEBUG: WIRE: [7.0] osgi.wiring.package; (osgi.wiring.package=org.xml.sax) -> [0]
->
これで、mvn URLハンドラーを使用して、ローカルリポジトリから独自のバンドルをインストールできます。
-> install mvn:com.examples/producer/1.0.1
Bundle ID: 10
-> start 10
-> install mvn:com.examples/consumer/1.0.1
Bundle ID: 11
-> start 11
DEBUG: WIRE: [11.0] osgi.wiring.package; (&(osgi.wiring.package=com.examples.producer)(version>=1.0.0)(!(version>=2.0.0))) -> [10.0]
Producer bound.
Consumer activate
Aloha.
->