Matt, I don’t see commons-plugins needing a configuration. Remember, there are several components in Log4j that don’t use a configuration file. Namely, Lookups, PatternConverters, KeyProviders, and Watchers, I view the plugin system as an API that a configuration system would use to instantiate the objects referenced in the configuration.
Ralph > On Apr 4, 2022, at 8:30 AM, Matt Sicker <boa...@gmail.com> wrote: > > From the Log4j side of things, I didn't exactly overhaul the > configuration parsing or representation of it, so it would depend on > how different that looks in this proposed component. Ideally, though, > a commons-plugins component would replace log4j-plugins and > log4j-plugin-processor along with some of the plugin types we have > like type converters and config variable substitution. > > From a high level point of view, the inputs would be a configuration > source (e.g., a reloadable file or HTTPS link or whatever), and the > output would be a graph of instantiated plugins from the > configuration. > > On Mon, Apr 4, 2022 at 8:12 AM Gary Gregory <garydgreg...@gmail.com> wrote: >> >> I am trying to figure out the input and output of a Commons Plugins >> that Log4j would use. >> >> Gary >> >> On Sun, Apr 3, 2022 at 10:51 PM Ralph Goers <ralph.go...@dslextreme.com> >> wrote: >>> >>> It has been too long since I looked at Commons Configuration for me to >>> answer that. >>> >>> Ralph >>> >>>> On Apr 3, 2022, at 7:25 PM, Gary Gregory <garydgreg...@gmail.com> wrote: >>>> >>>> So in a Commons centric fantasy, Log4j Nodes could be Commons Configuration >>>> objects? >>>> >>>> G >>>> >>>> On Sun, Apr 3, 2022, 22:18 Ralph Goers <ralph.go...@dslextreme.com> wrote: >>>> >>>>> If you look at Log4j, we parse the configuration and convert it to a Node >>>>> hierarchy. >>>>> Variable interpolation occurs as the Nodes are constructed. >>>>> >>>>> But again, Nothing says a Commons Plugins implementation has to work the >>>>> same way. >>>>> >>>>> Ralph >>>>> >>>>>> On Apr 3, 2022, at 7:12 PM, Gary Gregory <garydgreg...@gmail.com> wrote: >>>>>> >>>>>> Nice thread :-) >>>>>> >>>>>> Where does the parsing of configuration files mix in such a stack? >>>>>> >>>>>> Where does variable interpolation come into play? >>>>>> >>>>>> Gary >>>>>> >>>>>> On Sun, Apr 3, 2022, 20:50 Ralph Goers <ralph.go...@dslextreme.com> >>>>> wrote: >>>>>> >>>>>>> Matt J, >>>>>>> >>>>>>> I fully expect that if commons-plugins came into fruition it would bear >>>>> a >>>>>>> resemblance >>>>>>> to the Log4j plugin system but there would be differences. For example, >>>>>>> while Log4j >>>>>>> integrates with Spring we don’t currently support having the logging >>>>>>> configuration in >>>>>>> application.yml. I also suspect it would an almost impossible >>>>> abstraction >>>>>>> to have the >>>>>>> DI system be pluggable, but I could be wrong about that. >>>>>>> >>>>>>> Of the bulleted items you listed Log4j’s plugin system handles all of >>>>> them >>>>>>> except that >>>>>>> it doesn’t deal with dependencies. Instead, if your plugin is running in >>>>>>> an OSGi >>>>>>> environment it would be expected that the dependent modules would be >>>>>>> available as >>>>>>> described by the manifest for the module the plugin is included in. >>>>>>> >>>>>>> The goals for the log4j-plugins are really pretty simple. >>>>>>> * Allow applications to provide flexibility by exposing sets of >>>>> pluggable >>>>>>> component types. >>>>>>> * Allow users to provide their own implementations of the pluggable >>>>>>> components that >>>>>>> are on an equal footing with the “standard” components. >>>>>>> >>>>>>> Just by way of example, Apache Flume allows pluggable components such as >>>>>>> Sources, >>>>>>> Sinks and Channels. Writing a new Sink is fairly straightforward. But it >>>>>>> will not be on >>>>>>> an equal footing with the Sinks provided by Flume. This is because there >>>>>>> is code in >>>>>>> Flume that provides an alias (such as “avro” for the AvroSink) so that >>>>> the >>>>>>> plugin class >>>>>>> can be named without having to specify the fully qualified class name. >>>>>>> Custom >>>>>>> components must be configured using the FQCN. The Log4j plugin system >>>>>>> solves >>>>>>> this by requiring every plugin to have a “name” which is then used as >>>>> the >>>>>>> mechanism >>>>>>> to locate it from the configuration. >>>>>>> >>>>>>> Non-goals would be >>>>>>> * It is meant to load plugins, not be a full DI system for every >>>>> component. >>>>>>> * It leverages standard class loading methodologies, not a new one. i.e. >>>>>>> it works with >>>>>>> the standard Java class path, module path, or OSGi. >>>>>>> >>>>>>> Ralph >>>>>>> >>>>>>> >>>>>>>> On Apr 3, 2022, at 8:49 AM, Matt Juntunen <matt.a.juntu...@gmail.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> Hi Matt, >>>>>>>> >>>>>>>> This is quite timely since I've spent the past week researching >>>>>>>> frameworks to modularize a monolithic application at my day job into >>>>>>>> separate components/plugins. Everything I've looked at so far is >>>>>>>> larger and more complicated than I need (e.g. OSGi, Spring, etc) so I >>>>>>>> was seriously considering writing my own, perhaps based on select >>>>>>>> components from the Plexus project [1]. I would be interested in this >>>>>>>> project if it could do the following: >>>>>>>> - provide a standardized plugin packaging format; >>>>>>>> - provide standardized configuration mechanisms; >>>>>>>> - handle plugin discovery and enumeration; >>>>>>>> - handle service discovery, enumeration, and dependency injection; >>>>>>>> - handle class loading and resolution of plugin dependencies (e.g. a >>>>>>>> plugin that depends on a different version of commons-lang than >>>>>>>> another plugin); and >>>>>>>> - provide plugin lifecycle methods. >>>>>>>> >>>>>>>> It would also be great if the project was compatible with different >>>>>>>> frameworks. For example, if the dependency injection functionality >>>>>>>> could be swapped out for Spring if needed. >>>>>>>> >>>>>>>> I haven't totally completed my research so I'm not sure if there is >>>>>>>> actually an existing framework out there that satisfies the above >>>>>>>> requirements. If not, I would be willing to help out to get this >>>>>>>> implemented, regardless of whether it ends up in commons or not. >>>>>>>> >>>>>>>> One more thought: I think it would be equally important (if not more >>>>>>>> so) to define the non-goals of this potential project as the goals. Do >>>>>>>> you have an idea of what those would be? >>>>>>>> >>>>>>>> Regards, >>>>>>>> Matt J >>>>>>>> >>>>>>>> [1] https://codehaus-plexus.github.io/ >>>>>>>> >>>>>>>> On Sun, Apr 3, 2022 at 6:24 AM Gary Gregory <garydgreg...@gmail.com> >>>>>>> wrote: >>>>>>>>> >>>>>>>>> Should this be in Commons Configuration? >>>>>>>>> >>>>>>>>> Gary >>>>>>>>> >>>>>>>>> On Sat, Apr 2, 2022, 15:33 Matt Sicker <boa...@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> 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 >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>> >>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>> >>>>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org