Я хочу перенести свое приложение EE на OSGi. мое приложение состоит из бизнес-библиотек, базы данных JPA/Entities и интерфейсов REST/WS. у него также есть веб-клиент.
Я начинаю с прототипирования структуры и заставляю все интерфейсы и пакеты общаться друг с другом в чистом виде 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
}
...
}
Могу ли я аннотировать ресурс с помощью bnd @Component
и можно ли @Resource
внедрить? все работает нормально, но сервис всегда нулевой.
Каким должен быть способ объявить мой пакет для BND, чтобы сделать его веб-пакетом/ваб-пакетом?
Я использую пакет maven:
<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>
...
с инструкциями bnd
Web-ContextPath: my-root-http/rest/
Service-Component: *