No worries, the session vars seem to be reset to their default values
before the callback gets
called. I followed the code myself in Vars and LiftSession and
couldn't find anything wrong. Will
look at your change set tomorrow to learn better how this works.

If i spot possible bugs I would like to get involved and write test
cases etc so I don't have to
bother you and others on the list all the time.

On Feb 4, 11:56 pm, David Pollak <feeder.of.the.be...@gmail.com>
wrote:
> I've just realized that I'm a complete idiot.
> I need to totally re-do the clean-up mechanism.
>
> Please give me an hour.
>
> On Wed, Feb 4, 2009 at 3:06 PM, Kris Nuttycombe
> <kris.nuttyco...@gmail.com>wrote:
>
>
>
> > Heh, this one just bit me too. I can't say I didn't warn myself, though:
>
> >   // This is way too dependent upon an implementation detail of the
> > superclass.
> >   override def cleanupFunc : Box[() => Unit] = {
> >      ...
> >   }
>
> > Kris
>
> > On Wed, Feb 4, 2009 at 1:47 PM, David Pollak <
> > feeder.of.the.be...@gmail.com> wrote:
>
> >> That's because cleanUpFunc is gone.
>
> >> You must do:
>
> >> object sessDirHash extends SessionVar[String]("") {
> >>   registerCleanupFunc(session => println("Got hash: " + this.is))
>
> >> }
>
> >> On Wed, Feb 4, 2009 at 12:43 PM, Alli <allilis...@gmail.com> wrote:
>
> >>> Hey David,
>
> >>> Two questions this time:
>
> >>> I've been playing with your commit earlier today and cleaning up
> >>> SessionVar's.
> >>> I got:
>
> >>> object sessDirHash extends SessionVar[String]("") {
> >>>  def cleanUpFunc(sess: LiftSession) = {
> >>>   println("Got hash: " + this.is)
> >>> }
>
> >>> In my test snippet I got:
> >>> sessDirHash("this is a test")
> >>> println("Got var: " + ResizeMyPics.sessDirHash.is)
>
> >>> I can see it printed out correctly after setting it but it's empty in
> >>> the cleanup function.
>
> >>> 2)
> >>> Second question, I submit a form and my flash component starts e.g. 3
> >>> new sessions and POST's to /resize
>
> >>> /resize sets a SessionVar variable but it's like it's only being set
> >>> the first time. I'm printing out right before I register
> >>> the clean up handler in the SessionVar, from my jetty logs:
>
> >>> INFO - Service request (GET) /images/cancelbutton.gif took 9
> >>> Milliseconds
> >>> Rez Gots: 127.0.0.1
> >>> Registering cleanup for: 1uvl5176sdy9r
> >>> Rez Rep Gots: 127.0.0.1
> >>> INFO - Service request (POST) /resize took 270 Milliseconds
> >>> Rez Gots: 127.0.0.1
> >>> Rez Rep Gots: 127.0.0.1
> >>> INFO - Service request (POST) /resize took 91 Milliseconds
> >>> Rez Gots: 127.0.0.1
> >>> Rez Rep Gots: 127.0.0.1
> >>> INFO - Service request (POST) /resize took 481 Milliseconds
>
> >>> I would think it should print out Registering cleanup handler ...
> >>> after each /resize request since they are different sessions.
>
> >>> Then the sessions all timeout and I can see there are 4 sessions
> >>> expiring but there is only message printed out once
> >>> from the clean up handler.
>
> >>> What are your thoughts on this?
>
> >>> Cheers,
> >>> Alfred
>
> >>> On Feb 4, 1:19 am, Alli <allilis...@gmail.com> wrote:
> >>> > Thanks David, I'll get it tomorrow from scala-tools.org and finish up
> >>> > the app.
> >>> > URL will behttp://www.resizemypics.netafree service for people to
> >>> > resize their pictures
> >>> > and view them online. Just a simple, yet convenient service. Gives me
> >>> > a chance to learn
> >>> > more about lift as well. Been following lift for a while but this is
> >>> > the first site I finish, have a
> >>> > half finished blog site in lift. Doing all this stuff outside of work
> >>> > so it's easy to get distracted.
>
> >>> > Will let you know once the site is in production.
>
> >>> > Again thanks for your help.
>
> >>> > Cheers,
> >>> > Alli
>
> >>> > On Feb 4, 1:12 am, David Pollak <feeder.of.the.be...@gmail.com> wrote:
>
> >>> > > 0.11-SNAPSHOT is 0.10 with bug fixes.  It's very stable and will be
> >>> 1.0 on
> >>> > > 2/26.
> >>> > > I'll commit up a fix to this problem in a few minutes.
>
> >>> > > Also, what's the URL of the site? :-)
>
> >>> > > On Tue, Feb 3, 2009 at 4:58 PM, Alli <allilis...@gmail.com> wrote:
>
> >>> > > > 0.10 at the moment, reckon i should upgrade to 0.11? This site is
> >>> > > > going live soon though and I was not sure
> >>> > > > about the status of 0.11-snapshot.
>
> >>> > > > On Feb 4, 12:56 am, David Pollak <feeder.of.the.be...@gmail.com>
> >>> > > > wrote:
> >>> > > > > Crud.  It looks like the session cleanup is done outside of the
> >>> session
> >>> > > > > scope.
> >>> > > > > Are you using 0.11-SNAPSHOT?
>
> >>> > > > > On Tue, Feb 3, 2009 at 4:35 PM, Alli <allilis...@gmail.com>
> >>> wrote:
>
> >>> > > > > > Been testing this stuff and my object is like this:
>
> >>> > > > > > object ReportAddress extends SessionVar[String]("") {
> >>> > > > > >   def cleanUp() = {
> >>> > > > > >    println(S.session)
> >>> > > > > >    S.session.map { sess =>
> >>> > > > > >      println("Session ID: " + sess.uniqueId)
> >>> > > > > >      println("REM ADDRESS: " + this.is)
> >>> > > > > >      val tempDir = ...
> >>> > > > > >      // Remove the temporary dir for this session.
> >>> > > > > >      tempDir.destroy()
> >>> > > > > >    }
> >>> > > > > >  }
>
> >>> > > > > >  registerCleanupFunc(cleanUp _)
> >>> > > > > > }
>
> >>> > > > > > println(S.session) always gives me "Empty"
>
> >>> > > > > > Any idea what could cause this?
>
> >>> > > > > > On Feb 3, 10:38 pm, David Pollak <
> >>> feeder.of.the.be...@gmail.com>
> >>> > > > > > wrote:
> >>> > > > > > > On Tue, Feb 3, 2009 at 2:13 PM, Alli <allilis...@gmail.com>
> >>> wrote:
>
> >>> > > > > > > > Makes a lot of sense, thanks David.
>
> >>> > > > > > > > Always amazes me how good and clean the design of lift is.
>
> >>> > > > > > > Flattery will get you a lot... :-)
>
> >>> > > > > > > > On Feb 3, 9:49 pm, David Pollak <
> >>> feeder.of.the.be...@gmail.com>
> >>> > > > wrote:
> >>> > > > > > > > > On Tue, Feb 3, 2009 at 1:06 PM, Alli <
> >>> allilis...@gmail.com>
> >>> > > > wrote:
>
> >>> > > > > > > > > > Evening,
>
> >>> > > > > > > > > > During the lifetime of a session, the session may have
> >>> uploaded
> >>> > > > > > bunch
> >>> > > > > > > > > > of files and these need to be able to be
> >>> destroyed/unlinked
> >>> > > > when a
> >>> > > > > > > > > > session ends.
>
> >>> > > > > > > > > > When user uploads a file it's parent dir is determined
> >>> by the
> >>> > > > > > session
> >>> > > > > > > > > > unique ID and the remote address of the uploader. The
> >>> name is
> >>> > > > e.g.
> >>> > > > > > /
> >>> > > > > > > > > > tmp/sha1 hash of session id and remote address'.  This
> >>> means in
> >>> > > > > > order
> >>> > > > > > > > > > to determine what to destroy I need to know what remote
> >>> address
> >>> > > > the
> >>> > > > > > > > > > session belongs to. I am setting that when uploading a
> >>> file has
> >>> > > > > > been
> >>> > > > > > > > > > uploaded successfully.
>
> >>> > > > > > > > > > In Boot.scala I want to do something like:
> >>> > > > > > > > > >  // Set session handler.
> >>> > > > > > > > > >    LiftSession.onAboutToShutdownSession =
> >>> List[LiftSession =>
> >>> > > > > > Unit](
> >>> > > > > > > > > >        session => {
> >>> > > > > > > > > >          var sessId = session.uniqueId
> >>> > > > > > > > > >          val remoteIp = session.get("remoteAddress")
> >>> > > > > > > > > >          val myTempDir = new TempDirWeb(sessId,
> >>> remoteIp)
> >>> > > > > > > > > >          myTempDir.unlinkall()
> >>> > > > > > > > > >        })
>
> >>> > > > > > > > > > Problem with this is that the LiftSession.get[T]()
> >>> method is
> >>> > > > > > package
> >>> > > > > > > > > > private (liftweb). I can think of some other scenarios
> >>> where
> >>> > > > one
> >>> > > > > > would
> >>> > > > > > > > > > need access to the session variables before destroying
> >>> the
> >>> > > > session.
>
> >>> > > > > > > > > > Does this make sense or is my design just plain wrong?
> >>> :).
>
> >>> > > > > > > > > get is typesafe, so exposing it would make it not type
> >>> safe.
> >>> > > >  It's
> >>> > > > > > always
> >>> > > > > > > > > accessed via SessionVars.
>
> >>> > > > > > > > > You can do something like:
>
> >>> > > > > > > > > object ReportAddress extends SessionVar[String]("") {
> >>> > > > > > > > >   def cleanUp() {
> >>> > > > > > > > >     S.session.map{ sess =>
> >>> > > > > > > > >     val td = new TempDirWeb(sess.uniqueId, this.is)
> >>> > > > > > > > >     td.unlinkall()
> >>> > > > > > > > >     }
> >>> > > > > > > > >   }
>
> >>> > > > > > > > >   registerCleanupFunc(cleanUp _)
>
> >>> > > > > > > > > }
>
> >>> > > > > > > > > Each SessionVar (and RequestVar) has a cleanup func that
> >>> will be
> >>> > > > > > called
> >>> > > > > > > > as
> >>> > > > > > > > > the Var is going away.
>
> >>> > > > > > > > > > Cheers,
> >>> > > > > > > > > > Alfred
>
> >>> > > > > > > > > --
> >>> > > > > > > > > Lift, the simply functional web frameworkhttp://
> >>> liftweb.net
> >>> > > > > > > > > Beginning Scalahttp://
> >>>www.apress.com/book/view/1430219890
> >>> > > > > > > > > Follow me:http://twitter.com/dpp
> >>> > > > > > > > > Git some:http://github.com/dpp
>
> >>> > > > > > > --
> >>> > > > > > > Lift, the simply functional web frameworkhttp://liftweb.net
> >>> > > > > > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> >>> > > > > > > Follow me:http://twitter.com/dpp
> >>> > > > > > > Git some:http://github.com/dpp
>
> >>> > > > > --
> >>> > > > > Lift, the simply functional web frameworkhttp://liftweb.net
> >>> > > > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> >>> > > > > Follow me:http://twitter.com/dpp
> >>> > > > > Git some:http://github.com/dpp
>
> >>> > > --
> >>> > > Lift, the simply functional web frameworkhttp://liftweb.net
> >>> > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> >>> > > Follow me:http://twitter.com/dpp
> >>> > > Git some:http://github.com/dpp
>
> >> --
> >> Lift, the simply functional web frameworkhttp://liftweb.net
> >> Beginning Scalahttp://www.apress.com/book/view/1430219890
>
> >> Follow me:http://twitter.com/dpp
> >> Git some:http://github.com/dpp
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Git ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to