Java EE 6 vs. Spring 3 Stack [geschlossen]


90

Ich starte jetzt ein neues Projekt. Ich muss Technologien wählen. Ich brauche etwas Leichtes, also kein EJB oder Seam. Andererseits brauche ich JPA (Hibernate oder Alternative) und JSF mit IceFaces.

Denken Sie, dass ein solcher Stapel auf Spring 3, der auf Tomcat bereitgestellt wird, eine gute Wahl ist? Oder könnte eine Java EE 6-Webanwendung besser sein? Ich befürchte, dass Java EE 6 eine neue Technologie ist, die noch nicht gut dokumentiert ist. Tomcat scheint einfacher zu warten zu sein als Glassfish 3.

Was ist deine Meinung? Hast du irgendwelche erfahrungen


8
Ich würde mich für primefaces.org anstelle von IceFaces entscheiden, wenn Sie Licht wollen. Es ist viel schneller und eine schlankere API.
Shervin Asgari

1
Derzeit gibt es nur Glassfish, der JEE6 anbietet. Harz setzt langsam die JEE6 Web - Profil, das genug sein könnte für Sie je nachdem , was Sie brauchen.
Thorbjørn Ravn Andersen

3
@ Thorbjørn Sie können GlassFish v3 Web Profile verwenden, wenn Sie nur das Webprofil möchten.
Pascal Thivent

@Pascal, es war zu detailliert, dass es bald eine Alternative zu Glassfish geben wird, um JEE6 zu bekommen, wenn Sie mit dem Webprofil leben können (ich kann), ganz zu schweigen davon, dass Glassfish nicht kann.
Thorbjørn Ravn Andersen

@ Thorbjørn Ich habe vergessen, das @ Thorbjørn zu entfernen :) Der Kommentar war für das OP bestimmt, das anscheinend davon ausgeht, dass die Verwendung des "Full-Stack" -GFv3 die einzige Option ist.
Pascal Thivent

Antworten:


101

Ich brauche etwas Leichtes, also kein EJB oder Seam.

Möchten Sie erklären, was EJBs seit EJB3 schwer macht? Ist dir klar, dass wir nicht mehr im Jahr 2004 sind? Ich würde gerne Ihre Definition von Licht und Ihre Argumente lesen (und ich werde meine Antwort gerne aktualisieren, da ich mir ziemlich sicher bin, dass ich ein paar solide Dinge zu sagen hätte).

Andererseits brauche ich JPA (Hibernate oder Alternative) und JSF mit IceFaces.

Das Java EE 6-Webprofil, das JSF 2.0, JPA 2.0, Bean Validation, EJB 3.1 Lite, CDI usw. enthält, ist hierfür perfekt geeignet. Sie können das GlassFish v3-Webprofil verwenden , um eine Anwendung auszuführen, die mit dem Java EE 6-Webprofil erstellt wurde .

Denken Sie, dass ein solcher Stapel auf Spring 3, der auf Tomcat bereitgestellt wird, eine gute Wahl ist? Oder könnte eine Java EE 6-Webanwendung besser sein?

Nun, ich mag die Idee, meinen Code auf einer nicht proprietären Plattform (Java EE) anstatt auf einem proprietären Container (Spring) auszuführen . Und ich denke, dass Java EE 6 gut genug ist (und dies ist ein Euphemismus, EJB 3.1 (Lite), JPA 2.0, JSF 2.0, CDI Kick Ass). Beachten Sie, dass ich ein JSF-Skeptiker war, aber ich habe einen zweiten Blick darauf geworfen, und JSF 2.0 mit CDI ist so unterschiedlich, dass ich es nicht einmal vergleichen kann. Und wenn Sie sich CDI nicht angesehen haben, lassen Sie mich Ihnen sagen, dass es rockt.

Ich befürchte, dass Java EE 6 eine neue Technologie ist, die noch nicht gut dokumentiert ist.

Java EE sieht für mich ziemlich gut dokumentiert aus. Das klingt nach freiem Anspruch. Und ob Sie es glauben oder nicht, ich finde, dass der Frühling kompliziert wird, während Java EE einfacher wird.

Tomcat scheint einfacher zu warten zu sein als Glassfish 3.

Hast du etwas probiert? Haben Sie ein bestimmtes Problem gehabt? Auch dies klingt nach freiem Anspruch.


