Весна проти EJB. Чи може Spring замінити EJB? [зачинено]


96

Оскільки Spring може використовувати транзакції так само, як EJB . Для мене Spring здатний замінити вимогу використання EJB. Хто-небудь може сказати мені, які додаткові переваги використання EJB?

Відповіді:


201

Spring був розроблений як альтернатива EJB з самого його заснування, тому відповідь, звичайно, можна використовувати Spring замість EJB.

Якщо є "перевага" використання EJB, я б сказав, що це залежатиме від навичок вашої команди. Якщо у вас немає весняного досвіду та багато досвіду EJB, можливо, дотримуватися EJB 3.0 - це хороший крок.

Сервери додатків, написані для підтримки стандарту EJB, теоретично можуть переноситися з одного сумісного сервера додатків Java EE на інший. Але це означає триматися подалі від будь-яких розширень, що стосуються конкретного постачальника, які замикають вас на одному постачальнику.

Весняні порти легко між серверами додатків (наприклад, WebLogic, Tomcat, JBOSS тощо), оскільки це не залежить від них.

Однак ви зачинені у весну.

Весна заохочує належні практики проектування ОО (наприклад, інтерфейси, шари, розділення проблем), які приносять користь будь-якій проблемі, до якої вони торкаються, навіть якщо ви вирішите перейти на Guice або іншу структуру DI.

Оновлення: У 2014 році цьому питанню та відповіді виповнилося п’ять років. Слід сказати, що світ програмування та розробки додатків за цей час дуже змінився.

Це вже не просто вибір між Java або C #, Spring або EJB. За допомогою vert.x можна повністю уникнути Java EE. Ви можете писати високомасштабні поліглот-програми без сервера додатків.

Оновлення: Зараз березень 2016 року. Spring Boot пропонує ще кращий спосіб писати програми без серверів програм Java EE. Ви можете створити виконуваний файл JAR і запустити його на JVM.

Цікаво, чи продовжить Oracle підтримувати специфікацію Java EE. Веб-сервіси перейняли для EJB. Рішення EJB мертве. (Тільки моя думка.)


7
На мій погляд, "замкнути" - це занадто сильна фраза, щоб описати Весну. Зрештою, Spring призначений склеювати все разом, а не замінювати їх, ви завжди можете вибрати те, з чим хочете інтегруватися. Крім того, у всьому є блокування, навіть найпростіші Apache Commons блокують нас, але ми все ще використовуємо їх щодня.
Крістофер Ян

3
Немає альтернативних постачальників VMWare / Spring, як ви можете вибрати між платформами Oracle, Red Hat та IBM for Java EE. Це все, що я мав на увазі. Це не коментар щодо можливостей або корисності Spring. Мені це дуже подобається. Я використовую його щодня і сплю вночі.
duffymo

1
@ChristopherYang - це правильно. Я маю на увазі, "Java" була б замовником постачальника. Тож врешті-решт нам просто потрібно припинити сперечатися і щось зробити. :-)
cbmeeks

4
Це питання майже п’ять років. Особисто я думаю, що EJB - це технології, які всіляко втратили веб-сервіси HTTP. Простий і відкритий виграш. Надайте мені послуги REST, і ви можете зберегти свої EJB. Весна їх чудово підтримує. Ось куди пішов світ.
duffymo

1
Дякую за відповідь. Просто шукати переваги як оцінка кращого (ВЕСНА, EJB 3.x) для переходу з існуючої програми EJB 2.1. Ще одне запитання: EJB 3.x також підтримує WebService. Тож, чи могли б ми отримати переваги JNDI / RMI для розповсюдження програм Java та WS для інших програм?
немежники

48

