Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-412

Increase James component granularity / flexibility

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.3.0
    • Fix Version/s: 2.3.0
    • Component/s: James Core
    • Labels:
      None

      Description

      I'm planning a few changes in the main blocks and cleaning the assembly.

      Here are a few example:

      1) Remove unused dependecy from the current assembly: e.g.
      org.apache.james.services.MailStore from SMTPServer/RemoteManager/POP3Server,
      org.apache.james.services.JamesConnectionManager from James, org.apache.avalon.cornerstone.services.threads.ThreadManager from JamesSpoolManager.

      2) Deprecate/Remove unused methods from common interfaces: e.g. MailServer provides 4 sendMails methods but only 1 is used from SMTPHandler and MessageProcessor. The other 3 methods are always accessed via the MailetContext interface (provided by the same component: James).

      3) Remove the inboundSpool concept from the MailStore by promoting the "inbound" SpoolRepository to a toplevel block that James and JamesSpoolManager will depend on. 2 advantages: possibility to implement multiple spoolmanagers with multiple spoolrepositories, limit the interdependencies of components (the Spoolmanager does not need the full MailStore but only the inbound spoolrepository).

      4) Promote MailetLoader and MatcherLoader to block components: this allow us to make them easily configurable and allow to limit the knowledge needed by the SpoolManager (the spoolmanager itself does not need the MailetContext knowledge). To do that we need to change the Loaders to be Serviceable and to remove the MailetContext parameter from the load calls.

      5) More to come....

      I would like to know if any committer is against this kind of changes.

      The number 3, for example, will need minor config.xml changes (the inbound spool conf moved outside the spoolmanager conf).

      The others will be transparent for users that didn't change the assembly (MOST users).

      Including internal "API" changes (as for number 2) is a point in favor of 3.0 instead 2.3.0 for the next release.

      I will link the related commits to this issue, and comment the progress here.

        Activity

        Hide
        bago Stefano Bagnara added a comment -

        5) Change the glue between fetchmail/smtpserver and james from MailServer to SpoolRepository. This would allow us to add multiple smtpserver and multiple fetchmail in a single james environment (after we implement the 3 too)

        Show
        bago Stefano Bagnara added a comment - 5) Change the glue between fetchmail/smtpserver and james from MailServer to SpoolRepository. This would allow us to add multiple smtpserver and multiple fetchmail in a single james environment (after we implement the 3 too)
        Hide
        bago Stefano Bagnara added a comment -

        When 3 is done we no more need the MailStore interface and we can change the dependencies from MailStore to cornerstore.store.Store as the only difference is the inboundSpool that we removed in 3.

        Show
        bago Stefano Bagnara added a comment - When 3 is done we no more need the MailStore interface and we can change the dependencies from MailStore to cornerstore.store.Store as the only difference is the inboundSpool that we removed in 3.
        Hide
        bago Stefano Bagnara added a comment -

        7) Reduce visibility from UserStore to "LocalUsers" UsersRepository when applicable (SMTPServer, POP3Server, FetchMail, NNTPServer).

        Show
        bago Stefano Bagnara added a comment - 7) Reduce visibility from UserStore to "LocalUsers" UsersRepository when applicable (SMTPServer, POP3Server, FetchMail, NNTPServer).
        Hide
        danny@apache.org Danny Angus added a comment -

        Closing issue fixed in released version.

        Show
        danny@apache.org Danny Angus added a comment - Closing issue fixed in released version.

          People

          • Assignee:
            bago Stefano Bagnara
            Reporter:
            bago Stefano Bagnara
          • Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development