2
Ich bin kurz nach dem großen Projekt, das mit EJB3.0 + Seam auf JBoss mit Drools, GraniteDS und einigen mehr entwickelt wurde. Ich bin damit einverstanden, dass Seam rockt! Aber ich habe 50% der Entwicklung für die erneute Bereitstellung, den Neustart von Servern, Bereitstellungsfehler, das Bereinigen von temporären Verzeichnissen usw. aufgewendet. Andererseits war die Leistung von JBoss Tools sehr schlecht (ich meine wirklich - Strg + Speicherplatz und 10 Sekunden hängen). Dies entmutigt mich wirklich, JEE6 zu verwenden Das sieht aus wie aus dem Seam-Framework entlehnt. Was den Server betrifft, möchte ich nicht an Conecion Pools, Jndi, JMS, JMX, Ear Deplyment denken. Ich brauche etwas, um WAR anzuziehen und in Sekunden zu laufen.
Piotr Gwiazda

6
@peperg Gaving King ist der Spezifikationsleiter von CDI (Weld ist der RI), sodass Sie Ähnlichkeiten zwischen Seam und CDI finden. Aber CDI! = Naht, Java EE 6! = Naht, Ihre Wahrnehmung ist falsch. Vielleicht versuchen Sie es mit GlassFish v3 Web Profile. Sie werden überrascht sein (und sobald der Verbindungspool definiert ist, gibt es nicht mehr viel zu befürchten).
Pascal Thivent

8
Was ist mit Leuten, die sagen, dass EJBs schwer sind? Ich benutze EJB v3.1 und sie sind einfach kommentierte Pojos. Wenn sie schwer sagen, meinen sie dann Leistung oder was?
arg20

13
@ arg20 - Das ist in der Tat die große Frage und Pascal bittet zu Recht zu erklären, was der Begriff "schwer" (oder "leicht") in diesem Zusammenhang bedeutet. Höchstwahrscheinlich ist es ein Rest der alten Fehde zwischen Spring und EJB. In den frühen Tagen waren EJB1 & 2 konzeptionell schwer. Eine Überbetonung von Remoting und Stateful Beans, ein lächerlich ausführlicher XML-Bereitstellungsdeskriptor und eine völlig verrückte Menge an erforderlichen Schnittstellen, die implementiert werden mussten, gaben ihnen einen sehr schlechten Ruf. Mit EJB3 (2006) hat sich dies komplett geändert, aber Leute, die EJB 2004 für den Frühling verlassen haben, denken manchmal immer noch, dass es 2004 und EJB2 das Neueste sind.
Arjan Tijms

7
Beachten Sie, dass auf der About-Seite von Spring steht: "Wir glauben, dass: J2EE einfacher zu verwenden sein sollte". Beachten Sie, dass sie den Begriff "J2EE" und nicht "Java EE" verwenden, der seit der Veröffentlichung von Java EE 5 (glaube ich) der richtige Name ist. Dies sagt viel über sie aus ...
Vítor E. Silva Souza

32

Ich habe JavaEE6 nicht verwendet.

Ich bin jedoch von allen früheren Versionen von JavaEE und EJB so schlimm zusammengeschlagen worden, dass ich ihm nicht vertrauen werde, bis er sich als De-facto-Standard etabliert hat, nicht nur als De-jure-Standard. Im Moment ist der Frühling immer noch der De-facto-Standard.

Täuschen Sie mich einmal Schande über Sie. Mach mich zweimal zum Narren, schäme dich für mich. Mach mich dreimal zum Narren, EJB.

Einige werden behaupten, dass Spring proprietär ist. Ich würde argumentieren, dass die Herstellerimplementierungen der JavaEE-Spezifikationen genauso proprietär waren, wenn nicht mehr.

Ich habe kürzlich eine umfassende Konvertierung durchlaufen, bei der eine Reihe von Java-Anwendungen von JBoss auf Weblogic verschoben wurden. Alle Spring / Hibernate-Apps wurden ohne Änderungen portiert, da alle benötigten Bibliotheken integriert waren. Alle Apps, die JPA, EJB und JSF verwendeten, waren eine Katastrophe beim Portieren. Subtile Unterschiede in der Interpretation von JPA, EJB und JSF zwischen App-Servern verursachten alle Arten von bösen Fehlern, deren Behebung ewig dauerte. Sogar etwas so Einfaches wie die JNDI-Benennung war zwischen AppServern völlig anders.

