[racket] Can't find how to use stateless servlets.

From: Rahul Kumar (rahulsinner at gmail.com)
Date: Sat May 7 21:55:55 EDT 2011

There are considerations listed in the references for stateless servlets.

> First, this process drastically changes the structure of your program. It
will create an im-
mense number of lambdas and structures your program did not normally
contain. The per-
formance implication of this has not been studied with Racket.

So this is implicit? Right? No code changes on the user side.

> Second, the defunctionalization process is sensitive to the syntactic
structure of your pro-
gram. Therefore, if you change your program in a trivial way, for example,
changing a
constant, then all serialized continuations will be obsolete and will error
when deserializa-
tion is attempted. This is a feature, not a bug! It is a small price to pay
for protection from
the sorts of errors that would occur if your program were changed in a
meaningful way.

Ok, I get that.

> Third, the values in the lexical scope of your continuations must be
serializable for the con-
tinuations itself to be serializable. This means that you must use
define-serializable-
struct rather than define-struct, and take care to use modules that do the
same. Simi-
larly, you may not use parameterize, because parameterizations are not
serializable.

Haven't tried with struct yet; doesn't look like a big issue.

> Fourth, and related, this process only runs on your code, not on the code
you require. Thus,
your continuations—to be serializable—must not be in the context of another
module.

Again, serialization issue.



On Sun, May 8, 2011 at 7:12 AM, Rahul Kumar <rahulsinner at gmail.com> wrote:

> Thanks Jay.
>
> Worked like a charm. For anyone else fighting with the same issue, the only
> change needed is the `#lang web-server` in-place of `#lang racket` in the
> code sample - `#:stateless? #t` is already there.
>
> Out of curiosity, since I didn't need to make any code changes to make
> stateless work, is there any reason to run stateful servlets? The only
> concern I see is the default stuffer which does disk writes - that too if
> the urls are large. Nothing a fast disk and short ulrs can't mitigate.
>
>
>
> On Sun, May 8, 2011 at 6:57 AM, Jay McCarthy <jay.mccarthy at gmail.com>wrote:
>
>> Stateless servlets must be written in the #lang web-server language.
>>
>> Once you write them that way, if you want to start a server that
>> launches them, you need to use #:stateless?
>>
>> Unless you have both pieces, it won't work.
>>
>> Jay
>>
>> 2011/5/7 Rahul Kumar <rahulsinner at gmail.com>:
>> > Hi,
>> > What do I need to do to run a stateless servlet?
>> > Consider the following example taken from the web tutorial. I just added
>> > `#:stateless? #t` while starting.
>> > #lang racket
>> > (require web-server/servlet
>> >          web-server/servlet-env)
>> > ; start: request -> response
>> > (define (start request)
>> >   (show-counter 0 request))
>> > ; show-counter: number request -> doesn't
>> > ; Displays a number that's hyperlinked: when the link is pressed,
>> > ; returns a new page with the incremented number.
>> > (define (show-counter n request)
>> >   (send/suspend/dispatch
>> >     (lambda (url)
>> >       (response/xexpr
>> >         `(html (head (title "Counting example"))
>> >                (body
>> >                  (a
>> >                    ([href ,(url
>> >                              (lambda (req)
>> >                                (show-counter (add1 n) req)))])
>> >                    ,(number->string n))))))))
>> > (serve/servlet start
>> >                 #:port 7070
>> >                 #:servlet-path "/"
>> >                 #:listen-ip #f
>> >                 #:stateless? #t)
>> >
>> > This doesn't work. I am looking at the web server reference but I can't
>> find
>> > a proper example.
>> >
>> >
>> > _________________________________________________
>> >  For list-related administrative tasks:
>> >  http://lists.racket-lang.org/listinfo/users
>> >
>>
>>
>>
>> --
>> Jay McCarthy <jay at cs.byu.edu>
>> Assistant Professor / Brigham Young University
>> http://faculty.cs.byu.edu/~jay
>>
>> "The glory of God is Intelligence" - D&C 93
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110508/7fecce34/attachment.html>

Posted on the users mailing list.