Thanks Romain for the details! (see inline)

czw., 25 mar 2021 o 08:31 Romain Manni-Bucau <rmannibu...@gmail.com>
napisał(a):

> Le jeu. 25 mars 2021 à 07:13, Grzegorz Grzybek <gr.grzy...@gmail.com> a
> écrit :
>
> > Good morning!
> >
> > śr., 24 mar 2021 o 19:57 Romain Manni-Bucau <rmannibu...@gmail.com>
> > napisał(a):
> >
> > > in terms of arch yes, the key feature is to have a tree classloader and
> > not
> > > a graph (drops all the build complexity of OSGi and enable scanning
> > > pluggability, yeah).
> > >
> >
> > Graph → Tree sounds like OSGi → JavaEE...
> > This can prevent user feature to install a bundle that overrides system
> > services.... I know that (without "134 Subsystem Service Specification"
> and
> > without hooks) effectively OSGi runtime is "flat" - every bundle wire is
> > equal and resolution rules apply. Also every OSGi service is equal and
> > service rank is taken into account.
> >
>
> Yes and no, a service registration can still use @Priority or a SPI method
> to be sorted, only thing it can prevent is to put conflicting deps in the
> same bootstrap classloader (that said these days OSGi is rarely used for
> that and since by design the bootstrap loader will be a single app - ie
> without any conflict at build time - it is actually sane).
>

In JavaEE, a WAR can (mostly) configure some providers, so e.g.,
DocumentBuilderFactory may return WAR-specific instance. But it's not
possible to affect this service loading in other WARs.
In OSGi, a bundle can register some service that'll become the valid
service for remaining bundles.
So I understand that Karaf 5 keeps the OSGi philosophy here, right?


>
>
> >
> > I'm trying to imagine how "it’s powered by OSGi R8 (but you will see that
> > it’s more an internal point)" works - is the "Level1: Karaf itself" a
> > graph-based layer of bundle classloaders, while applications are given
> > their own single classloader (kind of like WebSphere is (was?) based on
> > OSGi and WARs/EARs hand single classloader or like Wildfly/EAP that's
> > internally a graph of JBoss Modules, while WARs/EARs have single
> > classloader)?
> >
> > java.util.ServiceLoader is dynamic in nature and is a final (IMO) and
> quite
> > elegant discovery solution in tree-(ClassLoader)-based monoliths where
> you
> > "deploy" applications. And it's reflection based.
> >
>
> Last point does not have to be true, see some graalvm integrations for
> example, it is reflection less depends how you handle the build phase but
> being reflection "full" by default enables to keep the tooling (testing)
> working without breaking your IDE.
>

Mind that I'm not very experienced with Graal/Quarkus, so my questions may
be invalid ;)