Der Frühling ist eine Umsetzung. JavaEE ist eine Spezifikation. Das ist ein RIESIGER Unterschied. Ich würde es vorziehen, eine Spezifikation zu verwenden, wenn die Spezifikation zu 100% luftdicht ist und absolut keinen Spielraum für die Implementierung dieser Spezifikation durch die Anbieter bietet. Aber die JavaEE-Spezifikation war das noch nie. Vielleicht ist JavaEE6 luftdichter? Ich weiß es nicht. Je mehr Sie in Ihrem WAR packen können und je weniger Sie von AppServer-Bibliotheken abhängig sind, desto portabler wird Ihre Anwendung, und das ist schließlich der Grund, warum ich Java und nicht Dot-NET verwende.

Selbst wenn die Spezifikation luftdicht wäre, wäre es schön, den Appserver aktualisieren zu können, ohne alle meine Technologie-Stacks in allen meinen Anwendungen zusammen aktualisieren zu müssen. Wenn ich ein Upgrade von JBoss 4.2 auf JBoss 7.0 durchführen möchte, muss ich die Auswirkungen der neueren Version von JSF auf alle meine Anwendungen berücksichtigen. Ich muss die Auswirkungen auf meine Spring-MVC- (oder Struts-) Anwendungen nicht berücksichtigen.


1
Genau das ist eine gute Argumentation.
Palesz

1
Ich stimme dieser Argumentation zu. Viele Probleme, mit denen ich konfrontiert war, waren Abhängigkeiten von der Implementierung einer Spezifikation durch einen Container. Deutlich weniger Schmerzen durch eingebettete Bibliotheken. Schwer zu argumentieren, außerhalb der philosophischen Präferenz einer Spezifikation.
Peter Porter

Wunderbare Argumentation. Ist dies jedoch Ihre Erfahrung auch nach JEE 6? Ich verstehe, dass App Server-Implementierungen von Spezifikationen immer noch schmerzhaft sein können - daher kann dieselbe von App Server 1 implementierte Spezifikation einfach und effizient sein, während sie nicht für App Server 2
Soumya

1
+1. Außerdem ändert sich der Anwendungsserver nach dem Zeitplan von Operations, wobei Spring / Hibernate unter der Kontrolle der Entwickler steht. In einer großen Unternehmensumgebung ist ein Upgrade des App-Servers eine viel größere Sache.
Nathan Hughes

Ich habe Dot-Net nicht wirklich verstanden. Es ist so viel Eigentum wie Spring und wird von einem einzigen Anbieter entwickelt, nämlich Microsoft. Könnte es bitte erklärt werden?
user1339260

23

Es spielt keine Rolle. Java EE 6 ist gut genug und aufgrund der dortigen Profile nicht "schwer" - Sie verwenden nur das Webprofil.

Ich persönlich bevorzuge den Frühling. Aber mir gehen die rationalen Argumente gegen Java EE 6 aus :)

(Wie ich durch einen Kommentar erinnert wurde - vielleicht möchten Sie RichFaces sowie ICEfaces und / oder PrimeFaces ausprobieren - je nachdem, welche Komponenten Sie benötigen).


1
Die Frage lautet also: "Ist es sinnvoll, Glassfish Application Server mit vollem Stapel zu verwenden, um das Webprofil zu verwenden?"
Piotr Gwiazda

1
@peperg Verwenden Sie das GlassFish v3-Webprofil, wenn Sie nur das Webprofil möchten, siehe meine Antwort.
Pascal Thivent

Ich habe hier einige Argumente veröffentlicht: stackoverflow.com/questions/2822812/spring-3-0-vs-j2ee-6-0/… , eher unter dem Gesichtspunkt "Wie man es in die Produktion bringt ". Vielleicht füllt das Ihre Argumente ein wenig aus.
Oliver Drotbohm

@peperq, JBoss 6 wurde über die Feiertage veröffentlicht.
Thorbjørn Ravn Andersen

17

Vor kurzem bestand eine meiner Kundenaufgaben darin, Spring Stack gegen Custom Framework Stack gegen Java EE Standards zu evaluieren. Nach einem Monat Evaluierung und Prototyping war ich nicht nur glücklich, sondern auch begeistert von den Java EE 6-Funktionen. Für jede neue "Enterprise" -Projektarchitektur im Jahr 2011 und in Zukunft würde ich Java EE 6 und mögliche Erweiterungen wie Seam 3 oder das kommende Apache JSR299-Erweiterungsprojekt verwenden. Die Java EE 6-Architektur ist optimiert und enthält die besten Open-Source-Ideen, die in den letzten Jahren entwickelt wurden.

