On Nov 18, 6:31 pm, Paul Butcher <
p...@paulbutcher.com> wrote:
> I'm seriously considering Lift for a new project. I know what the
> benefits of Scala and Lift are (that's why I'm seriously considering
> this as a route forwards :-) What I'm wondering is whether there are
> any lurking nasties that I should be aware of (so that I can avoid
> learning about them the hard way).
Not sure if there is any. One thing though Lift's session state is
kept in memory and not serialized in the DB. Session serialization is
a bit tricky since we keep the bound functions on the session state.
Those functions are in many cases anonymous function that may hold
other references which are not serializable. Even if everything is
serializable using Java serialization is likely suboptimal. But
keeping the sessions in memory and have a session affinity load
balancing is a very good choice from performance perspective.
>
> Some background: Until recently I was CTO of Texperts, a UK startup.
> We moved to using Ruby on Rails shortly after version 1.0 was released
> (i.e. when it was at just about the same level of maturity as Lift is
> now). Our experience was mostly very good - the major issues we had
> were deployment problems arising from the fact that Ruby's threads
> aren't really threads.
>
> I'm now looking at a new project, a significant chunk of which will be
> a webservice likely to be installed within a mobile network operator's
> infrastructure. That fact is a powerful argument for writing it in
> Java (MNOs all know how to run big Java app servers) but the very
> thought of being stuck writing Java for the foreseeable future makes
> me break out in hives :-)
>
> So I'm considering Scala and Lift. In particular, I'm considering the
> tradeoffs of Lift versus something like Spring+Scala.
IMHO there is no tradeoff. Scala's nature tremendously facilitates
things using functional composition and Spring's MVC/AOP etc. doesn;t
really bring you much benefits. Not to mention that Lift's templating
mechanism is really great.
>
> I'm not too worried about problems that might bite us while we're
> developing the service. I hope that we're smart enough, and the Lift
> community is helpful enough, that we should be able to work our way
> through those kinds of problem (although a heads-up would still be
> welcome).
I'd say that this is a safe bet.
>
> What I *am* worried about are problems that might bite us when we come
> to install the service at an MNO. Having said "don't worry - it'll run
> on your app server just fine", is there anything that might prove
> problematic if we choose Lift?
In essence Lift start as a plain servlet filter so I wouldn't expect
any incompatibilities. But I'd recommend lightweight containers with
nice non-blocking IO. Jetty looks to be a good choice. Non blocking IO
support is particularly helpful when using Comet and Lift has a built
in mechanism for that.
Is there anything we can do ahead of
> time to head this kind of problem off at the pass? How should we test
> to minimise the chance of problems? Would choosing Spring+Scala
> decrease any of these risks?
I don't see what Spring brings and Lift doesn't and how it would
minimize risks.