EclipseLink persistence.xml Frage

Status
Nicht offen für weitere Antworten.

floetentheo

Mitglied
Hallo zusammen,

ich hab eine kleine Anwendung welche EclipseLink nutz. Dazu hab ich ein paar Test geschrieben.
Was muß ich denn in der persistence.xml als Property angeben das er mir vor jedem test in eine testklasse die Datenbank neu erstellt damit sie quasi vor jedem test leer ist?
Bei Hibernate geht das ja ganz gut mit

<property name="schemaUpdate">
<value>true</value>
</property>

danke im voraus
theo
 
M

maki

Gast
[xml]
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
[/xml]

Welche Db verwendest du zum testen?
Du willst ja sicher nicht nur eine leere DB, Testdaten brauchst du schon auch, oder?
Kann da DBUnit empfehlen.
 

floetentheo

Mitglied
Ich nutze ne HSQL.
Und nein die Anwendung ist so klein, ich brauch da keine Testdaten.
Aber irgendwie scheint es so auch nicht wirklich zu funktionieren, das Problem liegt wohl doch wo anders.
Hier rauf bin ich nur gekommen weil Objekte mehrfach in der DB drin sind obwohl sie es nicht sein dürfen.
In einem Test erstell ich eine Objet vom Typ A und in einen anderen 4 Objekte vom Typ A um zu prfüen ob er sie auch fein alle läd aber am Ende kommen 5 raus und net wie angenommen 4, weil das erste sollte er ja so abräumen.

Der eigentlich Fehler ist dieser hier aber dazu werd ich wenn ich net selber drauf komme gleich hier nen thread erzeugen.

009-09-03 10:27:11,956] L=[INFO] C=[de.***.***.***.***.persist.DatabaseTestCase] M=[setup DatabaseTestCase]
[EL Warning]: 2009-09-03 10:27:12.157--UnitOfWork(1118816)--Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.0.0.v20090821-r4934): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Null primary key encountered in unit of work clone
 
M

maki

Gast
HSQL funzt nicht wirklich sauber mit Eclipselink, da braucht man mehrere Workarounds, bis hin wie man Unique Felder markiert, gibt da noch den einen oder anderen Bug, Derby ist ime besser zum testen von Eclipselink geeignet, aber auch langsamer.

Zeig mal deinen Code..
 

floetentheo

Mitglied
Also was ich hier im Prinzip mache ist eine Anwendung von Hibernate auf EclipseLink zu portieren.
Beide laufen auf ner HSQL DB und die test von der Hibernate Sache sollen auch auf dem EclipseLink laufen, aber je mehr ich google Frage desto eher komm ich zu der Annahme das EclipseLink + HSQL = böse.

Was wäre denn besser zu nutzen, das Derby oder DBUnit?
 
M

maki

Gast
DBUnit ist ein Framework für Unittests mit relationalen DBs, damit kann man zum Beispiel Testdaten einspielen vor den Tests und diese Testdaten danach wieder löschen, also allgemein gesagt kann man damit die DB in einen definierten Zustand setzen, ist ja nicht unwichtig beim Testen ;) DBunit kann aber noch mehr...
Ich nutze DBUnit immer in meinen Tests, auch wenn es nicht immer ganz einfach ist es mit der jeweiligen DB zum zusammenspielen zu bringen, muss aber nur einmal gemacht werden, danach läuft alles, hier meine Anpassung für Derby mit DBUnit:
Java:
public class MyDerbyPlatform extends DerbyPlatform {

	@Override
	public void printFieldIdentityClause(Writer writer)
			throws ValidationException {
		try {
			writer.write(" GENERATED BY DEFAULT AS IDENTITY (START WITH 1000) ");
		} catch (IOException ioException) {
			throw ValidationException.fileError(ioException);
		}
	}
}
DBUnit ist aber egal wenn du "nur" migrieren musst, dann musst du auch nix ändern an der DERBY target-database.

Derby ist imho eine gute Wahl für EclipseLink tests, man muss den "Database Dialect" (oder wie er bei EclipseLink heisst die target-database) etwas anpassen wenn man es mit DBUnit verwenden will, ist aber nicht wirklich nur ein ein paar Zeilen Code.
 
Zuletzt bearbeitet von einem Moderator:

floetentheo

Mitglied
So also das sind die Properties von Derby in der persistence.xml
[xml]
<persistence:properties>
<persistence:property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.EmbeddedDriver" />
<persistence:property name="javax.persistence.jdbc.url"
value="jdbc:derby:target/data/derby_demo;create=true" />
<persistence:property name="javax.persistence.jdbc.user"
value="user" />
<persistence:property name="javax.persistence.jdbc.password"
value="password" />

