Hi Guillaum,

see my inline comments. (and no more "devils advocate" mode ;) )


2014-04-17 13:34 GMT+02:00 Guillaume Nodet <gno...@apache.org>:

> Yes, you're right about a lot of things.
> Regions end up creating some kind of hierarchical classloader tree similar
> to JEE.
> In theory, regions define a graph, not a tree, but it's quite difficult to
> manage from a user pov, so limiting to a tree makes things easier imho.
>
>
full ack, a tree is always far easier to understand and to control.


> Using a graph instead of a tree could be interesting, as we could isolate
> features, but still use them in a graph. At a pure package level, we could
> imagine you would install the spring2 and spring3 features, and another
> "scoped" feature could say that it depends on spring2 and thus would not be
> allowed to see spring3 bundles.  But we can achieve the same simple use
> cases using a tree really.
>

yep, sounds good and feasible


>
> Anyway, I have the following requirements in mind:
>   * the use of regions is optional : even if the code supports it, and even
> if it's enabled by default, given the deployer explicitely require to
> install a feature on a given region, the default behavior would be the same
> as today and all features would be installed to the root region by default.
>  So unless the user explicitely requires an installation onto a different
> region, the behavior would be the same.
>

+1, simplifies it for us as maintainer and makes the life easier for us to
explain to others ;)


>   * unless explicitely stated otherwise in the feature <scoping> element,
> regions do inherit from all their parent capabilities, so if you define an
> isolated region "root/apps", any feature deployed on the root region would
> be available
>
>
ok, like that


> So you're actually right when you describe the whole system as a
> classloader tree.
>

The only downside, as you hide certain information and might get back to
the classloader hierarchy issues you already have with a war-classloader in
a JEE app server, but that's life one has to die one sort of death :)


>
> However, regions isolate more than just packages, especially bundle
> visibility (which can be interesting when working with extenders such as
> aries-blueprint and gemini-blueprint) and service visibility.
>

This has been the first use-case that came to my mind and is fully
understandable especially with Karaf 4 now lacking internal usage of
blueprint. and it's I think the "only" real good use-case right now, cause
if we have this "too loose" on the usage layer people will be to strict on
their applications and end up in a ear like use-case.


>
> One big use case I have in mind is if you want to allow deployment of
> bundles by a third party : you may want to tightly control the region so
> that bundles from the third party can't see your internal stuff (and can't
> mess with it) and also isolate bundles from a third party from another
> (multi-tenant applications).
>
>
yes and no, one could think of using a single Karaf (or cellar based
cluster ;) ) as backend for a PAAS situation where this is quite usable.
No, because of what I've already seen with Virgo (spring-dm-server) some
years ago, with kernel and user land where you had a lot of issues to share
bundles, but this is a acceptable downside for using a Karaf PAAS :)

I also like the idea of defining these isolation levels within the features
descriptor.

regards, Achim


