Start - Publikationen - Wissen - TOGAF - Impressum -

Persistenz mit OpenJPA und Derby


Derby ist ein leichtgewichtiges relationales Datenbanksystem und wird von der Apache Software Foundation betreut. Derby ist insofern attraktiv, da es als Java DB im Java Development Kit ab Java 6 integriert ist. OpenJPA ist die JPA Implementierung der Apache Software Foundation. Persistenz mit OpenJPA und Derby heißt zunächst einmal, dass im Classpath die entsprechenden Bibliotheken integriert werden:

Classpath:
openjpa-all-2.0.0-M3.jar
derby.jar (hier: Version 10.5)
Zusätzlich muss noch für das Codeenhancement ein Javaagent über eine Startoption eingetragen werden:
-javaagent:D:/workspace/JPAInAction/lib/openjpa-all-2.0.0-M3.jar
Die persistence.xml addressiert hier den embedded Modus von Derby:
<?xml version="1.0"?>
<persistence version="1.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_1_0.xsd">
  <persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>com.jpa.Person</class>
    <class>com.jpa.Organisation</class>
    :
    <properties>
      <property name="openjpa.ConnectionURL" value="jdbc:derby:c:/TEMP/testDB;create=true" />
      <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />
      <property name="openjpa.ConnectionUserName" value="user1" />
      <property name="openjpa.ConnectionPassword" value="user1" />
      <property name="openjpa.Log" value="SQL=TRACE" />
    </properties>
  </persistence-unit>
</persistence>
Die Werte für User und Password sind gültig für jede Derby-Standardkonfiguration, aber auch entsprechend unsicher. Wenn in Entity-Klassen mit @GeneratedValue IDs gearbeitet wird, erwartet OpenJPA die Existenz einer Tabelle für die Verwaltung der erzeugten IDs:
create table OPENJPA_SEQUENCE_TABLE (ID int not null, SEQUENCE_VALUE varchar(32));

Persistenz mit Hibernate und Derby


Im Classpath sind nun etwas mehr Einträge zu berücksichtigen:

derby.jar
Aus der Hibernate 3.5 Distribution:
  hibernate3.jar 
  dom4j-1.6.1.jar
  slf4j-api-1.5.8.jar UND slf4j-jdk14-1.5.2.jar (leider notwendig, 
     wegen Konfigurationsproblem in der aktuellen hibernate3.5 Dist)
  javassist-3.9.0.GA.jar
  commons-collections-3.1.jar
  antlr-2.7.6.jar
aus einer Java EE 6 Laufzeit (zB GlassfishV3):
  javax.transaction.jar
  javax.persistence.jar 
In der persistence.xml sind nun der org.hibernate.ejb.HibernatePersistence Provider und seine Eigenschaften gelistet:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
  <persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.jpa.Person</class>
    <class>com.jpa.Organisation</class>
    :
    <properties>
      <property name="hibernate.connection.url" value="jdbc:derby:c:/TEMP/testDB;create=true" />
      <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
      <property name="hibernate.connection.password" value="user1" />
      <property name="hibernate.connection.username" value="user1" />
      <property name="hibernate.hbm2ddl.auto" value="create-drop" />
      <property name="hibernate.show_sql" value="true" />
    </properties>
  </persistence-unit>
</persistence>
Beispielcode: OpenJPA-Derby und Hibernate-Derby
copyright © 2003-2021 | Dr. Christian Dürr | prozesse-und-systeme.de | all rights reserved