Ik heb een aantal services die bewerkingen op entities encapsuleren. Deze services maken allemaal gebruik van dezelfde entity manager. Bij het afhandelen van een request gebeurt het vaak dat meerdere van deze services in een enkele controller action opgeroepen worden.
Dit is mogelijks een probleem omdat ik vanuit de controller (of andere service) geen weet heb of de opgeroepen servicemethode de entitymanager achter de schermen flusht of niet. Stel dat ik een servicemethode moet oproepen tijdens het opbouwen van een entity, dan bestaat de kans dat deze entity in opbouw prematuur geflusht wordt.
Ik kan hier zelf 2 mogelijke oplossingen voor bedenken:
1. Aan elke servicemethode een optionele parameter "flush" toevoegen die aanduidt of de methode in kwestie de entitymanager moet flushen of niet. Deze optie heeft niet mijn voorkeur omdat dit de service API aanzienlijk vervuilt.
2. Elke service een eigen entitymanager instantie geven (dezelfde database). Dit is beter dan optie 2 omdat ik de API niet moet wijzigen, maar is omslachtig te configureren en heeft een grotere performance-impact (meerdere flushes).
Hoe gaan jullie hierbij te werk? Is er een elegantere manier waar ik niet van weet?
Dit is mogelijks een probleem omdat ik vanuit de controller (of andere service) geen weet heb of de opgeroepen servicemethode de entitymanager achter de schermen flusht of niet. Stel dat ik een servicemethode moet oproepen tijdens het opbouwen van een entity, dan bestaat de kans dat deze entity in opbouw prematuur geflusht wordt.
Ik kan hier zelf 2 mogelijke oplossingen voor bedenken:
1. Aan elke servicemethode een optionele parameter "flush" toevoegen die aanduidt of de methode in kwestie de entitymanager moet flushen of niet. Deze optie heeft niet mijn voorkeur omdat dit de service API aanzienlijk vervuilt.
2. Elke service een eigen entitymanager instantie geven (dezelfde database). Dit is beter dan optie 2 omdat ik de API niet moet wijzigen, maar is omslachtig te configureren en heeft een grotere performance-impact (meerdere flushes).
Hoe gaan jullie hierbij te werk? Is er een elegantere manier waar ik niet van weet?