3 Stimmen

Verwendung von Hibernate 3.0 mit EJB 3.0 & JPA

Dort, wo ich arbeite, arbeiten die Jungs, die mir gegenüber sitzen, an einem Projekt. Es handelt sich um eine JavaEE-Anwendung, die Struts, Spring, EJB 3.0, JPA und Hibernate 3.0 verwendet. Sie verwenden EJB 3.0 Entity Beans mit Annotationen. Ich habe sie gefragt, warum Hibernate 3.0 in diesem Mix enthalten ist, und niemand scheint mir das sagen zu können. Ich habe das Gefühl, dass sie Hibernate 3.0 eingebunden haben, weil es ihnen aufgetragen wurde, aber sie verwenden es für nichts, was sie nicht auch mit EJB 3.0 Entity Beans/JPA erreichen können. Sie verwenden CMP und greifen auf alle Datenbankfunktionen über EJBs zu.

Kann Hibernate Ihnen in dieser Konfiguration etwas bieten, was EJB 3.0/JPA nicht kann?

0 Stimmen

Welchen Anwendungsserver verwenden Sie?

0 Stimmen

@Chris Dail - Sie verwenden Websphere 6.1

4voto

Chris Dail Punkte 24971

Hibernate verfügt zwar über eine JPA-Implementierung, kann aber auch eigenständig verwendet werden. Es ist möglich, Hibernate als Persistenzanbieter in JavaEE zu verwenden. Der JBoss Application Server zum Beispiel verwendet Hibernate für seine Persistenz. Wenn Sie also Hibernate verwenden, um die Persistenz im Anwendungsserver bereitzustellen, kann dies sinnvoll sein.

Wenn Sie einen Anwendungsserver verwenden, der Hibernate nicht für die Persistenz nutzt, dann klingt es so, als ob Sie es nicht brauchen. Hibernate verfügt über einige Erweiterungen und Funktionen, die in JPA nicht verfügbar sind. Viele andere Persistenzanbieter verfügen ebenfalls über diese Erweiterungen (wie Toplink oder Eclipselink). Erkundigen Sie sich bei Ihrem App-Server, ob er die von Ihnen benötigten Erweiterungen oder etwas Ähnliches wie in Hibernate bereitstellt.

2voto

Pascal Thivent Punkte 548176

JPA selbst ist nur eine Spezifikation, kein Produkt, es kann weder Persistenz noch irgendetwas anderes von sich aus leisten. JPA ist nur ein Satz von Schnittstellen und erfordert eine Implementierung (einen Persistenzanbieter). Es gibt Open-Source- und kommerzielle JPA-Implementierungen (Toplink Essentials, EclipseLink, Hibernate EntityManager, OpenJPA, Kodo usw.), und jeder Java EE 5 (oder Java EE 6) Anwendungsserver muss Unterstützung für seine Verwendung bieten (JBoss verwendet Hibernate EntityManager, GlassFish v2 verwendet standardmäßig Toplink Essentials, GlassFish v3 verwendet standardmäßig EclipseLink, WebLogic verwendet standardmäßig Kodo usw.) 1 .

Das Schöne an JPA ist, dass es außerhalb eines Containers verwendet werden kann, zum Beispiel in einer Java SE-Anwendung oder in einem Testkontext (das war eines der großen Probleme mit EJB 2.x). Aber in diesem Fall, vous müssen Sie eine Implementierung bereitstellen, da Sie nicht die vom Container bereitgestellte Implementierung erhalten. Wie wir gesehen haben, ist der Hibernate EntityManager - der auf Hibernate Core aufbaut - einer von ihnen und das könnte erklären, warum Sie ihn sehen.

<sup>1 </sup>Beachten Sie, dass die meisten (alle?) Container eine Möglichkeit bieten, die von ihnen bereitgestellte Standardimplementierung zu ersetzen. Es ist zum Beispiel möglich, Hibernate anstelle von Kodo mit Weblogic oder anstelle von EclipseLink mit GlassFish zu verwenden. Dies könnte ein weiterer Grund sein, warum Sie es in dem Mix sehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X