>
>
> > How about graal/quarkus?
> > Let me be clear here - quarkus/graal/native approach is cool and makes
> Java
> > great again™, but I know that "enteprise" still likes the idea of
> > "application servers", so I hope Karaf5 is NOT going to be
> > "Kubernetes/OpenShift first" - long running processes with reflection and
> > dynamic classloading are still relevant.
> >
>
> Can you precise it there? Quarkus has two modes: JVM (where it is
> equivalent to most microprofile servers without the standard/spec support)
> and native mode (where arthur does the same closer to graalvm).
> First mode does not need much but last one does not concern karaf 5 AFAIK
> since spring-boot has its own graal integration, microprofile servers too
> (potentially EE ones too even if I didnt see one yet) and OSGi has its own
> through winegroewer so overall Karaf 5 sounds like the aggregator platform
> which would fallback on dropping it to be graal compliant (since you'll
> drop classloaders which makes all the power of the solution.
>

I imagine that Quarkus/Graal is designed mostly to develop apps that can
quickly start/stop and "application servers" is not the most desired goal
here.
And I was thinking about the native mode, where everything is mostly set up
at build time.



>
>
> >
> >
> > > In terms of service since the launcher is a monolith it has the key
> > > advantage to be able to scan all then dispatch so I guess we can just
> > have
> > > a ServiceLoader kind of SPI for "module service" impls and order them
> as
> > > needed. a ModuleService { setModuleServiceRegistry(Registry); } would
> > then
> > > do the trick probably, no need of fancy IoC for such low level
> framework
> > > IMHO.
> > >
> >
> > So clear distinguishing between "applications" and "server plugins" (with
> > e.g., replaceable Jackson as JSON provider) - am I interpreting your
> > statements correctly Romain?
> >
>
> For example yes even if I suspect the services should stick to very
> technical layers and isolated from the profile+app loaders so means jackson
> from the bootstrap loader shouldnt be usable in an app but you could
> configure it to leak (in the profile - ie the parent classes to use).
> Very generally services shouldnt leak but profiles will so a provider would
> sit in a profile loader IMHO.
> Services would be more about logging integration, http integration etc but
> wouldnt leak as such but as a karaf 5 plugin instrumenting the profile/app
> loader to do the needed replacement, potentially from its own service
> loader (service dependent outside of karaf 5 structure).
> Thinking out loud, it is very very close to tomee architecture which has
> exactly that except the bootstrap loader(s) leaks a lot since it is assumed
> not conflicting much and module services are not mainstream app oriented
> but EE oriented. But the service and tree of loaders is there so overall if
> Karaf5 would leverage the same architecture but power it by the Karaf core
> feature inherited from OSGi which is to make any app running in the same
> JVM.
> A service example could be for example an instrumentation one (since
> subclassloaders are karaf controlled) and do the javax -> jakarta migration
> on the fly.
>

Not sure about TomEE (no experience with it), but what I read, seems great
so far ;)

regards
Grzegorz Grzybek


