«@IgniteInstanceResource var ignite: Ignite» в службах равно нулю - PullRequest
0 голосов
/ 21 мая 2018

[обновлено] Как видно из заголовка, функция внедрения ignite не работает на моих сервисах.

Мой код интерфейса службы тривиален

trait FeederService extends Service with Logging{

  @IgniteInstanceResource  protected var ignite: Ignite = _
  // log.info(s"ignite instance: ${ignite.toString}")

  def runNewFeeders(qty: Int)
}

Вот моя реализация службы

  override def init(ctx: ServiceContext): Unit = {

    log.info(s"Initializing service ${ctx.name()}") 
    log.info(s"ignite instance: ${ignite.toString}")
  }

Этот код дает сбой, поскольку объект воспламенения равен нулю.

Мое развертывание службы в основном следующее (я, конечно, могу получить доступ к объекту Ignite в основном методе)

ignite.services(clientGroup).deployNodeSingleton("feeder-swarm",
new FeederServiceImpl())

Не знаю, связано ли это, ноclientGroup извлекается с помощью

val clientGroup = ignite.cluster().forAttribute("client", "true")

Поскольку я не использую определение клиента Ignite для своих узлов (все они являются серверами с точки зрения Ignite)

Любая помощь?Спасибо

1 Ответ

0 голосов
/ 21 мая 2018

Проблема в том, что вы пытаетесь получить доступ к экземпляру Ignite до того, как он был внедрен.

Ignite может быть введен только после того, как объект создан, но ваш инициализатор экземпляра пытается использовать его(${ignite.toString}) и завершается неудачей.

Переместите ваш вызов log.info в метод init, он будет работать.

...