# [Anfänger] - Allg. Verständnis zu JPA



## kleineschildy (17. Sep 2008)

Hallo alle zusammen,

ich bin gerade dabei, mich in die Problematik Web-Applikation mit JSF + JPA einzuarbeiten und musste leider feststellen, dass es ein verdammt komplexes Gebilde ist  :shock:  Deswegen brauch ich etwas Verständnis-Hilfe...

Ich bin gerade beim Thema JPA.

Soweit ich verstanden habe, bildet Java Persistance API den neuen Standard (eingeführt mit EJB3). *Brauch ich da immernoch Hibernate?*

*Brauch ich zwingend EJB oder geht es auch ohne?*

Welche Komponenten brauch ich alle, um eine Webanwendung mit JSF, JPA und einer Oracle-Datenbank aufzusetzen. Folgendes existiert schon.

- *Server:* Apache 2.2.9 + Tomcat 6.0.14 (XAMPP)
- *IDE:* Eclipse 3.4.0 (incl. WST)
- *Datenbank: *Oracle (Tabellen liegen bereits vor)


Bitte helft mir mal auf die Sprünge, dass ich endlich mal wenigstens kleine Ergebnisse sehe   

Mir fehlen irgendwie noch die Zusammenhänge  :roll: 

Vielen Dank für eure Hilfe.

Viele Grüße
Jana


----------



## foobar (17. Sep 2008)

JPA ist aus Hibernate entstanden. EJB3 verwendet auch Hibernate als Persistenzframework.

Du kannst Hibernate sowohl über JPA als auch über die HibernateAPI verwenden. Die JPA macht meines Erachtens nur dann Sinn, wenn man das Persistenzframework austauschen will. Wers braucht ;-)


----------



## Landei (17. Sep 2008)

JPA kann ohne EJB verwendet werden. Einziger Unterschied dabei ist, dass du dir den EntityManager selber holen musst während er bei EJB "injected" wird.


----------



## kleineschildy (17. Sep 2008)

Hallo,

*@foobar*
Das versteh ich nicht. Ich dachte, JPA hat Hibernate als neuen Standard abgelöst. Ich dachte, es wäre eine entweder- oder-Sache. Das heißt, wenn ich  JPA realisieren will, brauche ich automatisch Hibernate?

Ich bin echt verwirrt  ???:L 


*@Landei*
Danke, dass klingt schonmal gut.

Brauch ich eigentlich zwingend einen Applicationserver (z.B. Glassfish), oder komm ich auch mit Tomcat hin?

Für gute Literaturhinweise zu diesem Thema bin ich auch immer dankbar.

Viele Grüße
Jana


----------



## robertpic71 (17. Sep 2008)

kleineschildy hat gesagt.:
			
		

> Das heißt, wenn ich  JPA realisieren will, brauche ich automatisch Hibernate?
> 
> Brauch ich eigentlich zwingend einen Applicationserver (z.B. Glassfish), oder komm ich auch mit Tomcat hin?



2 Fragen die irgendwie zusammenhängen:
Zur Klärung: JPA besteht quasi nur aus Interfaces. Hibernate ist also praktisch nur eine mögliche Implentierung davon.
Ein J2E-Applicationserver muss eine Implementierung für JPA mitbringen. Für Tomcat muss man dann die
 Persitenzschicht (JPA-Implementierung) dazuinstallieren (bzw. in der Applikation). 

/Robert


----------



## kleineschildy (7. Okt 2008)

Hallo,

ich habe mich jetzt schon etwas weiter in das Thema eingearbeitet und wollte mich gern Rückversichern, dass ich das es richtig verstanden habe.

1. JPA stellt nur Schnittstellen (Interfaces) zur Verfügung.

2. Hibernate, Toplink, EclipseLink usw. stellen entsprechende fertige Implementierungen da.

3. Ich habe die Chance, die Klassen selbst zu implementieren oder die oben genannten (ausgereiften) Lösungen zu nutzen.


Sehe ich das jetzt richtig?

Viele Grüße
Jana


----------



## foobar (7. Okt 2008)

kleineschildy hat gesagt.:
			
		

> Hallo,
> ich habe mich jetzt schon etwas weiter in das Thema eingearbeitet und wollte mich gern Rückversichern, dass ich das es richtig verstanden habe.
> 
> 1. JPA stellt nur Schnittstellen (Interfaces) zur Verfügung.
> 2. Hibernate, Toplink, EclipseLink usw. stellen entsprechende fertige Implementierungen da.


