/***
 * Excerpted from "Domain-Driven Design Using Naked Objects",
 * published by The Pragmatic Bookshelf.
 * Copyrights apply to this code. It may not be used to create training material, 
 * courses, books, articles, and the like. Contact us if you are in doubt.
 * We make no guarantees that this code is fit for any purpose. 
 * Visit http://www.pragmaticprogrammer.com/titles/dhnako for more book information.
***/
public class NakedObjectsWebRequestCycle extends WebRequestCycle {
    ...
    protected void onBeginRequest() {
        super.onBeginRequest();
        NakedObjectsAuthenticatedWebSession wicketSession = 
            NakedObjectsAuthenticatedWebSession.get();
        if (wicketSession == null) {
            return;
        }
        AuthenticationSession nakedObjectsSession = 
            wicketSession.getAuthenticationSession();
        if (nakedObjectsSession == null) {
            return;
        }
        NakedObjectsContext.openSession(nakedObjectsSession);
        getTransactionManager().startTransaction();
    }
    ...
    protected void onEndRequest() {
        if (NakedObjectsContext.inSession()) {
            NakedObjectTransaction transaction = 
                getTransactionManager().getTransaction();
            if (transaction != null) {
                getTransactionManager().endTransaction();
            }

            NakedObjectsContext.closeSession();
        }
        super.onEndRequest();
    }
    ...
}
