Wiosna vs EJB. Czy Spring może zastąpić EJB? [Zamknięte]

96

Od Spring potrafi korzystać z transakcji tak jak EJB . Dla mnie Spring jest w stanie zastąpić wymóg korzystania z EJB. Czy ktoś może mi powiedzieć, jakie są dodatkowe zalety korzystania z EJB?

cometta
źródło

Odpowiedzi:

201

Spring był rozwijany jako alternatywa dla EJB od samego początku, więc odpowiedź brzmi: oczywiście możesz użyć Springa zamiast EJB.

Jeśli istnieje „zaleta” korzystania z EJB, powiedziałbym, że zależy to od umiejętności Twojego zespołu. Jeśli nie masz doświadczenia w Spring i masz duże doświadczenie w EJB, być może trzymanie się EJB 3.0 jest dobrym posunięciem.

Serwery aplikacji napisane w celu obsługi standardu EJB teoretycznie mogą być przenoszone z jednego zgodnego serwera aplikacji Java EE na inny. Oznacza to jednak trzymanie się z dala od wszelkich rozszerzeń specyficznych dla dostawcy, które ograniczają Cię do jednego dostawcy.

Sprężynuj łatwo porty między serwerami aplikacji (np. WebLogic, Tomcat, JBOSS itp.), Ponieważ nie zależy od nich.

Jednak jesteś zamknięty w Spring.

Spring zachęca do dobrych praktyk projektowania obiektów obiektowych (np. Interfejsów, warstw, separacji problemów), które przynoszą korzyść każdemu problemowi, którego dotykają, nawet jeśli zdecydujesz się przejść na Guice lub inny framework DI.

Aktualizacja: To pytanie i odpowiedź mają pięć lat w 2014 roku. Trzeba powiedzieć, że świat programowania i tworzenia aplikacji bardzo się zmienił w tym czasie.

Nie jest to już tylko wybór między Java lub C #, Spring lub EJB. Z vert.x to możliwe, aby unikać Java EE w ogóle. Możesz pisać wysoce skalowalne, poliglotowe aplikacje bez serwera aplikacji.

Aktualizacja: teraz jest marzec 2016 r. Spring Boot oferuje jeszcze lepszy sposób pisania aplikacji bez serwerów aplikacji Java EE. Możesz utworzyć wykonywalny plik JAR i uruchomić go na JVM.

Zastanawiam się, czy Oracle będzie nadal obsługiwać specyfikację Java EE. Usługi sieciowe przejęły funkcje EJB. Rozwiązanie EJB jest martwe. (Tylko moja opinia.)

duffymo
źródło
7
Moim zdaniem „zamknięcie” to zbyt mocne określenie, aby opisać wiosnę. W końcu Spring jest tak zaprojektowany, aby wszystko skleić, a nie zastępować, zawsze możesz wybrać to, z czym chcesz się zintegrować. Poza tym wszystko ma blokady, nawet najprostsze Apache Commons blokują nas, ale nadal używamy go codziennie.
Christopher Yang
3
Nie ma alternatywnych dostawców dla VMWare / Spring, w których można wybierać między platformami Oracle, Red Hat i IBM for Java EE. To wszystko, co miałem na myśli. Nie jest to komentarz do możliwości ani przydatności Springa. Tak się składa, że ​​bardzo mi się to podoba. Używam go codziennie i śpię w nocy.
duffymo
1
@ChristopherYang, zgadza się. Chodzi mi o to, że „Java” byłaby dostawcą lock-n. W końcu musimy po prostu przestać się kłócić i coś zrobić. :-)
cbmeeks
4
To pytanie ma prawie pięć lat. Osobiście uważam, że EJB to przestarzała technologia, która przegrała pod każdym względem z usługami sieciowymi HTTP. Prosta i otwarta wygrana. Daj mi usługi REST, a zachowasz swoje EJB. Wiosna ładnie je wspiera. Tam odszedł świat.
duffymo
1
Dziękuję za odpowiedź. Po prostu szukam korzyści, takich jak ocena lepszej (SPRING, EJB 3.x) dla migracji z istniejącej aplikacji EJB 2.1. Jeszcze jedno pytanie, EJB 3.x obsługuje również usługę WebService. Czy moglibyśmy więc skorzystać z JNDI / RMI do dystrybucji aplikacji Java i WS dla innych aplikacji?
noboundaries
48

