Связь между приложениями Java EE - PullRequest
3 голосов
/ 11 ноября 2011

Мы разрабатываем несколько отдельных приложений / модулей, которые мы разворачиваем на сервере приложений Glassfish 3.1.1. В некоторых случаях этим приложениям необходимо вызывать методы друг друга через удаленный интерфейс. Какова наилучшая практика упаковки этих удаленных интерфейсов? Например. если A нужно вызвать удаленный интерфейс B, вы бы извлекли удаленный интерфейс B в отдельный файл JAR и упаковали его вместе с модулем A? Что если этот удаленный интерфейс ссылается на класс сущности. Вы бы упаковали этот класс сущностей вместе с интерфейсом в этом файле JAR?

Если у вас есть какие-либо отзывы на эту тему, не стесняйтесь предложить, как вы думаете, это должно быть сделано.

1 Ответ

2 голосов
/ 22 февраля 2012

Я потратил свою последнюю работу на решение этой проблемы.

Это то, для чего предназначены EJB. EJB имеет как реализацию, так и интерфейс. Интерфейс входит в клиентскую флягу, которая используется вашими приложениями:

@EJB
MyService myService;

Реализация упакована отдельно и установлена ​​где-то еще на вашем сервере:

@Stateless
@Remote({MyService.class})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceBean implements MyService {
...
}

У вас не должно быть приложений, вызывающих друг друга напрямую в Java EE! (Но вы можете, в некоторых случаях) думать о EJB как о чрезвычайно легких, специализированных сервисах, где вы извлекаете общую бизнес-логику между вашими приложениями.

Ваш вопрос звучит как круговая зависимость, когда AppA вызывает AppB, а AppB вызывает AppA. Извлеките бизнес-логику, которую AppA и AppB используют из AppA, и поместите в EJB. Сделайте то же самое для AppB. Теперь у вас есть 2 приложения и 2 EJB-компонента, из которых можно вызывать общую бизнес-логику из любого приложения.

Легко, правда? Дайте мне знать, как это объяснить лучше!

...