I really think JMAP is a nice protocol to use to implement a web mail as
it allows user to speak directly to the e-mail server without the need
of an IMAP proxy.

Protocol structure is clean and well defined. JSON is easy to parse.

So I am really excited to see such an implementation in James. I am
going to review here the details of todays code available on trunk.

 - First point, I believe /server/protocols is only here to wrap up the
/protocols stuff. We of course should have the servlets in
server/protocols. The responsibilities of such server/protocols are for
me to identify commands and encode responses + directly talk to the
client. /protocols is responsible of interacting with other James
entities (such as repositories and mailbox project) in order to reply to
the user commands. Such an organization allows not to be tied to jetty.
What do you think of it?

This, I guess mean moving the RequestHandler, and most of the models in
/protocols. I don't believe it would be harder than that, and allow
protocols/jmap to become the first lib for JMAP in JAVA (kind of
advertisement for James ? Maybe it can be helpful...)

 - james-server-util is amaizing, as james-server-util-java8 . I  like
the idea of using these tools broadly. But maybe these projects should
be located in backends-common. rather than in server/container ? I find
it makes more sens...

  - jmap-integration-testing project is strange to me.

      1/ Its location. I think it has nothing to do in protocols, and
would rather see it in a new folder. Something like
/server/integration-tests/jmap/cassandra .(again server/protocols is,
according to me, about decoding requests and encoding responses)
      2/ I think you should make it easier for one to implement other
backends, and separate Cassandra stuff from generalizable testing stuff.

 - Why not introducing /server/data/data-memory for your
MemoryAccessTokenRepository ? I have upcoming commits to create the
project, maybe moving it to data-memory would make sens.

 - I heard JMAP handles unique ID accross email copies. I guess you are
compelled to support it. How do you plan to manage it across
implementations ?

 - I have nothing to say on the code itself. It is Java8, well
structured, easy to read, and you did an impressive job.

Good luck to finish the JMAP implementation,

Benoit


Reply via email to