bin zum erstmal hier und hoffe hier eine gute Informationsequelle zu Fragen gefunden zu haben
Ich selbst komme aus dem PHP Bereich und fange jetzt gerad erst an mich in Java einzuarbeiten.
Ich bin gerad dabei mein erstes eigenes Projekt auf die Beine zu stellen.
Ich habe mir eine paar Tutorials angeschen bzgl. JPA und Hibernate.
Somit komme ich auch gleich zu einer ersten Frage.
Benötigt JPA denn unbedingt Hibernate??? Ich denke mir wenn JPA over Hibernate benutzt wird ist dieses ein unbenötigter Headover seitens Hibernate.
In meinem Projekt setzte ich Maven ein.
In der POM reicht da für JPA
Hibernate ist eine Implementierung/Umsetzung von JPA. Du kannst JPA auch mittels EclipseLink, Apache OpenJPA usw. nutzen, bist also nicht auf Hibernate angewiesen. Allerdings ist es nicht möglich JPA ohne weitere Implementierung zu nutzen, für ein Framework muss man sich also entscheiden.
Dein Auschnitt aus der pom.xml geht aber schon auf die Hibernate-Implementierung von JPA. Für JPA direkt brauchst du keine Abhängigkeiten definieren, seit JDK 1.5 ist dies im JDK enthalten.
Alle Angaben nach besten Gewissen, bei Fehlern möcchte man mich bitte korrigieren
JPA ist im Enterprise Java definiert und dort seit dem Api-Level 5. Also Jee5 und nicht im JDK. Du wirst in der Java-API kein javax.persistence.Entity finden.
Ein Applicationserver nach Spec bringt immer eine JPA Implementierung mit.
D.h. wenn man ein Enterprise Projekt macht, dann benötigt man in der Pom nur eine Dependency zu javax.persistence, bzw. zur Jee-5,6,7 Api, da dies dort enthalten ist.
Beim Deployment stellt der AS dann den Rest bereit, außer man möchte abweichen und stellt seine eigene Implementierung zur Verfügung.
Möchte man in einem J2SE-Projekt JPA benutzen, dann benötigt man einmal javax.persistence zum Kompilieren und spätestens zur Runtime eine JPA Implementierung.
Ist eine POM die ich für Jee7 Projekte verwende.
Das War-File das dabei rauskommt ist 6 kb groß und läuft sowohl auf einem JBoss und einem Glassfish.
Spring ist eine Glaubensfrage. Entweder Spring auf Tomcat/Jetty und ich hole mir alle Frameworks die ich benötige über Spring, oder ich nutze gleich einen AS der alles bereits mitbringt. Deshalb auch die Fragen von weiter oben.
Ich habe lieber JEE. Spring war eine lange Zeit mit den Features sehr weit voraus und bot Sachen die JEE noch nicht geboten hat. Mitlerweile sind diese Dinge, die sich als gut erwiesen haben in den aktuellen Versionen von JEE bereits enthalten.
Es sei angemerkt, dass man JPA auch in ganz stinknormalen standalone Java-SE-Applikationen verwenden kann. Wie schon oben gesagt braucht man natürlich eine Implementierung wie Hibernate oder Eclipselink dafür, und ohne weitere Unterstützung durch Frameworks oder Servlet-Container muss man sich am Anfang den EntityManager selbst holen, aber dann läuft alles wie gewohnt. Komisch, dass von dieser Möglichkeit anscheinend relativ wenig Gebrauch gemacht wird.
Ein Tomcat/Jetty/Undertow sind nur Webcontainer. Dort kannst Du Servlets einbinden muss Dich aber um viele Dinge (wie DB-Anbindung) selbst kümmern. Hier kommt häufig Spring zum Einsatz.
Ein JBoss/Wildfly/Glassfish ist ein spezifizierter Application Server, der alle Container für Java Enterprise mitbringt. Hier musst Du nur noch einige Dinge konfigurieren und bekommst damit ein mächtiges Werkzeug. Allerdings sind dort meist Komponenten nicht leicht austauschbar. Hier wird auch häufig von Spring abgeraten, weil der AS eigentlich alles mitbringt.