package net.databinder.cay;
import net.databinder.CookieRequestCycle;
import org.apache.cayenne.access.DataContext;
import org.apache.wicket.Response;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WebRequest;
/**
* Request cycle that binds Cayenne context to current thread. Context is
* rolled back at the end of the request if it contains uncomitted changes.
*/
public class DataRequestCycle extends CookieRequestCycle implements CayenneRequestCycle {
private DataContext context;
public DataRequestCycle(WebApplication app, WebRequest request, Response response) {
super(app, request, response);
}
/** Binds context to this thread. */
public void contextRequested() {
if (context == null) {
context = DataContext.createDataContext();
DataContext.bindThreadDataContext(context);
}
}
/** Unbinds, rolling back uncomitted changes if any. */
@Override
protected void onEndRequest() {
if (context != null) {
if (context.hasChanges())
context.rollbackChanges();
context = null;
DataContext.bindThreadDataContext(null);
}
}
}