Genau



			
				kleineschildy hat gesagt.:
			
		

> 3. Ich habe die Chance, die Klassen selbst zu implementieren oder die oben genannten (ausgereiften) Lösungen zu nutzen.
> Sehe ich das jetzt richtig?


Theoretisch ja, praktisch wohl eher nicht.


----------



## kleineschildy (7. Okt 2008)

super, danke   

Habe alle diese Implementierungen schon den Status Referenzimplementierung von JPA?

Bzw. welche Implementierung ist in Verbindung mit Eclipse (als IDE) + JBoss + JSF besonders geeignet?

Viele Grüße
Jana


----------



## foobar (7. Okt 2008)

Hibernate diente als Basis für die Spezifikation von JPA und ist wohl auch am weitesten verbreitet.


----------



## kleineschildy (8. Okt 2008)

Hallo alle zusammen,

kennt jemand die Vor- und Nachteile der folgenden Frameworks? bzw. kann mir etwas empfehlen?

 :arrow:  Hibernate
 :arrow:  EclipseLink
 :arrow:  OpenJPA
 :arrow:  TopLink Essentials

mich interessieren vor allem die letzten drei genannten Frameworks.

Viele Grüße
Jana


----------



## maki (8. Okt 2008)

Toplink kostet.

In einer Webapp bist du wohl mit JPA + Hibernate am besten beraten.


----------



## byte (8. Okt 2008)

Hibernate ist der Quasi-Standard und mit Abstand am weitesten verbreitet. An Komplexität nehmen sich alle Implementierungen wohl nichts.


----------



## Guest (8. Okt 2008)

Ein Nachteil von Hibernate ist die etwas chaotische Verwendung fremder Libraries. Bei Toplink/EclipseLink oder 
OpenJPA beschränkt es sich auf zwei, drei Jar-Dateien. Was aber die "Produktreife" angeht, ist Hibernate am weitesten. Toplink/EclipseLink unterstützen viele Annotationen (noch) nicht bzw. ignorieren sie einfach. Das kann ziemlich frustrierend sein, wenn man den Fehler dann im eigenen Code sucht. Ich denke aber, dass insbesondere EclipseLink eine sehr steile Entwicklung hinlegen wird und zur de facto Referenzimplementierung wird.


----------



## maki (9. Okt 2008)

Anonymous hat gesagt.:
			
		

> Ein Nachteil von Hibernate ist die etwas chaotische Verwendung fremder Libraries.


Keine Ahnung was du meinst ehrlich gesagt.

Mir reicht das hier:

```
<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate</artifactId>
			<version>3.2.0.ga</version>
		</dependency>
```
.. und gut ist.

Was soll daran chaotisch sein????


----------



## kleineschildy (10. Okt 2008)

Hallo,

danke für eure Antworten. Habe mich jetzt für Hibernate entschieden.

Viele Grüße
Jana


----------



## Guest (11. Okt 2008)

maki hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...


Und was soll das sein bzw. wo sind die Jar-Dateien von Hibernate und alle benötigten Fremdlibraries? Ich kann den dependency-Tag nichts zuordnen. Stammt es aus RCP oder irgendeiner Serverkonfiguration? Was ich meinte, ist das hier:





> ehcache-1.2.3.jar (1.2.3)
> - EHCache cache
> - runtime, optional (required if no other cache provider is set)
> 
> ...


Bei Hibernate Tools dann noch





> hibernate-commons-annotations.jar: required
> ejb3-persistence.jar: required
> hibernate-annotations: required
> hibernate-validator: required
> ...


Egal, wie man es sieht, es ist ein Haufen Jar-Dateien.


----------



## maki (11. Okt 2008)

> Und was soll das sein bzw. wo sind die Jar-Dateien von Hibernate und alle benötigten Fremdlibraries?


Das ist die Maven2 Konfiguration, die anderen Libraries (sog. transitive) werden automatisch hinzugefügt, mehr als diese Dependency Konfig brauche ich nicht um Hibernate zu nutzen.

So heissen: Dein Build System ist chaotisch, nicht Hibernate.
Solltest mal dein Build System überdenken, jars manuell hinzufügen ist viel zu umständlich und so was von überholt


