Understanding the Protocols API
Felix Auringer <[email protected]> Thu, 7 May 2026 15:50:35 +0200
| Newsgroups | gmane.comp.jakarta.james.devel |
|---|---|
| Message-ID | <[email protected]> |
Dear developer community,
I have been looking through the codebase to find out the exact behavior of some configuration options.
While I have found what I was looking for, I got slightly confused by the protocols API architecture and hope that somebody can clarify some things for me.
This is the type hierarchy:
ProtocolServer: basic interface for binding a server
AbstractAsyncServer: abstract implementation of ProtocolServer using netty
AbstractConfigurableAsyncServer: abstract subclass of AbstractAsyncServer with common configuration like TLS, proxy, ...
IMAPServer: concrete subclass of AbstractConfigurableAsyncServer, implements IMAPServerMBean
ManageSieveServer: concrete subclass of AbstractConfigurableAsyncServer, implements ManageSieveServerMBean
AbstractProtocolAsyncServer: abstract subclass of AbstractConfigurableAsyncServer, allows to set protocol handlers
LMTPServer: concrete subclass of AbstractProtocolAsyncServer, implements LMTPServerMBean
POP3Server: concrete subclass of AbstractProtocolAsyncServer, implements POP3ServerMBean
SMTPServer: concrete subclass of AbstractProtocolAsyncServer, implements SMTPServerMBean
NettyServer: concrete subclass of AbstractAsyncServer
I have two main questions:
1. What is the NettyServer used for? It seems to be only used for tests but never in real code.
2. Why do IMAP and ManageSieve not fulfill the protocols API (they have no subclass of ProtocolImpl)? They consequently need their own implementations for session, handler chain, ...
Best regards,
Felix
---
Gesellschaft für interkulturelles
Zusammenleben gGmbH (GIZ)
Felix Auringer
IT
Reformationsplatz 2
13597 Berlin
Tel: 030/513 0100 00; Fax: 030/513 0100 09
www.giz.berlin; [email protected]
Amtsgericht Charlottenburg HRB 200872 B
Geschäftsführerin: Dr. Britta Marschke