Very little has been seen on this blog and the Naked Objects website for quite a while, so people are beginning to wonder what is happening. If, however, you look at the project pages on SourceForge, our bug database or browse the source code repository you will see that a huge amount is going on. For the last 18 months we have been extremely busy working on Naked Objects version 4.Naked Objects version 4 has be substaintially re-architectedto allow for future expansion while numerous improvement and features have also been added. Previously the framework was targeted specifically at the application developer, who wrote applications that the framework would bring to life. Now we are providing the facilities to extend and enhance the framework as well; so new persistence mechanisms, user interfaces and tools can be created.
The reflector has been practically rewritten to create a more fine grained meta-model of the domain objects that Naked Objects is working with, allowing you to redefine part, or all, of the programming model. This also provides consistency in accessing and manipulating the domain objects both within the framework and in its extensions. The programming model itself has essentially remained the same bar a few minor tweaks and some subtle improvements, so an existing version 3.0 applications should run with minimal work (although, as the package names have been rationalised throughout, the imports will need updating). One significant change is the automatic calling of objectChanged and resolve in the setter and getter methods so that these calls are no longer necessary within your application code. Other minor changes include the correcting of method names such as makePersistent to persist and saved/saving to persisted/persisting.
Part of the move toward greater extensibility is a more componentised structure to the framework, where specific component can be installed at runtime providing different user interfaces, persistence mechanisms and so on. Other projects have now been started that provide new components, such as a JPA based persistor and an RCP viewer.
Other interesting additions and changes include:
- HTTP remoting
- More views – grid, calendar, histogram – and better feedback in the DND viewer with stylable windows, buttons etc
- Runnable in the Naked Objects container, a Web container, or standalone via Jetty
- New Value type allowing you to define new value such as URL, email address, temperature, geocode
- An email service and objects
- Perspectives have been replaced with user profiles, which are more comprehensive and are stored separately from the domain objects
- Headless viewer for applying business logic between POJOs
- Ability to embed headless Naked Objects in other systems
- Junit4 runner for testing Naked Objects applications (utilizing the Headless viewer)
All this hard work is now available as a beta release, while the core release will be made in about a months time, with a target date of the 27th July. Other components will be available as well and will follow their own release schedules.
This latest version is available in two different ways. As before a tarball/zip file can be downloaded from the downloads page on SourceForge and includes the core framework, documentation, examples and a range of plugins including those available from elsewhere. We have also started making the artifacts available using Maven. For this the simplest way to get started is to use the archetypes that we have created to build some template applications. To use this you will need to specify our archetype catalogue as follows:
$ mvn archetype:generate -DarchetypeCatalog=http://nakedobjects.org
Scimpi is a web development framework that builds on the Naked Objects framework (please see my previous blog). This is being updated in line with the development of the underlying framework and a new release will be available around the same time.
Finally I should mention Dan Haywood’s upcoming book “Domain-Driven Design Using Naked Objects”. You can obtain it from the Pragmatic Programmers web site. This talks about how install and use Naked Objects and in a way that follows the style of Domain Driven development. The writing of this book has been instrumental to the further development of Naked Objects and my thanks go to Dan for his hard work in the redesigning and development of this release.And finally, thanks to all of you for your ongoing interest and support.
PS thanks to the anonymous commenter for prompting this update.