views:

323

answers:

5

If you were to start a brand new java project today with the following requirements:

  • high scale (20k + users)

  • you want to use something that is fairly mature (not changing dramatically) & wont be dead technology in 3 years

  • you want something very productive (no server restarts in dev, save the code and its automatically compiled and deployed), productivity and time to market are key.

  • some amount of ajax on front end

  • no scripting language, jruby, groovy, php etc , has to be java

  • has to support i8n

What stack would you use & Why? (when I say stack, I mean, everything soup to nuts, so app server, mvc framework, bean framework, ORM framework, javascript framework etc...)

+2  A: 

for a traditional java webapp, for your goals, I would go with stripes as an MVC framework as it's very easy to set up and get running, and it plays well with spring and hibernate, and has good ajax support.

in terms of productivity, eclipse dynamic web projects should solve your compile/deploy issues. I've always used it with tomcat, but it should work with jBoss also.

I personally would use tomcat, stripes (mvc), hibernate (orm), spring (if necessary), jQuery (js), and eclipse for development.

Paul Sanwald
Is Stripes popular?
Adam
+9  A: 
Pascal Thivent
er... what exactly is Arquillian? Its webpage isn't exactly clear about that, and the Overview link takes me back to the main JBoss page.
R. Bemrose
@R.Bemrose: It's a test harness for integration tests. I've updated the link to the project site (and added more links).
Pascal Thivent
+2  A: 
  • Tapestry 5 & JQuery (Tapestry 5 has been designed to be future proof, does not require server restart and is super fast to develop with - components are lean- it also scales well)
  • Spring for bean configuration (Tapestry supports annotation based Spring bean configuration)
  • Hand crafted JDBC for relational model (because I don't like adding yet another code layer for ORM, and hand crafted can be better tuned)
  • Lucene for indexes or data that does not need to be queried in a relational manner
  • Tomcat (or Jetty if embedded) - both are reliable and well tested servers
Joel
I've heard that EJB3/JPA2 isn't that bad on the ORM front. Then again, EJB3/JPA2 are interfaces, not implementations.
R. Bemrose
Pretty much the same answer, though I would definitely use Querydsl (http://source.mysema.com/display/querydsl/Querydsl) for query construction.
ponzao
A: 

Scala and Spring

CodeToGlory
A: 

I would go for:

  • Oracle 11g database.
  • JPA 2.0 ORM with EclipseLink.
  • Glassfish v3 (at least until Oracle WebLogic becomes JEE 6 compliant), providing any message queues, DB connection pools or whatever JCA resources you might need.

I wouldn't go for JSF... JSF 2.0 is much better than JSF 1.0, but still stinks in some areas. You will definitely hit a wall in scenarios which 'go against the JSF way' (or rather weren't catered for properly in JSF).

I would go for Spring 3.0 framework and Spring MVC with Spring Web Flow if you have some complex navigation you wish to have control on. This will also give you the option to have the web part on a separate server (such as Tomcat) if you wish, and invoke the EJBs hosted on Glassfish through IIOP, thus scaling up.

If you wish to have full control on the design of your pages, (maybe you intend to employ a web designer to maintain the look and feel) I would go for a template engine such as Velocity, which integrates nicely with Spring MVC and is designer friendly with most tools such as Dreamweaver.

Finally, JQuery to use some ready made Javascript widgets like calendar controls, popups, user messages and transitions.

jbx
Oracle? There went the budget...
Thorbjørn Ravn Andersen
Could you elaborate on the "JSF 2.0 still stinks" comment?
Thorbjørn Ravn Andersen
Well no budgetary limitations were specified. The question was more oriented towards reliability and agility. An oracle standard edition should do the trick without going too overboard with budget and Real Application Clustering comes out of the box. Otherwise something like Postgresql or Mysql would do, but their clustering solutions are not that strong, and in reality if you want to have proper support there are still costs. All are good databases though.
jbx
"JSF 2.0 still stinks" because:a) JSF is not designer friendly because it expects them to learn tags and the JSF lifecycle. Designers typically use WYSIWYG tools like Dreamweaver and Photoshop.b) With JSF you're at the mercy of the components available. Once you need a slightly different behaviour it becomes a nightmare.c) JSF doesn't support conditions or loops because it goes 'against its model', which does not always suffice. JSTL bridges some of the gap, but their separate lifecycles introduce problems (try a JSTL loop to use an array of strings for the titles of a JSF tabview).
jbx