2016-10-13 6 views
0

Я использую комбинацию R6 OSGi аннотаций из OSGi Alliance, мавена и Apache ФЕЛИКС Maven-Scr-плагин.Услуги, не перечисленные в Karaf, что может быть причиной?

После написания простой пучок, я не вижу каких-либо услуг внутри него (с помощью Karaf webconsole или услуг: список)

Те же работы с низким API уровня через BundleContext, где я вручную зарегистрировать услугу.

Насколько я понимаю maven-scr-plugin генерирует для меня манифест и компоненты XML-файлов во время выполнения.

В приведенном ниже коде я бы ожидал, что сервис SimpleMathI будет зарегистрирован в Registry Registry Registry: Пропустил ли я что-нибудь?

package test; 

//notice i don't use apache.felix, since: 
//"Starting with the R6 release of the OSGi Declarative Services and Metatype specification, the official annotations support the same 
//features as the Apache Felix SCR annotations in a more elegant manner and even provide additional functionality." 

import org.osgi.framework.BundleContext; 
import org.osgi.service.component.ComponentContext; 
import org.osgi.service.component.annotations.Activate; 
import org.osgi.service.component.annotations.Component; 
import org.osgi.service.component.annotations.Deactivate; 

    @Component 
    public class TestClass implements SimpleMathI { 
    public TestClass() { 
     System.out.println("contructing TestClass"); 
    } 

    @Activate 
    protected void activate(ComponentContext c, BundleContext b) { 
     System.out.println("activate testClass"); 
    } 

    @Deactivate 
    protected void deactivate() { 
     System.out.println("de-activate testClass"); 
    } 

    public void doSimpleAdd(int x, int y) { 
     System.out.println("Result(TestClass): " + (x + y)); 
    } 

    public void doSimpleSubstract(int x, int y) { 
     System.out.println("Result(TestClass): " + (x - y)); 

    } 
} 

вот мой ПОМ файл:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com</groupId> 
    <artifactId>DStestDS</artifactId> 
    <version>0.0.5</version> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-scr-plugin</artifactId> 
     <version>1.20.0</version> 
     <executions> 
      <execution> 
      <id>generate-scr-scrdescriptor</id> 
      <goals> 
       <goal>scr</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

    <dependencies>  

    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.core</artifactId> 
     <version>4.3.0</version> 
    </dependency> 

<!-- official R6 osgi annotations --> 
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.service.component.annotations</artifactId> 
     <version>1.3.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.compendium</artifactId> 
     <version>5.0.0</version> 
    </dependency>   

    <dependency> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>org.apache.felix.scr.annotations</artifactId> 
     <version>1.9.6</version> 
     <scope>provided</scope> 
    </dependency>   

    </dependencies> 
</project> 

ответ

1

ли вы, возможно, забыли установить функцию Scr?

feature:install scr

Ваш ПОМ также, кажется, сломана. Вам нужно использовать maven-bundle-plugin или bnd-maven-plugin. Если вы используете аннотации DSG OSGi spec, то плагин maven scr не нужен.

Это то, что я использую в моей сборки: https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-ds/pom.xml#L107-L118

Это создает пакеты, а также обрабатывает DS спецификации аннотаций.

+0

Спасибо собрат за ответ. – neodix

+0

Как вы предположили, я выполнил функцию: install scr и перезапустил Karaf.Не было сообщений, и после перезапуска ничего не изменилось. Я также импортировал maven-bundle-plugin и удалил maven-scr-plugin (на самом деле я использовал последний, потому что мне нужна автоматическая генерация дескрипторов), но все равно никаких изменений. – neodix

+0

следить за вопросом: мне также нужно добавить код, приведенный ниже в Maven-расслоение-плагин ?: '<конфигурация> <инструкции> <<- - Включить обработку компонентов аннотаций OSGI DS!> _dsannotations> * <_metatypeannotations> * ' – neodix

0

После предложение Кристиана я добавил Maven-расслоение-плагин в файл pom.xml и удалить Maven-экр-плагин, теперь pom.xml выглядит, как показано ниже:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com</groupId> 
    <artifactId>DStestDS</artifactId> 
    <version>0.0.10</version> 

    <dependencies> 
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.core</artifactId> 
     <version>4.3.0</version> 
    </dependency>  
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.service.component.annotations</artifactId> 
     <version>1.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.compendium</artifactId> 
     <version>5.0.0</version> 
    </dependency>  
    <dependency> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.5.1</version> 
    </dependency>  
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration>     
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>3.0.0</version> 
       <extensions>true</extensions> 
       <configuration> 
        <obrRepository>NONE</obrRepository> 
        <instructions> 
         <_include>-bnd.bnd</_include> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

А вот выход от консоли: no services listed

Так что я не могу понять, когда и почему служба регистрируется? Почему не вызывается метод @Activate?

Кстати, я не получаю ошибки компиляции, и я не делаю проект «Экспорт-> Выдвижные плагинов», я просто MVN чистую установку взять выходной файл банку и поставить в delploy Karaf в папка.

После создания файла расслоение я посмотрел внутри него, и обнаружил, что META-INF \ MANIFEST.MF выглядит следующим образом:

Manifest-Version: 1.0 
Built-By: username 
Build-Jdk: 1.7.0_79 
Created-By: Apache Maven 3.3.9 
Archiver-Version: Plexus Archiver 

, кажется, что-то не хватает, не так ли?

, и я не вижу каких-либо услуг, перечисленных через karaf webconsole:

karaf webconsole

+0

Ваш баннер должен использовать упаковку вместо банки. –

+0

Да, только что добавили еще раз ( комплект), и теперь я вижу эту услугу через веб-консоль Karaf. Как ни странно, я не вижу услуги через сервис Karaf **: список **. Также нужно понять, почему метод @Activate не вызван (может быть, он будет вызываться при первом использовании). В очередной раз благодарим за помощь. Я принял ваш ответ выше. – neodix

+0

Добавляли ли вы сразу = true к @Component? –