Вы можете использовать Spring вместо EJB. И я рекомендую это!
Но обе альтернативы отлично справятся с корпоративными функциями, такими как обработка транзакций и безопасность.
Используя Spring или нет, вам все еще нужен контейнер сервлетов для ваших веб-страниц. Контейнер Servlet может запустить контейнер Spring, если вы правильно настроили файл web.xml контейнера Servlet.
Пример обработки транзакции с помощью Spring:
@Transactional
public void execute(..) {..}
И с EJB 3.x:
@TransactionAttribute
public void execute(..) {..}
Как видите, обе альтернативы предлагают декларативное добавление корпоративных функций.
Обновлено после прочтения комментария HenryOS:
Возможно иметь всю бизнес-логику на одном сервере.
Одним из решений может быть использование веб-служб между клиентами (WEB-сервер и толстые клиенты Swing). Это довольно хорошее и слабосвязанное решение.
Если вам нужна большая скорость, вы можете вместо этого использовать Protocol Buffer от Google или аналогичную технологию.
Интересно, что с веб-службами или буфером протокола вам все еще нужен веб-контейнер, такой как Tomcat или Jetty, на сервере с бизнес-логикой, поскольку он должен предоставлять веб-службы клиентам. Все платформы веб-сервисов, такие как Spring WS, CXF и Apache Axis 2, используют сервлет.
Когда речь идет о слоях, я рекомендую два слоя на веб-сервере, поскольку вы только представляете и извлекаете данные перед отправкой их на бизнес-сервер. На бизнес-сервере я буду рекомендовать три слоя. Верхний уровень для управления веб-службами, бизнес-уровень в середине и уровень интеграции с базой данных и другими корпоративными системами в нижней части.
Наконец, если вы используете CXF или Spring WS вместе с JAXB, то все ваши классы на бизнес-сервере могут быть записаны как POJO! Это относится и к нескольким другим хорошо написанным платформам веб-служб.
Надеюсь, это ответит на ваш вопрос!