Le mar. 12 avr. 2022 à 21:31, Ralph Goers <ralph.go...@dslextreme.com> a
écrit :

>
>
> > On Apr 12, 2022, at 6:56 PM, Thomas <t...@online.de> wrote:
> >
> >
> > On 11.04.2022 00:00, Ralph Goers wrote:
> >> See below
> >>
> >>> On Apr 8, 2022, at 9:23 AM, Peter Verhas<pe...@verhas.com> wrote:
> >>>
> >>> Thanks Ralph for the detailed explanation. I appreciate it and now I
> see
> >>> the points.
> >> I’ve removed the parts that I don’t think need any more discussion.
> >>
> >>> - How will it be a “plugin" project and not another dependency
> injection
> >>> framework?
> >> This is a great question. I think the main difference is with examples
> like Log4j
> >> and Apache Flume, and even Apache Maven. All wire components together
> via
> >> user provided configuration, not code. Dependency injection could
> certainly be
> >> part of the plugin framework but that would be for implementors of
> plugins,
> >> not the users using them. Users of Maven don’t know that Plexus is used
> under
> >> the covers and neither should users of a commons-plugins implementation.
> >>
> >>> - What will distinguish it from module systems, like OSGi and what will
> >>> stop it from becoming another OSGi by the years as new features get
> added
> >>> to the library.
> >> OSGi is complicated. Implementing plugins should not be. Just as I
> described
> >> using ServiceLoader to locate plugins, plugins should also be
> accessible in
> >> OSGi bundles. Users should be required to do as little as possible to
> adapt the
> >> plugin system to the environment it is running in*but plugins shouldn’t
> know or care anything about how they are located and loaded.* Plugins are
> also to the
> >> application or framework that will be using them. They essentially
> define what
> >> the valid plugin types are and where they can be used.
> >
> > This is impossible. The bare minimum, any system or artifact has to do,
> to be recognized as a plugin, is advertising itself as one. That would be
> true, even if your service locator is crawling through every class of the
> classloader it can get hold of to determine, whether it is a candidate to
> consider.
> >
> > - OSGI does this by parsing the MANIFEST and OSGI-INF
> >
> > - Spring uses a combination of XML and crawling annotations and packages
> >
> > Every other CDI framework does it similar to these two, most of them
> heavily reliying on XML- or property based configuration too. With one
> notable exception: the dreaded ServiceLoader mechanism, which fixes this
> during compile time in the module-info, if you use JPMS, else mapping it in
> META-INF/services with simple plain text files, that require no parsing
> other then getting the line breaks right - no reflection / premature
> loading required. (Which btw, I think is the slickest solution so far, as
> it does make service discovery very cheap for small systems, with few class
> path entries. Complication is inevitably the result of large classpaths,
> that require plugin arbitration to resolve ambiguities and filtering)
> >
> > So no: at the very least, a plugin has to know, by what plugin system it
> is going to be loaded. And - a different hyperbole: because of this, apache
> commons has started to introduce the attributes required by OSGi into the
> MANIFESTs of many of its components, just to bridge the gap, and to
> aleviate the need to for OSGi-Users to introduce wrappers.
> >
> > For me, this will be all well and fine, as long as none of the current
> or future apache commons artefacts will  become unusable unless I also put
> commons-plugin or some arcane configuration parser into the class path.
>
> I never said a plugin shouldn’t know it is a plugin. Providing the
> manifest entries required to make a component usable in an OSGi environment
> doesn’t mean the Plugin has to know it is being used in a an OSGi
> environment. Likewise, providing a module-info.java doesn’t mean the plugin
> will be used as part of a module on a module path. Using Log4j as an
> example once again, its Plugins know that they are a Filter, Appender,
> Lookup, Layout, or whatever. But they have no knowledge of how they were
> loaded. They DO know that they are being used by Log4j for a specific
> purpose and what contract they have to implement for that, but that is
> exactly what plugins are for.
>
> So I guess Log4j is doing the impossible?


It would if it would be all IoC natively integrated as all plugin systems
but log4j created its own in parallel - for good and bad reasons, not
discussing it there. So overall log4j just does like other IoC as of today
;).



>
> Ralph
>
>
>

Reply via email to