Исключение NullPointer при внедрении микросервиса с использованием активных компонентов Jadex - PullRequest
0 голосов
/ 24 сентября 2019

Я написал две службы, используя Jadex Active Components Framework.Затем я написал агента, которому требуется одна из этих служб (служба отправки сообщений и приемник сообщений), а также обеспечивает их обе.

Каждый раз, когда запуск двух из этих агентов на двух разных платформах, внедрение микросервиса завершается неудачно сa NullPointerException.

У меня сильное ощущение, что это связано с тем фактом, что никакая необходимая служба не может быть внедрена при создании агента, поскольку никакая служба не может быть найдена до того, как агенты существуют.

Я хотел бы знать, так ли это на самом деле, и если да, то что делать с этим либо с точки зрения архитектуры, либо если я просто неправильно понял использование Jadex Активных компонентов.

public interface Sender {

    public void send(Message message);

}

public interface Receiver {

    public void receive(Message message);

}

@Service
public class SenderService implements Sender {

    ...Implementation...

}

@Service
public class ReceiverService implements Receiver {

    ...Implementation...

}

@Agent
@ProvidedServices({
  @ProvidedService(type=Sender.class, implementation=@Implementation(SenderService.class)),
  @ProvidedService(@ProvidedService(type=Receiver.class, implementation=@Implementation(ReceiverService.class))
})
@RequiredServices({
  @RequiredService(name="senders", type=Sender.class, multiple=true, binding=@Binding(scope=Binding.SCOPE_GLOBAL, dynamic=true))
})
public class MessagingAgent {

  @AgentFeature
  IProvidedServicesFeature providedServices;

  @AgentService
  public void addSenderService(Sender sender) {

    ...Do some stuff...

  }

  ...Do some more stuff...
}

При попытке запустить настройку, подобную этой, с помощью простого:

public class MessagingTest {

  CountDownLatch lock = new CountDownLatch(1);

  @Test
  public void messagingTest() {
    PlatformConfiguration pfConfig = PlatformConfiguration.getDefaultNoGui();
    pfConfig.addComponent(MessagingAgent.class);
    IFuture<IExternalAccess> fut = Starter.create(pfConfig);
    lock.await(10, TimeUnit.SECONDS);
  }
}

Тест, конечно, не дает сбоя, поскольку не был задан предикат, но платформа дает сбой:

Sep 24, 2019 1:06:34 PM MessagingTest@lennart-Lenovo-ideapad-110-15ISK_6f7 jadex.bridge.component.impl.ExecutionComponentFeature execute
SEVERE: Component step failed: jadex.platform.service.cms.PlatformComponent$1@5eb1a260
java.lang.NullPointerException
    at jadex.micro.features.impl.MicroServiceInjectionComponentFeature.init(MicroServiceInjectionComponentFeature.java:290)
    at jadex.platform.service.cms.PlatformComponent.executeInitOnFeatures(PlatformComponent.java:293)
    at jadex.platform.service.cms.PlatformComponent$1.execute(PlatformComponent.java:144)
    at jadex.bridge.component.impl.ExecutionComponentFeature.execute(ExecutionComponentFeature.java:1176)
    at jadex.commons.concurrent.Executor.code(Executor.java:299)
    at jadex.commons.concurrent.Executor.run(Executor.java:126)
    at jadex.platform.service.execution.AsyncExecutionService$1.run(AsyncExecutionService.java:109)
    at jadex.commons.concurrent.ThreadPool$ServiceThread.run(ThreadPool.java:515)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...