james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Burrell Donkin" <robertburrelldon...@gmail.com>
Subject Re: [PLANNING] Road map - lets find some consensus on .... release contents ....
Date Sat, 02 Feb 2008 12:57:58 GMT
On Jan 30, 2008 10:53 PM, Steve Brewin <sbrewin@synsys.com> wrote:
> Robert Burrell Donkin wrote on 29 January 2008 21:28:
>
>
> > On Jan 28, 2008 2:37 PM, Stefano Bagnara <apache@bago.org> wrote:
> > >
> > > Robert Burrell Donkin ha scritto:
> > > > On Jan 26, 2008 4:48 PM, Stefano Bagnara <apache@bago.org> wrote:
> > > >> Robert Burrell Donkin ha scritto:
> > > >>> On Jan 24, 2008 10:51 AM, Stefano Bagnara
> > <apache@bago.org> wrote:
> > > >>>> That's why I think config.xml and storage
> > compatibility should be a
> > > >>>> greater priority compared to API stability.
> > > >>> JAMES needs more active developers. releasing unstable
> > APIs damages
> > > >>> the development ecology.
> > > >> It's clear we have different opinions on this.
> > > >>
> > > >> IMHO most JAMES developers are JAMES users that knows
> > JAVA and in a
> > > >> given point in time decide they want to start writing
> > some Mailets, and
> > > >> then move writing some service and then start hacking
> > the core, and
> > > >> become more involved in the developers community.
> > > >
> > > > exactly :-)
> > > >
> > > > mailet authors should be able to rely on a stable set of basic
> > > > exterior service APIs. breaking into finely grained components is
> > > > great but it creates a lot of interior interfaces to allow
> > > > implementations to be extended. it isn't clear which APIs
> > are intended
> > > > for mailet and protocol developers, and which are
> > interior APIs aimed
> > > > at extenders of a particular backend implementation.
> > > >
> > > > - robert
> > >
> > > AFAIK only Mailet API are intended for mailet developers, now.
> > >
> > > And we never exposed "public" protocol APIs.
> >
> > that's the point: developer wanting to independently extend JAMES are
> > faced with moving targets and the JAMES team are faced with worries
> > about breaking API compatibility
> >
> > > Only SIMPLE mailets can be written using public APIs.
> > Everything else,
> > > is JAMES Server core hacking (access the ServiceManager via
> > a context
> > > lookup and know what is declared in the assembly).
> > >
> > > Long before I joined this project I know that JAMES PMC
> > evaluated the
> > > possibility to put repositories knowledge in the mailet
> > apis and some
> > > more service, but I think it never landed the official code. I don't
> > > know why.
>
> Right now the Mailet interfaces are implementation agnostic. A James
> specific Mailet is a contradiction as any dependency on James breaks the
> Mailet rules. This is good in as much as it allows James interfaces to
> evolve independently of the Mailet APIs. This is bad in that it limits what
> can be done within a Mailet in the James environment, but this is like
> saying that similar APIs, such as the Portlet API are bad because I know
> that the environment hosting my Portlet knows and can do more. Its the price
> paid for portability.

i agree in principle but trunk has a lot of JAMES-specific mailets
(but i suspect that many of these could be decoupled)

i think that it would be a good plan to pull out those mailets which
are conceptually independent into separate a subproject (standard
mailets, say)

the problem is that many common problems solved by mailets require
access to basic services which are environment specific (for example,
delivery to a logical mailbox or access to user information). ATM
mailets are coupled to basic service APIs defined by JAMES. IMHO it
would be better if mailets were decoupled by exposing their own API
interfaces rather than using JAMES service APIs.

> I see this as a separate issue from publishing James specific extension
> points (see below).

+1

> > > IMHO internal apis can be made public only when we used it
> > for a while
> > > and we are satisfied with them to say that we won't change
> > them for a
> > > while. This is not the case of current and past internal interfaces.
> >
> > they are already public :-)
>
> Sure, the APIs are 'public' in the sense that in Java interfaces are code
> 'public' and with OSS the code is itself public, so we do not have the
> luxury that commercial developers have to hide Java public code. This is not
> to say that every Java public artefact within James should be bound to
> follow a rigid set of rules. If it is not published as an extension point
> I'd say we are free to do as we wish. Some OSS projects go as far as marking
> even new public artefacts as deprecated, meaning that they may change or be
> removed in the future to make this very clear. For me, this is overkill.
>
> Extension points are simply the ones we publish in the docs. with the
> release. Code public should mean nothing to the wider community.

i think that it's much easier and clearer to start by packaging. for example,

import org.apache.james.api.extension

is IMHO clearly and more expressive than relying just on
documentation. using packaging will make automation much easier.

i would also like to see the APIs (whether service or extension) in
separate modules

> To be clear, such extension points are unrelated to the Mailet API and are
> James specific.

i agree about extension points but it is the service APIs that worry me

ATM mailets are coupled to service APIs. some of the service APIs are
reused as extension APIs (which IMHO is not a good idea). so mailets
are coupled to extension APIs which is IMHO not at all good.

- robert

