Vieles das groß ist könnte auch klein sein.
Dieses Gebirge könnte ein Stein sein,
vieles das weit ist könnte so nah sein,
vieles ist Einsicht, wieviel ist Anschein?
(Xavier Naidoo)
To have a common understanding of the architecture and the principles of application layering, it is important to clarify some terms before we start going into more detail. We often talk about modules, bundles or components in different contexts. Regarding the architecture of OpenWMS.org we want to distinguish between these terms and exactly define what each of these notions means.
Bundle (techn.): Our definition of a Bundle is of completely technical nature and defines in particular an OSGi bundle. This is naturally spoken a jar file which contains Java classes and can be deployed and started in an OSGi container. Typically each OSGi bundle includes a MANIFEST.MF file with mandatory OSGi header entries - otherwise it would be a simple Java jar file.
Module (log.) A Module is per definition a collection of Bundles and other artifacts, to combine related parts of an Application that belong together logically. A Module is not an artifact that exists physically, it is more or less a definition to group artifacts. The Core Framework could be seen as a Module as well as the TMS or the WMS Module, or something else you define as a logical group of items.
Flex Module (techn.) This kind of artifact is specific to the Flex Framework. Adobe Flex defines a Module as an ActionScript or MXML component that implements the mx.modules.IModule interface. A Flex Module can't run solely and needs to be loaded by the main Flex Application. This is the concept of Adobe Flex modularization and shall be mentioned here for clarification. Each of our delivered Modules includes a Flex Module - so far it needs to have an UI part.
Flex Application (techn.) The Flex Application is the main UI application that may exist only once and can load other Flex fragments like Flex Modules or Flex Libraries. The Flex Application is deployed within a Bundle (OSGi Web Bundle), packaged together with other Flex artifacts.
Flex Library (techn.) A Flex Library is a collection of ActionScript or MXML components that is compiled into the Flex Application or into Flex Modules. Flex Libraries can also be linked at runtime instead of compiling them statically. Doing it that way decreases the application size but slowes down the application startup time.
Application (log.) The term Application implies the sum of artifacts be runnable as a single logical unit that can be deployed in the runtime environment. Beside our own artifacts, 3rd party libraries belong to the Application as well. The term Application does not suggest that it is a single technical deployment unit (like a WAR or EAR file), it is just a definition for a group of artifacts.