Berücksichtigen Sie die folgenden Funktionen sofort: Ereignisverwaltung, Kontexte und DI, Interceptors, Decorators, RESTful-Webservices, integrierte Tests mit einbettbarem Container, Sicherheit und vieles mehr.

Die meisten meiner Ergebnisse werden in meinem Blog veröffentlicht und erläutern die wichtigsten Konzepte von Java EE 6, die Sie möglicherweise nützlich finden.

Natürlich gibt es keine feste Regel für die Auswahl eines Frameworks. Java EE 6 könnte für einfachere "Websites", die keinen umfangreichen Sitzungsstatus für Konversationen erfordern, gut aufgebläht sein. Sie können auch Grails auswählen oder spielen! Rahmen. Aber für Konversations-Webanwendungen kann ich kein besseres Argument sehen, warum Java EE 6 nicht gut passt.


Java EE 6 ist nur verdammt langsam, Glassfish und Glassfish-Webprofile sind nur sehr langsam, um sie mit Jetty / Tomcat / was auch immer zu vergleichen. Das Testen von einbettbaren Containern ist ebenfalls sehr langsam.
Palesz

15

Jetzt, nach einiger Zeit, habe ich Erfahrung mit Stapeln:

  • Java EE 5 + Naht + GraniteDS + Flex
  • Frühling 3 + Vaadin (auf GWT)
  • Frühling 3 + JSF 2.0 (PrimeFaces)

Meine Schlussfolgerungen sind:

  • Spring 3 ist viel einfacher als Seam (fast Java EE 6) und läuft auf Tomcat und Jetty! (Steg für die Entwicklung mit Maven Plugin ist ein Trasure).
  • Ich liebe Flex (ich war eigentlich lange Zeit ein Flex-Entwickler, daher bin ich voreingenommen) und wenn Sie eine umfangreiche Benutzeroberfläche benötigen und FlashBuilder kaufen können, verwenden Sie diese, aber verwenden Sie dieses Spring + GraniteDS- oder BlazeDs-Backend. Wenn Sie FlashBuilder nicht kaufen können, verschwenden Sie keine Zeit.
  • Vaadin ist großartig!. Der Entwicklungsprozess ist einfacher als bei Flex, aber Sie können problemlos umfangreiche Anwendungen ohne HTML-Probleme erstellen. Sie werden keine einzelne JS-Zeile schreiben. Sie brauchen nur etwas CSS (in Flex brauchen Sie es auch). Wenn sich Ihre Anwendungsoberfläche also wie eine Desktop-Anwendung verhält und Sie Flex nicht verwenden können (oder wollen), verwenden Sie Vaadin. Warnung! Vaadin hat einen großen JS-Overhead für den Browser.
  • Wenn Sie eine einfachere Website-ähnliche Anwendung erstellen, verwenden Sie JSF2.0 (mit Spring-Backend wie oben). Sie müssen mit HTML kämpfen (ich hasse es) und das Erstellen einer reichhaltigen Oberfläche wird schwieriger sein als Vaadin (insbesondere Layouts). Sie erhalten leichtes HTML für langsamere Browser / Computer. Ich mag PrimeFaces - es ist einfach und gut dokumentiert. Der zweite Platz ist IceFaces
  • Wenn Sie eine Website (NICHT eine Webanwendung) erstellen, auf der Sie HTML zum Leben erwecken müssen (anstatt eine Unternehmensanwendung zu erstellen, die in den Browser passt), verwenden Sie Wicket (wenn Sie komponentenbasiert sind, ziehen Sie die Einstellung) oder SpringMVC (wenn Sie vorlagenbasiert bevorzugen) , Push-Einstellung) oder verwenden Sie einfach Play! Rahmen. Denken Sie daran, dass das Erstellen umfangreicher datenbasierter Komponenten viel schwieriger sein wird, Sie jedoch die Kontrolle über jedes HTML-Tag haben (Ihr HTML / Grafik-Designer wird es lieben).

21
Ich verstehe nicht, wie sich Ihre eigene Antwort auf die Frage bezieht ...
Pere Villega

