james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim-Christian Mundt (JIRA)" <server-...@james.apache.org>
Subject [jira] Updated: (IMAP-148) Refactor Store
Date Thu, 03 Jun 2010 21:04:04 GMT

     [ https://issues.apache.org/jira/browse/IMAP-148?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Tim-Christian Mundt updated IMAP-148:

    Attachment: refactorStore1-server.svn.patch

On my way implementing Maildir I first tried to fully understand the Store* structure. During
that process I got some ideas which I'm gonna explain here. Although the changes are in the
IMAP library, the server component needs a little patch for the configuration and one test.
Because I renamed and then changed some files, I couldn't create a working svn diff for the
IMAP component, because it would create a diff between the original file and the changed one,
although it needs to contain the whole content (as the file is basically new). If you know
a way to do this properly, let me know and I'll upload it. The patch for the IMAP component
is a diff between the exports of the current revision (948453) and my working copy generated
with (diff -r -u -N). If you apply it you need to use the -N flag to remove emptied files.
That's enough paperwork, now the real thing:

1) The main change is the introduction of a mapperFactory - injected via spring - for all
three mappers (mailbox, message, subscription). The mappers are basically collections of (pseudo)
static functions, there's no need to create them over and over again, so they are stored in
sessions for reuse. This makes things like per-request-entity-managers much easier to implement
(the respective MailboxSessionEntityManagerFactory is not needed any more).

2) A change that takes a lot of space in the patch but is not really an effort, is to put
all streaming-related stuff in store.mail into a dedicated package. It was just too crowded.

3) I renamed ...mail.*Mailbox to ...mail.*MessageManager to match the model (*Mailbox and
*Message), be consistent with the *MailboxManager and *SubscriptionManager and remove the
irritating duplication of the name *Mailbox. (This renaming is the part which makes the patch

4) The Store* stuff is still a little too much database focused. As a _little_ starting point
I renamed StoreMessageManager.getMailboxRow() to StoreMessageManager.getMailboxEntity() -
there is really more important stuff concerning this issue, that will come later...

5) Moved the model classes for the inmemory store to a .model package according to the other

6) A space here, a blank line there, whatever I stumbled upon, nothing worth mentioning.

I'd be glad to hear your opinion regarding my suggestions. I'm sure this patch cannot be used
as is (if only because rename/move is best done as svn operations rather than a patch). As
said, there are a few more changes I'd like to make, but this is already big enough (most
of the size is due to moving files).

> Refactor Store
> --------------
>                 Key: IMAP-148
>                 URL: https://issues.apache.org/jira/browse/IMAP-148
>             Project: JAMES Imap
>          Issue Type: Task
>          Components: Mailbox
>            Reporter: Tim-Christian Mundt
>         Attachments: refactorStore1-imap.patch, refactorStore1-server.svn.patch
> While the Store stuff is really great to quickly implement new storage back-ends for
James, I think it needs some changes in the structure, some names etc in order to make it
easier to understand. Moreover, even performance may be improved by not instantiating the
same object over and over again. I'll post a suggestion soon...

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org

View raw message