Metawidget: 'finding the best way to wire up existing technologies.'
What's New in Metawidget 1.10?
The Metawidget user interface generation tool recently reached its 1.10 release. In this interview, JAXenter speaks to Richard Kennard, who initiated the project, on what's new in the 1.10 release.
JAXenter: Metawidget populates itself at runtime with UI components. How does it achieve this without introducing new technologies?
Richard Kennard: The basic premise is that much of the way we, as developers, currently 'wire up' our existing technologies is pre-determined. So it is open to automation. For example if you have a JPA entity with a property of type String, you're going to want something like a JSF <h:inputText />. And if your property has a @Column(nullable = false), you're probably going to want <h:inputText required="true"/>.
So we're not about introducing new technologies so much as finding the best way to wire up *existing* technologies. Of course there are lots of subtle variations and preferences in this: maybe you prefer RichFaces components; maybe you like GWT; maybe you want to use Groovy; maybe your entity definitions come from a database. And so on.
Metawidget tackles this head on. We've spent three years doing open ended interviews, adoption studies and research to determine the best architecture of plug-in points to accommodate a broad range of front-end and back-end technologies. It was important to us there was strong evidence and academically robust techniques behind our decisions. We've published a detailed article on all that, if people are interested.
We think we've found a pretty good balance. Metawidget itself is
a single JAR, with
no dependencies. Instead it adapts to the environment it is placed in and the technologies around it. It can wire them up automatically, saving you a lot
of boilerplate code (here is an example.)
JAXenter: How does the recently-released Metawidget 1.10, build on the ICEfaces support? What else is new in Metawidget 1.10?
Richard Kennard: We try and drive Metawidget based on what we hear back from the community. There's been interest recently in better ICEfaces support, and PrimeFaces support, so that's what 1.10 ended up being about. There were also the usual bug fixes, performance enhancements and documentation improvements - we try to fit things in to a 12 week cycle (inspiration here.)
JAXenter: What's planned for future releases of Metawidget?
Richard Kennard: Our current focus is
supporting third-party projects that are integrating Metawidget.
Projects like JBoss Seam Forge, Activiti BPM and Adam Bien's Java EE Patterns.
We are also migrating our build system to Maven, to help the large number of different technologies and dependencies Metawidget has to manage.
Future enhancements that have been suggested by the community
include Flex support,
Wicket support, and ZK support. I'm also working with the Apache Isis team to try and get some convergence in this field: we'd love Object Interface Mapping (OIM) to be standardised one day, just like JPA standardised Object Relational Mapping (ORM).