2011-01-15 22 views
12

Sono uno sviluppatore di Java SE ma ho un ricco background web (PHP, Perl/CGI e così via) e ora sto iniziando un nuovo progetto. Avrà interfaccia web, logica degli spaghetti, database relazionale come memoria e connessioni ad altri servizi. Lo faccio da zero.Java EE 6 e alternative

I miei colleghi mi hanno detto di usare la molla, la sicurezza della molla e gli ammortizzatori. Osservo brevemente le specifiche Java EE 6 e ho scoperto che copre quasi tutti gli aspetti delle applicazioni aziendali. Ho chiesto ai miei colleghi perché hanno bisogno di molle e montanti, ma sembra che utilizzino le tecnologie semplicemente perché hanno familiarità con loro e non hanno familiarità con il classico stack Java EE 6.

Quindi, la mia domanda è: cosa c'è di male in Java EE 6? Perché ho bisogno di Spring se ci sono ricerche JNDI? Ci vorranno un giorno o due per creare un InitialContext falso per i test unitari. E questo è tutto: sto con strumenti esterni come la primavera. Perché è necessaria la sicurezza di primavera se è presente una protezione integrata nelle specifiche Servlets? Posso mappare qualsiasi richiesta a qualsiasi servlet usando web.xml, non è necessario struts.xml. Posso usare i filtri servlet invece degli intercettori dei montanti. C'è RMI, quindi non ho bisogno del telecomando a molla. E così via ..

Perché dovrei infastidirmi con tutte quelle cose di fantasia se c'è Java EE 6?

Voglio davvero trovare la situazione quando Java EE 6 non è sufficiente. ne hai?

Grazie!

+3

C'è un'enorme differenza tra l'annata J2EE da allora e il moderno Java EE 6 da adesso. Di cosa stai parlando? Quindi, Spring and Struts erano fantastici add-on su J2EE. Ma ora, Java EE 6 fornisce quasi lo stesso già fuori dagli schemi. I tuoi colleghi potrebbero essere ancora appesi nei tempi antichi. – BalusC

+0

Spiacente) Java EE 6. Non userò Java 1.2))) –

+0

Si prega di rivedere/riadattare la domanda quindi. Si potrebbe anche riconsiderare :) Domanda simile [qui] (http://stackoverflow.com/questions/2084169/choosing-a-java-web-framework-now) e [qui] (http://stackoverflow.com/domande/1960280/cosa da imparare-per-fare-java-applicazioni web-a-java-ee-6). – BalusC

risposta

1

Spring non è necessario per Java EE. Spring semplifica l'uso di componenti Java EE complessi.

+0

Lo so) Ma posso usare JNDI invece di spring DI. Quindi, perché ho bisogno di primavera? –

+2

JNDI non è paragonabile a Spring DI. CDI è. – BalusC

0

Spring un modello-vista-controller che rende Java EE più pulito e più organizzato. È strutturalmente più corretto separare i modelli, le viste e il controller.

Sono d'accordo con te. Se si tratta di un semplice sito Web, penso che si possa fare tutto con Java EE. Tuttavia, immagina di avere un sacco di codice che gestisce l'input dei moduli e molti modelli. Ogni controller può avere una vista. Puoi creare un servlet e poi inoltrare alla pagina jsp corretta, oppure puoi usare spring perché fa già tutto questo.

La decisione è vostra di quanto è necessario utilizzare la primavera. Un buon framework è quello che ti permette di scegliere e scegliere quali parti usare. Penso che la primavera funzioni bene perché puoi semplicemente usare il modello mvc o andare oltre e fare di più con esso.

Ultima cosa, la molla ha un'iniezione di dipendenza che rende molto più semplice la configurazione.

+0

Grazie. Posso implementare il pattern MVC autonomamente: ogni servlet è un controller e la pagina JSP è solo una vista. Non userei alcuna logica all'interno di JSP (perché è impossibile testare). Posso usare JNDI (ricerca dei servizi) senza la primavera. È buono come l'iniezione di dipendenza, non è vero? –

+0

Penso che tu stia cercando di reinventare la ruota. Il che è bello, ma perché dovresti farlo quando Spring è già stato testato da milioni di utenti. Se dici un'esperienza di apprendimento, allora sono totalmente con te. Altrimenti, sei fuori solo riutilizzando le librerie che sono state create e testate. –

+0

