2010-11-17 14 views
10

Sto cercando di sviluppare un'applicazione web greenfield che riutilizzerà molti componenti Java. Per me, le opzioni più ovvie sono Grails o jRuby on Rails, ma ho difficoltà a trovare confronti oggettivi tra i due. Ci sono motivi chiari per scegliere l'uno rispetto all'altro:jRuby on Rails vs Grails

  1. facilità di integrazione con componenti Java esistenti (al di fuori del dominio persistente), ad es. JMS, supporto EIP
  2. per i test funzionali framework
  3. prestazioni su una singola macchina
  4. scalabilità

Sono non in cerca di risposte relative alla disponibilità di sviluppatori o l'attività delle comunità.


(ho controllato Grails vs. Rails, e non è rilevante per me)

+0

In aggiunta alle risposte sopra, Grails ha anche un [plugin per JMS] (http://www.grails.org/plugin/jms). –

+0

Penso che la risposta forse nel verificare quali gemme o plugin hanno ciascuno che possono aiutare con le integrazioni. –

risposta

4
  • facilità di integrazione con componenti Java esistenti:

è più facile con il groove, causare Groovy è fondamentalmente Java. non si dispone di grandi contesto-switch

  • supporto di test funzionali framework

rubino ha il proprio mucchio di framework di test come rspec/shoulda/cetriolo/bistecca e tonnellate di più. dal momento che mi piace sintassi rubino preferirei quelle prestazioni

  • su una singola macchina

per quanto ne so, graal è migliore in multithreading, perché le rotaie non hanno Focus troppo su che in passato . stanno attualmente recuperando, quindi potrebbe essere il pareggio.

  • scalabilità

sia bilancia con l'environement jvm. se hai un'infrastruttura in esecuzione per java, grail è più facile da integrare.

+1

grazie per la risposta. 1. Qualche idea su quanto sia più facile l'integrazione per Groovy di JRuby? 2. Buono a sapersi sulle opzioni di Ruby per il test; sono tutti compatibili con JRuby? 3. Capisco che il modello di threading di JRuby è significativamente diverso da quello standard di Ruby (ad esempio utilizza effettivamente i thread); hai tenuto conto di questo? 4. Scalare JRuby potrebbe essere semplice come ridimensionare le applicazioni Rails, usando solo un application server Java invece di uno Ruby. qualche idea? – Armand

+0

1. Non si tratta dell'integrazione di Groovy vs JRuby, si tratta dell'integrazione di Grails vs JRuby On Rails. Grails è più facile, perché è solo un'altra java lib. JROR usa strumenti come warbler o stack personalizzati come TorqueBox. 2. Dipende. 3. come in 1. riguarda il supporto thread di Rails. Rails 3 ha un Request-Lock di default. 4. No, vedi 3. – phoet

5

So Grails molto bene (in questo momento sto lavorando su un progetto Grails), ma non JRuby, così prendo questo come opinione probabilmente parziale: guardando la documentazione JRuby, sembra che l'integrazione JRubys con Java sia un po 'più ingombrante, dal momento che Java è più nativo in Groovy che in Ruby; pertanto, in JRuby, hai un sacco di parole chiave e metodi specifici per Java (ad esempio java_import, java_send). In parole povere, Groovy è un linguaggio rivolto specificamente al mondo Java, mentre JRuby è, beh, Ruby messo sulla JVM.

Grails ha test JUnit incorporati.

non posso dire molto sulle prestazioni e la scalabilità, ma data la buona integrazione con Java, si può sempre scrivere parti di prestazioni critiche in Java quando Groovy è troppo lento.

+0

grazie, hai affrontato il primo punto. Hai molta esperienza di questa integrazione? Un confronto tra frammenti di codice potrebbe essere utile. Per quanto riguarda JUnit, penso che sia più orientato verso i test unitari rispetto ai test funzionali; Per favore correggimi se sbaglio. Se ho capito bene, la riscrittura del codice in Java per motivi di prestazioni è un'opzione sia che si usi Groovy o JRuby. Ancora; Per favore correggimi se sbaglio. – Armand

+0

Alison: Groovy si integra perfettamente con Java, uno snipplet di codice di un metodo Groovy che chiama un metodo di un oggetto Java simile a Groovy che chiama Groovy o Java che chiama Java. Informazioni sul test funzionale: hai ragione, ma questo link ti aiuta: http://www.grails.org/Functional+Testing –

+0

Riscrivere in Java è un'opzione anche in JRuby, certo, ma la sintassi di Groovy (che è relativamente vicina in Java) e l'integrazione perfetta potrebbe renderlo un po 'più semplice con Grails –

3

Alla fine, si prenderà una decisione sulla scelta personale, il comfort con le due lingue e la disponibilità di risorse, ma alla fine, il fatto che Grails sia basato su Spring mi ha portato alla conclusione che è stata la scelta giusta per me. Sapevo che se tutto il resto non è riuscito ho potuto ripiegare ad utilizzare il vero e provato Spring Framework

+0

grazie. Speravo che sarebbe stato possibile prendere una decisione obiettiva, ma potresti avere ragione. – Armand

20

Provate entrambi e scegliete la lingua e l'ambiente più adatti a voi. È vero che lo stack Grails è più adatto all'integrazione con Java, ma molti componenti sono solo alcune linee di codice Ruby lontane dall'integrazione con Rails. Rails 3 è una fantastica versione che non richiede l'uso di ActiveRecord, infatti sarebbe banale usare Hibernate per i tuoi modelli. Vedi anche DataMapper, MongoMapper e un intero host di adattatori di database per database SQL e NoSQL.

Inoltre, JUnit! = Test funzionale. Invece, dai un'occhiata a Cucumber + Cucumber-Rails + Capybara + Selenium per un'esperienza di test di automazione del browser integrata. Dai uno sguardo a https://github.com/elabs/front_end_testing per un'applicazione di esempio che dimostra questo stack.

Suggerirò che Ruby è più adatto come un linguaggio di integrazione web e JRuby trova la soluzione ideale per rendere l'integrazione con Java facile e piacevole, rendendo al contempo disponibili moltissime librerie non Java. Non pensare che Groovy vince automaticamente perché è "più vicino" a Java. A volte è necessario entrare in un ambiente piacevolmente diverso per avere un nuovo sguardo su come risolvere un problema.

Divulgazione: come membro del team JRuby il mio pregiudizio è evidente nella mia risposta.

+4

Wow, 15 upvotes (fino ad ora) ?! Per cosa? - L'interrogante ha specificato quattro criteri che renderebbero una risposta una soluzione. - Tuttavia, stai rispondendo solo a uno di questi (test funzionale). - Che dire di integrare le tecnologie aziendali Java come JMS (che è stato un requisito nella domanda)? Molto probabilmente, c'è una distanza mooolto da JRuby a quelli. – robbbert

+0

grazie per la risposta (comprensibilmente di parte); Come dice @robbbert, tuttavia, questo non affronta tutti i punti citati. Inoltre, sono consapevole che JUnit non è tanto per i test funzionali; forse quello dovrebbe essere un commento @ risposta di ammoQ? – Armand

+1

@robbert +1. Che dire della scalabilità e delle prestazioni? http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/ Anche Grails non è solo più vicino a Java nella sintassi, ma anche facile da integrare. L'architettura Spring-backed è fantastica e molto facile da usare. –

4
  1. Come ha detto phoet, Grails ha il supporto della molla di prima classe, quindi è in genere molto facile da integrare le librerie di primavera - questo è ciò che molti plugin fanno, compreso il plugin JMS.

    Il codice Java può essere fornito in JAR o inserito nella directory src/java del progetto. Le classi Groovy possono fare riferimento a classi Java che possono fare riferimento a classi Groovy. È abbastanza semplice.

  2. Grails ha il supporto per HtmlUnit, Selenium-rc & WebDriver tramite vari plug-in. Geb ha molto interesse al momento, specialmente se combinato con Spock.

  3. Provali. Non so se ci sono dei confronti recenti, ma in genere le prestazioni dipendono fortemente dalla tua applicazione. http://grails.org/ e http://beta.grails.org/ sono entrambi in esecuzione su una singola macchina - ed entrambe sono applicazioni Grails.

  4. Credo che sia abbastanza facile raggruppare Grails via Terracotta. Puoi anche farlo con un semplice Tomcat, se vuoi. Ci sono opzioni per il caching distribuito - SpringSource ha la sua offerta (commerciale) sotto forma di GemFire.

Speranza che aiuta, e nell'interesse di una completa informativa io sono un membro del team di Grails.

1

Per i nuovi arrivati ​​interessati a questa domanda nel 2012 ...

"Con il @CompileStatic, le prestazioni di Groovy è di circa 1-2 volte più lento di Java, e senza Groovy, è circa 3-5 volte più lento . (...) Questo significa per me che Groovy è pronto per le applicazioni in cui le prestazioni devono essere in qualche modo paragonabili a Java."

Performance Test:. Groovy 2.0 contro Java http://java.dzone.com/articles/groovy-20-performance-compared

E poi l'autore, ho usato Groovy dal 2008 con grande successo, non solo per i CV, solo per fare lavoro fatto nel tempo delle prestazioni esigenza aziendale è sempre relativo a ciò che si vuole fare

Informazioni sull'integrazione, Grails è davvero "così buono" .Non ho mai avuto bisogno di fare un passo avanti per integrarlo con le librerie esistenti. la natura di Grails ha reso il lavoro ancora più semplice

Per coloro che potrebbero lamentarsi di micro-benchm archi e casi d'uso reali, ecco un po 'vecchio (Grails 1.8) ma buono con i framework web (Grails 1.3.7): http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/

Spero che questo aiuti!

PS .: Mi piacerebbe vedere i recenti benckmark con JRuby e altri linguaggi JVM veramente dinamici.