Cleaning up servlet loading

svn: r703
This commit is contained in:
Jay McCarthy 2005-08-29 22:08:31 +00:00
parent 346fec9154
commit 3ea5aebdc2

View File

@ -291,6 +291,20 @@
;;;;;; (XXX: I don't know what 'typed-model-split-store0 was, so it was removed.) ;;;;;; (XXX: I don't know what 'typed-model-split-store0 was, so it was removed.)
;;;; A response ;;;; A response
(define (load-servlet/path a-path) (define (load-servlet/path a-path)
(define (v0.servlet->v1.lambda servlet)
(lambda (initial-request)
(invoke-unit/sig servlet servlet^)))
(define (v0.response->v1.lambda response-path response)
(letrec ([go (lambda ()
(begin
(set! go (lambda () (load/use-compiled a-path)))
response))])
(lambda (initial-request) (go))))
(define (v1.module->v1.lambda timeout start)
(lambda (initial-request)
(adjust-timeout! timeout)
(start initial-request)))
(parameterize ([current-namespace (config:make-servlet-namespace)]) (parameterize ([current-namespace (config:make-servlet-namespace)])
(and (file-exists? a-path) (and (file-exists? a-path)
(let ([s (load/use-compiled a-path)]) (let ([s (load/use-compiled a-path)])
@ -298,9 +312,7 @@
;; signed-unit servlet ;; signed-unit servlet
; MF: I'd also like to test that s has the correct import signature. ; MF: I'd also like to test that s has the correct import signature.
[(unit/sig? s) [(unit/sig? s)
(make-cache-entry (lambda (initial-request) (make-cache-entry (v0.servlet->v1.lambda s) (current-namespace))]
(invoke-unit/sig s servlet^))
(current-namespace))]
; FIX - reason about exceptions from dynamic require (catch and report if not already) ; FIX - reason about exceptions from dynamic require (catch and report if not already)
;; module servlet ;; module servlet
[(void? s) [(void? s)
@ -310,25 +322,15 @@
[(v1) [(v1)
(let ([timeout (dynamic-require module-name 'timeout)] (let ([timeout (dynamic-require module-name 'timeout)]
[start (dynamic-require module-name 'start)]) [start (dynamic-require module-name 'start)])
(make-cache-entry (make-cache-entry (v1.module->v1.lambda timeout start) (current-namespace)))]
(lambda (initial-request)
(adjust-timeout! timeout)
(start initial-request))
(current-namespace)))]
[else [else
(raise (format "unknown servlet version ~e" version))]))] (raise (format "unknown servlet version ~e" version))]))]
;; response ;; response
[(response? s) [(response? s)
(letrec ([go (lambda () (make-cache-entry (v0.response->v1.lambda s a-path) (current-namespace))]
(begin
(set! go (lambda () (load/use-compiled a-path)))
s))])
(make-cache-entry (lambda (initial-request) (go))
(current-namespace)))]
[else [else
(raise 'load-servlet/path "Loading ~e produced ~n~e~n instead of a servlet." a-path s)]))))) (raise 'load-servlet/path "Loading ~e produced ~n~e~n instead of a servlet." a-path s)])))))
(define servlet-bin? (define servlet-bin?
(let ([svt-bin-re (regexp "^/servlets(;id.*\\*.*\\*.*)?/.*")]) (let ([svt-bin-re (regexp "^/servlets(;id.*\\*.*\\*.*)?/.*")])
(lambda (str) (lambda (str)