<?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 Apr 17, 2012 -->
<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 Server 3 - Develop on James</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="author" content="James Project Web Team" />
    <meta name="Date-Revision-yyyymmdd" content="20120417" />
    <meta http-equiv="Content-Language" content="en" />
                                                    
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
                      <script type="text/javascript" src="./js/dev.js"></script>
          <!-- 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-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="Apache James Server 3.0" />
                </a>
                              <a href="http://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2012-04-17</span>
                      </div>
            <div class="xright">                    <a href="../../index.html" title="Home">Home</a>
            |
                        <a href="../index.html" title="Server">Server</a>
            |
                        <a href="../../hupa/index.html" title="Hupa">Hupa</a>
            |
                        <a href="../../protocols/index.html" title="Protocols">Protocols</a>
            |
                        <a href="../../imap/index.html" title="IMAP">IMAP</a>
            |
                        <a href="../../mailet/index.html" title="Mailets">Mailets</a>
            |
                        <a href="../../mailbox/index.html" title="Mailbox">Mailbox</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>
            |
                        <a href="../../mpt/index.html" title="MPT">MPT</a>
            |
                        <a href="../../postage/index.html" title="Postage">Postage</a>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>Overview</h5>
                  <ul>
                  <li class="none">
                          <a href="index.html" title="Introduction">Introduction</a>
            </li>
                  <li class="none">
                          <a href="release-notes.html" title="Release Notes">Release Notes</a>
            </li>
          </ul>
                       <h5>Features</h5>
                  <ul>
                  <li class="none">
                          <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
            </li>
                  <li class="none">
                          <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a>
            </li>
                  <li class="none">
                          <a href="feature-persistence.html" title="Persistence">Persistence</a>
            </li>
                  <li class="none">
                          <a href="feature-protocols.html" title="Protocols">Protocols</a>
            </li>
                  <li class="none">
                          <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
            </li>
                  <li class="none">
                          <a href="feature-performance.html" title="Performance">Performance</a>
            </li>
                  <li class="none">
                          <a href="feature-security.html" title="Security">Security</a>
            </li>
          </ul>
                       <h5>User Manual</h5>
                  <ul>
                  <li class="none">
                          <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a>
            </li>
                  <li class="none">
                          <a href="install.html" title="2. Install James">2. Install James</a>
            </li>
                                                                                                                                                                                                                                                                                                                                <li class="collapsed">
                          <a href="config.html" title="3. Configure James">3. Configure James</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="manage.html" title="4. Manage">4. Manage</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="monitor.html" title="5. Monitor">5. Monitor</a>
                  </li>
                                                                                      <li class="collapsed">
                          <a href="upgrade.html" title="6. Upgrade">6. Upgrade</a>
                  </li>
          </ul>
                       <h5>Developers Corner</h5>
                  <ul>
                  <li class="none">
            <strong>Architecture</strong>
          </li>
                  <li class="none">
                          <a href="dev-build.html" title="Build from source">Build from source</a>
            </li>
                  <li class="none">
                          <a href="dev-database-schema.html" title="Database Schema">Database Schema</a>
            </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                  </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/apache-james/" title="Nightly builds">Nightly builds</a>
            </li>
          </ul>
                       <h5>References</h5>
                  <ul>
                  <li class="none">
                          <a href="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>
          </ul>
                       <h5>About James</h5>
                  <ul>
                  <li class="none">
                          <a href="../../index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../../newsarchive.html" title="News">News</a>
            </li>
                  <li class="none">
                          <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../../contribute.html" title="Contributing">Contributing</a>
            </li>
                  <li class="none">
                          <a href="../../guidelines.html" title="Guidelines">Guidelines</a>
            </li>
                  <li class="none">
                          <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
            </li>
                  <li class="none">
                          <a href="../../team-list.html" title="Who We Are">Who We Are</a>
            </li>
                  <li class="none">
                          <a href="../../license.html" title="License">License</a>
            </li>
          </ul>
                       <h5>Download</h5>
                  <ul>
                  <li class="none">
                          <a href="../../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></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">
        <!-- 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. -->

  

  <div class="section"><h2>High Level Architecture<a name="High_Level_Architecture"></a></h2>
  
    <a href="images/uml/org.apache.james-package_large.png" id="high-level-arch-img-id"><img src="images/uml/org.apache.james-package_small.png" alt="" /></a>
    <p><a href="images/uml/org.apache.james-package_large.png" id="high-level-arch-txt-id">Click to enlarge image</a></p>
    
    <p>James is a multi-protocol message processing and storage engine. James
      currently consists of:
      </p><ul>
        <li>Four mail protocol services: SMTP, POP3, IMAP4 and LMTP.</li>
        <li>Support for SMTP Auth.</li>
        <li>A remote administration server.</li>
  <!-- <li>an NNTP server,</li> -->
        <li>Support for TLS/SSL.</li>
        <li>A mail processing engine that supports the Mailet API.</li>
        <li>File-system message storage and a message storage interface to RDBMS's.</li>
        <li>File-system user record storage and an experimental interface to LDAP directories.</li>
      </ul>
    
    
    <p>The mail protocol services use the mailbox librairies to fetch/store mails.</p>
    
    <p>When a mail arrives via SMTP, it gets processed by the SMTP services and is placed
       in a Apache ActiveMQ queue (ActiveMQ  is the Java Messaging Service JMS implementation at Apache)</p>
       
    <p>This allow to decouple mail spooling from the rest of the incoming traffic.</p>
    
    <p>After being the put in the queue, the mailetcontainer is responsible to get the 
       next mail to process from the ActiveMQ queue.</p>
       
    <p>The mailets defined in mailetcontainer.xml are applied to define if the mail is to be 
       treated as a Local or Remote delivery.</p>
       
    <p>The Local and Remote deliveries are treated by their corresponding mailet.</p>
    
    <p>The LocalDelivery mailet uses the SieveMailet which uses the mailbox/message manager to store the mail.</p>

   <p>The result of the mail can be either:</p>
   <ul>
     <li>Gets stored in the mailbox.</li>
     <li>Gets relayed to another server.</li>
     <li>Gets relayed to another server.</li>
     <li>Gets bounced back if it can not be handle by the james instance (this may happen during a previous step)</li>
     <li>Gets stored in the &quot;mailstore&quot; which is a special format for spam, virus,... (in future release, we may also store those mails in the mailbox).</li>
   </ul>
  </div>

  <div class="section"><h2>Technical Architecture<a name="Technical_Architecture"></a></h2>
  
    <a href="images/uml/org.apache.james-package-detail_large.png" id="arch-img-id"><img src="images/uml/org.apache.james-package-detail_small.png" alt="" /></a>
    <p><a href="images/uml/org.apache.james-package-detail_large.png" id="arch-txt-id">Click to enlarge image</a></p>
    
    <p>James uses many other components: Spring, ActiveMQ, OpenJPA, Netty, Jackrabbit, Derby...</p>
    
    <p>The modules can be classified into 3 categories:</p>
    <ul>
      <li>API: They do not include implementation details, they do not have dependencies (or at most they have very common dependencies like mailet-api, javamail, commons-logging).</li>
      <li>Library: They only depend on API modules or external jars. They don't depend on other internal libraries. These libraries should be shared by functions (no need to have a Library when it is used only by a function).</li>
      <li>Functions: Everything else. It is harder to see a case of &quot;direct&quot; reuse of a function jar. Most times we'll only have code reuse. It is preferable to limit Function to Functions dependencies.</li>
    </ul>
    
  </div>
    
  <div class="section"><h2>Server Coding Guidelines<a name="Server_Coding_Guidelines"></a></h2>
    
    <p>LogEnabled interface as the preferred way, except for non-server code and classes that have no bean definition.
       LogEnabled should be used wherever logging is needed and no &quot;session-scoped&quot; Log is provided.</p>
  
  </div>
    
  <div class="section"><h2>Design Objectives<a name="Design_Objectives"></a></h2>
      
      <div class="section"><h3>Features<a name="Features"></a></h3>
      
        <p>These are some of the currently implemented features:</p>

        <p><i><b>Complete portability</b></i> Apache James is be a 100% pure Java application
           based on the Java 2 platform and the JavaMail 1.4 API.</p>

        <p><i><b>Protocol abstraction</b></i> Unlike other mail engines, protocols are seen only
           like &quot;communication languages&quot; ruling comunications between clients and
           the server. Apache James is not be tied to any particular protocol but
           follow an abstracted server design (like JavaMail did on the
           client side)</p>

        <p><i><b>Complete solution</b></i> The mail system is able to handle both mail
           transport and storage in a single server application. Apache James
           works alone without the need for any other server or solution.</p>

        <p><i><b>Mailet support</b></i> Apache James supports the Apache Mailet API. A Mailet
               is a discrete piece of mail-processing logic which is incorporated into
               a Mailet-compliant mail-server's processing. This easy-to-write,
               easy-to-use pattern allows developers to build powerful customized mail
               systems. Examples of the services a Mailet might provide include: a
               mail-to-fax or mail-to-phone transformer, a filter, a language translator, a mailing
               list manager, etc. Several Mailets are included in the James
               distribution (see <a href="dev-provided-mailets.html">documentation</a>).</p>

        <p><i><b>Resource abstraction</b></i> Like protocols, resources are abstracted and,
           accessed through defined interfaces (JavaMail for transport, JDBC for
           spool storage or user accounts in RDBMS's, Apache Mailet API). The server is
           highly modular and reuse solutions from other projects.</p>

        <p><i><b>Secure and multi-threaded design</b></i> Based on well known
           frameworks such as Spring, ActiveMQ, OpenJPA, Netty,..., Apache James has a careful,
           security-oriented, full multi-threaded design, to allow performance,
           scalability and mission-critical use.</p>

        <p>Anything else you may want if you help us write it :-)</p>

      </div>

      <div class="section"><h3>Standards Compliance<a name="Standards_Compliance"></a></h3>

        <p>It is the existence of published &quot;open&quot; standards which 
           allows independant teams to develop interoperable software.</p>
      
        <p>James attempts to support a number of these standards most of which are 
          IETF RFC's and in the areas covered by these standards the published standard 
          is our requirements document.</p>
        
        <p>This sometimes leads to confusion where behaviour is not 
          the subject of a relevant standard, or conflict where common 
          (de-facto) behaviour is actually at odds with a supported standard.</p>
        
        <p>We believe that it is our responsibility to adhere to the published standard. 
          If we allow our implementation to deviate it means that we are tacitly encouraging 
          the situation whereby interoperability is no longer guarenteed by standards 
          compliance alone, but also requires access to undocumented and possibly 
          even commercially licenced technology. There is no easy route for a 
          newcomer to aquire these secrets, and interoperabilty 
          becomes something only available to the elite.</p>
        
        <p>The James policy for issues of non-compliance tries to tread the fine line
          between a pragmatic acceptance of other people's misinterpretation of the
          RFC's and an evangelical defence of open standards as the key to freedom of interoperation.</p>
        
        <p>In practice this policy is that certain well argued of cases of
          non-compliance which can be *safely* worked around, will be tolerated by
          James.</p>
      
        <p>In cases (like jira issue JAMES-344) where variance from a published standard is
           required it is desirable that this functionality is disabled in James by default,
           it must be prominently and clearly documented that this causes James 
           to violate the relevant standard, and should be enabled by explicit 
           configuration, making its use a conscious decision of the user rather 
           than an decision taken by the James team.</p>
        
        <p>In cases where the required behaviour is not within the scope of any standard which
           James claims to support (such as behaviour which is a de-facto standard or
           an <i>internet draft</i> RFC but not yet subject of a <i>standards track</i> RFC) it is
           acceptable to implement the behaviour so long as it is adequately
           documented (for instance by refrence to an <i>internet draft</i> or 
           other public document) and users can be clear about what to expect from James.</p>

      </div>

  </div>




      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2002-2012
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
