Welcome to Induction
Induction is a powerful, high performance, Java MVC web application framework. Induction supports dynamic application reloading, type-based dependency injection and dependency analysis between models, views and controllers. The goal of Induction is to simplify the task of building complex, high performance, maintainable web applications using Java™ technology.
Induction has an extensible architecture including support for controller, view and redirect resolvers, plug-in configuration loaders and plug-in templating engines. Induction belongs to the class of Java web application frameworks usually referred to as request-based frameworks. Induction is compatible from JDK 1.4 to JDK 1.6 (Java 6).
Induction is a new and compelling alternative to other web application frameworks including Struts 2 and Spring MVC. Induction is open source software released under the commercial friendly Apache License 2.0.
New release! Induction: v1.4.0b (Jan 2010)
This release introduces important support for error handlers. Also new in this release in automatic high-performance buffering of all template output (independent of templating engine). Following is summary of the salient new features:
- New support for error handlers
- New @<error-to-class-map>@ directive in config XML to configure error handlers
- ControllerResolver interface has a new resolve() method to to support resolving an exception to a controller
- New high-performance template output buffering
- The output of a template is sent to the client only if the template completes without errors.
- Since now nothing is written to the client for a template that errors, this means:
- A user no longer sees the messy stack trace generated by most templating engines
- The error handler you write, now has more options, such as returning a redirect or error code to the client (since no writing was started on the response)
- The implementation (re)uses StringWriters from a pool to conserve memory and improve performance
- Improvements in reporting of errors that occur during controller/view execution
Induction: v1.3.0b (Nov 2009)
The most powerful MVC framework for Java has raised the bar again. Induction v1.3.0b introduces support for request interceptors with unsurpassed power and elegance and further expands the capabilities of the unrivaled power of its short URL resolvers. New features in this release:
- Powerful new support for request interceptors. Request interceptors are backed by the same zero-configuration type-based dependency injection support currently available in Induction controllers.
- The ShortURL resolvers are enhanced to support a new <class-replace> directive in the <url-to-class-map> section of the Induction configuration. This directive allows a character in a URL that is not legal in a Java class name to be replaced with a character that is legal in a Java class. For example, this directive can be used to map a hypen in URL to, say, an underscore in a controller or views class name. Induction is the only MVC framework to date that supports mapping a hyphenated URL to a controller/view even when the mappings are established automatically via dynamic controller/view discovery.
- Fixes 2 minor bugs in v1.2.0b (details of bug fixes on the downloads page).
Induction: v1.2.0b (Jun 2009)
Induction v1.2.0b has major new features and several enhancements. A summary of the changes follow:
- New support for direct mapping URLs to views. This is a whole new subsystem which means there is now a new view resolver in addition to the already existing controller and redirect resolvers.
- New support for controllers to return a view type in addition to the previous support for returning a view instance. If a view type is returned, Induction will instantiate the view type (with dependency injection on the view constructor parameters)
- The previous simplistic default resolver implementation are now replaced with powerful, production-quality, regex-driven resolvers. The new resolvers "discover" controllers and views (using a configured regex pattern) and are capable of mapping short URLs to controller and view classes straight out of the box (for example it can easily and efficiently resolve /login.action to class named, say, myapp.security.LoginController). The new resolvers are configured using new three new configuration sections in the Induction configuration XML. The sections are <controller-mapping>, <view-mapping> and <redirect-mapping>.
- New <include-config ...> directive in the Induction configuration XML to provide flexibility in organizing configuration data.
- New <init-on-startup ...> directive to support initializing application scope models on startup.
- And other enhancements to expand access to system level objects (such as the templating engine and classloader) in controllers and views for use by specialized applications.
- Almost every page of the project website updated to reflect features new in 1.2.0b. There is a new tutorial explaining the powerful built-in resolvers (new in 1.2.0b) and a new Quick Reference section.
Why a new framework?
There is already a number of Java web application frameworks, so why another Java web application framework? Induction was created because we believe that the following are important:
- It should not be necessary to redeploy an application to a Servlet container every time Java code is changed. It should be possible to simply recompile the changed source (using your favorite IDE) and simply reload the respective web page.
- Maintaining large web applications requires the ability to analyze the dependencies between models, views and controllers
- It should be easy to leverage the power of dependency injection in an application
- An application should not be cluttered by superfluous XML configuration files.
- Handling file uploads should be so simple to the point of being unremarkable (this would be an unremarked point, expect for how complex some frameworks seem to make it)
A Quick Overview of Induction
General
- Runtime class reloading for controllers, views, models, and your classes (no more redeploy/restart)
- Ability to analyze dependencies between controllers, views and models using basic java dependency analysis tools in any IDE (Eclipse, IDEA, any IDE that supports Java dependency analysis)
- Extensible architecture
- Pluggable configuration loader
- Pluggable URL to controller resolver
- Pluggable redirect request to URL resolver
- Pluggable templating engines (initial plugin for Freemarker, plugins for other templating engines based on community feedback)
Controllers
- Parameter injection: a model object is accessible in a controller by simply declaring a parameter of the model object's type in the controller's handler method
- Sophisticated form parameter processing, making it easy to use list and map HTML form variables
- Handling an uploaded file is as simple as handling a string input on a form
- If the controller returns an instance of view interface or an instance of the Redirect class, the value is then accordingly processed by Induction
Views
- Integrated support for templating engines (ships with support for Freemarker)
- Each template view is represented by a class that encapsulates all the data the template depends on, enabling powerful Java based dependency analysis when template changes need to be made to text-based HTML templates
Models
- Declarative control of the lifecycle of model objects
- Dependency injection into user-provided model constructors
- Dependency injection into user-provided model factory methods
- Model-to-model dependency injection with cycle detection
For further discussion of how Induction promotes the Model-View-Controller (MVC) paradigm to web application development read the Model-View-Controller Overview
Where Can I Download Induction?
You can download the latest release of Induction on the downloads page. We recommend the Getting Started Tutorial to getting you up and running quickly. We think you are going to have enjoyable journey.
Who Is Responsible For Induction Development?
Induction is under active development by Acciente with the goal of providing a powerful MVC web application framework for its customers and for the community at large. Acciente is committed to the long-term success of Induction. Acciente is also committed to the use of Induction by commercial organizations.
How Is Induction Licensed?
Induction is licensed by Acciente under the commercial friendly Apache License 2.0. The decision to release Induction under the Apache License 2.0 was motivated by the numerous high quality open source software projects available under commercial friendly licenses from the Apache Software Foundation, other organizations and individuals. At Acciente we appreciate the generosity of these projects and would like to contribute in the same spirit.
What is the status of Induction Development?
The planning of the Induction project started in late 2007, several Java web application frameworks were reviewed to see if the development of Induction would be justified. After this initial research, over a period of about 2 months, it was decided that the development investment in Induction would be justified.
Design and implementation work on Induction started in February 2008. Early work focused on the reloading classloader (also released as open source), a key part of Induction. After several months of very careful work, the first beta version was released to private beta testing sites in May 2008. General availability of Induction to the public was announced in June 2008.
Acciente takes the design, stability and performance of Induction very seriously. We use Induction as the preferred web application framework for our customers.
About Acciente
Acciente, LLC is a software company located in Scottsdale, Arizona specializing in systems architecture and software design for medium to large scale software projects. You can learn more about Acciente on our about us page.