1
-1 Es scheint sehr unangemessen, diese Antwort zu akzeptieren, da Java EE 6 nicht einmal erwähnt wird. Außerdem wird keiner der Punkte angesprochen, die in @Pascal Thievents gut durchdachtem (und viel höher gewähltem) Punkt angesprochen wurden. Antworten.
user359996

1
Eigentlich ist die Frage nicht mehr gültig. JEE 6 ist jetzt sehr ausgereift, es war nicht im März 2010, als die Frage gestellt wurde.
Piotr Gwiazda

@PiotrGwiazda Inwiefern hat sich JEE 6 seitdem verändert? Die Leute hatten damals mehr Angst davor, aber es war im Grunde das gleiche JEE 6.
ymajoros

1
Ich meinte, dass JEE6-Implementierungen ausgereifter und verfügbarer sind. JBoss 7 ist jetzt stabil und es stehen weitere Implementierungen zur Verfügung. Die Community ist jetzt auch größer. Weitere Tools und Bibliotheken unterstützen jetzt den JEE 6-Stack.
Piotr Gwiazda

8

Lesen Sie Adam Biens Future Of Enterprise Java ... ist klar (Java EE mit / ohne Spring und umgekehrt) , einschließlich Kommentaren, um beide Seiten der Medaille zu erhalten. Ich werde Spring aus mehreren Gründen wählen und das Folgende ist einer von ihnen (Wiedergabe eines der Kommentare aus dem Beitrag)

„Ich bin nicht sicher, über welchen Java EE 6-Server Sie sprechen. Es gibt Glassfish-zertifiziert und TMAX JEUS. Es wird eine Weile dauern (lesen Sie: Jahre), bis Java EE 6-kompatible Versionen von WebSphere, WebLogic, JBoss usw. in Produktion sind und für echte Anwendungen verwendet werden können. Spring 3 benötigt nur Java 1.5 und J2EE 1.4 und kann daher in fast allen Umgebungen problemlos verwendet werden. '


6
Wir sind jetzt fast genau ein Jahr später und JBoss AS 6, das Java EE 6 unterstützt, wird derzeit in der Produktion verwendet.
Arjan Tijms

8

Meine Meinung basiert auf etwas, das von anderen nicht erwähnt wird, nämlich dass Code bei meiner Arbeit dazu neigt, Jahrzehnte (buchstäblich) zu leben, und daher ist die Wartung für uns sehr wichtig. Pflege unseres eigenen Codes und der von uns verwendeten Bibliotheken. Unser eigener Code, den wir kontrollieren, aber es liegt in unserem Interesse, dass die von uns verwendeten Bibliotheken in den oben genannten Jahrzehnten oder länger von anderen verwaltet werden.

Um es kurz zu machen, ich bin zu dem Schluss gekommen, dass der beste Weg, dies zu erreichen, die Verwendung von Open-Source-Implementierungen von Sun-Spezifikationen bis hin zur rohen JVM ist.

Von den Open-Source-Implementierungen hat Apache Jakarta bewiesen, dass sie ihre Bibliotheken pflegen, und in letzter Zeit hat Sun viel Arbeit bei der Erstellung hochwertiger Implementierungen für Glassfish v3 geleistet. In jedem Fall haben wir auch die Quelle für alle Module. Wenn also alles andere fehlschlägt, können wir sie selbst warten.

Sonnenspezifikationen sind normalerweise sehr streng, was bedeutet, dass Implementierungen, die der Spezifikation entsprechen, leicht ausgetauscht werden können. Schauen Sie sich nur die Servlet-Container an.

In diesem speziellen Fall würde ich empfehlen, sich JavaServer Faces anzusehen, nur weil es Teil von Java EE 6 ist, was bedeutet, dass es sehr, sehr lange verfügbar und gewartet sein wird. Dann haben wir uns entschieden, MyFaces Tomahawk zu erweitern, da es einige nützliche Ergänzungen enthält und es sich um ein Jakarta-Projekt handelt.

An JBoss Seam oder anderen ist nichts auszusetzen. Es ist nur so, dass ihr Fokus weniger auf dem für uns so wichtigen Wartungsproblem liegt.


Es stellte sich heraus, dass Java ServerFaces 2 in Java EE 6 alleine das tun konnte, wofür wir Tomahawk mit JSF 1 brauchten. Es ist ein ziemlich leistungsfähiges Framework (aber ein bisschen XML-schwer)
Thorbjørn Ravn Andersen

