Внедрить несколько удаленных EJB-компонентов в bean-компонент - PullRequest
0 голосов
/ 14 марта 2020

В Java EE, если у меня есть интерфейс:

@Remote
public interface MetaService {
    ServiceData get();
}

И у меня в ухе 2 реализации:

@Stateless
public class Service1MetaService implements Calculator {
    @Override
    public ServiceData get() {...}
}
@Stateless
public class Service2MetaService implements Calculator {
    @Override
    public ServiceData get() {...}
}

Я могу создать bean, где:

@Stateless
public class View {
    @Inject
    private Instance<MetaService> metaServices;

    ...
}

А в View поле metaServices будет иметь 2 реализации MetaService.

Я хотел бы иметь аналогичную функциональность с удаленными bean-компонентами.

Итак, скажем, у меня есть вышеуказанный интерфейс и реализации, но упаковка отличается.

В base.jar У меня есть интерфейс MetaService. Это будет упаковано во все последующие приложения, упомянутые ниже.

В a.ear у меня есть реализация Service1MetaService, в то время как в b.ear у меня есть реализация Service2MetaService и в c.war у меня есть View класс, который хотел бы использовать эти реализации.

Но, как и следовало ожидать, введенный Instance пуст (не ноль). Есть ли способ найти ссылки на удаленный компонент в моем внедренном экземпляре Instance, даже если эти реализации находятся в отдельных приложениях?

Одна важная вещь заключается в том, что в классе View я не знаю и не заботятся ни о количестве этих реализаций, ни об именах приложений, в которых они развернуты. Поэтому я не могу использовать указанные строки c JNDI для получения этих ссылок.

PS: Должен ли я попробовать использовать такие технологии, как JMS? Чтобы я вызывал метод add на прокси-сервере JMS, который отправляет запросы и ждет ответов от всех приложений, реализующих указанный интерфейс?

PS: Чтобы уточнить, причина, по которой мне это нужно, на самом деле чтобы я мог получать данные запущенных сервисов на моих серверах приложений. Я обновил пример интерфейса и реализации, чтобы он был более понятным. Кроме того, было бы неплохо, если бы я мог получать эти метаданные синхронно, поэтому JMS не является предпочтительным, однако я, вероятно, смогу заставить его работать.

1 Ответ

0 голосов
/ 14 марта 2020

Мне удалось убедить себя отойти от удаленных EJB. Ну, это было также благодаря @ chrylis-onstrike-, однако, я выберу использование JMS для этой цели.

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

Спасибо всем, кто потратил время, пытаясь помочь мне.

...