EEアプリケーションをOSGiに移行したい。私のアプリケーションは、ビジネスライブラリ、データベースJPA /エンティティ、REST/WSインタフェースで構成されています。それはまた、Webクライアントを持っています。OSGi JAX-RSとbnd宣言型サービス
まず構造体のプロトタイプを作成し、すべてのインタフェースとバンドルをOSGiできれいに話すことから始めます。私は、特定のベンダーやフレームワークがなくても、できるだけクリーンな仕様を使いたいと思っています。
私は、マニフェストと宣言型サービスを生成するためにbnd mavenプラグインを使用しています。私はそうのような注入を使用して(別のバンドルに)OSGiサービスへの私の残りのリソースからの呼び出しを作りたい:
@Path("some-resources")
@Component
public class SomeResources{
private SomeService service = null;
@Reference
public void setController(SomeService service) { // <- this is never called
this.service = service;
}
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_XML)
public Object getSomeService() { // <- called
try {
service.process("Hello World"); // <- Error null object
}
...
}
iはBND @Component
とのリソースに注釈を付けることができます@Resource
を注入することができますか? すべて正常に動作しますが、サービスは常にnullです。
私のバンドルをBNDに宣言してWeb/WABパッケージにする方法は?
私はMavenのバンドルを使用:BND命令で
<packaging>bundle</packaging>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>biz.aQute</groupId>
<artifactId>bndlib</artifactId>
<version>1.50.0</version>
</dependency>
</dependencies>
<configuration>
<supportedProjectTypes>
<supportedProjectType>ejb</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
<supportedProjectType>wab</supportedProjectType>
<supportedProjectType>bundle</supportedProjectType>
<supportedProjectType>jar</supportedProjectType>
</supportedProjectTypes>
<instructions>
<_include>-osgi.bundle</_include>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
<execution>
<id>bundle-install</id>
<phase>install</phase>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
</plugin>
...
を
Web-ContextPath: my-root-http/rest/
Service-Component: *
私は最近、同様の問題(サービスが縛られていない)に遭遇し、[split package](http://wiki.osgi.org/wiki/)まで追跡しました。 Split_Packages)の問題です。サービスインタフェースを別のパッケージに入れてみましたか? –
@BjörnPollexに感謝の意を表します。私は3つのバンドルを持っています.1つはインタフェースのみ、もう1つはサービス実装とRESTバンドルです。私はそれをRESTバンドルに戻して、それがうまくいくかどうかを確認しました。私がやっていることが、私のDS xmlを見つけられないSCRの問題かもしれないよりも正しいと思われる場合。 – Gadi
@donalfellowsを編集してくれてありがとう – Gadi