Quoting one statement of yours: So for long running apps graal cost is wayyyyyy more than the runtime gain > and I guess it is where Karaf 5 will sit, long running aggregated and > unified apps (by providing a single admin interface for all kind of apps > and not a different one for spring/spring-boot, microprofile, ee, osgi > etc). >
I agree. I still believe in "Java applications servers" (whatever the set of standards - real or de-facto - is used). And I still believe in long-running apps. regards Grzegorz Grzybek czw., 25 mar 2021 o 10:33 Romain Manni-Bucau <rmannibu...@gmail.com> napisał(a): > Le jeu. 25 mars 2021 à 09:35, Grzegorz Grzybek <gr.grzy...@gmail.com> a > écrit : > > > 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? > > > > Yes and not, the small language trick is do you speak of bootstrap services > or profile or app in Karaf 5. > Bootstrap services can do whatever they want (ie same as OSGi in terms of > impact even if technicaly it is not linked) but all other layers > (profile+app) must stay static and almost immutable. > > > > > > > > > > > > > > > > > > > > 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 ;) > > > > I was expecting it to come at some point - and btw we can note the fun > thing that the big change is GraalVM but everybody speaks of Quarkus which > is just a rebranding of already existing things, no technology jump by > itself ;). > My vision is that karaf 5 fulfills the microservices pitfalls and drawback > by bringing back a well know and secure deployment alternative to all that. > Indeed graal-ifying your app will make it save some memory, maybe some CPU > cycle in some cases but if you optimize your java code you can get the same > in terms of CPU cycles (and even faster in some cases). > In terms of bootstrap you can same a few ms due to the classloading but not > much more and CDS already solves part of it (at the cost of memory). > So for long running apps graal cost is wayyyyyy more than the runtime gain > and I guess it is where Karaf 5 will sit, long running aggregated and > unified apps (by providing a single admin interface for all kind of apps > and not a different one for spring/spring-boot, microprofile, ee, osgi > etc). > > Hope it makes sense and I'm not too far from what JB had in mind but this > is where I see a looot of value for such a design. > > > > > > > > > > > > > > > > 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 > > > > > > >>>> > > > > > > >>>> > > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >