Primavera contro EJB. Può Spring sostituire EJB? [chiuso]


96

Poiché Spring è in grado di utilizzare le transazioni proprio come EJB . Per me, Spring è in grado di sostituire il requisito di utilizzare EJB. Qualcuno può dirmi quali sono i vantaggi extra dell'utilizzo di EJB?

Risposte:


201

Spring è stato sviluppato come alternativa a EJB sin dal suo inizio, quindi la risposta è ovviamente che puoi usare Spring al posto di EJB.

Se c'è un "vantaggio" nell'usare EJB, direi che dipenderà dalle capacità del tuo team. Se non hai esperienza in Spring e molta esperienza con EJB, forse restare con EJB 3.0 è una buona mossa.

I server di app scritti per supportare lo standard EJB possono, in teoria, essere trasferiti da un server di app Java EE conforme a un altro. Ma questo significa stare lontano da tutte le estensioni specifiche del fornitore che ti vincolano a un unico fornitore.

Spring porte facilmente tra i server delle app (ad esempio, WebLogic, Tomcat, JBOSS, ecc.) Perché non dipende da loro.

Tuttavia, sei bloccato nella primavera.

Spring incoraggia buone pratiche di progettazione OO (ad esempio, interfacce, livelli, separazione delle preoccupazioni) a vantaggio di qualsiasi problema che tocchino, anche se decidi di passare a Guice o un altro framework DI.

Aggiornamento: questa domanda e risposta risalgono a cinque anni fa nel 2014. Va detto che il mondo della programmazione e dello sviluppo di applicazioni è cambiato molto in quel periodo.

Non è più solo una scelta tra Java o C #, Spring o EJB. Con vert.x è possibile evitare del tutto Java EE. È possibile scrivere applicazioni poliglotte altamente scalabili senza un server app.

Aggiornamento: è marzo 2016 ora. Spring Boot offre un modo ancora migliore per scrivere applicazioni senza server di app Java EE. È possibile creare un JAR eseguibile ed eseguirlo su una JVM.

Mi chiedo se Oracle continuerà a supportare le specifiche Java EE. I servizi Web hanno preso il sopravvento per gli EJB. La soluzione EJB è morta. (Solo la mia opinione.)


7
Secondo me, "lock in" è una frase troppo forte per descrivere la primavera. Dopotutto, Spring è progettato per incollare tutto insieme, non per sostituirli, puoi sempre scegliere con cosa vuoi integrarti. Inoltre, tutto ha dei lock-in, anche il più semplice Apache Commons ci blocca, ma lo usiamo ancora tutti i giorni.
Christopher Yang

3
Non ci sono fornitori alternativi a VMWare / Spring nel modo in cui puoi scegliere tra Oracle, Red Hat e IBM per le piattaforme Java EE. È tutto quello che volevo dire. Non è un commento sulla capacità o sull'utilità di Spring. Mi piace molto. Lo uso tutti i giorni e dormo la notte.
duffymo

1
@ChristopherYang è corretto. Voglio dire, "Java" sarebbe un venditore lock-n. Quindi, alla fine, dobbiamo solo smettere di litigare e fare qualcosa. :-)
cbmeeks

4
Questa domanda ha quasi cinque anni. Personalmente, penso che gli EJB siano una tecnologia datata che ha perso in ogni modo i servizi Web HTTP. Vittoria semplice e aperta. Dammi i servizi REST e potrai mantenere i tuoi bean. La primavera li sostiene bene. Ecco dove è andato il mondo.
duffymo,

1
Grazie per la risposta. Sto solo cercando i vantaggi come valutare quello migliore (SPRING, EJB 3.x) per la migrazione dall'applicazione EJB 2.1 esistente. Un'altra domanda, EJB 3.x supporta anche WebService. Quindi, potremmo ottenere il vantaggio di JNDI / RMI per la distribuzione di app Java e WS per altre app?
noboundaries

48

