On Tue, Jan 19, 2010 at 11:58 PM, Yu-Shan Fung <[email protected]>wrote:

> Thanks for the reply, David!
>
> I finally realized my problem is that I was compiling against the scala
> 2.7.3 library instead of 2.7.7 as I thought. When I use the newer lib, the
> exception apparently goes away.
>

Scala is very version sensitive.  If you're using Lift 1.1-M5+, you must use
Scala 2.7.7.  If you're using Lift 1.0.2, I think the correct version is
2.7.5.


>
> Regardless, what would be a good replacement for the scala actors library?
>


Akka:  akkasource.org


>
> Thanks,
> Yu-Shan
>
>
> On Tue, Jan 19, 2010 at 8:44 PM, David Pollak <
> [email protected]> wrote:
>
>> Howdy,
>>
>> The short (and not politically popular) answer is that Scala's Actor
>> implementation is generally fragile and often broken.  Lift made the painful
>> switch away from Scala Actors 4 or so months ago for this reason.
>>
>> If you can put together a simple example of the failure (basically
>> something that we can run with mvn jetty:run) and make it available on
>> GitHub, we can take a look at it.
>>
>> Thanks,
>>
>> David
>>
>>  On Tue, Jan 19, 2010 at 5:02 PM, Yu-Shan Fung <[email protected]>wrote:
>>
>>>  Thanks for the reply, Marius. Where can I get the 1.1 or 2.0 snapshot?
>>>
>>> I'm not doing any scheduling myself. I just created a bunch of Future's,
>>> and then call Futures.awaitAll. But my understanding is that Future is
>>> implemented with Actor's.
>>>
>>>     val fResults = ids.map { id => future(computeStuff(id)) }
>>>     val fList = fResults.toList     // forces creation of the future
>>> variables. otherwise they are created lazily, defeating parallelism
>>>     val finalResults = Futures.awaitAll(5000, fList: _*)
>>>
>>> This works the first time (and sometimes for a few times). But pretty
>>> soon, the call to awaitAll would fail with the aforementioned exception.
>>>
>>> I dug a bit into the scala code, and the code that fails within
>>> Futures.awaitAll is this:
>>>
>>>    Actor.timer.schedule(new java.util.TimerTask {
>>>      def run() { thisActor ! TIMEOUT }
>>>    }, timeout)
>>>
>>> And Actor.timer is defined as such:
>>>
>>> object Actor {
>>> ...
>>>   private[actors] val timer = new Timer(true)
>>> ...
>>> }
>>>
>>>
>>> I'm pretty new to both scala and lift, but it looks like the Actor.timer
>>> is initialized once (created as a daemon), and expected to always be
>>> available. But I don't fully understand what aspects of the lift environment
>>> persists across requests, and how, if at all, would Actor.timer end up in a
>>> cancelled/terminated state.
>>>
>>> Any idea? Thanks in advance!
>>>
>>>
>>>
>>>
>>> On Tue, Jan 19, 2010 at 6:40 AM, Marius <[email protected]> wrote:
>>>
>>>> I'd recommend using Lisft 1.1-SNAPSHOT or 2.0-SNAPSHOT
>>>>
>>>> You stacktrace doesn't indicate anything related with Lift, so are you
>>>> using Java's scheduler, or are you using actors? Lift's ActorPing and
>>>> actors is a good way of doing scheduling. So can you elaborate on how
>>>> are you doing the scheduling?
>>>>
>>>> Br's,
>>>> Marius
>>>>
>>>> On Jan 19, 8:04 am, Yu-Shan Fung <[email protected]> wrote:
>>>> > Hi All,
>>>> >
>>>> > I have a lift app, where one of the functions performs
>>>> sub-computations
>>>> > (including network operations) in parallel via future(s) &
>>>> Futures.awaitAll.
>>>> > It runs fine on the first request, but subsequent requests throws a
>>>> > IllegalStateException:
>>>> >
>>>> > Exception in thread "Thread-30" java.lang.IllegalStateException: Timer
>>>> > already cancelled.
>>>> >         at java.util.Timer.sched(Timer.java:376)
>>>> >         at java.util.Timer.schedule(Timer.java:192)
>>>> >         at scala.actors.Futures$.awaitAll(Future.scala:76)
>>>> >         at MyWorker.run(MyWorker.scala:20)
>>>> >         at java.lang.Thread.run(Thread.java:636)
>>>> >
>>>> > I dug up more documentation and it looks like this exception indicates
>>>> an
>>>> > attempt to schedule a task on a timer that has already been cancelled
>>>> > (associated daemon thread terminated?). Any idea why, or if I'm doing
>>>> > something wrong?
>>>> >
>>>> > In case it matters, I'm running Scala code runner version 2.7.7.final,
>>>> > Liftweb 1.0, Jetty 6.1.22.
>>>> >
>>>> > Any tips/pointers would be appreciated. Thanks!
>>>> > Yu-Shan
>>>> >
>>>> > --
>>>> > “When nothing seems to help, I go look at a stonecutter hammering away
>>>> at
>>>> > his rock perhaps a hundred times without as much as a crack showing in
>>>> it.
>>>> > Yet at the hundred and first blow it will split in two, and I know it
>>>> was
>>>> > not that blow that did it, but all that had gone before.” — Jacob Riis
>>>>
>>>> --
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Lift" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<liftweb%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/liftweb?hl=en.
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> “When nothing seems to help, I go look at a stonecutter hammering away at
>>> his rock perhaps a hundred times without as much as a crack showing in it.
>>> Yet at the hundred and first blow it will split in two, and I know it was
>>> not that blow that did it, but all that had gone before.” — Jacob Riis
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Lift" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<liftweb%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/liftweb?hl=en.
>>>
>>
>>
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Surf the harmonics
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<liftweb%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>>
>
>
> --
> “When nothing seems to help, I go look at a stonecutter hammering away at
> his rock perhaps a hundred times without as much as a crack showing in it.
> Yet at the hundred and first blow it will split in two, and I know it was
> not that blow that did it, but all that had gone before.” — Jacob Riis
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>



-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics
--
You received this message because you are subscribed to the Google Groups "Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.

Reply via email to