[1] $ grep -r "import org.apache.james"
spoolmanager-function/src/main/java/org/apache/james/transport/mailets
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListserv.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListserv.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListserv.java:import
org.apache.james.services.UsersStore;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java:import
org.apache.james.core.MailImpl;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractRedirect.java:import
org.apache.james.core.MimeMessageUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/SPF.java:import
org.apache.james.jspf.core.DNSService;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/SPF.java:import
org.apache.james.jspf.core.Logger;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/SPF.java:import
org.apache.james.jspf.executor.SPFResult;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/SPF.java:import
org.apache.james.jspf.impl.DefaultSPF;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java:import
org.apache.james.util.SpamAssassinInvoker;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/ErrorCommand.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/ErrorCommand.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/SubscribeConfirm.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/SubscribeConfirm.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/SubscribeConfirm.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/BaseCommand.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/BaseCommand.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/BaseCommand.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribe.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribe.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribe.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/IListServCommand.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Owner.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribeConfirm.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribeConfirm.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/UnSubscribeConfirm.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Subscribe.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Subscribe.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Subscribe.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Info.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Info.java:import
org.apache.james.transport.mailets.ICommandListservManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/listservcommands/Info.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java:import
org.apache.james.core.MailImpl;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java:import
org.apache.james.util.VirtualUserTableUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/MailboxDelivery.java:import
org.apache.james.transport.mailets.sieve.SieveToMultiMailbox;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WrapText.java:import
org.apache.james.util.mailet.FlowedMessageUtils;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.mailboxmanager.MailboxSession;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.mailboxmanager.mailbox.Mailbox;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.mailboxmanager.manager.MailboxManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java:import
org.apache.james.userrepository.DefaultUser;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.mailboxmanager.MailboxSession;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.mailboxmanager.mailbox.Mailbox;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.mailboxmanager.manager.MailboxManager;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.services.User;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.userrepository.DefaultUser;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.ActionModeAutomatic;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.Disposition;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.DispositionModifier;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.MDNFactory;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.ModifierError;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.SendingModeAutomatic;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java:import
org.apache.james.util.mail.mdn.TypeDeleted;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/FromRepository.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/FromRepository.java:import
org.apache.james.services.MailRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListservManager.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListservManager.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AvalonListservManager.java:import
org.apache.james.services.UsersStore;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToRepository.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToRepository.java:import
org.apache.james.services.MailRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservProcessor.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservProcessor.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservProcessor.java:import
org.apache.james.services.UsersStore;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservProcessor.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservProcessor.java:import
org.apache.james.util.mailet.MailetUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/AddHabeasWarrantMark.java:import
org.apache.james.transport.matchers.HasHabeasWarrantMark;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCListserv.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCListserv.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/CommandListservFooter.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/GenericListserv.java:import
org.apache.james.util.mailet.MailetUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java:import
org.apache.james.util.VirtualUserTableUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToMultiRepository.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToMultiRepository.java:import
org.apache.james.James;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToMultiRepository.java:import
org.apache.james.core.MailImpl;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToMultiRepository.java:import
org.apache.james.services.MailRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ToMultiRepository.java:import
org.apache.james.services.MailServer;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java:import
org.apache.james.util.JDBCBayesianAnalyzer;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysisFeeder.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysisFeeder.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/BayesianAnalysisFeeder.java:import
org.apache.james.util.JDBCBayesianAnalyzer;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/LogMessage.java:import
org.apache.james.core.MailImpl;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ReplaceContent.java:import
org.apache.james.util.mailet.StringUtils;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCAlias.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCAlias.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java:import
org.apache.james.services.JamesUser;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java:import
org.apache.james.util.SqlResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java:import
org.apache.james.util.JDBCUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java:import
org.apache.james.util.VirtualUserTableUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java:import
org.apache.james.util.io.IOUtil;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ICommandListservManager.java:import
org.apache.james.transport.mailets.listservcommands.IListServCommand;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ICommandListservManager.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/ICommandListservManager.java:import
org.apache.james.util.XMLResources;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/smime/AbstractSign.java:import
org.apache.james.security.KeyHolder;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/smime/AbstractSign.java:import
org.apache.james.security.SMIMEAttributeNames;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/smime/SMIMECheckSignature.java:import
org.apache.james.security.KeyStoreHolder;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/smime/SMIMECheckSignature.java:import
org.apache.james.security.SMIMESignerInfo;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/smime/SMIMEDecrypt.java:import
org.apache.james.security.SMIMEKeyHolder;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UnwrapText.java:import
org.apache.james.util.mailet.FlowedMessageUtils;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java:import
org.apache.james.services.UsersRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java:import
org.apache.james.services.UsersStore;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java:import
org.apache.james.services.VirtualUserTable;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java:import
org.apache.james.vut.ErrorMappingException;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/DSNBounce.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/DSNBounce.java:import
org.apache.james.core.MailImpl;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/DSNBounce.java:import
org.apache.james.util.mail.MimeMultipartReport;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/DSNBounce.java:import
org.apache.james.util.mail.dsn.DSNStatus;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java:import
org.apache.james.Constants;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java:import
org.apache.james.dnsserver.TemporaryResolutionException;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java:import
org.apache.james.services.DNSServer;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java:import
org.apache.james.services.SpoolRepository;
spoolmanager-function/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java:import
org.apache.james.util.TimeConverter;

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message