Uwe Schäfer wrote:
i plan to use JPA together with Wicket. Are there any battle-proven
best-practices out there of how to handle EnityManagers and Transactions?
What do other people use (no, not the spring crowd ;) ?
One EntityManager per Request seems to be the obvious idea and a guice
Provider may help with that. Does anyone have serious experiences with
that or other suggestions?
Subclass WebRequestCycle, and construct it with an EntityManager.
In onBeginRequest(), create a transaction, storing it in a private variable.
In onEndRequest(), commit the transaction if it hasn't already been
rolled back and clean up the EntityManager.
In onRuntimeException(...), rollback the transaction and then return
super.onRuntimeException(...).
You'll need to inject a Provider<EntityManager> into your WebApplication
subclass such that you can call .get() on it when you make your custom
WebRequestCycle. You'll need to configure that provider in a Guice
module somewhere, obviously. You should be able to figure that out. ;-)
How do you inject things into your WebApplication? Well, you can use the
new GuiceWebApplicationFactory, which unfortunately didn't quite make it
into 1.3.0-rc1 but is in trunk. However, you can copy that class from
trunk and use it in your own project quite happily - it has no extra
dependencies.
If you need to integrate with your container-managed JTA transactions
you'll need something a little different (the container may well start
and commit the tx for you), but the principle is roughly the same.
Alternatively, you can take Wicket out of the picture and do stuff using
a ServletFilter (like Spring's OpenEntityManagerInView).
Regards,
Al
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]