Moin,
bin grad ein wenig am verzweifeln, weil ich so langsam das Gefühl haben, für mein Problem gäbe es keine Lösung.
Ist-Zustand:
WebService-Schicht -> Controller-Schicht -> Service-Schicht -> OracleDB
Für JUnitTests zum testen der WebServices setze ich OpenEJB ein. Der Test befindet sich in der WebService-Schicht.
Die Service-Schicht, holt sich per Injection einen EntityManager und persistiert darauf die Daten die ich über die WebService-Schicht abgebe.
Soll-Zustand:
Nun würde ich am liebsten folgendes tun. Ich öffne eine Transaction (wie auch immer), stoße meine tests an und lasse zu den bestehenden Stammdaten, Testdaten generieren. Ich führe einen Rollback auf der Transaction aus, so dass die daten aus dem Test da auf keinen Fall verbleiben.
Nun der Part wo ihr mir Helfen könnt:
Wo und wie sind Transactions und EntityManager gültig?
Die JTA-Spec verbietet es mir, dass ich mir per getTransaction aus einem in den JUnitTest Injezierten EntityManager die Transaction ziehe die wohlmöglich ?global? gültig ist? Ist das allgemein eine falsche herangehensweise?
Gibt es eine bessere?
Ich hab da einfach überhaupt keine Idee mehr für einen Ansatz. Ich hoffe ihr habt noch was in Petto!!!
Schöne Grüße,
Uschi
edit:
eine per @Resource injezierte UserTransaction bringt mir auch nur für den lokal injezierten EntityManager etwas. Wenn ich direkt etwas an diesem persiste, verschwindet das durch einen Rollback wieder. Wenn ich mir ID's ansehe sind beim debuggen, der EntityManager im JUnitTest und die EntityManager in der Service-Schicht jedes mal andere. Auch für jeden Persistierungsvorgang im Backend (also auch innerhalb eines einzelnen WebService-Aurufs mit mehreren Objekten die persitiert werden) einen anderen EntityManager.
bin grad ein wenig am verzweifeln, weil ich so langsam das Gefühl haben, für mein Problem gäbe es keine Lösung.
Ist-Zustand:
WebService-Schicht -> Controller-Schicht -> Service-Schicht -> OracleDB
Für JUnitTests zum testen der WebServices setze ich OpenEJB ein. Der Test befindet sich in der WebService-Schicht.
Die Service-Schicht, holt sich per Injection einen EntityManager und persistiert darauf die Daten die ich über die WebService-Schicht abgebe.
Soll-Zustand:
Nun würde ich am liebsten folgendes tun. Ich öffne eine Transaction (wie auch immer), stoße meine tests an und lasse zu den bestehenden Stammdaten, Testdaten generieren. Ich führe einen Rollback auf der Transaction aus, so dass die daten aus dem Test da auf keinen Fall verbleiben.
Nun der Part wo ihr mir Helfen könnt:
Wo und wie sind Transactions und EntityManager gültig?
Die JTA-Spec verbietet es mir, dass ich mir per getTransaction aus einem in den JUnitTest Injezierten EntityManager die Transaction ziehe die wohlmöglich ?global? gültig ist? Ist das allgemein eine falsche herangehensweise?
Gibt es eine bessere?
Ich hab da einfach überhaupt keine Idee mehr für einen Ansatz. Ich hoffe ihr habt noch was in Petto!!!
Schöne Grüße,
Uschi
edit:
eine per @Resource injezierte UserTransaction bringt mir auch nur für den lokal injezierten EntityManager etwas. Wenn ich direkt etwas an diesem persiste, verschwindet das durch einen Rollback wieder. Wenn ich mir ID's ansehe sind beim debuggen, der EntityManager im JUnitTest und die EntityManager in der Service-Schicht jedes mal andere. Auch für jeden Persistierungsvorgang im Backend (also auch innerhalb eines einzelnen WebService-Aurufs mit mehreren Objekten die persitiert werden) einen anderen EntityManager.
Comment