51 lines
2.0 KiB
Racket
51 lines
2.0 KiB
Racket
#lang scribble/doc
|
|
@(require "web-server.rkt")
|
|
|
|
@title[#:tag "namespace"]{Servlet Namespaces}
|
|
@(require (for-label web-server/configuration/namespace))
|
|
|
|
@defmodule[web-server/configuration/namespace]{
|
|
|
|
This module provides a function to help create the
|
|
@racket[make-servlet-namespace] procedure needed by the @racket[make] function
|
|
of @racketmodname[web-server/dispatchers/dispatch-servlets].
|
|
|
|
@defthing[make-servlet-namespace/c contract?]{
|
|
Equivalent to
|
|
@racketblock[
|
|
(->* ()
|
|
(#:additional-specs (listof module-path?))
|
|
namespace?)
|
|
]
|
|
}
|
|
|
|
@defproc[(make-make-servlet-namespace (#:to-be-copied-module-specs to-be-copied-module-specs (listof module-path?)))
|
|
make-servlet-namespace/c]{
|
|
This function creates a function that when called will construct a new @racket[namespace] that
|
|
has all the modules from @racket[to-be-copied-module-specs] and @racket[additional-specs], as well
|
|
as @racket[racket] and @racket[mred], provided they are already attached
|
|
to the @racket[(current-namespace)] of the call-site.
|
|
|
|
Example:
|
|
@racketblock[
|
|
(make-make-servlet-namespace
|
|
#:to-be-copied-module-specs `((lib "database.rkt" "my-module")))
|
|
]
|
|
}
|
|
|
|
}
|
|
|
|
@section{Why this is useful}
|
|
|
|
A different namespace is needed for each servlet, so that if servlet A and servlet B both use
|
|
a stateful module C, they will be isolated from one another. We see the @web-server as
|
|
an operating system for servlets, so we inherit the isolation requirement on operating systems.
|
|
|
|
However, there are some modules which must be shared. If they were not, then structures cannot
|
|
be passed from the @web-server to the servlets, because Racket's structures are generative.
|
|
|
|
Since, on occasion, a user will actually wanted servlets A and B to interact through module C.
|
|
A custom @racket[make-servlet-namespace] can be created, through this procedure, that attaches
|
|
module C to all servlet namespaces. Through other means (see @secref["dispatchers"]) different sets
|
|
of servlets can share different sets of modules.
|