Должен ли я использовать EJB3 или Spring для моего бизнес-слоя?


моя команда разрабатывает новый сервис, ориентированный на продукт с веб-интерфейсом. В дискуссиях о том, какие технологии мы будем использовать, мы остановились на запуске сервера приложений JBoss и Flex frontend (с возможным развертыванием рабочего стола с использованием Adobe AIR), а также веб-сервисов для взаимодействия клиента и сервера.

мы зашли в тупик, когда речь заходит о том, какие серверные технологии использовать для нашей бизнес-логики. Большой аргумент между EJB3 и весной, с нашим самым большим касается масштабируемости и производительности, а также ремонтопригодности кодовой базы.

вот мои вопросы:

  1. каковы аргументы за или против EJB3 против Spring?
    • какие подводные камни я могу ожидать с каждым?
    • где я могу найти хорошую контрольную информацию?
9 71

9 ответов:

там не будет большой разницы между EJB3 и весной на основе производительности. Мы выбрали весну по следующим причинам (не упомянутым в вопросе):

  • Spring управляет архитектурой в направлении, которое более легко поддерживает модульное тестирование. Например, введите макет объекта DAO для модульного тестирования бизнес-уровня или используйте объект Spring MockHttpRequest для модульного тестирования сервлета. Мы поддерживаем отдельную конфигурацию Spring для модульных тестов, которая позволяет нам изолировать тесты к конкретным слоям.
  • главная драйвера совместимости. Если вам нужно поддерживать более одного сервера приложений (или в конечном итоге вы хотите перейти от JBoss к Glassfish и т. д.), вы по существу будете носить свой контейнер (Spring) с собой, а не полагаться на совместимость между различными реализациями спецификации EJB3.
  • Весна учитывает выборы технологии для персистентности, ремотинг объекта, ЕТК. Например, мы также используем гибкий трубопровод передний конец, и использует протокол Гессиана для сообщений между гибким трубопроводом и весной.

зазор между EJB3 и пружиной намного меньше, чем это было, ясно. Тем не менее, одним из недостатков EJB3 теперь является то, что вы можете вводить только в Боб, поэтому вы можете в конечном итоге превратить компоненты в бобы, которые не должны быть.

аргумент о модульном тестировании теперь довольно неуместен - EJB3 явно разработан, чтобы быть более легко проверяемым модулем.

аргумент совместимости выше также не имеет значения: используете ли вы EJB3 или Spring, вы все еще полагается на сторонние реализации менеджеров транзакций, JMS и т. д.

Что бы качать его для меня, однако, поддержки со стороны общины. Работая над проектом EJB3 в прошлом году, там просто не было много людей, использующих его и говорящих о своих проблемах. Весна, правильно или неправильно, чрезвычайно распространена, особенно на предприятии, и это облегчает поиск кого-то, у кого есть та же проблема, которую вы пытаетесь решить.

каковы аргументы за или против EJB3 против Spring? Весна всегда инновационна и признает реальные ограничения. Spring предлагала простоту и элегантность для серверов приложений Java 1.4 и не требовала версии спецификации J2EE, к которой никто не имел доступа в 2004 - 2006 годах. На данный момент это почти религиозная дискуссия, которую вы можете втянуть в спецификации - Spring + abstraction + open-source против Java Enterprise Edition (Java EE) 5.0.

Я думаю, что весной дополняет больше, чем конкурирует со спецификациями Java EE. Поскольку функции, которые когда-то были уникальными для Spring, продолжают включаться в спецификацию, многие будут утверждать, что EJB 3 предлагает "достаточно хороший" набор функций для большинства внутренних бизнес-приложений.

какие подводные камни я могу ожидать с каждым? Если вы рассматриваете это как проблему постоянства (Spring+JPA) по сравнению с EJB3, вы действительно не делаете этого большого выбор.

