Я потратил свою последнюю работу на решение этой проблемы.
Это то, для чего предназначены 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-компонента, из которых можно вызывать общую бизнес-логику из любого приложения.
Легко, правда? Дайте мне знать, как это объяснить лучше!