I've recently been in the market for a Java Web framework and have settled on Play. There are a lot of things I really like about it. I have no problem with the Play developers going "off the reservation" (as far as JEE goes).
I'm finding some things are a bit awkward, particularly around templates and routing. Also, the documentation while good is lacking in other parts.
Play is a very prescriptive framework but only on a couple of choices do I have an issue.
The first is about transactions. Each HTTP request is a transaction. Generally I'm fine with this but you need a way to override or control this (IMHO).
Second, I like the mixin approach with controllers (@With(...)). I wish there were something similar with models.
Third, and this is the biggest, it doesn't integrate with Maven, which is something I'm very tempted to fork it for. There's no reason it can't be a Maven plugin/archetype, use Maven for dependencies (directly, rather than tortuous syntax in dependencies.yml), etc. Some guy has an alpha version of something like this already when I last looked.
Fourth, while I don't necessarily mind that controllers are static (as a way of indicating they're stateless it seems), that's actually an issue for parallellizing tests.
Play 2.0 is moving even further away from this and using SBT, which I've never used but heard mixed things about.
I can't speak to many of the specifics of this post (eg I only use Play on Linux).
Whatever (valid) criticisms you can level against Play I'd still far and away prefer to use it over any other Java Web framework I have used or know about.
I've had to work with Play lately, and I find it quite delightful. It's butchering java as a language (or at least what's considered good practice), but since it works so well, you tend to overlook that.
I'm also a fan of maven. There's nothing better than checking out a huge project with a great deal of dependencies and just have it build perfectly with a couple of keystrokes.
Seems like the play developers (Guillaume et co) went for a clean break with legacy java though. And if you want that, you can't depend on maven.
Only had a cursory look at 2.0 so far, but moving further into Scala territory and adopting SBT seems like an interesting move to me. Play is becoming a great vehicle for Web developers who want to ease into a Scala future.
The only good idea in Maven is the standardized repository layout, the rest is useless ceremony although much of it is because of retarded J2EE application servers.
Buildr is a welcome improvement, at least there is no XML on sight.
- We have had a fine experience not using Play's ORM support at all -- we have a Plugin that handles transactions for us, and we use non-Play-integrated persistence. It still works great.
- All of the Controller member variables are ThreadLocals, which is how Play handles concurrency. It seems like multi-threaded tests should work just as multi-threaded requests do. I'm curious what problem you're having with parallelizing tests?
SBT is really just Maven without as much XML boilerplate. The syntax might be a little different but it integrates perfectly with Maven repositories. For my SBT projects I pull in a bunch of maven projects and they interact seamlessly. also it took the huge XML configuration file and replaced it with a few lines of configuration code. The only downside to being a different tool is with some of the plugins. I know maven has a much better plugin landscape then SBT does at this point, but SBT does have the ability to have the same functionality.
I like Play overall but two things concern me, both related: 1) they are moving toward Scala and 2) they are adopting sbt.
This looks to me more like a "picking a shiny toy" move than something that is being done to benefit users (Scala is still quite a marginal language and sbt is very controversial, even among Scala enthusiasts).
I'm finding some things are a bit awkward, particularly around templates and routing. Also, the documentation while good is lacking in other parts.
Play is a very prescriptive framework but only on a couple of choices do I have an issue.
The first is about transactions. Each HTTP request is a transaction. Generally I'm fine with this but you need a way to override or control this (IMHO).
Second, I like the mixin approach with controllers (@With(...)). I wish there were something similar with models.
Third, and this is the biggest, it doesn't integrate with Maven, which is something I'm very tempted to fork it for. There's no reason it can't be a Maven plugin/archetype, use Maven for dependencies (directly, rather than tortuous syntax in dependencies.yml), etc. Some guy has an alpha version of something like this already when I last looked.
Fourth, while I don't necessarily mind that controllers are static (as a way of indicating they're stateless it seems), that's actually an issue for parallellizing tests.
Play 2.0 is moving even further away from this and using SBT, which I've never used but heard mixed things about.
I can't speak to many of the specifics of this post (eg I only use Play on Linux).
Whatever (valid) criticisms you can level against Play I'd still far and away prefer to use it over any other Java Web framework I have used or know about.