Domanda

Il mio team sta sviluppando un nuovo prodotto orientato ai servizi con un front-end web.Nelle discussioni sulle tecnologie che utilizzeremo, abbiamo deciso di eseguire un server applicativo JBoss e un frontend Flex (con possibile distribuzione desktop utilizzando Adobe AIR) e servizi Web per interfacciare client e server.

Abbiamo raggiunto un punto morto quando si tratta di quale tecnologia server utilizzare per la nostra logica aziendale.La grande discussione è tra EJB3 e Spring, con le nostre maggiori preoccupazioni relative alla scalabilità e alle prestazioni, nonché alla manutenibilità del codice base.

Ecco le mie domande:

  1. Quali sono gli argomenti a favore o contro EJB3 vs Spring?
    • Quali insidie ​​posso aspettarmi da ciascuno?
    • Dove posso trovare buone informazioni sui benchmark?
È stato utile?

Soluzione

Non ci sarà molta differenza tra EJB3 e Spring in base alle prestazioni.Abbiamo scelto la primavera per i seguenti motivi (non menzionati nella domanda):

  • Spring guida l'architettura in una direzione che supporta più facilmente i test unitari.Ad esempio, inserisci un oggetto DAO fittizio per testare l'unità del tuo livello aziendale o utilizzare l'oggetto MockHttpRequest di Spring per testare l'unità di un servlet.Manteniamo una configurazione Spring separata per i test unitari che ci consente di isolare i test su livelli specifici.
  • Un driver prioritario era la compatibilità.Se hai bisogno di supportare più di un App Server (o eventualmente desideri la possibilità di passare da JBoss a Glassfish, ecc.), essenzialmente porterai con te il tuo contenitore (Spring), invece di fare affidamento sulla compatibilità tra diverse implementazioni del Specifica EJB3.
  • Spring consente scelte tecnologiche per Persistenza, remotizzazione di oggetti, ecc.Ad esempio, stiamo utilizzando anche un front-end Flex e il protocollo Hessian per le comunicazioni tra Flex e Spring.

Altri suggerimenti

Il divario tra EJB3 e Spring è molto più piccolo di prima, chiaramente.Detto questo, uno degli svantaggi di EJB3 ora è che puoi solo eseguire l'iniezione in un bean, quindi puoi finire per trasformare componenti in bean che non devono esserlo.

L'argomento relativo al test unitario è abbastanza irrilevante ora: EJB3 è chiaramente progettato per essere testabile più facilmente.

Anche l'argomento di compatibilità di cui sopra è in qualche modo irrilevante:sia che utilizzi EJB3 o Spring, fai ancora affidamento su implementazioni fornite da terze parti di gestori di transazioni, JMS, ecc.

Ciò che farebbe cambiare le cose per me, tuttavia, è il supporto da parte della comunità.Lavorando su un progetto EJB3 l'anno scorso, non c'erano molte persone là fuori che lo usavano e parlavano dei loro problemi.La primavera, a torto o a ragione, è estremamente pervasiva, soprattutto in ambito aziendale, e questo rende più facile trovare qualcuno che abbia lo stesso problema che stai cercando di risolvere.

Quali sono gli argomenti a favore o contro EJB3 vs Spring?La primavera è sempre innovativa e riconosce i vincoli del mondo reale.Spring offriva semplicità ed eleganza per i server delle applicazioni Java 1.4 e non richiedeva una versione delle specifiche J2EE a cui nessuno aveva accesso nel 2004-2006.A questo punto è quasi un dibattito religioso in cui puoi farti risucchiare: Spring + astrazione + open source contro le specifiche Java Enterprise Edition (Java EE) 5.0.

Penso alla primavera integra più che competere con le specifiche Java EE.Poiché le funzionalità che una volta erano esclusive di Spring continuano ad essere integrate nelle specifiche, molti sosterranno che EJB 3 offre un set di funzionalità "abbastanza buono" per la maggior parte delle applicazioni aziendali interne.

Quali insidie ​​posso aspettarmi da ciascuno?Se stai trattando questo come un problema di persistenza (Spring + JPA) rispetto a EJB3, non stai davvero facendo una scelta così grande.

