Hallo,
in einer Servicemethode eines Objektes einer seam-Anwendung (egal ob EJB oder nicht) wird eine Datenbanktransaktion ausgeführt, bei der etliche tausend Zeilen gelesen, verarbeitet und diverse tausend neue Zeilen in der Datenbank angelegt werden. Das geht grundsätzlich, aber irgendwann kommen Grenzen, wo die Transaktion abstürzt/rollback. So ab ca. 10.000 Zeilen.
Was da tun?
Am liebsten wärs mir, die Transaktion nach n (z.B. 1000) Zeilen zu committen und eine neue zu starten. Da der entityManager aber entweder von Seam oder vom AS gemanaged wird, besteht diese Möglichkeit nicht (oder doch? weiss jemand wie?) Ich benutze den Seam-EM, also
@In
private EntityManager em;
Dann habe ich noch probiert, mit einer zweiten (non-jta, RESOURCE-LOCAL) persistence unit eine eigene EntityManagerFactory zu erzeugen, von dieser einen EM zu bekommen und mit dem dann "per Hand" die Transaktionen zu steuern (an ANDERER Stelle der Anwendung, in einem simplen Servlet, funktioniert das!). Dann kommt seltsamerweise die Fehlermeldung "java.sql.SQLException: You cannot commit during a managed transaction!". Verstehe ich nicht, denn die Transaction sollte nicht gemanaged sein!?
Weiss jemand rat? Möglichst noch heute nacht? ;-) Eilt etwas..
Gruß+Danke
Jan
in einer Servicemethode eines Objektes einer seam-Anwendung (egal ob EJB oder nicht) wird eine Datenbanktransaktion ausgeführt, bei der etliche tausend Zeilen gelesen, verarbeitet und diverse tausend neue Zeilen in der Datenbank angelegt werden. Das geht grundsätzlich, aber irgendwann kommen Grenzen, wo die Transaktion abstürzt/rollback. So ab ca. 10.000 Zeilen.
Was da tun?
Am liebsten wärs mir, die Transaktion nach n (z.B. 1000) Zeilen zu committen und eine neue zu starten. Da der entityManager aber entweder von Seam oder vom AS gemanaged wird, besteht diese Möglichkeit nicht (oder doch? weiss jemand wie?) Ich benutze den Seam-EM, also
@In
private EntityManager em;
Dann habe ich noch probiert, mit einer zweiten (non-jta, RESOURCE-LOCAL) persistence unit eine eigene EntityManagerFactory zu erzeugen, von dieser einen EM zu bekommen und mit dem dann "per Hand" die Transaktionen zu steuern (an ANDERER Stelle der Anwendung, in einem simplen Servlet, funktioniert das!). Dann kommt seltsamerweise die Fehlermeldung "java.sql.SQLException: You cannot commit during a managed transaction!". Verstehe ich nicht, denn die Transaction sollte nicht gemanaged sein!?
Weiss jemand rat? Möglichst noch heute nacht? ;-) Eilt etwas..
Gruß+Danke
Jan