You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Stefano Bagnara <ap...@bago.org> on 2006/11/07 14:37:48 UTC

Re: BasicMailboxSession (aka MessageRepository)

I just noticed I never replied to this.
+1 to everything.

The plan fits perfectly in our step-by-step "revolution by evolution".

I see you already created a new branch to work on this! Cool!

Stefano

Joachim Draeger wrote:
> Stefano Bagnara schrieb:
>>
>> db / dbfile / file are already logical mount points.
>> I don't like it too much because we use this logical mountpoints for 
>> different contents (mailrepository/spoolrepository/generic db access).
>>
>> I think we should simply rewrite our repository store to provide a 
>> single url type for every type of object available, like a virtual 
>> file system.
>>
>> What I expect is something like spool://some/path, message://some/path.
>> Then in the store we really define what specific implementation we 
>> want to mount in every single mount point.
>>
>> I think this would be something in the middle between what we 
>> currently have and what you try to achieve with the "#some.path" 
>> logical name.
> We are probably thinking of something very similar. :-)
>> I also like more the use of the "#some.path" instead of 
>> "message://some/path" because I think this make less confusion not 
>> using something similar to real file system paths.
> the #mail.joe.INBOX or #users.joe.INBOX is a commonly used 
> quasi-standard for IMAP. It's called namespaces there. Theoretical 
> naming schemes could be freely defined when using IMAP, but I'm not sure 
> whether a URL like message://some/path  will work. (A slash as a 
> hierarchy delimiter is okay)
> Anyway IMO we should follow a commonly used IMAP standard here. People 
> with IMAP experience (probably many mail-server administrators) will 
> feel at once familiar.
> We should avoid translating a custom James virtual naming scheme for 
> IMAP access..
>> <messagestore class="VirtualStore">
>>   <repository mountpoint="#some" class="TorqueMessageRepository">
>>     <tablename>foo</tablename>
>>   </repository>
>>   <repository mountpoint="#other" class="FileMessageRepository">
>>     <filepath>%{app.root}/var/mount</filepath>
>>   </repository>
>>   <!-- this is even more advanced because "nested" would be a file 
>> repository with the torque repository parent -->
>>   <repository mountpoint="#some.nested" class="FileMessageRepository">
>>     <filepath>%{app.root}/var/nested</filepath>
>>   </repository>
>> </messagestore>
>>
>> or alternatively something like:
>>
>> <messagestore class="VirtualStore">
>>   <repository mountpoint="#some" class="VirtualStore>
>>     <!-- default repository for this virtual store -->
>>     <repository class="TorqueMessageRepository">
>>       <tablename>foo</tablename>
>>     </repository>
>>     <repository mountpoint="nested" class="FileMessageRepository">
>>       <filepath>%{app.root}/var/nested</filepath>
>>     </repository>
>>   </repository>
>>   <repository mountpoint="#other" class="FileMessageRepository">
>>     <filepath>%{app.root}/var/mount</filepath>
>>   </repository>
>> </messagestore>
> I would prefer the first example. For MailboxManager I've decided to use 
> a "flat hierarchy". Until it is really needed mailbox names (that 
> consist of a logical path) are just mailbox names and treated hierarchy 
> agnostic.
> Most of the times no hierarchy is needed and would be just overhead.
>> Every message repository simply have to implement a method where the 
>> repository itself is created with a parameter that indicate the 
>> relative path between the mountpoint and the real path requested: as 
>> an example if I ask #some.nested.foo.bar the VirtualStore 
>> implementation will be called with #some.nested.foo.bar. From an 
>> internal lookup it will find #some.nested is the most specific mount 
>> point and will delegate to FileMessageRepository that will be called 
>> with ".foo.bar" as a detail on the specific repository requested.
>>
>> Does this make sense?
> This is exactly what I have in mind.
> 
>> Now that I wrote all of this, I understand that probably this is what 
>> you are proposing, with the difference that you probably would have 
>> used something like this:
>>
>> <messagestore class="VirtualStore">
>>   <repository mountpoint="#some" repositoryUrl="db://maildb/foo" />
>>   <repository mountpoint="#other" repositoryUrl="file://var/mount" />
>>   <repository mountpoint="#some.nested" 
>> repositoryUrl="file://var/nested" />
>> </messagestore>
>>
>> This way you would still use the current mailstore to retrieve each 
>> repository. It is simply one more layer (that I tried to merge to the 
>> current one)
> This would be my first approach because I'm going to try to be backward 
> compatible.This way we wouldn't need to change current mailstore.
> 
>> Did I understand your proposal? Is my "simplified proposal" acceptable?
> Yes I think we agree. Your merged configuration proposal will be perfect 
> in a longer term.
> Maybe we could even avoid the intermediate step #some -> url:// but I 
> haven't done any further investigations in that direction.
>> If all of this is ok, how would you manage the retrieval of a "child" 
>> repository? Adding ".child" to the logical name and retrieving it from 
>> the store? Or alternatively adding a getChild("child") method to the 
>> repository (mailboxsession) interface?
> For the current implementation I decided to use the "string 
> concatenation" way. The mailboxes will be completely hierarchy agnostic. 
> I'm quite happy with that decision so far.
> This way the mailbox does not need a connection to the store and there 
> is a central point where the mapping is done.
> 
> There are even more good reasons:
> * IMAP does not require to fetch child or parent mailboxes
> * There is no efficient possibility to store hierarchies into a RDBMS
> 
> Joachim



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