Hi David, On Sun, 2020-05-10 at 11:41 +0900, David Leangen wrote: > Hello, > > Since I am very new to James, I have the advantage of looking at the > available documents with fresh eyes. For that reason, I am currently > working on trying to update the documentation, and have submitted a > PR to get the ball rolling. [1] > > I will need some help for much of this work. I hope that you are > willing to spare a few minutes to help me help the community. > > I am writing my questions here because I am trying to “develop” the > documentation, but if you would like me to move to the user list, I > could do that. > > > Right now, I am interested in this section of the README.adoc file > [2]: > > > How to run James in Docker > • Run James with Guice + Cassandra + RabbitMQ + Swift + > ElasticSearch > • Run James with Guice + Cassandra + ElasticSearch > • Run James with Guice + JPA + Lucene > • Run James with Spring + JPA > > As a new reader trying to figure out what is going on, I am already > lost. To get me started, can you please tell me: > > 1. What are these configurations for?
It's related to our product strategy. Some years ago, James had only Spring support. For somebody to start with James, (s)he would have to choose the implementations s(he) wants by editing xml files. One had to choose which mailbox implementation (JPA for relational database, Maildir for ... maildir format on local filesystem, and so on), for user management, etc. One problem was that some people didn't understand where their data was stored. Another one was that one could potentially use combination of components that nobody ever tried and face problems nobody is willing to solve. So we decided to promote the concept of product: a product is a solution that we package and has been tested to work. A user can expect the community to care about problems on these products if any and have support. The list of products is the one above (and some more, see https://github.com/apache/james-project/pull/188/files), and we keep the Spring support for the time being for existing users. > Why would I want to choose one over another? Well, it really depends on what you want to do. * James with Guice + Cassandra + RabbitMQ + Swift + ElasticSearch is for large-scale clustered deployment * James with Guice + Cassandra + ElasticSearch is for medium-scale (no clustering support of James but scalability for Cassandra and ElasticSearch) * James with Guice + JPA + Lucene is for small-scale deployment as it store things in an RDBMS and index things in local Lucene files * Spring is here for legacy reasons > Why should I care? Because you have different cost/benefits trade-off for each solution. You probably want to choose the right technology for your problem. > 2. How do these get wired / configured? Is there anything I need to > do? If yes, what? If no, how does that work? For Guice products, all important component are hardcoded for each product. You still have some choices you can make in configuration like choosing the object-storage technology you want. For Spring, there's a lot you can do but I'd rather not document that and let people who understand Spring deal with it, at least for now. > 3. Are there any other possible configurations that are not in this > list? > We discussed that at length here https://github.com/apache/james-project/pull/188/files if you want to have a look. Cheers, -- Matthieu Baechler --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org