Toller Punkt, leider vergessen die Leute oft, dass Software jahrzehntelang funktioniert und dass langfristiger Support ein entscheidender Schlüssel ist.
Timmz

6

Ich kann sehen, wie Sie Spring verwenden, wenn Sie es bereits haben, aber was bringt es für das neue Projekt? Ich würde direkt mit Java EE 6 (ejb3, jsf2.0 usw.) gehen.

Wenn der Client mit Flex einverstanden ist, entscheiden Sie sich dafür. Verwenden Sie BlazeDS oder ähnliches - kein MVC. Möglicherweise verbringen Sie mehr Zeit mit diesem Teil (Datenaustausch zwischen Server und Client), haben jedoch auf beiden Seiten die volle Kontrolle.

Verwenden Sie Vaadin nicht, es sei denn, Sie möchten Ihren Browser beenden. Außerdem verbringen Sie mehr Zeit damit, den Code zu umgehen, sobald Ihre Seiten komplexer werden. Außerdem muss Ihre Denkweise komplett geändert werden, und alles, was Sie über die Standard-Front-End-Entwicklung wissen, wird verschwendet. Das Argument, dass Sie kein HTML oder JS verwenden müssen, macht wenig Sinn. Sie müssen es immer noch wissen, auch wenn Sie es nicht verwenden. Es wird schließlich in HTML und JS gerendert. Versuchen Sie dann, es zu debuggen - stellen Sie sicher, dass Sie ein paar Tage Zeit für einfache Dinge haben. Außerdem kann ich mir keinen Webentwickler vorstellen, der HTML / JS nicht kennt.

Ich verstehe einfach nicht, warum Leute all diese Abstraktionen ausprobieren, anstatt Java EE direkt zu verwenden.


5

Warum gibt es immer noch Gerüchte darüber, dass EJB 2010 im Schwergewicht ist? Es scheint, dass die Leute nicht in Java EE-Technologien aktualisiert werden. Probieren Sie es einfach aus, Sie werden angenehm überrascht sein, wie die Dinge in Java EE 6 vereinfacht werden.


4

Die Antwort auf Ihre Fragen hängt von Ihren Projektanforderungen ab. Wenn Sie keine Java EE-Funktionen wie Nachrichtenwarteschlangen, von Containern verwaltete globale Transaktionen usw. benötigen, entscheiden Sie sich für Tomcat + Spring.

Aus Erfahrung habe ich auch herausgefunden, dass Projekte, die viel Integration, Planung und Nachrichtenwarteschlangen von Webdiensten erfordern, am besten mit einem Teil des Java EE-Stacks ausgeführt werden können. Das Gute ist, dass Sie mit Spring weiterhin Java EE-Module integrieren können, die auf einem Anwendungsserver ausgeführt werden.

Java EE 6 unterscheidet sich stark von den vorherigen Versionen und macht wirklich alles viel einfacher. Java EE 6 kombiniert die besten Ideen aus der vielfältigen Java-Community - zum Beispiel war Rod Johnson vom Spring Framework aktiv an der Erstellung des Dependency Injection JSR in Java EE 6 beteiligt. Ein Vorteil der Verwendung von Java EE 6 besteht darin, dass Sie entsprechend codieren Ein Standard, der in einigen Organisationen für die Unterstützung von Anbietern usw. wichtig sein kann.

GlassFish v3 unterstützt Java EE 6 und ist recht leicht und startet sehr schnell. Ich habe Glassfish v3 für meine Entwicklungen verwendet und es ist wirklich einfach zu konfigurieren. Es wird mit einer sehr benutzerfreundlichen Administrationskonsole geliefert, mit der Sie Ihren Server grafisch verwalten können.

Wenn Sie GlassfishV3 und JSF 2 verwenden, können Sie die CDI-Funktionen von Java EE 6 nutzen, mit denen Sie auf einfache Weise Konversationen (z. B. Seiten wie Assistenten) in JSF erstellen können.

Für die Verwendung von Java EE 6 müssen Sie jedoch auch eine neue API erlernen. Abhängig vom verfügbaren Zeitrahmen ist dies möglicherweise nicht die beste Wahl für Sie. Tomcat gibt es schon seit Ewigkeiten, und die Kombination aus Tomcat und Feder wurde von vielen Webprojekten übernommen, was bedeutet, dass es viele Dokumentationen / Foren gibt.