Dove posso trovare buone informazioni sui benchmark?Non ho seguito il risultati del benchmark specj per qualche tempo, ma furono popolari per un po'.Sembra che ogni fornitore (IBM, JBOSS, Oracle e Sun) sia sempre meno interessato ad avere un server conforme.Gli elenchi dei fornitori certificati diventano sempre più brevi man mano che si passa dalla versione 1.3 alla versione 1.4.1.5 Edizione Java Enterprise.Penso che i tempi dei server giganti pienamente conformi a tutte le specifiche siano finiti.

Consiglierei sicuramente EJB3 durante la primavera.Troviamo che sia più snello, più semplice da codificare e meglio supportato.In passato ho utilizzato Spring e l'ho trovato molto confuso e non ben documentato come EJB3 (o JPA, immagino alla fine)

  1. A partire da EJB3 non devi più occuparti di file di configurazione esterni e c'è solo un POJO che annoti per tabella del database.Questo POJO può essere passato al tuo livello web senza problemi.Gli IDE come Netbeans possono persino generare automaticamente questi POJO per te.Adesso utilizziamo EJB3 come back-end per alcune applicazioni su larga scala e non abbiamo notato alcun problema di prestazioni.I tuoi Session Beans possono essere facilmente esposti come servizi web che potresti esporre al tuo frontend Flex.I bean di sessione sono facili da bloccare a livello di metodo o di classe per assegnare ruoli e cose del genere, se necessario.

Non posso parlare molto della primavera, dato che l'ho provato solo per poche settimane.Ma la mia impressione generale era molto scarsa.Ciò non significa che sia un framework scadente, ma il nostro team ha riscontrato che EJB3 è il migliore per il livello di persistenza/business.

Tendo a preferire Spring rispetto a EJB3, ma la mia raccomandazione sarebbe, qualunque sia l'approccio adottato, di provare a scrivere POJO e utilizzare le annotazioni standard ove possibile, come le annotazioni JSR come @PostConstruct, @PreDestroy e @Resource che funzionano sia con EJB3 o Spring in modo da poter scegliere il framework che preferisci.

per esempio.potresti decidere su qualche progetto di utilizzare Guice invece per IoC.

Se desideri utilizzare l'iniezione pre-richiesta come in un'applicazione web, potresti scoprire che Guice è un po' più veloce per l'iniezione delle dipendenze rispetto a Spring.

I bean di sessione si riducono principalmente all'inserimento di dipendenze e alle transazioni;quindi EJB3 e Spring sono piuttosto simili per questo.Dove Spring ha il vantaggio è una migliore iniezione di dipendenze e astrazioni più belle per cose come JMS

ho usato un'architettura molto simile in passato.Spring + Java 1.5 + Actionscript 2/3, combinati con Flex Data Services, hanno reso tutto molto semplice (e divertente!) da programmare.tuttavia, un front-end Flex significa che sono necessarie macchine client sufficientemente potenti.

Per quanto riguarda la tua domanda:

Quali sono gli argomenti a favore o contro EJB3 vs Spring?

Suggerisco di leggere la risposta degli esperti: UNA RISPOSTA A:ANALISI COMPARATIVA EJB 3 E SPRING di Mark Fisher.Leggi i commenti per trovare le osservazioni di Reza Rahman (EJB 3.0).

Un'altra cosa a favore di Spring è che la maggior parte degli altri strumenti/framework disponibili hanno un supporto migliore per l'integrazione con Spring, la maggior parte di essi utilizza Spring anche internamente (ad es.activemq, cammello, CXF ecc.).

È anche più maturo e ci sono molte più risorse (libri, articoli, migliori pratiche, ecc.) e sviluppatori esperti disponibili rispetto a EJB3.

Penso che EJB sia una buona tecnologia dei componenti ma non un buon framework. Spring è il miglior framework disponibile ad oggi. Quindi dovrei considerare Spring come la migliore implementazione di JEE nel senso di un framework e la mia raccomandazione è di usare Spring in ogni progetto che ci dà la flessibilità di integrarci facilmente con qualsiasi tecnologia componente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top