blob: 05821513bfaca2a4d43f8f1beb5375aad2f35842 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at 2021-11-12 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Apache James Project &#x2013; Apache James Server 3 - Packaging</title>
<style type="text/css" media="all">
@import url("../css/james.css");
@import url("../css/maven-base.css");
@import url("../css/maven-theme.css");
@import url("../css/site.css");
@import url("../js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
@import url("../js/jquery/css/print.css");
@import url("../js/fancybox/jquery.fancybox-1.3.4.css");
</style>
<script type="text/javascript" src="../js/jquery/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="../js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
<script type="text/javascript" src="../js/fancybox/jquery.fancybox-1.3.4.js"></script>
<link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
<meta name="Date-Revision-yyyymmdd" content="20211112" />
<meta http-equiv="Content-Language" content="en" />
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1384591-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body class="composite">
<div id="banner">
<a href="../index.html" id="bannerLeft" title="james-logo.png">
<img src="../images/logos/james-logo.png" alt="James Project" />
</a>
<a href="https://www.apache.org/index.html" id="bannerRight">
<img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
</a>
<div class="clear">
<hr/>
</div>
</div>
<div id="breadcrumbs">
<div class="xleft">
<span id="publishDate">Last Published: 2021-11-12</span>
</div>
<div class="xright"> <a href="../index.html" title="Home">Home</a>
|
<a href="../documentation.html" title="James">James</a>
|
<a href="../mime4j/index.html" title="Mime4J">Mime4J</a>
|
<a href="../jsieve/index.html" title="jSieve">jSieve</a>
|
<a href="../jspf/index.html" title="jSPF">jSPF</a>
|
<a href="../jdkim/index.html" title="jDKIM">jDKIM</a>
</div>
<div class="clear">
<hr/>
</div>
</div>
<div id="leftColumn">
<div id="navcolumn">
<h5>James components</h5>
<ul>
<li class="collapsed">
<a href="../documentation.html" title="About James">About James</a>
</li>
<li class="expanded">
<a href="../server/index.html" title="Server">Server</a>
<ul>
<li class="none">
<a href="../server/advantages.html" title="Advantages">Advantages</a>
</li>
<li class="none">
<a href="../server/objectives.html" title="Objectives">Objectives</a>
</li>
<li class="expanded">
<a href="../server/quick-start.html" title="User Manual">User Manual</a>
<ul>
<li class="collapsed">
<a href="../server/features.html" title="1. Features">1. Features</a>
</li>
<li class="none">
<strong>2. Packaging</strong>
</li>
<li class="collapsed">
<a href="../server/install.html" title="3. Install James">3. Install James</a>
</li>
<li class="collapsed">
<a href="../server/config.html" title="4. Configure James">4. Configure James</a>
</li>
<li class="collapsed">
<a href="../server/manage.html" title="5. Manage">5. Manage</a>
</li>
<li class="collapsed">
<a href="../server/monitor.html" title="6. Monitor">6. Monitor</a>
</li>
<li class="collapsed">
<a href="../server/upgrade.html" title="7. Upgrade">7. Upgrade</a>
</li>
<li class="collapsed">
<a href="../server/dev.html" title="8. Developers Corner">8. Developers Corner</a>
</li>
</ul>
</li>
<li class="none">
<a href="../mail.html#James_Mailing_lists" title="Mailing Lists">Mailing Lists</a>
</li>
<li class="none">
<a href="../server/release-notes.html" title="Release Notes">Release Notes</a>
</li>
<li class="none">
<a href="../server/apidocs/index.html" title="Javadoc">Javadoc</a>
</li>
<li class="none">
<a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
</li>
<li class="none">
<a href="https://github.com/apache/james-project" title="Sources">Sources</a>
</li>
<li class="none">
<a href="../server/rfcs.html" title="RFCs">RFCs</a>
</li>
<li class="none">
<a href="../download.cgi#Apache_James_Server" title="Download releases">Download releases</a>
</li>
</ul>
</li>
<li class="collapsed">
<a href="../mailet/index.html" title="Mailets">Mailets</a>
</li>
<li class="collapsed">
<a href="../mailbox/index.html" title="Mailbox">Mailbox</a>
</li>
<li class="collapsed">
<a href="../protocols/index.html" title="Protocols">Protocols</a>
</li>
<li class="collapsed">
<a href="../mpt/index.html" title="MPT">MPT</a>
</li>
</ul>
<h5>Apache Software Foundation</h5>
<ul>
<li>
<strong>
<a title="ASF" href="http://www.apache.org/">ASF</a>
</strong>
</li>
<li>
<a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
</li>
<li>
<a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
</li>
<li>
<a title="License" href="http://www.apache.org/licenses/" >License</a>
</li>
<li>
<a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a title="Security" href="http://www.apache.org/security/">Security</a>
</li>
</ul>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
<img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
</a>
</div>
</div>
<div id="bodyColumn">
<div id="contentBox">
<section>
<h2><a name="Available_packaging_options"></a>Available packaging options</h2>
<p>James components are assembled in various way, called packaging.</p>
<ul>The packaging you choose will influence:
<li>Your java requirement</li>
<li>The protocol the mail server supports</li>
<li>The components you can use</li>
</ul>
<p>Thus, one must carefully choose his packaging.</p>
<ul>To help you doing this, here is a list of available packages:
<li><a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/app">Spring</a>: Allows you to
choose across various available implementations for each component. Requires more configuration effort.</li>
<li><a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/container/guice/cassandra-guice">
Cassandra-guice</a>: Ships a James server storing emails in Cassandra and index them in ElasticSearch targeting single server deployment. Optional support for LDAP authentication.</li>
<li><a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/container/guice/cassandra-rabbitmq-guice">
Distributed: cassandra-rabbitmq-guice</a>: Ships a James server storing emails in Cassandra and index them in ElasticSearch targeting multi node deployments. S3 is used to store blobs. RabbitMQ is used for inter-node messaging. Optional support for LDAP authentication.</li>
<li><a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/container/guice/jpa-guice">
Jpa-Guice</a>: Ships a James server storing emails in a SQL database (derby by default) accessed with JPA and Lucene to index emails and targets single node deployment.</li>
<li><a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/container/guice/jpa-smtp">
Jpa-Smtp</a>: A tiny SMTP server shiped without mailbox, using SQL database to store data, accessed by JPA.</li>
</ul>
<p>Note: Especially using Guice, one can easily define new modules for existing James components, as well as
for third party code. Note that building your own combination of components will lead to an untested and unsupported server.
</p>
</section>
<section>
<h2><a name="Support_matrix"></a>Support matrix</h2>
<p>
</p>
<table border="0" class="bodyTable">
<tr class="a">
<th>Packaging</th>
<th>Spring</th>
<th>Cassandra-guice</th>
<th>Distributed Cassandra-rabbitMQ-guice</th>
<th>Jpa-guice</th>
<th>Jpa-smtp</th>
</tr>
<tr class="b">
<td>IoC framework</td>
<td>Spring</td>
<td>Guice</td>
<td>Guice</td>
<td>Guice</td>
<td>Guice</td>
</tr>
<tr class="a">
<td>Docker image</td>
<td>Not available. Contributions welcomed for JIB support.</td>
<td>apache/james:cassandra-3.6.0</td>
<td>apache/james:distributed-3.6.0</td>
<td>apache/james:jpa-3.6.0</td>
<td>None</td>
</tr>
<tr class="b">
<td>Supports SMTP</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr class="a">
<td>Deployment model</td>
<td>Single node</td>
<td>Single node</td>
<td>Multi node</td>
<td>Single node</td>
<td>Single node</td>
</tr>
<tr class="b">
<td>Supports IMAP</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr class="a">
<td>Supports JMAP</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr class="b">
<td>Supports POP3</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr class="a">
<td>Supports FetchMail</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr class="b">
<td>Supports CLI</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr class="a">
<td>Supports WebAdmin</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr class="b">
<td>Supports Grafana metrics (Prometheus)</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr class="a">
<td>Mailbox implementation</td>
<td>JPA/MailDir/Memory</td>
<td>Cassandra</td>
<td>Cassandra</td>
<td>JPA</td>
<td>JPA</td>
</tr>
<tr class="b">
<td>Indexer implementation</td>
<td>Lucene/None</td>
<td>ElasticSearch</td>
<td>ElasticSearch</td>
<td>Lucene</td>
<td>None</td>
</tr>
<tr class="a">
<td>Server data implementation</td>
<td>JPA/File</td>
<td>JPA/File</td>
<td>Cassandra</td>
<td>Cassandra</td>
<td>JPA</td>
<td>JPA</td>
</tr>
<tr class="b">
<td>Mail queue implementation</td>
<td>ActiveMQ</td>
<td>ActiveMQ</td>
<td>RabbitMQ</td>
<td>ActiveMQ</td>
<td>ActiveMQ</td>
</tr>
<tr class="a">
<td>Sieve</td>
<td>Experimental</td>
<td>Experimental</td>
<td>Experimental</td>
<td>Experimental</td>
<td>No</td>
</tr>
<tr class="b">
<td>User defined mailbox listener registration</td>
<td>No</td>
<td>Yes (master)</td>
<td>Yes (master)</td>
<td>Yes (master)</td>
<td>No</td>
</tr>
<tr class="a">
<td>Installation instructions</td>
<td><a href="install.html">Here</a></td>
<td><a href="install/guice-cassandra.html">Here</a></td>
<td><a href="install/guice-cassandra-rabbitmq-s3.html">Here</a></td>
<td><a href="install/guice-jpa.html">Here</a></td>
<td><a href="install/guice-jpa-smtp.html">Here</a></td>
</tr>
</table>
<p><b>WARNING</b>: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)</p>
</section>
<section>
<h2><a name="Docker_matrix"></a>Docker matrix</h2>
<p>
</p>
<table border="0" class="bodyTable">
<tr class="a">
<th>Image name</th>
<th>Deployment model</th>
<th>General persistence</th>
<th>Blob persistence</th>
<th>Queue type</th>
<th>Search</th>
<th>Supported protocols</th>
</tr>
<tr class="b">
<td>apache/james:distributed-3.6.0</td>
<td>Multi-node</td>
<td>Cassandra</td>
<td>S3 or Cassandra</td>
<td>RabbitMQ</td>
<td>ElasticSearch</td>
<td>SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin</td>
</tr>
<tr class="a">
<td>apache/james:jpa-3.6.0</td>
<td>Single node</td>
<td>Embedded Derby database (JPA, SQL)</td>
<td>Not applicable</td>
<td>In VM</td>
<td>Index Lucene on the filesystem</td>
<td>SMTP, IMAP, POP3, LMTP, WebAdmin</td>
</tr>
<tr class="b">
<td>apache/james:demo-3.6.0</td>
<td>Pre-provisioned Single node instance to ease project discovery</td>
<td>Embedded Derby database (JPA, SQL)</td>
<td>Not applicable</td>
<td>In VM</td>
<td>Index Lucene on the filesystem</td>
<td>SMTP, IMAP, POP3, LMTP, WebAdmin</td>
</tr>
<tr class="a">
<td>apache/james:memory-3.6.0</td>
<td>Single node for test purposes</td>
<td>Memory (no persistence)</td>
<td>Memory (no persistence)</td>
<td>In VM</td>
<td>Scroll on in memory data</td>
<td>SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin</td>
</tr>
<tr class="b">
<td>apache/james:cassandra-3.6.0</td>
<td>Single node on top of a shared database</td>
<td>Cassandra</td>
<td>Cassandra</td>
<td>In VM</td>
<td>ElasticSearch</td>
<td>SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin</td>
</tr>
</table>
<p><b>WARNING</b>: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)</p>
</section>
</div>
</div>
<div class="clear">
<hr/>
</div>
<div id="footer">
<div class="xright">Copyright &#169; 2006-2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All Rights Reserved.
</div>
<div class="clear">
<hr/>
</div>
</div>
</body>
</html>