----------



## Guest (11. Okt 2008)

OK und die Hibernate-Dependencies musst du aber vorher einmal konfiguriert haben oder?
Ich verwende Eclipse, manchmal Netbeans... Ich meinte im Grunde genommen nur, dass
Hibernate viele Abhängigkeiten hat, spricht viele Fremdlibraries benötigt, selbst wenn nur
ein geringer Anteil davon tatsächlich gebraucht wird. Bei Toplink/EclipseLink sind es gerade
mal zwei bis vier Jar-Dateien. z.B. bei EclipseLink die zwei

eclipselink.jar; javax.persistence_1.0.0.jar

und das war's schon.
Bei einem "normalgrossen" Projekt macht das nichts aus, man macht sich im Voraus schon 
Gedanken über die Abhängigkeiten, aber wenn man Persistenz einfach so ad-hoc in eine kleine 
Anwendung einbauen möchte, ist es fast schon übertrieben viel bei Hibernutte.


----------



## maki (11. Okt 2008)

>> OK und die Hibernate-Dependencies musst du aber vorher einmal konfiguriert haben oder? 

Nein, Hibernate ist schon konfiguriert und im öffentlichen Maven Repo verteilt.
Die Dependency deklaration die ich gezeigt habe ist wirklich alles was man machen muss.

>> Ich verwende Eclipse, manchmal Netbeans..

Sehr gut, M2 funzt mit beiden, mit Netbeans sogar ein bisschen Besser als mit Eclipse, Kannst aber Projekte gleichzeit in beiden IDEs haben ohne das Projekt selbst zu ändern(!!!) und ins selbe Repo Commiten, alles kein Problem.
Die Struktur (Verzeichnisse etc.) gibt Maven2 vor, nicht die IDE.

>>  Bei Toplink/EclipseLink sind es gerade mal zwei bis vier Jar-Dateien.

Verstehe was du sagst, solltest dir trotzdem mal M2 ansehen.

Speziell in großen Projekten (zB EAR) hat man sonst keinen Überblick und das einrichten des Projektes dauert Stunden... mit M2 nicht.
M2 kann noch viel mehr, es lohnt sich


----------



## Guest (11. Okt 2008)

Nein Maven brauche ich nicht... bei mir dauert nichts Stunden, da alles bereits optimal eingerichtet ist.


----------



## maki (12. Okt 2008)

Bei einem "Programmierer" alleine sicherlich, vor allem wenn er hauptsählich für sich selbst programmiert. Darfst halt nur nicht auf die nächste IDE Version umsteigen 

Bei mehreren Entwicklern kann das schon den Unterschied machen, vor allem wenn man kommerziell entwickelt, die Doku für die nachfolgenden Entwickler schreiben ist auch Arbeit... abgesehen davon ist ein autmomatisches Build System viel wert.

Ich kann ich nicht über chaotische Abhängigkeiten beschweren


----------



## norbertbaum (13. Okt 2008)

kleineschildy hat gesagt.:
			
		

> Hallo alle zusammen,
> 
> kennt jemand die Vor- und Nachteile der folgenden Frameworks? bzw. kann mir etwas empfehlen?
> 
> ...



Hallo
gibts von TopLINK auch kostenlose versionen?
denn ich kann es mir ja kostenlos runterladen! :autsch: 

wäre echt sehr dankbar, über eine genaue angabe!

läuft NetBeans 6.1 auch mit Hibernate?

ich habe ihn nur genommen, weil er default unter NetBeans ist!


lieber auf JPA umsteigen?(in NetBeans openJPA)



vielen Dank


----------



## Gast (13. Nov 2008)

Hi,

Toplink Essentials (bei JBoss) ist die freie Variante von Toplink 10g (Oracle).
Der Nachfolger bei Oracle heisst Toplink 11i, die Opensource Variante dazu: EclipseLink
EclipseLink soll die bei Sun auserkorene Referenzimplementierung sein bzw. werden (http://www.eclipse.org/eclipselink/).
Ich würde also eher EclipseLink wählen.
Ich denke, dass OpenJPA ähnlich ist, Hibernate ist mir für viele Projekte zu "oversized".
Eine andere Alternative ist Cayenne (http://cayenne.apache.org/).
Ähnlich komfortabel, aber mit jeder Menge XML-Dateien (mit GUI).

Gruß

Andreas


----------