Ich stimme Ihrem ersten Satz nicht zu, bei der Wahl geht es nicht darum, JMS zu verwenden oder nicht. Und ich denke nicht, dass JSR-330 in Java EE 6 so wichtig ist (es ist aus politischen Gründen mehr da), der wichtige Teil ist JSR-299 (CDI). Zumindest ist das meine Meinung.
Pascal Thivent

Stimmen Sie zu, dass es eine Politik gab, die JSR330 betraf - dennoch ist dies sehr wichtig, da es eine gemeinsame Grundlage für die Abhängigkeitsinjektion in Java (SE oder EE) bietet, anstatt DI zu einer Nur-JEE-Technologie zu machen. Außerdem wird es vom Spring Framework und Google Guice unterstützt, was bedeutet, dass Spring / Guice-Code einfach auf JEE6 portiert werden kann oder umgekehrt. JSR299 wurde auch entwickelt, um die Funktionen in JSR330 zu erweitern. Sie haben insofern Recht, als für Webanwendungen in JEE6 JSR299 absolut entscheidend ist. Dank dieser beiden JSRs haben JEE6 und Spring beide ein sehr ähnliches Programmiermodell. Danke für deinen Kommentar!
Raz

3

Ich habe sowohl in Spring als auch in Java EE 6 gearbeitet. Aus meiner Erfahrung kann ich sagen, dass Sie sicher sind, wenn Sie bei Spring bleiben, wenn Sie sich für die uralte JSP oder proprietäre Flex entscheiden.

Wenn Sie jedoch mit JSF fortfahren möchten, ist es an der Zeit, auf Java EE 6 umzusteigen. Mit Java EE 6 wechseln Sie zu Facelets und standardisierten Skriptbibliotheken und Komponentenbibliotheken. Keine Skriptinkompatibilitäten und Komponentenbibliotheksmatrizen mehr.

In Bezug auf Spring MVC ist es gut, solange Ihr Projekt nicht zu groß wird. Wenn es sich um eine große Unternehmensanwendung handelt, bleiben Sie bei Java EE 6. Denn nur so können Sie Ihre eigenen Komponentenbibliotheken und Ressourcenpakete ordnungsgemäß verwalten.


1
Vielen Dank für Ihren Kommentar. Meine Wahl war Frühling + Vaadin.
Piotr Gwiazda

3

Wenn Sie den Java EE Full Stack benötigen, empfehle ich Ihnen GlassFish 3.1. Es startet sehr schnell im Vergleich zu anderen Java EE-Containern, die einen Teil oder das gesamte Java EE 6 (JBoss 6, WebLogic 10.3.4) implementieren. Die erneute Bereitstellung dauert Sekunden und fast alles kann durch Konvention über Konfiguration durchgeführt werden. Es ist sehr benutzerfreundlich.

Wenn Sie etwas "Leichtes" möchten, können Sie einen Apache Tomcat 7.x mit den gewünschten Funktionen anpassen. Ich habe viel mit den folgenden Bibliotheken verwendet: Weld 1.1.0 (CDI) JPA 2.0 (Hibernate 3.6.x) - nur ressourcenlokale Transaktionen JSF 2.x (Mojarra) RichFaces 4.0 BIRT-Laufzeit

Java EE 6 ist seit 10 Jahren ein Java EE-Entwickler (ich leide unter frühen EJB-, JSF- und Web-Technologien). Es ist sehr einfach, gut gekoppelt und die aktuelle Hardware läuft reibungslos, sodass die ursprünglichen Gründe, aus denen Spring motiviert ist, nicht mehr gültig sind.


1
Ich mag deine Antwort. Sehr vernünftig. Als ich die Frage stellte, war JEE6 sehr jung und Tomcat 7 war noch nicht fertig. "Ursprüngliche Gründe, die Spring motiviert haben, sind nicht mehr gültig" - es ist wahr, aber JEE6 mit CDI braucht einige Zeit, um sich zu verbessern. Zum Beispiel: Die Javamelody-Überwachung ist für Spring und Guice verfügbar (ich kann mir nicht vorstellen, bei Anwendungen ohne sie zu arbeiten). EHcache ist für Spring verfügbar (ich meine die Ergebnisse der Caching-Methoden). Viele Dinge wie die Aspektprogrammierung sind im Frühjahr noch einfacher, da viele Bibliotheken und Frameworks von Drittanbietern problemlos in Spring integriert werden können, jedoch noch nicht in JEE6.
Piotr Gwiazda

