Red Hat
Jul 12, 2012
by QMX

…aaaaand aerogear-controller-1.0.0.Alpha is out!

http://www.flickr.com/photos/freefoto/5982549938/sizes/n/in/photostream/

After talking and thinking about how to back mobile apps with java, it’s time to start moving towards making thoughts concrete and shipping it!

aerogear-controller?

aerogear-controller is a really thin and lightweight mvc controller, inspired by sinatra and ruby on rails ideas, but at the same time fully leveraging all the power of CDI on MVC push style applications (action based).

thin and lightweight?

Back to the days before the Struts 1.x era, it was pretty common for a java web developer to implement some kind of MVC, leveraging the Front Controller pattern.

front controller

Struts took a big slice of this market, providing something that the average dev knew and could get up to speed quickly. Even the errors like the all blank result were pretty known, the struts-config.xml file had everything you needed, etc.

The idea was pretty simple, as it should be. Tons of new MVC frameworks entered the market, and fostered innovation on this area. A little bit after this, component-based frameworks like the JSF we have today started to fight for another slice of the Web Java Developer’s mindset.

What have we gained with all this movement around this simple ideas? We’ve got a ton of interesting features, like validation, automatic parameter conversion, view binding, and much more - but we’ve lost something that was really golden back in the ol’ days: simplicity.

Do I need to say that the XML-loaded struts era is over? Let’s focus on what was good, and forget the rest :)

what is the aerogear-controller target then?

The minimum bare-bones approach to have a MVC controller, backed and extensible via CDI.

what aerogear-controller is not targeting?

I really think that the true power lies on having a very lean core and fullfiling the related needs via CDI. You want to have implicit parameter validation/conversion like JSF has? Write a CDI plugin for that! Want to have restful endpoints with hypermedia? Use JAX-RS!

how do I use it?

Check our demo application using it :)

…I want feature X!

Let’s talk on #aerogear about how to make a CDI extension for it!

aerogear-controller proposed Roadmap

1.0.0.Beta:

  • full support for path parameters /{technology}/jobs/in/{city}/

  • extension model, with examples- * how to build my own CDI extension * I want X, how do I do it?

    • how to add more view renderers
    • how to configure view dispatchers (automatic mapping between controller and view files)
  • security features * DSL secured route support (role-based), via DeltaSpike?

          route().from("/admin").roles("manager", "director")...

1.0.0.CR:

  • add more view renderers from ruby world

    • aerogear-haml final
    • aerogear-tilt beta (multiple template support, with markdown, erubis, etc)
  • have a clear defined roadmap for RESTEasy integration

    • ideally being able to define rest endpoints using the programmatic DSL route API (this requires changes in RESTEasy)
  • easy security setup (a la devise)

  • aerogear-controller forge plugin?

1.0.0.Final

  • server-side JS rendering support (handlebars & friends)

  • cover scenarios of progressive enhancement (twitter example)

    • a permalink-_like_ request gets rendered server-side
    • all other interactions go via AJAX calls + pushState
    • reusing the same views both on client and server

closing

I want to hear from you! What do you think about it? Ideas for the roadmap? Nothing here is set on stone!