Noel,
(1st.. that mail was a brain dump of some thoughts I've been pulling
together for a few weeks now, not a clearly defined idea)

> Matchers seem to me to be well-named, except that they can have
> effect, not
> just match.  The mailet tag
> <mailet match="matcher" class="mailet" />
> to me is similar to an IF statement.  It produces its primary effect by
> returning a filtered recipient list, although it can have side-effects.


I believe that matchers should be renamed interceptors and the config
changed to look more like this example:
<mailet>
        <interceptor>
                <class>my.package.fooInterceptor</class>
                <condition>domain=me.com</condition>
                <otherparam>somevalue</otherparam>
        <interceptor>
        <class>my.package.fooMailet</class>
        <params>
                <somename>somevalue</somename>
        </params>
</mailet>

IMO not only does that give us the ability to specify limitless parameters
for interceptors, but it also clearly indicates that this mailet will
process mail intercepted by the interceptor based upon its [the
interceptors] own config, whether or not there is any kind of matching
operation carried out.

For instance the interceptor might poll a remote device or query a database
and handle the mail based upon the results. That is conditional
interception, but the condition is not in anyway a matching operation on the
mail being processed.

> > use mail headers ...
>
> How does this differ from what is already provided by the
> MimeMessage.setHeader() method?

Technically not, but conceptually if we provide attribute setters and
getters in the interface, and in the implementation use the mailheaders we
are not compelling mailet container writers to use mail headers. We are,
however, providing a "cheap" easy to implement route which is backwards
compatible with existing repositorys.

>
> > I also wondered if we should support ajp13
>
> Do we really need Yet Another Transport Protocol?

Depends, shoot-me-down-in-flames-if-you-like but one use-case I considered
was this..

"A guy has an application which generates content based upon a URL request,
in order to add interactive email functionality he can use ajp13 to recieve
requests for content from a mailet which marshals parameters in a recieved
mail into a request, and creates a reply based on the response of the webapp
server"

And the other way round

"A webbapp marshalls parameters from the user, and other sources, into a
URL, the ajp13 request causes this to be converted into a Mail object and
injected into James' spool. The response would indicate the success of this
operation"

The idea of using ajp for this is that it exists already and allows non-java
applications to make or respond to these requests, and recieve the
responses.
It allows the mail server and the content server to be remote from one
another, and avoids the limitations of the mail protocols, which dont
provide very sophisticated requests and responses.


> As for the Servlet API, where do you see the mapping?
See Serge's reply too.
I must admit that having taken a closer look at the newest servlet API that
it would appear that sun have kind of backed off on the idea that it should
be a generic API upon which to build processing blocks for _any_kind_ of
server application, and roped their steer to the saddle of http.
Thus I unreservedly withdraw that suggestion. (football and jubilee induced
madness must be creeping in ;-)


> I'd be more likely to view Mailets perhaps as filters (with a null
> response?) than servlets.

I dont see why the LinerProcessor call to mailet.service(Mail mail)
shouldn't be regarded as a request/response, with either a null response, or
a Mail response which would be the original mail modified by the processing,
and ready for the next step in the processor.

Nor why the SpoolManager in its role as the manager of the LinearProcessors
shouldn't like wise see the call to LinearProcessor.service(MailImpl mail)
as an identical request/response

In fact I believe that it should be possible to have interchangeable process
ors and single mailets such that a processor can contain mailets or other
processors, but I need to work out how the spool would spool & de-spool part
processed messages (in response to callbacks from processors/mailets?).

> I'm not convinced that it is necessary to change the Mailet API to a
> subclass of Servlet API in order to decouple the mailet, matcher,
> processor
> package from the James server code.


This was my bad communication, the de-coupling I believe we need is *not* of
the code, but to a certain extent of the Mailet API as a project, so that we
can have asynchronous progress on james and mailet.

To that end it would be nice to have the Mailet SDK contain a complete
simple implementation which could be used by developers working on the
mailet API, mailet developers, and by users who aspire to add a simple
mailet context to their products.

One benefit of this would hopefully be to deliver a complete, internally
consisistent and "sealed" mailet container that could be used to add mailet
processing to any of James' protocols because it would be capable of
performing autonomously whilst being ignorant of specific implemetations.
(Sun these days deliver complete, or extensive, implementations of a number
of API's in those API's swing's look and feel, and Java Mail are two
examples where you can write a lot of your own implementation, or just use
the one provided)

Ideally if a mail spool manager instantiated this mailet container, it would
have to implement MailetContext, create a Configuration, and nothing else.

And finally a package of mailets and interceptors, with a configuration file
should be able to be unpacked by the container and the processors created
from the resulting files, thus de-coupling mailets and their dependancies
from both the Mailet API and from the mail application platform hosting
them. (of course there still needs to be some indication of the order in
which these applications are requested, but the insertion point
specification would be a single line in James config.xml pointing to the
relevant archive)

d.






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

Reply via email to