OSGi JAX -RS и декларативный сервис bnd

Я хочу перенести свое приложение 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: *
6
задан Cœur 13 August 2017 в 12:47
поделиться