>
> 2014-04-17 13:16 GMT+02:00 Achim Nierbeck <bcanh...@googlemail.com>:
>
> > Hi Guillaume,
> >
> > thanks for the Head-up. The first time I had contact with some sort of
> > "region" was while playing around with the spring-dm-server (now Virgo)
> and
> > tbh. I didn't like it.
> > Especially this separation of kernel- and user-land for bundles been a
> big
> > pita and quite confusing,
> > the worst thing about it, I needed to install bundles twice. This is
> > something I surely don't want for Karaf. We need to make sure this
> doesn't
> > bloat everything as it did for Virgo.
> >
> > Besides this :)
> > The idea of the regions especially for having spring2 and spring3
> > applications running on the same container does seem quite tempting. Are
> > bundles of the root region to be shared with the underlying region. And
> > doesn't the region concept go back to a hierarchical classloader? Like
> what
> > we have in a JEE server? (Beware I'm in devels advocate mode) While at
> it,
> > wouldn't this mean Karaf ends up doing the same as a standard JEE server
> > with the hierarchical classloader and what is the purpose of Karaf then?
> > Don't we loose all the benefits of OSGi at this point, shouldn't people
> > just develop EAR applications then again?
> >
> >
> >
> > regards, Achim
> >
> >
> > 2014-04-17 9:56 GMT+02:00 Guillaume Nodet <gno...@apache.org>:
> >
> > > Reminder: region is a concept which allows partitioning the OSGi
> > framework
> > > between multiple defined regions and control the visibility of bundles,
> > > packages and services while crossing regions.  This allow the same
> bundle
> > > to be deployed in two different regions if the regions can't see each
> > other
> > > (that's simplifying a bit, but you get the idea).
> > >
> > > Unless I'm wrong, support for regions in Karaf 3.x is very limited and
> > > while we have a few commands to view and operate on regions.
>  Currently,
> > > the region where a feature is deployed has to be written in the feature
> > > descriptor (which makes deploying the same feature in 2 different
> regions
> > > quite difficult) and there's no option for sharing policies between
> > > regions.
> > >
> > > I've recently added support for Aries Subsystems in master.  While
> > > Subsystems could theoretically fulfil our needs, we still have the same
> > > problems than with applications: i.e. it's totally unmanageable without
> > > tooling.
> > >
> > > What I'd like to do, is get rid of the current region support to have
> the
> > > feature service more aware of regions.  The idea is to have the
> > following:
> > >   * a "root" region
> > >   * multiple user created child regions for isolation (import
> everything
> > > from the parent, but share nothing) as a tree
> > > Those regions are organized in a tree:
> > >    root
> > >    root/container1
> > >    root/container2
> > >    root/container2/spring2
> > >    root/container2/spring3
> > >
> > > When installing / uninstalling features, the user will have to provide
> > the
> > > region path in which the new features should be added or removed.
> > >
> > > By default, features would be flattened, i.e, bundles are deployed
> > directly
> > > in the region, however, features can specify a custom sharing policy so
> > > that the internal (services and packages) is hidden and not visible
> > outside
> > > of the region.  For example, the aries-proxy could be defined with the
> > > following:
> > >
> > >     <feature name="aries-proxy" description="Aries Proxy"
> > > version="${project.version}">
> > >         <bundle dependency="true"
> > > start-level="20">mvn:org.ow2.asm/asm-all/${asm.version}</bundle>
> > >         <bundle dependency="true"
> > >
> > >
> >
> start-level="20">mvn:org.apache.aries/org.apache.aries.util/${aries.util.version}</bundle>
> > >         <bundle
> > >
> > >
> >
> start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.api/${aries.proxy.api.version}</bundle>
> > >         <bundle
> > >
> > >
> >
> start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.impl/${aries.proxy.version}</bundle>
> > >         <capability>
> > >
> > >
> > >
> >
> service-reference;effective:=active;objectClass=org.apache.aries.proxy.ProxyManager
> > >         </capability>
> > >         <scoping>
> > >             <export namespace="osgi.service">
> > >                 (objectClass=org.apache.aries.proxy.ProxyManager)
> > >             </export>
> > >             <export namespace="osgi.wiring.package">
> > >
> > >
> > >
> >
> (|(osgi.wiring.package=org.apache.aries.proxy)(osgi.wiring.package=org.apache.aries.proxy.*))
> > >             </export>
> > >             <import namespace="org.eclipse.equinox.allow.all">
> > >                 (|(!(all=*))(all=*))
> > >             </import>
> > >         </scoping>
> > >     </feature>
> > >
> > > The <scoping> element defines a custom policy.  In the above case, the
> > only
> > > thing exported from the region is the  org.apache.aries.proxy.*
> packages
> > > and the org.apache.aries.proxy.ProxyManager service.  The region
> imports
> > > everything.
> > > This is really just an example and while the syntax is what i'm
> > > experimenting with now, the idea is to simplify it so that the user
> would
> > > write "package", "service", "all" and with dedicated elements to help.
> > >
> > > Those scoped features will also create regions automatically, so that
> the
> > > above when deployed into root/apps1 would create a child region
> > > /root/apps1/aries-proxy-4.0.0-SNAPSHOT.
> > >
> > > The features service will be responsible for computing the regions and
> > > which and where bundles need to be deployed using the OSGi resolver.
> > >
> > > Anyway, I'm still experimenting, but I wanted to give a heads up on
> this
> > > point.
> > >
> > > Cheers,
> > > Guillaume Nodet
> > >
> >
> >
> >
> > --
> >
> > Apache Karaf <http://karaf.apache.org/> Committer & PMC
> > OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer
> &
> > Project Lead
> > blog <http://notizblog.nierbeck.de/>
> >
> > Software Architect / Project Manager / Scrum Master
> >
>



-- 

Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer &
Project Lead
blog <http://notizblog.nierbeck.de/>

Software Architect / Project Manager / Scrum Master

Reply via email to