Hi all, I’ve got a proposal for a new Commons component that I’d like to get 
feedback on. Essentially, I’d like to propose the creation of a Commons Plugins 
component inspired by the plugin system developed for Log4j 3.x [0]. This 
library would be a lightweight dependency injection and configuration library 
where developers create pluggable classes that can be referenced through plugin 
names via the configuration file (or configuration source in general). In 
contrast with more typical dependency injection frameworks like Spring and 
Guice, this library is for applications where pluggable implementations of 
things is desired. Developing a plugin system on top of DI frameworks is not a 
very standardized domain, and each project ends up reinventing this from 
scratch over time.

Some existing material on how the Log4j plugin and configuration system works 
that I’d adapt from to form the basis for this component include:
- 
https://github.com/apache/logging-log4j2/blob/master/src/site/asciidoc/manual/dependencyinjection.adoc
 
<https://github.com/apache/logging-log4j2/blob/master/src/site/asciidoc/manual/dependencyinjection.adoc>
- 
https://github.com/apache/logging-log4j2/blob/master/src/site/asciidoc/manual/plugins.adoc
 
<https://github.com/apache/logging-log4j2/blob/master/src/site/asciidoc/manual/plugins.adoc>

The general goal of this library is to make it so that applications can provide 
better configuration DSLs for their plugin components. As both a developer and 
user, I absolutely despise configuring complex applications with properties 
files, and YAML variants of properties aren’t that much better. If there was a 
common plugin library we could reuse, then perhaps more applications would 
support a better configuration system. This could also provide a nice place for 
tooling integration similar to how JUnit is supported by IDEs and other tools.

What do you think? Should this start in the Sandbox? Is anyone interested in 
working on or using this?

[0]: https://github.com/apache/logging-log4j2/tree/master/log4j-plugins 
<https://github.com/apache/logging-log4j2/tree/master/log4j-plugins>

—
Matt Sicker

Reply via email to