In un buon progetto MVC avresti solo un servlet. – BalusC

13

Perché la gente usa Spring e perché è così popolare richiede un po 'di storia.

In passato, Spring era più semplice delle applicazioni Java EE. Mi riferisco alla specifica EJB2.x. Ho avuto l'impressione che ci fosse una sorta di ribellione contro la natura complicata di quella specifica. Gli sviluppatori volevano un'architettura più semplice e Spring lo ha fornito consentendo loro di scrivere POJO (Plain Old Java Objects) anziché classi che dovevano implementare interfacce specifiche per ottenere la funzionalità desiderata.

Spring ha anche reso più popolari 2 principi: Inversion of Control (IoC) e Iniezione di dipendenza. Combinati, questi due principi fornivano un modo diverso di collegare i vari componenti di un'applicazione e di ottenere quei componenti nell'applicazione quando funzionava.Questo, combinato con l'idea di scrivere solo POJOs è stato molto avvincente per molte persone, perché il codice era più semplice ed era più facile collegare tutti i componenti.

Le nuove specifiche EJB3 annullano parte di ciò che Spring ha da offrire, ma Spring è molto più di un contenitore IoC. Fornisce ottimi modelli per l'accesso JDBC al database, molteplici modi semplici di gestire le transazioni, testare le utilità, uno stack MVC e così via. Era popolare e rimane popolare. Una battuta che ho sentito è

"EJB3, la risposta alla domanda posta nessuno ..."

EJB3 è una buona scelta. La primavera è una buona scelta. Grails è anche una buona scelta (usa Spring, Hibernate sotto le coperte).

+1

Sono un grande fan di Grails! Incredibile la velocità con cui puoi iniziare a lavorare. –

+0

@amir, sono completamente d'accordo. – hvgotcodes

+1

e io no. Grails è bello, ma a partire dalla versione che stiamo usando - 1.3.3 - ancora piuttosto instabile. Abbiamo dovuto correggere alcuni bug (dopo averli segnalati, ovviamente). E non erano dei bachi d'angolo. – Bozho

1

"Allora, perché ho bisogno di primavera?"

Ilya! Finalmente mi hai convinto (e spero tu stesso) che non hai bisogno di Spring. In realtà non c'è niente di molto speciale in tutto questo mucchio ... a meno che tu non sia già abituato. Scrivono un libro sulla tecnologia web, quindi aggiungono il resto dell'informatica e lo chiamano RESTfull.

"Tuttavia, immaginate di avere un sacco di codice che gestisca l'input del modulo e molti modelli. Ogni controller può avere una vista".

Amir! - ottima considerazione La vera differenza tra i framework web che conosco riguarda la definizione di componente. Struts ha tre tipi di componenti: componenti View, Controler e Model. A prima vista sembra buono (meglio di altri sicuramente). Ma cosa puoi costruire di questi componenti? - Vista a una pagina, un controller di pagina e un modello di pagina. Dio sa quale sarà il costo degli elementi vincolanti da queste tre file di componenti - forse una configurazione enorme se possibile.

La vera soluzione è (come hai praticamente affermato nel citato sopra) è un concetto di componenti che ognuno ha il suo punto di vista, il suo controller e il suo modello. Solo una struttura è andata così lontano - HybridJava. Che cosa è un elemento costitutivo di una pagina Web in primavera?

1

Sembra che tu abbia bisogno di particolari funzionalità POC con Spring e quindi con Java EE 6 in modo da poter confrontare i due simili con un vero prototipo pratico funzionante.

Le ragioni che uso la primavera però, sono:

  • capacità di astrarre la mia applicazione di distanza dal server di applicazioni. Posso quindi eseguire su qualsiasi server di applicazioni, o al di fuori di AS per il test dell'unità
  • un sacco del codice della piastra della caldaia che dovrei scrivere, per migliorare il mio design è già disponibile
  • IOC/DI - l'oggetto che necessita di dipendenze non sa come ottenerle - tutto ciò che sa è quali interfacce richiede. Alcuni terzi li forniscono. Sì, è possibile eseguire la propria versione di questa terza parte in Java EE 6, ma è già disponibile in primavera.
  • Transazioni gestite da bean - Spring fornisce tutti gli strumenti necessari per avere un controllo di basso livello completo sulle transazioni. Suggerirei sempre di usare BMT poiché ti dà la flessibilità di cui potresti aver bisogno.