<persistence:property name="eclipselink.target-database"
value="Derby" />

<persistence:property name="eclipselink.ddl-generation"
value="drop-and-create-tables" />
<persistence:property name="eclipselink.ddl-generation.output-mode"
value="database" />
</persistence:properties>
[/xml]
Und das ist die Testklasse:

Java:
	@Test
	public void testPersist() {
		final ManufacturerDO manufactur = getSimpleObjektFactory()
				.createManufacturerDO("Opel", "Die mit dem Blitz");
		manufactur.setErsteller(admin);
		manufactur.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(manufactur);
		assertNotNull(manufactur.getPk());

	}

	
	@Test
	public void testLoadByPk() {
		final ManufacturerDO manufacturerDO = getSimpleObjektFactory()
				.createManufacturerDO("Ford", "");
		manufacturerDO.setErsteller(admin);
		manufacturerDO.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(manufacturerDO);
		assertNotNull(manufacturerDO.getPk());
		final int pk = manufacturerDO.getPk();

		final ManufacturerDO loadByPk = manufacturerDao.loadByPk(pk);
		assertNotNull(loadByPk);
		assertEquals(manufacturerDO, loadByPk);

	}

	@Test
	public void testLoadByName() {
		final String name = "Mercedes";

		final ManufacturerDO manufacturerDO = getSimpleObjektFactory()
				.createManufacturerDO(name, "");
		manufacturerDO.setErsteller(admin);
		manufacturerDO.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(manufacturerDO);

		final List<ManufacturerDO> loadByName = manufacturerDao
				.loadByName(name);
		assertNotNull(loadByName);
		assertTrue(loadByName.size() > 0);

		final ManufacturerDO manufacturerDO2 = loadByName.get(0);
		assertEquals(manufacturerDO, manufacturerDO2);
	}


	@Test
	public void testLoadAll() {
		final ManufacturerDO ford = getSimpleObjektFactory()
				.createManufacturerDO("Ford", "");
		ford.setErsteller(admin);
		ford.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(ford);

		final ManufacturerDO opel = getSimpleObjektFactory()
				.createManufacturerDO("Opel", "");
		opel.setErsteller(admin);
		opel.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(opel);

		final ManufacturerDO vw = getSimpleObjektFactory()
				.createManufacturerDO("VW", "");
		vw.setErsteller(admin);
		vw.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(vw);

		final ManufacturerDO porsche = getSimpleObjektFactory()
				.createManufacturerDO("Porsche", "");
		porsche.setErsteller(admin);
		porsche.setLetzerBearbeiter(bearbeiter);
		manufacturerDao.persist(porsche);

		final List<ManufacturerDO> loadAll = manufacturerDao.loadAll();
		assertEquals(4, loadAll.size());

	}

	@Test
	public void persistWithAllProperties() {
		final ManufacturerDO manufacturerDO = new ManufacturerDO();
		final List<ProductDO> products = manufacturerDO.getProducts();
		products.add(new ProductDO());

		manufacturerDao.persist(manufacturerDO);

		assertNotNull(manufacturerDO.getPk());
		// TODO asserts
	}


Zeile 89 schlägt dann fehl, weil 7 anstatt 4 drin sind.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Das manufacturerDao braucht imo für jeden Tests einen neuen EntityManger der von einer neuen EntityMangerFactory erzeugt wurde, wie kommt das Dao denn an den EM?

Nebenbei, ist zwar nicht dein Problem, aber nur dass ich es erwähnt hatte:
Java:
 @Test
    public void testLoadByPk() {
        final ManufacturerDO manufacturerDO = getSimpleObjektFactory()
                .createManufacturerDO("Ford", "");
        manufacturerDO.setErsteller(admin);
        manufacturerDO.setLetzerBearbeiter(bearbeiter);
        manufacturerDao.persist(manufacturerDO);
        assertNotNull(manufacturerDO.getPk());
        final int pk = manufacturerDO.getPk();
 
        final ManufacturerDO loadByPk = manufacturerDao.loadByPk(pk);
        assertNotNull(loadByPk);
        assertEquals(manufacturerDO, loadByPk);
 
    }
[c] manufacturerDao.persist[/c] wird mitgetestet, und falls es fehlschlägt, schlägt [c]manufacturerDao.loadByPk[/c] auch fehl, DBUnit verhindert das und der TEst würde kürzer ausfallen:
Java:
 @Test
    public void testLoadByPk() {
 
        final ManufacturerDO loadByPk = manufacturerDao.loadByPk(pk);
        assertNotNull(loadByPk);
        assertEquals(manufacturerDO, loadByPk); 
    }
 
