Я дуже новачок у Java EE і намагаюся зрозуміти концепцію локальних та віддалених інтерфейсів.
У початкових версіях специфікації EJB "EJB" вважалося віддаленими компонентами, і єдиний спосіб викликати їх - здійснювати віддалений виклик, використовуючи семантику RMI та всі накладні витрати, які вона передбачає (мережевий виклик та серіалізація об'єктів для кожного виклик методу). Клієнти EJB повинні були сплатити цю плату за продуктивність, навіть коли вони розміщені в одній віртуальній машині з контейнером EJB.
Пізніше Sun зрозумів, що більшість бізнес-додатків насправді не розповсюджують EJB на іншому рівні, і вони виправили специфікацію (в EJB 2.0), запровадивши концепцію локальних інтерфейсів, щоб клієнти, розміщені в одній віртуальній машині з контейнером EJB, могли викликати EJB за допомогою прямий виклик методу, що повністю минає семантику RMI (і пов'язані з ними накладні витрати).
Мені сказали, що однією з головних переваг Java EE є те, що її легко масштабувати (що, на мою думку, означає, що ви можете розгортати різні компоненти на різних серверах)
Java EE може масштабувати, але це не обов'язково означає розповсюдження компонентів. Ви можете запустити додаток Web + EJB на кластері, не розділяючи рівень Web та EJB.
Чи повинні ви використовувати віддалені інтерфейси, якщо очікуєте, що ваша програма має різні компоненти на різних серверах? І використовувати локальні інтерфейси, якщо ваша програма розміщуватиметься лише на одному сервері?
Я б сказав це так: використовувати віддалені інтерфейси, якщо клієнт не в одному JVM (це не означає використовувати лише один сервер / JVM).
(...) Почніть з використання локальних інтерфейсів, і поступово перейдіть на віддалені інтерфейси, де це можливо?
Я, мабуть, почав би з використання локальних інтерфейсів. І як уже натякали, перехід на віддалені інтерфейси не завжди є обов'язковим (ви можете кластеризувати колоковану структуру).
Пропоную перевірити згадані нижче ресурси (2 перші є досить старими, але все ще актуальними, 2 інші - більш новими).
Ресурси