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