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