Po pierwsze, powiem to jasno, nie mówię, że nie powinieneś używać Springa, ale ponieważ prosisz o kilka zalet, oto co najmniej dwie z nich:

  • EJB 3 jest standardem, a Spring nie (to de facto standard, ale to nie to samo) i nie zmieni się to w dającej się przewidzieć przyszłości. Chociaż możesz używać struktury Spring z dowolnym serwerem aplikacji, aplikacje Spring są zablokowane zarówno w samym Spring, jak i w konkretnych usługach, które zdecydujesz się zintegrować w Spring.

  • Struktura Spring znajduje się na szczycie serwerów aplikacji i bibliotek usług. Kod integracji usług (np. Szablony dostępu do danych) znajduje się w strukturze i jest udostępniany twórcom aplikacji. W przeciwieństwie do tego struktura EJB 3 jest zintegrowana z serwerem aplikacji, a kod integracji usług jest umieszczony za interfejsem. Dostawcy EJB 3 mogą zatem zoptymalizować wydajność i doświadczenie programisty, pracując na poziomie serwera aplikacji. Na przykład mogą ściśle powiązać silnik JPA z zarządzaniem transakcjami JTA. Innym przykładem jest obsługa klastrów, która jest niewidoczna dla programistów EJB 3.

EJB 3 nie jest jednak doskonały, nadal brakuje mu niektórych funkcji (np. Wstrzykiwania niezarządzanych komponentów, takich jak proste POJO).

Pascal Thivent
źródło
1
Edukacyjna odpowiedź, ale zastanawiam się, dlaczego / kiedy trzeba wstrzyknąć proste POJO zamiast inicjować nowe?
Ömer Faruk Almalı
4
Do celów testowych.
Philip
22

Punkty Pascala są ważne. Istnieją jednak następujące zalety wiosny.

  • Specyfikacja EJB jest w rzeczywistości nieco luźna, dlatego można zaobserwować różne zachowania na różnych serwerach aplikacji. Oczywiście nie będzie to prawdą w większości przypadków, ale miałem taki problem w przypadku niektórych „ciemnych zakamarków”.

  • Spring ma wiele dodatkowych gadżetów, takich jak test sprężynowy, AOP, MVC, integracja JSF itp. EJB ma kilka z nich (na przykład przechwytywacze), ale moim zdaniem nie są one zbytnio rozwinięte.

Podsumowując, zależy to głównie od konkretnego przypadku.

Bozho
źródło
Może coś takiego jak Spring potrzebuje tylko silnika serwletów, byłoby dokładniejsze (EJB może być używany w dowolnym kontenerze JEE, silnik serwletów! = Kontener JEE).
Pascal Thivent
1
Cóż, technicznie rzecz biorąc, Spring również nie wymaga mechanizmu serwletów. Na przykład test sprężynowy używa kontekstu w pamięci.
Bozho
3
Cóż, technicznie rzecz biorąc, EJB nie wymagają samodzielnego kontenera, jeśli pójdziesz tą drogą. Od wersji EJB 3.1 istnieje standardowy EJBContainer.createEJBContainer()interfejs API do korzystania z wbudowanego kontenera. Więc nadal, twoje stwierdzenie jest błędne.
Pascal Thivent
ok, 3.1 jest całkiem nowy i oczywiście zapomniałem o dodatkach. Usunąłem ten punkt z mojej odpowiedzi.
Bozho
-30

Sprężyna ma uzupełniać EJB, a nie go zastępować. Wiosna to warstwa na wierzchu EJB. Jak wiemy, kodowanie EJB odbywa się za pomocą API, co oznacza, że ​​musimy implementować wszystko w API używając frameworka Spring. Możemy stworzyć kod boiler-plate, a następnie po prostu wziąć ten talerz, dodać do niego trochę rzeczy i wszystko jest gotowe. Wewnętrznie Wiosna jest połączona z EJB - Wiosna nie istniałaby bez EJB.

Główną zaletą używania Spring jest to, że nie ma żadnego powiązania między klasami.

sasi
źródło
8
całkowicie się mylisz, przepraszam
Jakub H
2
przepraszam @sasi, to nie jest nawet bliskie poprawnej lub miłej odpowiedzi .......
Prakash
4
„Wiosna nie istniałaby bez EJB”. Człowieku, czy jesteś prawdziwy? Czy kiedykolwiek w życiu używałeś „\ @Stateless” w deklaracji EJB lub używałeś adnotacji \ @EJB do wstrzykiwań? Czy myślisz, że te działałyby w Jetty lub Tomcat? Jak myślisz, jak zarządza się transakcjami na wiosnę? Wiesz, że możesz wdrożyć aplikację Spring w kontenerze serwletów, prawda?
99 Sono,
Przepraszamy, ale masz niezbyt ustrukturyzowane zrozumienie obu, EJB jako części Java EE i sprężyny jako zasady nadrzędnej konfiguracji. W rzeczywistości, jeśli nie zagłębisz się w głębiny, możesz w końcu pomyśleć, że są one czymś podobnym lub pokrewnym lub cokolwiek podobnego. Czemu? oba mają podobieństwa jak zastrzyk, ale różnica między nimi jest ogromna. To prawda, że ​​Wiosna narodziła się jako alternatywa dla cofnięć EJB w czasie ze względu na złożoność EJB, ale tak było. Wystarczająco dobry w czasach Java EE 5 (EJB 3) został wyretuszowany, również robiąc to, co wiosna robiła z ich COC
Ishimwe Aubain Consolateur