[ https://issues.apache.org/jira/browse/JAMES-2335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17140583#comment-17140583 ]
Matthieu Baechler commented on JAMES-2335: ------------------------------------------ Partial response: > I do see it as a way to dynamically load / unload extensions like mailets and > change the processing pipeline at runtime. We don't need OSGi to load/unload things at runtime. It's not hard to load things into a sub-classloader. > OSGi really makes dependency management so much easier and is enforced by the > classloader (which does not make available any "private" packages). Do you mean Java modules are not providing that? I'm very curious, I thought it does. > Email is well-known. It seems to me that we ought to be able to provide good > Java APIs with interchangeable implementations. Yet there's no good implementation out there. The idea that email is a "done" topic is completely wrong: just search an IMAP client library and you'll see what I mean. Mime handling is not really better. I would not be writing email code if it already existed. > Using Declarative Services seems to me to be a lot cleaner than Guice. There's overlap in features but they don't solve the same problem. > It has a really advanced build system (BND) that works awesome with Gradle. > Resolving dependencies and packaging up distributions is really clean and > easy. Sounds so cool. But you have to write code now or it doesn't exist, right? > Modernize James configuration > ----------------------------- > > Key: JAMES-2335 > URL: https://issues.apache.org/jira/browse/JAMES-2335 > Project: James Server > Issue Type: Improvement > Components: configuration > Reporter: Benoit Tellier > Priority: Major > Labels: feature, refactoring > > Apache James currently relies on commons-configuration, and thus on XML > configuration files. > As such the configuration process has several problems: > - Working with XML is boiler plate > - Working with file leads to a real lack of flexibility. > - For instance, in a cluster environment, we would like all the James > server to share the same configurations. > - Also, in tests, we need to test the different configuration values. > We can not do this without overwriting files, which is dangerous, and > boilerplate. > What we need is: > - To represent all possible configuration via java objects. > - Configuration providers should be able to convert the configuration stored > into the java configuration object. > - We should be able to inject different configuration providers from > guice/spring. > It would allow to specify alternative configuration backends (different > formats, different storage techniques) and allow direct injection (for tests > for instance). > Here would be the steps for this work: > - Add a *Initializable* class in *lifecycle-api*. This should be called by > Guice and Sprint at initialization > - *configure* in Configurable will save a Java object (parse the > HierachicalConfiguration into a java object representing it's content). > Initialization will then be done by *Initializable*. > - Then we can move away, object by object, from the *Configurable* > interface: We need to move the configuration parsing in a separated class > (behind an interface). We can register *ConfigurationProviders*, with an > XML/commons-configuration default implementation. > - Deprecate *Configurable*. > - Provide alternative configuration providers, for example, a Cassandra > stored configuration provider -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org