Я написал две службы, используя 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)