Raul,

As far as I know, here is what you get with bundles:

1. Bundle can be loaded independently from other bundles.

This is false in Ignite. Every optional dependency in Ignite has to be
loaded together with ignite-core module. For example, “ignite-kafka" module
should be a fragment, because it cannot exist without ignite-core module.
The Kafka itself of course should be a separate bundle.


2. Bundles can be loaded with their own class-loaders.

Again, for Ignite optional modules this should not be the case. The
“ignite-kafka” module should be loaded with the same class-loader as
“ignite-core" module.

When you talk about Kafka, and Zookeeper, these dependencies themselves can
be brought as bundles, of course, but “ignite-kafka” and "ignite-zookeeper"
modules should be fragments of the ignite-core bundle.

Are you suggesting the same design? If not, then please explain how having
“ignite-kafka" as a bundle can benefit ignite architecture and ignite users.

D.

On Wed, Nov 11, 2015 at 3:33 PM, Raul Kripalani <r...@evosent.com> wrote:

> No, Dmitriy. The policy should be to use the right technique for each job,
> and to be respectful with the concepts in the underlying standards.
>
> Fragments and Bundles must be used where they belong and according to their
> roles in the OSGi specification.
>
> Users don't need to know the rationale. They just provision the modules
> onto their containers and that's all.
>
> Fragments are used in very special and sporadic cases, never as a rule.
> Typically to alter some aspect of the host bundle, or to contribute
> internal resources.
>
> That's valid for some modules, but not for others.
>
> There is no point injecting Kafka, MQTT, Hibernate, Zookeeper, etc. into
> Ignite Core through fragments.
>
> You guys ought to stop thinking about classloaders in general, and start
> thinking about building the right modularity with the appropriate import
> and export packages. Classloaders are an internal concept which normally
> doesn't need to permeate to the bundle developer.
> On 11 Nov 2015 21:32, "Dmitriy Setrakyan" <dsetrak...@apache.org> wrote:
>
> > Raul,
> >
> > Personally, I find this policy to be a bit too scientific and it is
> likely
> > to confuse most of our users. From a consistency standpoint why not pick
> > one path, Bundle or Fragment, and roll with it.
> >
> > According to OSGI Wiki [1], a Fragment is something that belongs to a
> > parent bundle and shares the same class-loader as the parent bundle. In
> our
> > case, this is true for all the Ignite dependencies. Wouldn’t it be more
> > appropriate to treat all Ignite dependencies as “Fragments”.
> >
> > [1] http://wiki.osgi.org/wiki/Fragment
> >
> > On Wed, Nov 11, 2015 at 3:41 AM, Raul Kripalani <ra...@apache.org>
> wrote:
> >
> > > Hey Dmitriy,
> > >
> > > On Wed, Nov 11, 2015 at 1:52 AM, Dmitriy Setrakyan <
> > dsetrak...@apache.org>
> > > wrote:
> > >
> > > > Can you please describe again the philosophy between choosing a
> > fragment
> > > or
> > > > a bundle for Ignite dependencies. I couldn’t fully grasp it from your
> > > > explanation.
> > > >
> > >
> > > Yes, sorry, I was somewhat brief (it was late here ;-)). The policy
> I've
> > > followed is to create bundles as a first preference. I've resorted to
> > > fragments in the following circumstances:
> > > * Split package situation, e.g. package
> > > org.apache.ignite.internal.processors.query.h2.opt, exported by several
> > > modules with different contents.
> > > * Dynamic discovery, e.g. the one that takes place in
> > > IgniteH2Indexing#createH2SpatialIndex. Since we cannot resolve this
> > > situation using a package import (because there would be multiple
> bundles
> > > exporting that package), therefore by using a fragment we are injecting
> > > these classes into the class-space in the host bundle.
> > > * Modules offering the components listed in IgniteComponentType, which
> > are
> > > discovered dynamically.
> > >
> > > Modules that are represented as fragments are: geospatial, indexing,
> jta,
> > > spring, ssh.
> > >
> > > *Raúl Kripalani*
> > > PMC & Committer @ Apache Ignite, Apache Camel | Integration, Big Data
> and
> > > Messaging Engineer
> > > http://about.me/raulkripalani |
> http://www.linkedin.com/in/raulkripalani
> > > http://blog.raulkr.net | twitter: @raulvk
> > >
> >
>

Reply via email to