Я пытаюсь написать сервис OSGi в Scala (большинство других сервисов / пакетов написано на Java), и я немного борюсь с синтаксисом.
Обычно в Java можно использовать аннотацию @Activate
на конструкторе, подобном следующему:
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
@Component(configurationPid = "PID", service=AgentService.class, immediate=true)
public class AgentServiceImpl implements AgentService {
@Activate
public AgentServiceImpl(@Reference Service1 service1, @Reference Service2 service2) {
// ...
}
В Scala это должно выглядеть примерно так:
import org.osgi.service.component.annotations.{Activate, Component, Deactivate, Reference}
@Component(
configurationPid = "PID",
service = Array(classOf[AgentService]),
immediate = true)
class AgentServiceImpl @Activate() (@Reference service1: Service1,
@Reference service2: Service2) implements AgentService {
// ...
}
Когда я пытаюсь скомпилировать этот код Scala (с помощью gradle), я получаю следующее сообщение об ошибке:
error : In component xxx.xxxx.xx.xx.agent.AgentServiceImpl , multiple references with the same name: service1. Previous def: xxx.xxxx.xx.xx.service.Service1, this def:
error : In component xxx.xxxx.xx.xx.agent.AgentServiceImpl , multiple references with the same name: service2. Previous def: xxx.xxxx.xx.xx.service.Service2, this def:
Это происходит потому, что мой синтаксис относительно аннотаций неверен? Я особенно не уверен насчет этого @Activate()
бита. В Java мне не нужно использовать скобки здесь - но он не компилируется без в Scala.
Кто-нибудь знает пример проекта, пытающийся сделать что-то подобное?