The basic architecture behind Wind Platform is demonstrated by the following graphic
OSGi
OSGi is a module system specification maintained by the OSGi Alliance. Perhaps, the most famous implementation of the specification is Equinox, developed by the Eclipse Foudation, it is the base of Eclipse IDE. Applications or components, coming in the form of bundles, can be remotely installed, started, stopped, updated and uninstalled without requiring a reboot; management of Java Classes is specified in detail and each bundle has its own classloader. Application life cycle management (start, stop, install, etc.) is done via APIs. The service registry allows bundles to detect the addition of new services, or the removal of services, and adapt accordingly.
All this makes OSGi a natural choice as base of the platform. New applications can be installed by simple putting a new jar into a directory. Once the application starts it is available to interact and contribute to the already installed ones. If, for some reason, a application is stopped or uninstalled, the others can immediately adapt without any crashes.
Many Application Servers, such as JBoss, Websphere, Virgo, Weblogic, WSO2, begin to support deployment of OSGi Bundles by using a implementation of the spec.
Spring DM
Wind platform is composed by various separated bundles. To make they talk to each other Spring DM manage common Spring Beans (it is the same as you are used to, via XML) and exposes as OSGi Services through an interface. Then we have the same advantages of using Spring to manage our beans and inject the dependencies, but it covers separated bundles. In other words, Spring DM acts like a loose coupling glue. Like Post-it glue.
Wind Platform Bundles
Here is where we've been working for over a year.
Above the OSGi layer lays the Wind Platform Bundles. Those are the componentes responsible of get you application up and running. They are tied together by the Spring DM.
The following is a brief description of each Wind Bundle.
wind-lang
wind-lang is responsible for parsing the Domain Objects and create a in-memory representation of the Domain Model. It defines a grammar using Antlr in order to generate the parser.
wind-app-controller
When a Wind Application is identified, wind-app-controller register and make it available to the other components. Besides that, it controlls the application lifecyle and execution of the business rules.
wind-common
Common and useful classes.
wind-faces
wind-faces is a graphic user interface built on top of Eclipse RAP. It is notified by wind-app-controller when something change in the application registry (this can be a Domain Object or an Application added, removed or updated) and update de view.
wind-lib
Common jars used by the platform, antlr, hibernate, etc..
Provided Bundles
The difference between a Wind Platform Bundle and a Provided Bundle is that the second one is built using the Wind tecnology, specifing Domain Objects and Business Rules. Currently there is only one provided bundle. Wind Preferences, is responsible for giving the user a UI for setting up common preferences.
User Bundles (Wind Applications)
This is the applications created by the user that runs on the platform and uses all it goodies. User Bundles, or so called Wind Applications, are OSGified bundles containing Domain Objects and Business Rules.
Every topic discussed here will be presented separately with more details in upcoming posts