Но если я добавлю (...), разве у меня не будет сервера приложений Java EE? И тогда мои бобы EJBs? Или есть какая-то другая определяющая характеристика?
Нет, у вас нет сервера приложений Java EE, полноценный сервер приложений Java EE - это больше, чем Tomcat + Spring + автономный менеджер транзакций. И даже если вы добавите JMS-провайдера и EJB-контейнер, у вас все равно не будет Java EE-сервера. Склейка между всеми частями важна для IMO и является частью добавленной стоимости контейнера Java EE.
Что касается EJB, спецификация EJB намного больше, чем JPA, и в ней также указываются Session Bean и Message Driven Beans (на самом деле, я не считаю JPA-сущности EJB-объектами, даже если JPA является частью спецификации EJB 3.0 в Java EE 5 по историческим причинам - что больше не соответствует действительности в Java EE 6, JPA 2.0 и EJB 3.1 являются отдельными спецификациями).
Также следует отметить, что bean-компонент Spring, помеченный @Transactional
, не эквивалентен Session-бину. Контейнер Java EE может делать больше вещей с Session Bean (см. Ниже). Возможно, они вам не нужны, но, тем не менее, они не являются строго эквивалентными.
И последнее, контейнеры Java EE реализуют стандарт, а контейнер Spring - нет, он является собственностью.
Что такое сервер приложений, совместимый с Java EE, который вы не можете легко / легко получить от Tomcat с некоторыми сторонними подсистемами?
Как я уже сказал, я думаю, что "клей" является частью добавленной стоимости и в значительной степени способствует надежности всего. Затем в ответе Эвернли очень хорошо подчеркивалось, чего трудно достичь. Я бы просто добавил:
- Кластеризация и Аварийное переключение (для обеспечения отказоустойчивости)
- Административные средства
Да, хороший сервер Java EE будет делать довольно аккуратные вещи для повышения отказоустойчивости (кластеризация пулов соединений, дерева JNDI, JMS-адресов, автоматическая повторная попытка с идемпотентными компонентами, интеллектуальные EJB-клиенты, восстановление транзакций, миграция служб и т. Д.) , Для «критически важных» приложений - в подавляющем большинстве нет - это важно. И в таких случаях библиотеки поверх API сервлетов являются IMO, а не заменой.