On Mar 11, 2009, at 11:27 AM, Jarek Gawor wrote:
On Wed, Mar 11, 2009 at 1:29 PM, David Jencks
<[email protected]> wrote:
On Mar 11, 2009, at 1:46 AM, Gianny Damour wrote:
Hi,
So let's agree to disagree for now. This may be related to my
personal way
of comparing stuff which is pretty much limited to:
1. understand what the requirements are.
2. understand how the technologies support these requirements. I
do not
need all the bells and whistles that a technology offers to
fulfill the
requirements. Moreover comparing stuff based on technology
differentiators
not clearly linked to the requirements is pointless.
3. assess best way forward based on above scoring.
Key steps are 1 and 2 where stuff offering all the bells and
whistles may
well be scored as good as other stuff (I clearly do not support
over-bloated
stuff...).
Obviously, I am keen to be proven wrong and adjust accordingly. So
far, I
am still saying that the main challenge is to properly tune export/
import of
dependency declarations. For me, the technology is not the core
issue and
switching is not going to resolve problems.
I agree. I doubt Guillaume has seen your additions to classloading
in trunk
which allow you to not export packages from a classloader. I
haven't tried
to prove it mathematically but I think that with this feature the
classloading models for geronimo and osgi are equivalent in that
you can
express the same ability to access classes with either of them. Of
course,
the notation you use to express this and the specific information
included
in the configuration is different.
I think I probably have the most experience with classloading
problems in
geronimo and the only real problem that arises is loading a jar in
two
different classloaders. This can be solved by a classloader-per-
jar model
which offers no theoretical problems to set up in geronimo but
practically
would take a lot of work (and maven projects to build a plugin per
jar). So
I think we'll have to see what kind of problems we get with trying to
actually use OSGI.
Right but that's an important problem which we run into all the time
in Geronimo (same jar loaded by two different classloaders). And the
solution to this problem is to create another
configuration/classloader and make that the parent of the two. This is
a pretty 'static' solution while osgi offers 'dynamic' solution where
it figures out at runtime which packages to wire together. So
Geronimo's and osgi's classloading models might be equivalent ONLY IF
we support classloader-per-jar model. Hiding classes/packages in a
classloader is not enough.
Our classloading system does support classloader-per-jar right now,
but we haven't set up enough classloaders to act that way, and I'm
hoping that osgi will provide the same features with less work. From
a conceptual point of view I don't see why osgi would be any more or
less dynamic than geronimo. The classes are coming out of some
versioned jar and IMNSHO you are unlikely to want to allow the
resolution method to pick anything other than the version of the jar
for you. If you leave out the version in the dependency geronimo will
pick one for you... I'm not sure what the equivalent osgi
configuration would be.
Basically it seems to me that osgi has the same problem as geronimo
here, that you have to include some really intrusive metadata in every
jar to specify the classloading behavior. Osgi has merely brainwashed
everyone into thinking that its metadata is desirable since its part
of the manifest whereas geronimo has some weird binary goo that no one
is familiar with. Maven does the same thing, packing the pom into
every jar it builds (plus supplying it alongside in the repository)
So, everyone has the same problem -- you need a bunch of classloader
metadata associated with the artifacts you want to use -- and pretty
much agrees on the content, although each solution emphasizes
different things. IMO no one has a good solution yet. For instance
AFAICT the felix bundle maven plugin is typically used to effectively
convert the maven artifact dependencies to equivalent package import/
export specifications.
<rant coherency="questionable">
To me it seems like there are two opposing forces at work here. On
the one hand you want your code to be able to run in a variety of
environments. On the other hand you want to be able to know and
specify stuff about the environment. The environment basically boils
down to a graph of a bunch of jars. (with osgi, the classes you
specifiy in import/export requirements are in fact coming from some
jar, somewhere). So how are you going to specify that graph? How are
you going to make it flexible? What's the boundary between your app
and the outside world?
Maven and geronimo deal with this by having your app specify the jars
it wants and by allowing some way to substitute jars (artifact-aliases
in geronimo, exclusions in maven). osgi lets you specify the jars you
want (require-bundle.... I don't know if there's any way of overriding
this like in geronimo and maven) or by import/export specifications.
As far as I know in osgi to control what you get with import/export
specifications you have to control what jars are known to the osgi
implementation. Maven and geronimo are unfortunately tieing your app
to particlar implementations but let you specify that implementation
easily. Osgi is not forcing you to specify which implementation you
want but is saying that specifying it is someone else's problem.
Think of what happens when you assemble a geronimo custom server. You
specify the particular "app" plugins you want (say your app deployed
with jetty and cxf and myfaces and a db pool and amq config) and
geronimo uses the dependency information to pull in everything else
you need for a complete server. If you want a different db pool you
use artifact aliases to get that one instead. Geronimo and maven are
asymmetric in that there is one "primary" dependency specified in the
plugin itself (say the db pool you want) but you can override it
somehow. I don't know how to specify stuff like this conveniently in
osgi. (I'm aware that I'm mixing up classloading and service
dependencies here but think I still have a point even if not very well
expressed)
</rant>
thanks
david jencks
Jarek