По-перше, дозвольте це чітко сказати, я не кажу, що ви не повинні використовувати Spring, але, оскільки ви просите про деякі переваги, ось принаймні дві з них:

  • EJB 3 є стандартом, тоді як Spring - ні (це фактично стандарт, але це не одне і те ж), і це не зміниться в найближчому майбутньому. Хоча ви можете використовувати рамку Spring з будь-яким сервером додатків, додатки Spring блокуються як у самій Spring, так і у певних службах, які ви вирішите інтегрувати у Spring.

  • Фреймворк Spring розміщений поверх серверів програм та бібліотек служб. Код інтеграції служби (наприклад, шаблони доступу до даних) знаходиться у фреймворку та піддається розробникам додатків. Навпаки, платформа EJB 3 інтегрована в сервер додатків, а код інтеграції служби інкапсульований за інтерфейсом. Таким чином, постачальники EJB 3 можуть оптимізувати продуктивність та досвід роботи розробника, працюючи на рівні сервера додатків. Наприклад, вони можуть тісно пов'язати механізм JPA з управлінням транзакціями JTA. Інший приклад - підтримка кластеризації, яка є прозорою для розробників EJB 3.

EJB 3, однак, не є ідеальним, але він все ще не має деяких функцій (наприклад, ін'єкція таких керованих компонентів, як прості POJO).


1
Відповідь на освіту, але мені цікаво, чому / коли вам потрібно ввести простий POJO, а не ініціалізувати новий?
Омер Фарук Алмалі

4
З метою тестування.
Філіп

22

Точки Паскаля дійсні. Однак є на користь Весни.

  • Специфікація EJB насправді трохи розкута, і тому на різних серверах прикладних програм можна спостерігати різну поведінку. Звичайно, це не стосується більшості випадків, але у мене були такі проблеми для деяких «темних куточків».

  • Spring має багато зайвих смакот, таких як spring-test, AOP, MVC, інтеграція JSF тощо. EJB має деякі з них (перехоплювачі, наприклад), але, на мій погляд, вони не настільки розвинені.

На закінчення, це залежить головним чином від вашого конкретного випадку.


Можливо, щось на кшталт Spring потребує лише сервлет-двигуна, було б точніше (EJB можна використовувати в будь-якому контейнері JEE, сервлет-двигун! = Контейнер JEE).
Паскаль Тівент

1
Ну, технічно, Spring також не вимагає сервлетного двигуна. Наприклад, spring-test використовує контекст пам'яті.
Божо

3
Ну, технічно, EJB не вимагають автономного контейнера, навіть якщо ви йдете цим шляхом. З EJB 3.1 існує стандартний EJBContainer.createEJBContainer()API для використання вбудованого контейнера. Отже, все-таки ваше твердження неправильне.
Pascal Thivent

добре, 3.1 є абсолютно новим, і я очевидно забув про доповнення. Цей пункт видалено з моєї відповіді.
Божо

-30

Пружина покликана доповнити EJB, а не замінити його. Весна - це шар поверх EJB. Як ми знаємо, кодування EJB виконується за допомогою API, що означає, що ми повинні реалізовувати все в API, використовуючи фреймворк Spring. Ми можемо створити код котлової таблички, тоді просто візьмемо цю табличку, додамо до неї щось, тоді все готово. Внутрішньо Spring пов'язаний з EJB - Spring не існував би без EJB.

Головною перевагою використання Spring є те, що між класами взагалі немає зв’язку.


8
ви абсолютно помиляєтесь, вибачте
Якуб Н

2
вибачте @sasi, це навіть не є близькою до правильної чи приємної відповіді .......
Пракаш,

4
"Весна не існувала б без EJB." Чоловіче, ти справді? Ви коли-небудь у своєму житті використовували "\ @Stateless" у декларації EJB або використовували анотацію \ @EJB для ін'єкцій? Думаєте, вони працювали б у Jetty чи Tomcat? Як ви вважаєте, що операціями керують навесні? Ви знаєте, що можете розгорнути програму Spring у контейнері сервлетів, чи не так?
99, Sono

Вибачте, але ви маєте недостатньо структуроване розуміння обох, EJB як частини Java EE і Spring як принципу конвенції над конфігурацією. Насправді, якщо ви не копаєтеся в глибині, ви можете в кінцевому рахунку думати, що вони є якоюсь тією ж річчю або спорідненою або будь-якою з подібних видів. Чому? вони обидва мають подібність, як ін'єкція, але різниця між ними величезна. Це правда, що Весна народилася як альтернатива назад EJB у часі через складність EJB, але це було. Досить добре під час Часу Java EE 5 (EJB 3) було ретушовано, так само, як весна робила їх COC
Ішимве Обайн Консолятор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.