Я новичок в Apache Karaf, я развертываю простой пакет, который печатает дату, когда она запущена. Я достиг этого, используя класс Activator, и он вызывает метод запуска Activator и печатает дату. Я читал, что есть еще один способ, которым я могу достичь этого без Activator и используя план регистрации моего сервиса.Apache Karaf bundle registration-listener registration-method никогда не срабатывает
Я написал сверток и развернул его в Karaf контейнере, но не печатать дату, она даже не вызывает метод регистра, как описано ниже:
<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<bean id="timeGreetServiceImpl" class="com.cengage.wiring.TimeGreetServiceImpl">
<argument ref="timeService"/>
<argument ref="sampleService"/>
</bean>
<bean id="serviceLaunch" class="com.cengage.wiring.ServiceLaunch"></bean>
<reference id="sampleService" activation="eager" availability="mandatory" interface="com.cengage.api.SampleService">
</reference>
<reference id="timeService" activation="eager" availability="mandatory" interface="com.cengage.register.api.SimpleTimeService">
</reference>
<service id="timeGreetService" interface="com.cengage.wiring.TimeGreetService" ref="timeGreetServiceImpl">
<registration-listener ref="serviceLaunch" registration-method="register" unregistration-method="unregister"/>
</service>
</blueprint>
Это мой класс POJO, который имеет зарегистрированный метод
public class ServiceLaunch {
public void register(final TimeGreetService service) {
System.out.println("TimeGreetService registered - output: "
+ service.print());
}
public void unregister() {
}
}
Может кто-нибудь, пожалуйста, сообщите мне, что мне не хватает? В Karaf нет ошибок или журналов.
Спасибо
Попытка 2: Как было предложено в комментариях я изменил свой план, чтобы, но он до сих пор никогда не попадает в метод регистра
решение<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<bean id="timeGreetServiceImpl" class="com.cengage.wiring.TimeGreetServiceImpl">
<argument ref="timeService"/>
<argument ref="sampleService"/>
</bean>
<bean id="serviceLaunch" class="com.cengage.wiring.ServiceLaunch"></bean>
<reference id="sampleService" activation="eager" availability="optional" interface="com.cengage.api.SampleService">
</reference>
<reference id="timeService" activation="eager" availability="optional" interface="com.cengage.register.api.SimpleTimeService">
</reference>
<service id="timeGreetService" interface="com.cengage.wiring.TimeGreetService" ref="timeGreetServiceImpl">
<registration-listener ref="serviceLaunch" registration-method="register" unregistration-method="unregister"/>
</service>
</blueprint>
Прошу игнорировать мой первый ответ. Я думал, что вы ссылаетесь на ту же службу, которую публикуете. Это не так, поэтому необязательно. –
Вы можете изучить услуги в karaf, используя сервис: list command. Оказывает ли это услуги, от которых вы зависите, а может быть и от службы, которую вы публикуете? –
Возможно, проблема в том, что вы пытаетесь зарегистрировать службу как тип 'TimeGreetService', но ваш класс не реализует' TimeGreetService'. Также почему вы заботитесь о точном времени регистрации вашего собственного сервиса? Почему бы не пойти на простой способ активации? –