Steve Brewin wrote:

> We should define an interface that meets our requirements for dispatching
> work, most likely a subset of the JMS APIs. Implementations of which may
> use any SOA style service, be it JMS, WebServices, whatever.

We can, but I assert that although we can change the Mailet API to look more
like JMS, the put operation is already present as Mail.setState, and the
get/onMessage is exposed as a service method.

> One thing we can't be assured off is that the service can always consume
the
> work, so we have to have a clear contract for this.  Probably no more than
a
> set of specialized Exceptions?

Seems likely, yes.

> >   - Each processor is a transaction.  What this means
> >     is that we can try to wrap a global transaction
> >     around behavior within the processor.  This will
> >     have some impact on Mailets, too

> I'ld suggest using javax transactions.

I expect so, yes.  I don't have any experience with is XA implementation in
Java, other than using existing implementations, but the goal ought to be
for our queue managers and other applicable resources to play nicely in the
XA scenario.

> I would not define interfaces for the queue manager and processor,
> but rather define semantics and responsibilities.

> Lost me here. I'm not sure why we can't define interfaces for the
> things that we talk to and why we wouldn't want to. Perhaps you
> can elaborate?

Hmmm ... perhaps it wasn't clear that I was separating what JAMES needs to
define from what I see as at least potentially generic in the Mailet domain.

For JAMES, I would expect us to have specific interfaces, but I would not
impose them on the overall concepts, in order to leave maximum flexibility
to authors of independent Mailet servers.

I view the requirements as:

  - What does the Mailet API need from the environment?

The mailet container is require to establish that, since it invokes the
Mailet API.  For JAMES, the Mailet container is the processor.

  - What does the Mailet container require from the environment?

In the proposed approach, the queue manager is responsible to establish
that, since the queue manager invokes the processor.

I can argue that we don't need to define the mailet container interface, and
that the processor interface can be JAMES-specific.  However, I did comment
incorrectly earlier with the MDB example, which should not have been a
processor, and would like to define a processor interface, even as a
separate package, in order to open the door to sharing processor
implementations across server implementations.

Again, one can imagine many ways to configure and invoke mailets, so I sort
of view this as akin to Pluto.  You can host the Mailet API however you
want, but we can provide you with pre-written containers to plug into your
messaging engine.

  - What does the queue manager require from the enviroment?

Even if we provide pre-written containers, I feel that we can leave maximum
flexibility by defining the responsibilities of a queue manager without
requiring a specific queue manager interface.  Certainly, for JAMES, we will
have interfaces for processors and queue managers.  I just don't feel that
there is a *necessary* one in the generic case, even to use our pre-written
processors.

        --- Noel


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

Reply via email to