def handleRequest(context)
@statistics.hit
@access_time = Time.now
mylog = Logger['iowa_log']
if @lock.locked?
mylog.info("Session collision. Waiting.")
end
@lock.synchronize do
begin
context.session = self
begin
requestPage = @currentPage
@context = context
raise IgnoreRequest unless context.requestID
return handle_resource(context) if @resources.has_key? "#{context.requestID}.#{context.actionID}"
raise PageExpired unless @pages.include? context.requestID
requestPage = @pages[context.requestID]
if @requestCount != context.requestID
requestPage.handleBacktrack
end
@currentPage = requestPage.dup
@application.reloadModified(@currentPage.class.to_s)
@currentPage.handleRequest(context)
nextPage = context.invokeAction
@currentPage = nextPage if nextPage
@requestCount = @requestCount.next
rescue IgnoreRequest
@currentPage = requestPage
end
handleResponse(context)
rescue PageExpired
expired(@pages.queue.last,context)
end
end
end