Author: ieugen
Date: Thu Feb 28 09:23:55 2013
New Revision: 1451154

URL: http://svn.apache.org/r1451154
Log:
Added overview documentation

Added:
    james/server/trunk/Overview.md

Added: james/server/trunk/Overview.md
URL: 
http://svn.apache.org/viewvc/james/server/trunk/Overview.md?rev=1451154&view=auto
==============================================================================
--- james/server/trunk/Overview.md (added)
+++ james/server/trunk/Overview.md Thu Feb 28 09:23:55 2013
@@ -0,0 +1,137 @@
+Apache James Server
+===================
+
+This document is an effort to document the architecture and components that 
make Apache James. As a new committer to
+the project I found out fast that the lack of documentation made development 
slow. On my quest to solving issues I
+decided to document what I understand about Apache James.
+
+Feel free to add/change things if you think it's required.
+
+Server structure: components and services
+=========================================
+
+The directory structure is presented bellow. All directories are maven 
projects and correspond roughly to a component/service.
+I'll explain what I mean by 'component' and 'service' bellow.
+
+~~~
+|-- app
+|-- cli
+|-- core
+|-- data
+    `-- data-api
+    `-- data-file
+    `-- data-hbase
+    `-- data-jcr
+    `-- data-jdbc
+    `-- data-jpa
+    `-- data-ldap
+    `-- data-library
+|-- dns-service
+    `-- dnsservice-api
+    `-- dnsservice-dnsjava
+    `-- dnsservice-library
+|-- fetchmail
+|-- filesystem-api
+|-- karaf
+    `-- distribution
+     `-- features
+     `-- integration
+|-- lifecycle-api
+|-- mailbox-adapter
+|-- mailetcontainer-api
+|-- mailetcontainer-camel
+|-- mailets
+|-- protocols
+    `-- protocols-imap4
+    `-- protocols-library
+    `-- protocols-lmtp
+    `-- protocols-pop3
+    `-- protocols-smtp
+|-- queue
+    `-- queue-activemq
+    `-- queue-api
+    `-- queue-file
+    `-- queue-jms
+|-- spring
+|-- util
+
+~~~
+
+Apache James is made up of *components* and *services*. Most of the components 
implement an API and there are several
+implementations that you can choose from. The only difference between 
components and services is the fact that a
+service is a component designed to be consumed. It provides a useful feature.
+
+Take **dns-service** for example:**dnsservice-api** and **dnsservice-library** 
are components while **dnsservice-dnsjava**
+is a service that implements an API that James uses for resolving email domain 
names to IP addresses.
+What you need to remember is that you can instantiate a service and it will 
provide useful value for you.
+The only way to know which one is a service and which one is a component is by 
reading the documentation or code.
+
+James has a nice architecture based on reusable components/services. Services 
are important. Components are just means to
+get to create services without duplicating a lot of code.
+
+Services in Apache James Server
+===============================
+
+Being an email server, James is composed of services related to this task:
+
+* dns-service - Service for resolving (email) domain names
+* fetch-mail scheduler - Service for scheduling email fetching
+* queue - Service used for spooling email
+* data (user and domain) repository - Service for storing users, passwords and 
email domains managed by James
+* mail-store - Service for persisting email messages in mailboxes
+* mailet-container - Service for processing emails using Mailets
+* protocol services: SMTP, POP3, IMAP4, LMTP - Services that implement 
specific protocols
+* JMX monitoring - Service that provides application monitoring via JMX
+* configuration - more of a concern than a service
+
+Services are created via Spring. You can find the main configuration 
**spring-server.xml** file in the **spring** component.
+Each service defines his own Spring context which is imported in the main 
application context.
+
+Application bootstrap
+=====================
+
+There are multiple ways to start/deploy James Server:
+
+* as a standalone application/service, using scripts provided by the **app**
+* as a web application (WAR) inside an application server (Apache Tomcat, 
Jetty, GlassFish)
+* inside an OSGi container - Apache Karaf (in progress)
+
+The preferred way is
+
+DNS Service
+===========
+
+Provides DNS resolution for (email) domain names. James defines an API and has 
one implementation that relies on
+dnsjava (http://www.dnsjava.org/) for this task. You can find the code under 
**dns-service** directory.
+
+This service does not depend on other services.
+
+FetchMail Service
+=================
+
+
+Queue Service
+=============
+
+
+User and domain (data) repository Service
+=========================================
+
+
+Mail store Service
+==================
+
+
+Mailet container Service
+========================
+
+Protocol services
+=================
+
+
+JMX monitoring Service
+======================
+
+
+
+



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to