You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-dev@james.apache.org by Apache Wiki <wi...@apache.org> on 2007/02/04 13:29:19 UTC
[James Wiki] Update of "Development/Modularisation" by RobertBurrellDonkin
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "James Wiki" for change notification.
The following page has been changed by RobertBurrellDonkin:
http://wiki.apache.org/james/Development/Modularisation
The comment on the change is:
Sketched out where I see modularisation going
New page:
= Modularisation =
[[TableOfContents(4)]]
== Why Modularize? ==
* Improved separation of concerns
* Learning code less steep for developers interested in a subset of the total functionality
* Enables different modules to depend on different versions of Java
* Allows development of experimental modules on trunk. This:
* Encourages alternative implementations
* Enables branching per module
* Simplifies multiple deployment targets
== Modules Types ==
Dependencies between modules will be layered in the obvious way. For example:
attachment::dependencies.png
=== Build Modules ===
Contains code for James modular build
=== Deployment Modules ===
Contains code required to deploy James in various container environments
=== Function Modules ===
Factors out function from container specific implementations
=== Library Modules ===
Factor out common library code reused by functional modules into library modules
=== API Module ===
Single module containing the core James API
= Execution =
== Stage One ==
=== Phase 1 ===
Make space for modules within james server trunk
* server/trunk -> server/trunk/pheonix
=== Phase 2 ===
Top level build
* create build.xml which delegates to pheonix/build.xml
=== Phase 3 ===
Upgrade build:
* upgrade to ant 1.7 (the new features are *really* good)
* create stage subdirectory which is local only
* create buildtasks module to host build macros and ant tasks for
module builds
=== Phase 4 ===
Create empty base module top to contain API interfaces
* create macros and tasks to support modular build
* create build-modules.xml to support common structure
* base builds copies artifacts into stage subdirectory
* pheonix build copies artifacts locally from stage
* create macros to allow easy generation of new modules