EclipseLink als Alternative zur Hibernate

Sehr oft wird Eclipse als Programmierumgebung verwendet. Eclipse bietet einen eigenen Persistenzmanager. EclipseLink soll ein voll funktionaler Persistenzmanager sein, der auch alle Funktionalitäten von Toplink beinhaltet und von der Eclipse ­Foundation erweitert wurde.

Hier stellt sich die Frage, ob sich EclipseLink als alternative Lösung zum wohlbekannt und oft eingesetzten Hibernate anbietet. Ich habe EclipseLink eingesetzt, zum Laufen gebracht und möchte auf einige Details in der Konfiguration hinweisen.

Projekt

Dynamic Web Project

 

Technologien

EclipseLink 2.1

EJB 3.0

JPA 2.0

JSF 2.0

 

Entwicklungsumgebung

Eclipse Service Release 2

Jboss AS 6

Oracle Enterprise Edition

null

 

Konfiguration:

persistence.xml

<?xml version=“1.0” encoding=“UTF-8”?>

<persistence version=“2.0”

xmlns=“http://java.sun.com/xml/ns/persistence” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”>

<persistence-unit name=“jsfJpaExercise” transaction-type=“JTA”>

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

<jta-data-source>java:/OracleDS</jta-data-source>

<class>de.triona.Bean.User</class>

<properties>

<property name=“eclipselink.target-server” value=“JBoss” />

<property name=“javax.persistence.jdbc.url” value=“jdbc:oracle:thin:@triona-srv:1521:XE” />

<property name=“javax.persistence.jdbc.user” value=“Ibrahim” />

<property name=“javax.persistence.jdbc.password” value=“psw”/>

<property name=“javax.persistence.jdbc.driver” value=“oracle.jdbc.OracleDriver” />

<property name=“eclipselink.ddl-generation” value=“create-tables” />

</properties>

</persistence-unit>

</persistence>

 

Attribute Beschreibung Erforderlich
Provider: Einbinden von EclipseLink J
Class Hier muss die Klasse eingetragen werden, die die Tabelle der Datenbank darstellt. In diesem Beispiel wird nur von einer Tabelle ohne Relationen ausgegangen.* J
Eclipselink.target-server Application-Server J
Javax.persistence.jdbc.driver Der Treiber für die Datenbank (OracleXY.jar) muss unter Projekt->Properties->Build Path eingebunden sein. J
Eclipselink.ddl-generation Hier wurde „value“ auf „create-table“ gesetzt, damit eine entsprechende Tabelle in der Datenbank erstellt wird. N
    *Vergleichsweise ist unter Hibernate die Angabe des Klassennamens nicht erforderlich, wenn als Transaktionstyp „JTA“ verwendet wird.

Vorsicht bei der Übernahme von Hibernate-Quellcode auf EclipseLink

In Verwendung von Hibernate

 

@PersistenceContext

private EntityManager entitymanager;

public void addUser(String name) {

User user = new User(name);

entitymanager.persist(user);

}

public User findByName(String name) {

TypedQuery<User> query = entitymanager.createNamedQuery(“userByName”, User.class);

query.setParameter(“name”, name);

return query.getSingleResult();

}

In Verwendung von EclipseLink

 

@PersistenceContext

private EntityManager entitymanager;

public void addUser(String name) {

User user = new User(name);

entitymanager.persist(user);

}

public User findByName(String name) {

Query query = entitymanager.createNativeQuery(“userByName”, User.class);

query.setParameter(“name”, name);

return (User) query.getSingleResult();

}

 

Die Methode createNamedQuery(String) verlangt Beispielsweise nur ein String als Übergabeparameter. In EclipseLink musste ich auf die Methode createNativeQuery zurückgreifen.

 

Fazit

Ich habe mich nicht umfassend mit den beiden Persistenzmanagern, sondern lediglich mit den Basisfunktionalitäten beschäftigt und ein kleines Beispiel dazu geschrieben. Im direkten Vergleich zu Hibernate sehe ich einige Eigenschaften (siehe oben), die in der Peristence.xml durchgeführt werden müssen. Mir ist auch aufgefallen, dass mehr Beispiele im Internet zu  Hibernate vorhanden sind. In den meisten Fällen sind die Bibliotheken von EclipseLink fast identisch mit den von Hibernate. Bei Übernahme von Quelltext aus Hibernate-Beispielen sollte aber trotzdem auf die Parametersetzung von Methoden geachtet werden.Hier kann EclipseLink andere Parameter als Hibernate verlangen oder sogar andere Methoden für dieselbe Funktionalität nutzen. (Siehe Beispiel Code-Fragment oben). Ansonsten besteht kein Unterschied zu Hibernate und kann gegebenenfalls als alternativer Persistenzmanager genutzt werden.

 

Bei weiteren Fragen zum Thema stehe ich Euch gerne zur Verfügung.

 

Weitere Informationen unter : http://wiki.eclipse.org/EclipseLink