>
> >
> > regards
> > Grzegorz Grzybek
> >
> >
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > <https://rmannibucau.metawerx.net/> | Old Blog
> > > <http://rmannibucau.wordpress.com> | Github <
> > > https://github.com/rmannibucau> |
> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> > > <
> > >
> >
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> > > >
> > >
> > >
> > > Le mer. 24 mars 2021 à 19:13, Jean-Baptiste Onofre <j...@nanthrax.net> a
> > > écrit :
> > >
> > > > Hi Romain,
> > > >
> > > > About OSGi, the way I did it (up to now), it’s as you describe:
> > > >
> > > > - Karaf "launcher"
> > > > — Libraries service
> > > > — Profiles service
> > > > — SpringBootModuleService
> > > > — OsgiModuleService
> > > > — MicroprofileModuleService (not yet started)
> > > >
> > > > The framework is only started when the first OSGi module is deployed.
> > > >
> > > > If the user deploys only SpringBoot apps in Karaf, he won’t have any
> > OSGi
> > > > framework.
> > > >
> > > > Is it what you expected ?
> > > >
> > > > On Karaf "launcher", we have services available (for now just using
> > > > karaf.getService("id")).
> > > >
> > > > I would love your feedback here. Thoughts ?
> > > >
> > > > Regards
> > > > JB
> > > >
> > > > > Le 24 mars 2021 à 19:03, Romain Manni-Bucau <rmannibu...@gmail.com
> >
> > a
> > > > écrit :
> > > > >
> > > > > Le mer. 24 mars 2021 à 17:35, Jean-Baptiste Onofre <
> j...@nanthrax.net>
> > a
> > > > > écrit :
> > > > >
> > > > >> Actually, spec like as DocuentBuilder would be rather a library,
> > > shared
> > > > by
> > > > >> all launchers.
> > > > >>
> > > > >
> > > > > Ok but what about jackson? the same?
> > > > >
> > > > > Joke apart what if spring-boot-app1 uses one impl and
> > spring-boot-app2
> > > > uses
> > > > > another one?
> > > > >
> > > > > Think at the end there is the JVM, the framework stack which is
> > > isolated
> > > > > from the app and the apps or it does not move the ball very far
> from
> > > what
> > > > > we have today.
> > > > >
> > > > > Until there is it is EE server - in terms of architecture not
> > > scope/impl.
> > > > > But the gold of this solution is the ability to configure the
> leakage
> > > > > between layers/profiles to let an app override and potentially
> > > > > aggregate/share parts. Obvious example is the http service which
> can
> > > leak
> > > > > in spring boot app to override the servlet layer enabling to
> > admistrate
> > > > it
> > > > > globally. Another more advanced solution is to deploy app1 and app2
> > > > called
> > > > > each other through a kafka topic and replace kafka stack by a local
> > > event
> > > > > (event admin or not is an impl detail), imagine the perf boost and
> > > admin
> > > > > simplicity it will bring - all that meaning saving a lot of green
> > piece
> > > > of
> > > > > paper for managers ;).
> > > > >
> > > > > My only "?" as of today is: why OSGi, this technology is not really
> > > > needed
> > > > > for such a project (for ex this module provides it wihout OSGi
> > > > >
> > > >
> > >
> >
> https://github.com/Talend/component-runtime/tree/master/container/container-core
> > > > )
> > > > > and can bring several drawbacks like the slowness to upgrade libs
> due
> > > to
> > > > > meta, the blockers to add libs due to the lack of OSGi support, the
> > > > > enforcement of architecture teams to adopt OSGi to use that
> solution
> > > etc.
> > > > > Why not making OSGi a launcher as spring boot or microprofile,
> sounds
> > > to
> > > > be
> > > > > at the same level to me.
> > > > >
> > > > >
> > > > >>
> > > > >> I would rather say that Karaf 5 is a runtime in the way of
> launcher.
> > > If
> > > > we
> > > > >> consider an application server as launcher + some key turn
> features,
> > > > then
> > > > >> Karaf5 could be considered as an new light app server.
> > > > >>
> > > > >> You are right: for now, each spring boot app is in its own class
> > > loader,
> > > > >> embedding its own spring version.
> > > > >> However, a spring boot module (karaf 5 terminology uses module
> more
> > > than
> > > > >> app) can use a profile. A profile basically brings a class loader
> > > where
> > > > you
> > > > >> can override spring boot module dependencies.
> > > > >>
> > > > >> Great questions: Karaf 5 MVP is a first attempt, it will be refine
> > for
> > > > >> sure. I just want to have a first running version to share with
> you
> > > all
> > > > and
> > > > >> chat about.
> > > > >>
> > > > >> Regards
> > > > >> JB
> > > > >>
> > > > >>> Le 24 mars 2021 à 16:55, Grzegorz Grzybek <gr.grzy...@gmail.com>
> a
> > > > >> écrit :
> > > > >>>
> > > > >>> Thanks for the insight ;)
> > > > >>>
> > > > >>> So first question that comes to my mind is - what will
> > > > >>> `javax.xml.parsers.DocumentBuilderFactory#newInstance()` return?
> I
> > > > guess
> > > > >> it
> > > > >>> depends on the layer.
> > > > >>> If this will be (via java.util.ServiceLoader#load()) be
> configured
> > at
> > > > low
> > > > >>> layer, we can have the "application server aspect"...
> > > > >>>
> > > > >>> Is "application server" view of Karaf 5 emphasized (existing at
> > all?)
> > > > >>> somehow?
> > > > >>> Is Karaf 5 going to be a "deployment platform to run different
> > kinds
> > > of
> > > > >>> applications"?
> > > > >>> For "Spring Boot applications classloaders" - will many "Spring
> > Boot
> > > > >>> Applications" be separated? If yes, then will each Spring Boot
> > > > >> Application
> > > > >>> "bring its own Spring"? Or will the Spring libraries be part of
> > given
> > > > >> Karaf
> > > > >>> 5 release?
> > > > >>>
> > > > >>> sorry for chaotic questions ;) But these are quite natural,
> > assuming
> > > > >>> "single JVM process" by default (is it?)
> > > > >>>
> > > > >>> regards
> > > > >>> Grzegorz Grzybek
> > > > >>>
> > > > >>> śr., 24 mar 2021 o 16:46 Jean-Baptiste Onofre <j...@nanthrax.net>
> > > > >> napisał(a):
> > > > >>>
> > > > >>>> Hi,
> > > > >>>>
> > > > >>>> Actually, you will have three class loader levels:
> > > > >>>>
> > > > >>>> - Level1: Karaf itself/Karaf services/libraries class loaders
> > > > >>>> - Level2: profiles class loader
> > > > >>>> - Level3: OSGi module running in the internal framework
> > (inheriting
> > > > >> first
> > > > >>>> level)
> > > > >>>> - Level3: Spring Boot applications classloaders
> > > > >>>> - Level3: other kind of applications (micro profile, …)
> > > > >>>>
> > > > >>>> So, basically, framework will be used for OSGi modules mostly.
> > > > >>>>
> > > > >>>> Today, launchers are "isolated", but I will implement bridges.
> > > > >>>>
> > > > >>>> Regards
> > > > >>>> JB
> > > > >>>>
> > > > >>>>> Le 24 mars 2021 à 15:37, Grzegorz Grzybek <
> gr.grzy...@gmail.com>
> > a
> > > > >>>> écrit :
> > > > >>>>>
> > > > >>>>> Hello
> > > > >>>>>
> > > > >>>>> OSGi Core R8 still assumes req/cap model[1] and resolution:
> > > > >>>>>
> > > > >>>>> The Framework must resolve bundles.
> > > > >>>>>>
> > > > >>>>>
> > > > >>>>> If OSGi (and thus resolution) is _internal_, what kind of
> > > "classpath"
> > > > >>>>> ("module path"?) will users see? Looking forward for 10000-feet
> > > > >> overview
> > > > >>>> of
> > > > >>>>> Karaf 5 ;)
> > > > >>>>>
> > > > >>>>> Is Connect specification[2] the inherent part of Karaf5? Is
> > > > "classpath"
> > > > >>>>> generally flat, hierarchical or irrelevant (?) by default?
> > > > >>>>>
> > > > >>>>> Anyway - the future looks bright ;)
> > > > >>>>>
> > > > >>>>> regards
> > > > >>>>> Grzegorz Grzybek
> > > > >>>>> ===
> > > > >>>>> [1]:
> > > > >>>>>
> > > > >>>>
> > > > >>
> > > >
> > >
> >
> https://docs.osgi.org/specification/osgi.core/8.0.0/framework.module.html#framework.module-resolving
> > > > >>>>> [2]:
> > > > >>>>>
> > > > >>>>
> > > > >>
> > > >
> > >
> >
> https://docs.osgi.org/specification/osgi.core/8.0.0/framework.connect.html
> > > > >>>>>
> > > > >>>>> śr., 24 mar 2021 o 15:24 Jean-Baptiste Onofre <j...@nanthrax.net
> >
> > > > >>>> napisał(a):
> > > > >>>>>
> > > > >>>>>> Hi guys,
> > > > >>>>>>
> > > > >>>>>> As you probably know, we are working on first Karaf 5 MVP,
> which
> > > is
> > > > a
> > > > >>>>>> complete Karaf refactoring.
> > > > >>>>>>
> > > > >>>>>> We will share some details soon, but I can already inform you
> > that
> > > > >>>>>> internally, it’s powered by OSGi R8 (but you will see that
> it’s
> > > more
> > > > >> an
> > > > >>>>>> internal point).
> > > > >>>>>>
> > > > >>>>>> Regards
> > > > >>>>>> JB
> > > > >>>>
> > > > >>>>
> > > > >>
> > > > >>
> > > >
> > > >
> > >
> >
>

Reply via email to