Relationship to JSR 291 [was: Re: Bryan's comments]
Richard S. Hall
heavy at UNGOVERNED.ORG
Fri May 25 08:01:03 PDT 2007
Stanley M. Ho wrote:
> Hi Bryan,
> Bryan Atsatt wrote:
>> Let me clarify. It is my assumption that 277 will provide both an
>> API/framework *and* a specific ModuleSystem implementation. And that
>> OSGi will be able to supply another ModuleSystem implementation:
>> 277 API/Framework
>> / \
>> / \
>> 277ModuleSystem OSGiModuleSystem
> Right. There are also other module systems that can be plugged into this
> framework, e.g. NetBeans.
>> Therefore, the API's must *support* "import package", or it will not be
>> usable by the OSGiModuleSystem.
>> I agree that the 277ModuleSystem implementation does not need to support
>> "import package" semantics. Which means that the 277 APIs must support
>> *both* semantics.
>> Otherwise, OSGi will not be able to operate as a first-class citizen in
>> the 277 world.
>> And, if 294 adds support for "import", it should at least do the natural
>> thing of "import package". And it should also support "import module",
>> but supporting both at the language level may be awkward.
>> // Bryan
> I think we all agreed that the module system defined by JSR 277 does not
> need to support import package. As far as I am aware (correct me if I'm
> wrong), all the existing systems support import at the module level, and
> OSGi is the only one that supports import at the package level. Thus,
> import by package should be a feature specific to the OSGi specific
> module system implementation (e.g. OSGiModuleDefinition), and I don't
> think it is necessary to push it into the base classes in JSR 277.
Well, I must at least say that this is flawed logic at best. The fact
that only the OSGi framework supports importing packages does not say
anything about whether or not it should be supported by 277 or not.
There any many valid arguments why the import package model is better
due to the fact the is declares "what" is needed, not "who" contains
what is needed.
Using "who" instead of "what" generally leads to terrible dependency
fanout due to coarse-grained module definitions and brittleness. I am
fairly certain that I could conjure up some people who could tell you
stories about the horrors of the brittleness of the module dependency
approach when trying to re-use modules for different purposes. However,
I guess this is beside the point...
I think the real argument that should be made for not necessarily
including import package support is along the lines of what I was saying
in my other message, which is that we should keep 277 as simple as possible.
> This doesn't mean supporting the notion of import by package is
> impossible. What OSGi will expose from its repository is simply module
> definitions, and module definition is basically an abstraction.
> Therefore, it should be possible to treat an OSGi bundle as a module
> definition, as well as to treat each exported package in an OSGi bundle
> a module definition as well. The dependency supported in JSR 277 is
> import-by-module. In the JSR 277 module system, this is mapped to
> import-by-superpackage. In the OSGi module system, this can be mapped to
> import-by-OSGi-bundle or import-by-package. If other module systems want
> to support different import granularity or if OSGi evolves to add new
> import granularity in the future, this model should still work.
> Honestly, interoperability between multiple module systems with "import
> module" alone is already a hard enough problem for us to solve. I am
> concerned that we're making this problem towards insolvable if we keep
> adding complexity. ;)
Agreed, but I think part of the reason that there is an urge to push
such features into the core is because there is already feature creep in
the core that gives people the impression that we are redefining OSGi
modularity, NetBeans modularity, etc. Thus, everyone wants to make sure
their pet feature is added. If 277 could make a stand and declare that
it is at a layer beneath all of that (and live up to that declaration),
then there would likely be less push down.
More information about the jsr277-eg-observer