где я могу найти хорошую контрольную информацию? Я не следил за результаты теста specj на некоторое время, но они были популярны в то время. Похоже, что каждый поставщик (IBM, JBOSS, Oracle и Sun) все меньше и меньше заинтересован в том, чтобы иметь совместимый сервер. Списки становятся все короче и короче от сертифицированных поставщиков, как вы идете от 1.3, 1.4. 1.5 Java Enterprise Edition. Я думаю, что дни гигантского сервера, который полностью совместим со всеми спецификации закончились.

Я определенно рекомендовал бы EJB3 по весне. Мы находим, что он более оптимизирован, лучше кодируется и лучше поддерживается. Я в прошлом использовал Spring и нашел его очень запутанным, а не так хорошо документированным, как EJB3 (или JPA, я думаю, в конце дня)

  1. С EJB3 вам больше не нужно иметь дело с внешними файлами конфигурации, и есть только один POJO, который вы аннотируете для каждой таблицы базы данных. Этот POJO может быть передан на ваш веб-уровень без каких-либо проблем. Иды как Netbeans может даже автоматически генерировать эти POJOs для вас. Мы использовали EJB3 теперь в качестве задней части для довольно большого количества крупномасштабных приложений и не заметили никаких проблем с производительностью. Ваши сеансовые компоненты могут быть легко представлены в виде веб-сервисов,которые вы можете предоставить своему интерфейсу Flex. Сеансовые бобы легко заблокировать на уровне метода или класса, чтобы назначить роли и тому подобное, если вам нужно.

Я не могу так много говорить о весне, так как я только попробовал ее несколько недель. Но мое общее впечатление было очень плохим. Это не значит, что это плохая структура, но наша команда здесь нашла EJB3, чтобы быть лучшим для уровня персистентности/бизнеса.

Я предпочитаю Spring над EJB3, но моя рекомендация будет в зависимости от того, какой подход вы принимаете, попробуйте придерживаться написания POJOs и использовать стандартные аннотации, где это возможно, такие как аннотации JSR, такие как @PostConstruct, @PreDestroy и @Resource, которые работают как с EJB3, так и с Spring, поэтому вы можете выбрать любую структуру, которую вы предпочитаете.

например, вы можете решить, какой проект использовать Guice вместо IoC.

Если вы хотите использовать предварительно впрыскиваемого топлива, например, в веб-приложение, которое вы можете найти Guice, довольно быстро для инъекции зависимостей, чем Spring.

сеансовые бобы в основном сводятся к инъекции зависимостей и транзакциям; поэтому EJB3 и Spring действительно похожи на это. Где весна имеет край, это лучшая инъекция зависимостей и более приятные абстракции для таких вещей, как JMS

Я использовал очень похожую архитектуру в прошлом. Spring + Java 1.5 + Actionscript 2/3 в сочетании с Flex Data Services сделали все это очень легко (и весело!) кодировать. хотя, гибкий интерфейс означает, что вам нужны достаточно мощные клиентские машины.

Что касается вашего вопроса:

каковы аргументы за или против Ejb3 против Spring?

Предлагаю прочитать ответ от экспертов:ответ на: EJB 3 и весенний сравнительный анализ Марка Фишера. Прочитайте комментарии, чтобы найти замечания Резы Рахмана (EJB 3.0).

еще одна вещь в пользу spring заключается в том, что большинство других инструментов / фреймворков имеют лучшую поддержку для интеграции с spring, большинство из них также используют spring внутри (например, activemq, camel, CXF и т. д.).

Он также более зрелый, и есть гораздо больше ресурсов (книги, статьи, Лучшие практики и т. д.) и опытных разработчиков, чем для EJB3.

Я думаю, что EJB-это хорошая компонентная технология, но не хорошая структура.Весна-лучшая структура, доступная на данный момент today.So я должен рассматривать Spring как лучшую реализацию JEE в смысле структуры, и моя рекомендация заключается в использовании spring в каждом проекте, который дает нам гибкость для легкой интеграции с любой компонентной технологией .