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

Status
Nicht offen für weitere Antworten.
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

Top Contributor
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

Top Contributor
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.
 
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

Bekanntes Mitglied
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
 
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

Top Contributor
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.
 
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

Top Contributor
Hibernate diente als Basis für die Spezifikation von JPA und ist wohl auch am weitesten verbreitet.
 
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
 
M

maki

Gast
Toplink kostet.

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

byte

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

Guest

Gast
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.
 
M

maki

Gast
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:
Code:
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate</artifactId>
			<version>3.2.0.ga</version>
		</dependency>
.. und gut ist.

Was soll daran chaotisch sein????
 
G

Guest

Gast
maki hat gesagt.:
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:
Code:
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate</artifactId>
			<version>3.2.0.ga</version>
		</dependency>
.. und gut ist.

Was soll daran chaotisch sein????
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)

versioncheck.jar (1.0)
- version checker
- buildtime

swarmcache-1.0rc2.jar (1.0rc2)
- runtime, optional
- runtime, optional

jboss-cache.jar (1.2.2 alpha)
- TreeCache clustered cache
- runtime, optional

jgroups-2.2.8.jar (2.2.8)
- JGroups multicast library
- runtime, optional (required by replicated caches)

jta.jar (unknown)
- Standard JTA API
- runtime, required for standalone operation (outside application server)

xml-apis.jar (unknown)
- Standard JAXP API
- runtime, some SAX parser is required

commons-logging-1.0.4.jar (1.0.4)
- Commons Logging
- runtime, required

c3p0-0.9.1.jar (0.9.1)
- C3P0 JDBC connection pool
- runtime, optional (needed if using c3p0 as the connection pooling library)

jboss-system.jar (unknown)
- unknown name
- runtime, optional (required by TreeCache)

asm-attrs.jar (unknown)
- ASM bytecode library
- runtime, required if using 'cglib' bytecode provider

jacc-1_0-fr.jar (1.0-fr)
- JACC Library
- runtime, optional

checkstyle-all.jar (unknown)
- Checkstyle
- buildtime

log4j-1.2.11.jar (1.2.11)
- Log4j Library
- runtime, optional

junit-3.8.1.jar (3.8.1)
- JUnit test framework
- buildtime

javassist.jar (3.4)
- Javassist bytecode generator
- runtime, required if using 'javassist' bytecode provider

dom4j-1.6.1.jar (1.6.1)
- XML configuration & mapping parser
- runtime, required

antlr-2.7.6.jar (2.7.6)
- ANother Tool for Language Recognition
- runtime, required

cglib-2.1.3.jar (2.1.3)
- CGLIB bytecode generator
- runtime, required if using 'cglib' bytecode provider

jboss-common.jar (unknown)
- unknown name
- runtime, optional (required by TreeCache)

oscache-2.1.jar (2.1)
- OpenSymphony OSCache
- runtime, optional

asm.jar (unknown)
- ASM bytecode library
- runtime, required if using 'cglib' bytecode provider

ant-launcher-1.6.5.jar (1.6.5)
- Ant launcher
- buildtime

jaas.jar (unknown)
- Standard JAAS API
- runtime, optional (required by JCA)

ant-antlr-1.6.5.jar (1.6.5)
- Ant antlr support
- buildtime

jboss-jmx.jar (unknown)
- unknown name
- runtime, optional (required by TreeCache)

cleanimports.jar (unknown)
- cleanimports
- buildtime

xerces-2.6.2.jar (2.6.2)
- SAX parser
- runtime, required for JDK < 1.4

jaxen-1.1-beta-7.jar (1.1-beta-7)
- Jaxen - universal java xpath engine
- runtime, required if you want to deserialize a Configuration to improve startup performance

ant-junit-1.6.5.jar (1.6.5)
- Ant junit support
- buildtime

ant-swing-1.6.5.jar (1.6.5)
- Ant swing support
- buildtime

commons-collections-2.1.1.jar (2.1.1)
- Commons Collections
- runtime, required

ant-1.6.5.jar (1.6.5)
- Ant core
- buildtime

proxool-0.8.3.jar (0.8.3)
- Proxool JDBC connection pool
- runtime, optional (needed if using proxool as the connection pooling library)

concurrent-1.3.2.jar (1.3.2)
- unknown name
- runtime, optional (required by TreeCache)

syndiag2.jar (2.0)
- antlr to bnf image generator
- buildtime
Bei Hibernate Tools dann noch
hibernate-commons-annotations.jar: required
ejb3-persistence.jar: required
hibernate-annotations: required
hibernate-validator: required
hibernate3.jar: required
hibernate core dependencies: required (see Hibernate Core for more information)
javassist.jar: required (part of Hibernate Core dependencies)
Egal, wie man es sieht, es ist ein Haufen Jar-Dateien.
 
M

maki

Gast
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 ;)
 
G

Guest

Gast
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. ;)
 
M

maki

Gast
>> 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 :)
 
G

Guest

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

maki

Gast
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

Mitglied
kleineschildy hat gesagt.:
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

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
 
G

Gast

Gast
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
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben