Dear Wiki user,

You have subscribed to a wiki page or wiki category on "James Wiki" for change 
notification.

The following page has been changed by ChauLe:
http://wiki.apache.org/james/ChauLe

------------------------------------------------------------------------------
- [sentialist AT NO SPAM gmail DOT COM]
+ [EMAIL PROTECTED]
  
  Hello!
  
@@ -22, +22 @@

  (which takes significant time).
  
  === Proposed solutions ===
- Following FastFail proposal by DannyAngus and NoelBergman I propose
+ Following FastFail proposal by DannyAngus and NoelBergman 
- to implement a drop-in replacement for
- [http://james.apache.org/javadocs/org/apache/james/smtpserver/SMTPServer.html 
SMTPServer]
- block.
- 
- In spirit the new block will follow the design of
- 
[http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html
 JamesSpoolManager].
- While the later hosts a family of matcher - mailet pairs forming a "tree of 
responsibility" the
- new SMTP block will host a sequence of "protocolLets" - actors for line by 
line processing
- of SMTP protocol messages.
- 
- Technically however it is going to be a bit different.
- 
- Firstly I intend to allow re-configuration, reordering, addition and removal 
of "protocolLets" via JMX. To facilitate this I'm going to find a way to map:
-  * "protocolLets" bean-style configuration interface
-  * JMX allowed CompositeData and TabularData
-  * XML representation thereof (xstream-style)
-  * possibly Phoenix configuration objects
- onto each other.
- 
- As configuration of "protocolLets" and their order is changed via JMX this 
immediately affects the running block - in fact I imagine that we would take 
down "protocolLets" configured with old values and instantiated "protocolLets" 
with new configuration to avoid concurrency issues. Same applies to the 
protocolLet[] array representing their sequence. Each protocolLet is going to 
be stateless and thus tread-safe. Perhaps we can design JMX configuration 
interface so that all the reordering and reconfiguration will take effect in a 
batch as partially configured "protocolLets" may cause server failures.
- 
- A key point here is to let the "protocolLets" see other blocks visible to the 
new SMTP block itself. This will simplify implementing such features as 
communicating outer processes (perl-written policies taken from postfix) or 
talking TCP to outer world hosts (RBL) - none of these actions actually belongs 
to "protocolLets" - little stateless decision makers.
- 
- Then I'm going to add a JMX method for saving this configuration on disk. 
(Does Tomcat do that already?).
- One interesting possibility would be to allow new SMTP block to save directly 
to SVN - thus making
- provision for possible failures.
- 
- If timeframe permits we may consider doing beanshell integration - there's 
nothing impossible in "protocolLets" being written in beanshell, or probably 
jython, javascript. In this case the code of the "protocolLet" becomes its 
configuration.
- 
- I believe that this "go from getter/setters via JMX CompositeData to XML will 
let some fresh wind into the old dynamic server reconfiguration problem.
- 
- Technical implementation of these features still needs to be explored. In 
essence "protocolLets" are quite similar to blocks but Phoenix machinery most 
likely can not be reused as it is. I see the following options to investigate 
and choose from:
-  * go for some quirks and tricks and make use of existing Phoenix internals 
as they are
-  * create a patched Phoenix (and push for new version being rolled out with 
these patches)
-  * run.. say Fortress inside new SMTP block (I'm trying to pick a container 
living inside ASF)
-  * DIY container plumbing pico-container style (shouldn't be too much code) 
closely along the lines of the current 
[http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html
 JamesSpoolManager] implementation
- 
  === Advantages for ASF ===
   * A solid foundation for implementing a feature heavily demanded by current 
internet realities - SMTP fast fail
   * Possible a new insight on the issue of reconfiguring components inside IoC 
containers

Reply via email to