Stefano Bagnara schrieb:
> Joachim Draeger wrote:
>> Am Samstag, den 28.10.2006, 18:07 +0100 schrieb Danny Angus:
>>> On 10/28/06, Joachim Draeger <[EMAIL PROTECTED]> wrote:
>>>> Maybe we could use a logical #system name space here like #system.spam
>>>> or #system.address-error.
>>>> For example this could be mapped like: #system.* -> file:/var/mail/*
>>> Yuk, whats wrong with file:/var/mail if thats really where you want
>>> to put it??
>>
>> Why does linux mount different filesystems into one logical root
>> filesystem?
>>
>> (The idea was #system.spam becomes translated to file:/var/mail/spam)
>>
>> Benefits of logical names:
>>
>> * dealing with hierarchy, Quota and ACLs
>> * they could be accessed in a programmatic way by IMAP :-)
>> * redundancy - if you have many ToRepository that all resist under
>>    file:/var/mail and you switch to db you have to modify all the Urls
>> * safety - custom code can modify only the logical name 
>
> 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.

+1 That sounds really intressting .. I had something simalar in mind ,
but never thought enough about it to make some clear statements.
>
> 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.
>
> 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.
>
> This idea already appeared here:
> http://wiki.apache.org/james/JamesV3/Plans ("Message repository
> directory structure")
>
> And maybe I already talked about this in past.
>
> <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>
>
> 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?
> Imho this is much more easy than what we have now, and even more
> powerful. Today if you want to move from file to db repositories you
> have to change a lot of configurations. After this new feature the
> change would need a single edit in the config file.
Yes thats make sense.. of course.. And it whould maybe really simplify
configuration of james..
>
> 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)
>
> Did I understand your proposal? Is my "simplified proposal" acceptable?
>
> 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?
>
> Stefano
>
>

bye
Norman



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to