Per prima cosa, lascia che lo dica chiaramente, non sto dicendo che non dovresti usare Spring ma, poiché stai chiedendo alcuni vantaggi, eccone almeno due:

  • EJB 3 è uno standard mentre Spring non lo è (è uno standard de facto ma non è la stessa cosa) e questo non cambierà nel prossimo futuro. Sebbene sia possibile utilizzare il framework Spring con qualsiasi server di applicazioni, le applicazioni Spring sono bloccate sia in Spring stesso che nei servizi specifici che si sceglie di integrare in Spring.

  • Il framework Spring si trova sopra i server delle applicazioni e le librerie di servizi. Il codice di integrazione del servizio (ad es. Modelli di accesso ai dati) risiede nel framework ed è esposto agli sviluppatori dell'applicazione. Al contrario, il framework EJB 3 è integrato nel server delle applicazioni e il codice di integrazione del servizio è incapsulato dietro un'interfaccia. I fornitori di EJB 3 possono quindi ottimizzare le prestazioni e l'esperienza degli sviluppatori lavorando a livello di server delle applicazioni. Ad esempio, possono legare strettamente il motore JPA alla gestione delle transazioni JTA. Un altro esempio è il supporto del clustering, trasparente per gli sviluppatori EJB 3.

EJB 3 non è perfetto, però, manca ancora di alcune funzionalità (es. Iniezione di componenti non gestiti come semplici POJO).


1
Risposta educativa, ma mi chiedo perché / quando è necessario iniettare un semplice POJO invece di inizializzarne uno nuovo?
Ömer Faruk Almalı

4
A scopo di test.
Filippo

22

I punti di Pascal sono validi. Ci sono, tuttavia, i seguenti a favore della primavera.

  • La specifica EJB è in realtà un po 'allentata e quindi è possibile osservare comportamenti diversi con diversi server delle applicazioni. Questo non sarà vero per la maggior parte dei casi, ovviamente, ma ho avuto un tale problema per alcuni "angoli bui".

  • Spring ha molte chicche extra, come spring-test, AOP, MVC, integrazione JSF, ecc. EJB ne ha alcune (interceptor, per esempio), ma secondo me non sono molto sviluppate.

In conclusione, dipende principalmente dal tuo caso esatto.


Forse qualcosa come Spring necessita solo di un motore servlet sarebbe più preciso (EJB può essere utilizzato in qualsiasi contenitore JEE, motore servlet! = Contenitore JEE).
Pascal Thivent

1
Beh, tecnicamente, anche la primavera non richiede un motore servlet. Ad esempio spring-test utilizza un contesto in memoria.
Bozho

3
Beh, tecnicamente, gli EJB non richiedono un contenitore autonomo nemmeno se vai in questo modo. A partire da EJB 3.1 è disponibile l' EJBContainer.createEJBContainer()API standard per utilizzare un contenitore incorporato. Quindi, comunque, la tua affermazione è sbagliata.
Pascal Thivent

ok, 3.1 è abbastanza nuovo e ovviamente mi sono dimenticato delle aggiunte. Rimosso quel punto dalla mia risposta.
Bozho

-30

La primavera è pensata per completare EJB, non per sostituirlo. La primavera è uno strato sopra EJB. Come sappiamo, la codifica di EJB viene eseguita utilizzando l'API, il che significa che dobbiamo implementare tutto nelle API utilizzando il framework Spring. Possiamo creare il codice boilerplate, quindi prendere quel piatto, aggiungerci delle cose, poi tutto è fatto. Internamente Spring è connesso con EJB - Spring non esisterebbe senza EJB.

Il vantaggio principale dell'utilizzo di Spring è che non vi è alcun accoppiamento tra le classi.


8
ti sbagli completamente, scusa
Jakub H

2
scusa @sasi questo non è nemmeno vicino a una risposta corretta o carina .......
Prakash

4
"La primavera non esisterebbe senza EJB." Amico, sei davvero? Nella tua vita hai mai usato "\ @Stateless" nella dichiarazione di un bean, o hai usato l'annotazione \ @EJB per l'iniezione? Pensi che funzionerebbero in Jetty o Tomcat? Come pensi che vengano gestite le transazioni in primavera? Sai che puoi distribuire un'applicazione Spring in un servlet container, giusto?
99Sono

Siamo spiacenti, ma non hai una comprensione ben strutturata di entrambi, EJB come parte di Java EE e spring come principio di convenzione sulla configurazione. In realtà, se non scavi nel profondo potresti finire per pensare che siano in qualche modo la stessa cosa o imparentati o qualsiasi altra cosa del genere. Perché? entrambi hanno somiglianze come l'iniezione e ma la differenza tra loro è enorme. È vero che la primavera è nata come alternativa al ritorno nel tempo di EJB a causa della complessità di EJB, ma lo era. Abbastanza buono durante il periodo di Java EE 5 (EJB 3) è stato ritoccato anche facendo come la primavera stava facendo con il loro COC
Ishimwe Aubain Consolateur
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.