[plt-scheme] Serializing/deserializing in a servlet

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Sat Nov 29 00:23:08 EST 2008

Servlets don't share namespaces, in particular, this means that
servlets can't interact with each other through structs, which are
generative. You can solve this by passing the #:make-servlet-namespace
argument to serve/servlet passing in the module spec of the source of
the struct. I could debug this program tomorrow, but I don't have time
right now.

Jay

On Fri, Nov 28, 2008 at 12:45 PM, Eddie Sullivan <eddieSull at hotmail.com> wrote:
> Hi.
> The following simple code works well normally, but when run in a servlet
> causes a strange error:
>
> #lang scheme
>
> (require scheme/serialize
>        web-server/servlet-env)
>
> (define-serializable-struct test-struct
>  (a))
>
> (define (test-serialize)
>  (let* ([s (make-test-struct
>           "Eddie Sullivan")]
>        [serialized-s (serialize s)]
>        [new-s (deserialize serialized-s)])
>   (display (format "test-serialize: Saved a: ~a" (test-struct-a
>                                                   new-s)))))
>
>
> (define (go)
>  (serve/servlet start))
>
> (define (start request)
>  (test-serialize))
>
>
> In DrScheme (Windows, vs 4.1.3), if I call (test-serialize), I see the
> expected result:
>
> test-serialize: Saved a: Eddie Sullivan
>
> On the other hand, if I call (go), I see the following error:
>
> Servlet (@ /servlets/standalone.ss) exception:
> test-struct-a: expects args of type <struct:test-struct>; given instance of
> a different <struct:test-struct>
>
> Any tips?
> Thanks.
> -Eddie Sullivan
>
>
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://jay.teammccarthy.org

"The glory of God is Intelligence" - D&C 93


Posted on the users mailing list.