The goal of this specification is to define an API for common behavior shared by many desktop applications. Most applications require the following features

  • dependency injection via JSR330.
  • common application structure.
  • application life-cycle.
  • localized resources.
  • resource injection.
  • localized configuration.
  • decouple state from UI (binding).
  • persistence session state (preferences).
  • action management.
  • component life-cycle.
  • light-weight event bus.
  • honor threading concerns (specific to UI toolkit).
  • application extensibility via plugins (implies modularity).

There are a good number of framework and platforms that deliver these features in their own way. Deciding a standard API for all of them will make it easier to get started with new projects and fix existing ones. Also, with the rise of Embedded Java and IoT it makes sense to share codebases between desktop and embedded projects.

A driving goal behind the JSR is to provide a good abstraction over common needs of an application regardless of the toolkit of choice. For example this JSR must deliver an abstraction on how to access the UI thread (which ever it may be) and a mechanism for initializing and managing a View independent of the widget set.

The set of APIs proposed by this JSR will sit on top of any UI toolkit without requiring a bridge from a toolkit in particular; that is, none of the target UI toolkits (Swing, JavaFX, SWT) need to implement new APIs. If for some reason a bridge is required it will be provided from the RI side.