Hiho,
ich habe gerade folgendes Problem:
Ich bekomme im Abstand von 50-1000ms neue Daten geliefert aus denen ich Objekte baue. Diese möchte ich dann mittels Hibernate JPA in eine MSSQL 2008 DB wegschreiben. Dazu verwende ich:
[Java]
public static boolean addData(final MyData aData) {
try {
final EntityManager em = DBUtil.getEntityManager();
em.getTransaction().begin();
em.persist(aData);
em.getTransaction().commit();
em.clear();
return true;
} catch (final Exception ex) {
Activator.getDefault().logError("[DB] Problem", ex);
}
return false;
}
[/Java]
Dies funktioniert auch für den Großteil der Schreibaktionen - aber jede 4.-5. Schreibaktion erzeugt folgende Exception:
Es wird also bei em.getTransaction().begin(); rumgemotzt.
Ich denke mir nun, dass ein vorangegangener Schreibvorgang am laufen ist während schon versucht wird ein neues Objekt in die DB zu schreiben.
Wie kann ich nun die Schreibzugriffe synchronisieren? Damit alles schön NACHEINANDER abgearbeitet wird? Kenne da im Moment keine Best Practice Hibernate JPA betreffend (also Queue, Transaction-Pool, oder was weiß ich)
Hoffe da weiß jemand bescheid von euch!
bye Saxony
ich habe gerade folgendes Problem:
Ich bekomme im Abstand von 50-1000ms neue Daten geliefert aus denen ich Objekte baue. Diese möchte ich dann mittels Hibernate JPA in eine MSSQL 2008 DB wegschreiben. Dazu verwende ich:
[Java]
public static boolean addData(final MyData aData) {
try {
final EntityManager em = DBUtil.getEntityManager();
em.getTransaction().begin();
em.persist(aData);
em.getTransaction().commit();
em.clear();
return true;
} catch (final Exception ex) {
Activator.getDefault().logError("[DB] Problem", ex);
}
return false;
}
[/Java]
Dies funktioniert auch für den Großteil der Schreibaktionen - aber jede 4.-5. Schreibaktion erzeugt folgende Exception:
Code:
java.lang.IllegalStateException: Transaction already active
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:35)
at myproject.DataDBUtil.addData(DataDBUtil.java:17)
Es wird also bei em.getTransaction().begin(); rumgemotzt.
Ich denke mir nun, dass ein vorangegangener Schreibvorgang am laufen ist während schon versucht wird ein neues Objekt in die DB zu schreiben.
Wie kann ich nun die Schreibzugriffe synchronisieren? Damit alles schön NACHEINANDER abgearbeitet wird? Kenne da im Moment keine Best Practice Hibernate JPA betreffend (also Queue, Transaction-Pool, oder was weiß ich)
Hoffe da weiß jemand bescheid von euch!
bye Saxony