1

Ich würde immer noch den Frühling bevorzugen.

Und ich würde JSF weitergeben. Ich denke, es ist eine tote Technologie. Spring MVC wäre eine bessere Alternative. Flex würde es auch tun. Denken Sie an die ersten XML-Services für Verträge, und Sie können das Back-End vollständig von der Benutzeroberfläche entkoppeln.


1
Ich habe einige Anwendungen mit Java + Flex und PHP + Flex erstellt und bin damit einverstanden, dass dies die beste Lösung für umfangreiche Schnittstellen ist. Aber in dieser Anwendung kann ich Flex nicht verwenden :( Ich benötige jedoch eine übergeordnete Schnittstelle, daher ist Spring MVC keine Lösung. Ich möchte über sortierbare Daten nachdenken, die nicht <tr> <td> in einer Schleife sind.
Piotr Gwiazda

1
@duffymo - Ich kann argumentieren, ob Flex eine gute Wahl ist. JSF ist definitiv nicht tot, besonders wenn Bibliotheken wie Richfaces, Primefaces, Icefaces usw. in der Nähe sind.
Bozho

1
In IceFaces erstelle ich Menüs, Bäume, Datagrids, verwende Aktionen, Ereignisse und ich denke nicht, ob die Seite neu geladen wird oder ob es sich um eine Ajax-Anfrage handelt. Ein sortierbarer Datagrid- oder Ajax-geladener Baum ist eine integrierte Komponente. In Spring MVC arbeite ich mit HTML - Tabellen, Listen usw. Ich muss ein Javascript-Framework von Drittanbietern verwenden und AJAX Magic von Hand erstellen. Ich würde es gerne in Flex machen, aber es ist eine politische / geschäftliche Entscheidung - nicht meine.
Piotr Gwiazda

1
Meine aktuellen zwei JSF-Projekte sind definitiv nicht tot;) Und ich bin viel zufriedener mit der JSF-Methode zum Erstellen von RIA ("rich" in "richfaces" ist dafür) als mit Flex. Einer geht sogar nächste Woche an die Börse.
Bozho

2
Ich würde wirklich gerne wissen, warum Sie Spring immer noch bevorzugen, Java EE 6 ist verdammt gut. Denken Sie nicht, dass das Laufen auf einer offenen Plattform für die Zukunft von Java wichtig ist?
Pascal Thivent

0

Ich würde Spring + Tomcat empfehlen, es sei denn, Sie können warten, bis Glassfish v3 und Weld reifer werden. Derzeit gibt es einige Probleme mit dem Speicherverbrauch / der CPU-Auslastung, wenn Glassfish mit CDI-fähigen Anwendungen ausgeführt wird.


0

Ich habe nicht alles gelesen, sondern nur, um zu sagen, dass Sie EJB3 jetzt in einem Krieg gegen Java EE 6 verwenden können, damit Sie EJB3 unter Tomcat verwenden können (glaube ich).


Ja, Sie können EJBs in einem WAR in Java EE 6 verpacken, dies bedeutet jedoch nicht, dass Sie ein solches WAR auf Tomcat bereitstellen können. Sie benötigen einen Container, der das Webprofil implementiert, und Tomcat tut dies nicht, und es gibt in der Tomcat-Community keinen Plan, es zu implementieren (siehe old.nabble.com/Java-EE-6-Web-Profile-td27715793.html ). Aber es gibt GlassFish v3 Web Profile, es wird Harz geben ...
Pascal Thivent

2
Update: Werfen Sie einen Blick auf TomEE + Projekt tomee.apache.org/apache-tomee.html
gpilotino

-3

Ich habe dir Tomcat mit Spring empfohlen, weil:

  1. Spring kann Backing Beans für JSP erstellen
  2. Sie werden Spring verwenden, um Objekte über JPA beizubehalten

Es ist eine gute Wahl, sich für Tomcat zu entscheiden, da Sie keine Schwergewichtsverarbeitung benötigen


1
"Schwergewichtsverarbeitung"? Könnten Sie näher darauf eingehen? Ich bin neugierig.
Pascal Thivent
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.