Zuletzt bearbeitet von einem Moderator:

floetentheo

Mitglied
Die Daos erben alle von dieser Klasse:

Java:
public abstract class BaseDaoEntity<T extends EntityObjectDO<?>> extends
		JpaDaoSupport {

	static protected final EntityManager em = Persistence
			.createEntityManagerFactory("prometheus").createEntityManager();

	public abstract Class<T> getDoClass();

	@SuppressWarnings("unchecked")
	protected T loadByPk(final Session session, final Integer pk) {
		final Class<T> doClass = getDoClass();
		String tableName = doClass.getName().split(".")[0];
		tableName = tableName.substring(0, tableName.length() - 2);
		final Expression selectionCriteria = new FieldExpression(
				new DatabaseField("id", tableName));

		final T retVal = (T) session.readObject(doClass, selectionCriteria);
		return retVal;
	}

	public void persist(final T entity) {
		em.getTransaction().begin();
		em.persist(entity);
		em.getTransaction().commit();
	}

	public T loadByPk(final Integer pk) {
		return em.find(getDoClass(), pk);
	}

	@SuppressWarnings("unchecked")
	public List<T> loadAll() {
		final Query query = em.createQuery("select m from "
				+ getDoClass().getSimpleName() + " m");
		return query.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<T> loadByName(final String searchName) {
		final Query query = em.createQuery(
				"select m from " + getDoClass().getSimpleName()
						+ " m where m.name = ?1").setParameter(1, searchName);
		return query.getResultList();
	}

}

Soll ich etwa für jede Transaktion nen neuen EM erzeugen?
 
M

maki

Gast
Soll ich etwa für jede Transaktion nen neuen EM erzeugen?
Für jeden Test einen neuen EMF und einen neuen EM.
Alternativ kannst du natürlich einen Rollback nach jedem Test machen, die Frage ist ob die Daten dann auch wirklich zur DB gesendet werden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W EclipseLink Persistence Provider? Datenbankprogrammierung 7
Maxim6394 JPA / EclipseLink - n:m Beziehung wird nicht aktualisiert Datenbankprogrammierung 0
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
L PostgreSQL Abfrage mit EclipseLink Datenbankprogrammierung 7
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
D JPA findet keinen PersistenceProvider (maven, eclipselink) Datenbankprogrammierung 17
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
S Eclipselink Lazy Loading und interne iteration Verständnis Datenbankprogrammierung 1
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
H EclipseLink: Schließen der Datenbank Datenbankprogrammierung 0
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
X JPA / EclipseLink: @EmbeddedId und @Id Datenbankprogrammierung 3
J [JPA][EclipseLink] NullPointer bei begin() Datenbankprogrammierung 14
zilti Derby/JavaDB EclipseLink und Derby: "Abschneidefehler" bei @Lob Datenbankprogrammierung 2
S DB2 Eclipselink Query Datenbankprogrammierung 2
T NullPointerException ( EclipseLink mit OSGi) Datenbankprogrammierung 10
S MySQL EclipseLink Anfänger Datenbankprogrammierung 3
pkm Tomcat Classloader findet bei JPA-Persistierung die Persistence Unit nicht. Datenbankprogrammierung 11
S persistence.xml zur Laufzeit manipulieren Datenbankprogrammierung 0
F JPA persistence.xml mit EXTERNER Config Datei Datenbankprogrammierung 0
I JPA - BoneCP über die persistence.xml konfigurieren Datenbankprogrammierung 0
D Unterschiede Hibernate Vs. Java Persistence API Datenbankprogrammierung 8
J method createQuery in interface javax.persistence.EntityManager cannot be applied to given types ... Datenbankprogrammierung 2
F JPA und "persistence-unit" Datenbankprogrammierung 4
M No Persistence provider for EntityManager Datenbankprogrammierung 1
B Hibernate+JPA Exception in persistence.xml Datenbankprogrammierung 5
S Java-Persistence-API mit Hibernate Datenbankprogrammierung 3
P JPA Datenbanksettings ohne persistence.xml Datenbankprogrammierung 3
S JPA und Hibernate: persistence.xml: autoReconnect=true Datenbankprogrammierung 7
G persistence.xml für MySQL - Verbindung Datenbankprogrammierung 6
A The import javax.persistence cannot be resolved Datenbankprogrammierung 1
K persistence.xml oder hibernate.cfg.xml ? Datenbankprogrammierung 10
K Was fehlt? - No Persistence provider for EntityManager Datenbankprogrammierung 4
QDog JPA persistence.xml auslagern/extern Zugriff Datenbankprogrammierung 2
M Frage zu Bundesliga-DB Datenbankprogrammierung 1
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
M Frage zu JSON Datenbankprogrammierung 16
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
P Frage zu Connection.close() Datenbankprogrammierung 4
R MySQL Frage zum Anlegen von Artikeln inkl. Verbindungen Datenbankprogrammierung 0
M Grundlegende Klassen-Design Frage Datenbankprogrammierung 0
P MySQL Frage zur Einbindung in ein Java Projekt Datenbankprogrammierung 2
I Frage zu Datenmodellierung Datenbankprogrammierung 3
J Normalisierung - Allgemeine Frage zur 3. Normalform (Eventuelle Abhängigkeit) Datenbankprogrammierung 4
F Normalisierung Datenbank Frage Datenbankprogrammierung 5
J Frage zu ResultSet Datenbankprogrammierung 3
W Frage zur Datenbankwahl bei Umstieg auf Java Datenbankprogrammierung 7
D Frage zu DISTINCT in SQL Datenbankprogrammierung 5
K Frage zur Datenprotokollierung bei DML Anweisungen Datenbankprogrammierung 3
K Frage zu SQL Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
K Frage zu Datenbankmodellierung Datenbankprogrammierung 15
D Generelle Frage zum Umgang mit Datensätzen Datenbankprogrammierung 5
L Frage zu UpdateQuery Datenbankprogrammierung 12
8 MySQL Kurze Frage zur Sicherheit Datenbankprogrammierung 9
D Frage zu INSERTS über mehrere Datenbanktabellen Datenbankprogrammierung 3
D Frage zu Ausführungsmöglichkeiten von SQL Befehlen Datenbankprogrammierung 13
D Frage zu SQL Syntax Datenbankprogrammierung 17
D Frage zu potenziellen Leerzeichen in einer Datenbank Datenbankprogrammierung 5
X Connection schließen oder speichern? Performance Frage Datenbankprogrammierung 7
J mal wieder eine Frage zu parallelen Transaktionen.. Datenbankprogrammierung 2
V Frage zu Hibernate-Mapping Datenbankprogrammierung 11
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
E einfache Frage bei DB-Zugriff Datenbankprogrammierung 11
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2
O eigentlich simple SQL Frage Datenbankprogrammierung 2
M Frage zu folgender Query in EJB-QL Datenbankprogrammierung 4
H JBoss: Frage zur Datasource in der ...-ds.xml Datenbankprogrammierung 4
F Frage zu Prepared Statement Datenbankprogrammierung 2
R hibernate Frage zu configFile-Pfad und Groß/Kleinschreibung von Postgres-Tabellen Datenbankprogrammierung 8
U Frage zum Erfassen von hinzufügten und entfernten Objekten Datenbankprogrammierung 9
M prinzipielle Frage zu Datenbanken und jars ... Datenbankprogrammierung 2
S Hibernate - spezielle Frage, n zu n Beziehung Datenbankprogrammierung 11
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
J Frage zu Synchronisation bei parallelem Zugriff, speziell mit JPA Datenbankprogrammierung 2
N Frage zur Sicherheit von Konfigurationsdatei Datenbankprogrammierung 4
H performance frage Datenbankprogrammierung 9
G Frage zum Insert-Statement Datenbankprogrammierung 2
Antoras Design-Frage: Datenzuordnung zu verschiedenen Accounts Datenbankprogrammierung 2
T HSQL: verständnis Frage Datenbankprogrammierung 2
T Java JPA Frage bzgl. DISTINCT Datenbankprogrammierung 2
G Frage zu connection? Datenbankprogrammierung 9
A Frage zu SQL-Abfrage Datenbankprogrammierung 2
G Frage zu SQL "WHERE IN (1, 2, 3. , N)" Datenbankprogrammierung 8
G Allgemeine Frage zu Datenbanklimits Datenbankprogrammierung 27
G allgemeine JDBC-Connection Frage Datenbankprogrammierung 2
G Frage zu Hibernate und M:N Beziehung Datenbankprogrammierung 9
K HQL Frage Datenbankprogrammierung 10
D kurze Frage zu einem Query Datenbankprogrammierung 6
B Hibernate mit MySql - Verständniss Frage Datenbankprogrammierung 8
N Kleine Frage zu Connection Pooling mit DataSource Datenbankprogrammierung 2
T Update-Frage Datenbankprogrammierung 11
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Frage zu Performancetest einer Datenbank Datenbankprogrammierung 3
W Frage zum Umgang mit DB-Daten Datenbankprogrammierung 2
E Nochmal eine Datenbankabfrage Frage :-o (JOIN oder so) Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben