Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Hallo elkenien op dit blog, hjir is de fjirde post yn 'e Quarkus-searje!

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Foarige post gie oer hoe't Quarkus MicroProfile en Spring kombinearret. Lit ús jo dat herinnerje quarkus is gepositioneerd as "ultra-snelle subatomic Java", aka "Kubernetes-oriïntearre Java-stapel, oanpast foar GraalVM en OpenJDK HotSpot en gearstald út de bêste bibleteken en noarmen." Hjoed sille wy sjen litte hoe't jo besteande Java-applikaasjes kinne modernisearje mei de mooglikheden fan Quarkus, mei it foarbyld helloworld-applikaasjes fan it Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart-repository, dy't brûkt CDI en Servlet 3 technologyen stipe troch Quarkus.

It is hjir wichtich om te notearjen dat sawol Quarkus as JBoss EAP de klam lizze op it brûken fan ark dy't sa mooglik op noarmen basearre binne. Hawwe jo gjin applikaasje dy't rint op JBoss EAP? Gjin probleem, it kin maklik migrearre wurde fan jo hjoeddeistige applikaasjetsjinner nei JBoss EAP mei help fan Red Hat Application Migration Toolkit. Dêrnei sil de definitive en wurkjende ferzje fan 'e modernisearre koade beskikber wêze yn it repository github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus, yn de module Hallo wrâld.

By it skriuwen fan dizze post hawwe wy brûkt Quarkus hânboeken, meast It meitsjen fan jo earste applikaasje en Bouw a Native útfierber.

Litte wy de koade krije

Lit ús earst in lokale kloon meitsje fan it repository JBoss EAP quickstarts:

$ git clone https://github.com/jboss-developer/jboss-eap-quickstarts.git
Cloning into 'jboss-eap-quickstarts'...
remote: Enumerating objects: 148133, done.
remote: Total 148133 (delta 0), reused 0 (delta 0), pack-reused 148133
Receiving objects: 100% (148133/148133), 59.90 MiB | 7.62 MiB/s, done.
Resolving deltas: 100% (66476/66476), done.
$ cd jboss-eap-quickstarts/helloworld/

Litte wy sjen hoe't de orizjinele helloworld wurket

Eigentlik is de essinsje fan dizze applikaasje dúdlik út 'e namme, mar wy sille har koade strikt wittenskiplik modernisearje. Litte wy dêrom earst nei dizze applikaasje yn syn oarspronklike foarm sjen.

It ynsetten fan helloworld

1. Iepenje in terminal en gean nei de root fan 'e JBoss EAP-map (jo kinne it downloade hjir), dat is, nei de map EAP_HOME.

2. Start de JBoss EAP-tsjinner mei it standertprofyl:

$ EAP_HOME/bin/standalone.sh

Tink derom: Op Windows wurdt it EAP_HOMEbinstandalone.bat-skript brûkt om it te starten.

Nei in pear sekonden soe sokssawat yn it log moatte ferskine:

[org.jboss.as] (Controller Boot Thread) WFLYSRV0025: JBoss EAP 7.2.0.GA (WildFly Core 6.0.11.Final-redhat-00001) started in 3315ms - Started 306 of 527 services (321 services are lazy, passive or on-demand)

3. Iepenje yn in blêder 127.0.0.1:8080 en wy sjogge dit:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 1. JBoss EAP Home Page.

4. Folgje de ynstruksjes yn de hânlieding Bouwe en ynsette de Quickstart: útwreidzje helloworld en útfiere (fanút de projektrootmap) it folgjende kommando:

$ mvn clean install wildfly:deploy

Nei it suksesfolle útfieren fan dit kommando, sille wy wat as it folgjende sjen yn it log:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 8.224 s

Dat, de earste ynset fan 'e helloworld-applikaasje op JBoss EAP naam krekt mear as 8 sekonden.

Helloworld testen

Aksje strikt neffens ynstruksjes Tagong ta de applikaasje, iepenje yn 'e browser 127.0.0.1:8080/helloworld en wy sjogge dit:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 2. Orizjinele Hello World fan JBoss EAP.

Feroarings meitsje

Feroarje de ynfierparameter createHelloMessage (String namme) fan World nei Marco:

writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");

Rin it folgjende kommando wer út:

$ mvn clean install wildfly:deploy

Dan ferfarskje wy de side yn 'e browser en sjogge dat de tekst is feroare:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 3. Hallo Marco yn JBoss EAP.

Rôlje de helloworld-ynset werom en slute JBoss EAP ôf

Dit is opsjoneel, mar as jo de ynset annulearje wolle, kinne jo dit dwaan mei it folgjende kommando:

$ mvn clean install wildfly:undeploy

Om jo JBoss EAP-eksimplaar ôf te sluten, druk gewoan op Ctrl + C yn it terminalfinster.

Helloworld opwurdearje

Litte wy no de orizjinele Helloworld-applikaasje modernisearje.

Meitsje in nije branch

Wy meitsje in nije wurkjende tûke neidat it quickstart-projekt is foltôge:

$ git checkout -b quarkus 7.2.0.GA

It feroarjen fan de pom.xml triem

Wy sille begjinne mei it feroarjen fan de applikaasje fan it pom.xml-bestân. Om Quarkus te tastean om XML-blokken yn te foegjen, útfiere it folgjende kommando yn 'e helloworld-map:

$ mvn io.quarkus:quarkus-maven-plugin:0.23.2:create

By it skriuwen fan dit artikel waard ferzje 0.23.2 brûkt. Quarkus bringt faak nije ferzjes út, jo kinne fine hokker ferzje de lêste is op 'e webside github.com/quarkusio/quarkus/releases/latest.

It boppesteande kommando sil de folgjende eleminten ynfoegje yn pom.xml:

  • Besit , dy't de ferzje fan Quarkus oantsjut om te brûken.
  • Blok om Quarkus BOM (materialenlist) te ymportearjen, om gjin ferzje ta te foegjen foar elke Quarkus-ôfhinklikens.
  • De quarkus-maven-plugin is ferantwurdlik foar it ferpakken fan de applikaasje en it leverjen fan ûntwikkelingsmodus.
  • It native profyl foar it meitsjen fan útfierbere applikaasjes.

Dêrnjonken meitsje wy de folgjende wizigingen manuell oan pom.xml:

  1. It tag útlûke fan it blok en pleats it boppe de tag . Want yn de folgjende stap sille wy it blok fuortsmite , dan moatte jo bewarje .
  2. It fuortsmiten fan in blok , want as jo mei Quarkus rinne, sil dizze applikaasje gjin âlderpom fan JBoss mear nedich hawwe.
  3. Foegje in tag ta en plak it ûnder de tag . Jo kinne it ferzjenûmer oanjaan dat jo wolle.
  4. It fuortsmiten fan de tag , om't dizze applikaasje net langer in WAR is, mar in gewoane JAR.
  5. Wy feroarje de folgjende ôfhinklikens:
    1. Feroarje de ôfhinklikens javax.enterprise:cdi-api nei io.quarkus:quarkus-arc, fuortsmite foarsjoen , om't (neffens de dokuminten) dizze Quarkus-útwreiding ynjeksje fan CDI-ôfhinklikens leveret.
    2. Feroarje de ôfhinklikens org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec nei io.quarkus:quarkus-undertow, fuortsmite foarsjoen , om't (neffens de dokuminten) dizze Quarkus-útwreiding stipet foar servlets.
    3. Wy fuortsmite de org.jboss.spec.javax.annotation: jboss-annotations-api_1.3_spec ôfhinklikens sûnt it komt mei de ôfhinklikens dy't wy krekt feroare.

De ferzje fan it pom.xml-bestân mei alle wizigingen is te finen op github.com/mrizzi/jboss-eap-quickstarts/blob/quarkus/helloworld/pom.xml.

Tink derom dat it kommando mvn io.quarkus:quarkus-maven-plugin:0.23.2:create hjirboppe net allinich it pom.xml-bestân feroaret, mar ek in oantal komponinten tafoeget oan it projekt, nammentlik de folgjende bestannen en mappen:

  • De mvnw- en mvnw.cmd-bestân en de .mvn-map: Maven Wrapper kinne jo Maven-projekten fan in opjûne Maven-ferzje útfiere sûnder dy ferzje te ynstallearjen.
  • Docker-map (yn 'e map src/main/): Dit befettet foarbyld Dockerfiles foar native en jvm-modi (tegearre mei it .dockerignore-bestân).
  • Resources map (yn de src/main/ map): Dit befettet in lege application.properties triem en in foarbyld Quarkus index.html startside (sjoch Run de modernisearre helloworld foar mear details).

Starte helloworld
Om de applikaasje te testen, brûke wy quarkus:dev, dy't Quarkus yn ûntwikkelingsmodus lanseart (sjoch foar mear details dizze seksje yn 'e hantlieding Untwikkelingsmodus).

Tink derom: Dizze stap sil nei alle gedachten resultearje yn in flater, om't wy noch net alle nedige feroarings hawwe makke.

Litte wy no it kommando útfiere om te sjen hoe't it wurket:

$ ./mvnw compile quarkus:dev
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.jboss.eap.quickstarts:helloworld >----------------
[INFO] Building Quickstart: helloworld quarkus
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:0.23.2:dev (default-cli) @ helloworld ---
Listening for transport dt_socket at address: 5005
INFO  [io.qua.dep.QuarkusAugmentor] Beginning quarkus augmentation
INFO  [org.jbo.threads] JBoss Threads version 3.0.0.Final
ERROR [io.qua.dev.DevModeMain] Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.jboss.as.quickstarts.helloworld.HelloService and qualifiers [@Default]
	- java member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- declared on CLASS bean [types=[javax.servlet.ServletConfig, java.io.Serializable, org.jboss.as.quickstarts.helloworld.HelloWorldServlet, javax.servlet.GenericServlet, javax.servlet.Servlet, java.lang.Object, javax.servlet.http.HttpServlet], qualifiers=[@Default, @Any], target=org.jboss.as.quickstarts.helloworld.HelloWorldServlet]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:841)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:214)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:106)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:249)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:780)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:415)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
	at java.lang.Thread.run(Thread.java:748)
	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.jboss.as.quickstarts.helloworld.HelloService and qualifiers [@Default]
	- java member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- declared on CLASS bean [types=[javax.servlet.ServletConfig, java.io.Serializable, org.jboss.as.quickstarts.helloworld.HelloWorldServlet, javax.servlet.GenericServlet, javax.servlet.Servlet, java.lang.Object, javax.servlet.http.HttpServlet], qualifiers=[@Default, @Any], target=org.jboss.as.quickstarts.helloworld.HelloWorldServlet]
	at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:428)
	at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:371)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:206)
	... 14 more

Dus, it wurket net ... Wêrom?

De UnsatisfiedResolutionException ferwiist nei de HelloService-klasse, dy't lid is fan 'e HelloWorldServlet-klasse (java-lid: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). It probleem is dat HelloWorldServlet in ynjeksjeare eksimplaar fan HelloService nedich is, en it kin net fûn wurde (ek al binne beide klassen yn itselde pakket).

It is tiid om werom te gean nei dokumintaasje en lês hoe't it wurket yn Quarkus Ynjeksje, en dêrom Konteksten en ôfhinklikensynjeksje (CDI). Iepenje dêrom de hantlieding foar konteksten en ôfhinklikensynjeksje en yn 'e seksje Bean Discovery wy lêze: "In beanklasse dy't gjin beanbeskiedende annotaasje hat, wurdt net trochsocht."

Litte wy nei de HelloService-klasse sjen - it hat wirklik net sa'n annotaasje. Dêrom moat it tafoege wurde sadat Quarkus de bean sykje en fine kin. En om't dit in steatleaze objekt is, kinne wy ​​​​de @ApplicationScoped-annotaasje maklik tafoegje sa:

@ApplicationScoped
public class HelloService {

Tink derom: hjir kin de ûntwikkelomjouwing jo freegje om it fereaske pakket ta te foegjen (sjoch rigel hjirûnder), en jo moatte dit manuell dwaan, lykas dit:

import javax.enterprise.context.ApplicationScoped;

As jo ​​​​twifelje oer hokker omfang moat wurde brûkt yn it gefal as it hielendal net is spesifisearre foar de boarne bean, lês dan de dokumintaasje JSR 365: Konteksten en ôfhinklikensynjeksje foar Java 2.0 - Standert berik.

No besykje wy de applikaasje opnij te starten mei it kommando ./mvnw compile quarkus:dev:

$ ./mvnw compile quarkus:dev
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.jboss.eap.quickstarts:helloworld >----------------
[INFO] Building Quickstart: helloworld quarkus
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /home/mrizzi/git/forked/jboss-eap-quickstarts/helloworld/target/classes
[INFO]
[INFO] --- quarkus-maven-plugin:0.23.2:dev (default-cli) @ helloworld ---
Listening for transport dt_socket at address: 5005
INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 576ms
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 1.083s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

No giet alles sûnder flaters.

De modernisearre helloworld lansearje
As skreaun yn it log, iepenje it yn 'e browser 0.0.0.0:8080 (de standert Quarkus-startside) en wy sjogge dit:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 4. Quarkus dev startside.

De WebServlet-annotaasje foar dizze applikaasje befettet de folgjende kontekstdefinysje:

@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {

Dêrom geane wy ​​yn 'e browser nei 0.0.0.0:8080/HelloWorld en wy sjogge it folgjende:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 5: De Quarkus dev-side foar de Hello World-applikaasje.

No, alles wurket.

Litte wy no wizigingen meitsje oan 'e koade. Tink derom dat it ./mvnw kompilearjen quarkus:dev kommando noch rint en wy hawwe gjin bedoeling om it te stopjen. Litte wy no besykje deselde - heul triviale - feroaringen oan te passen oan 'e koade sels en sjen hoe't Quarkus it libben makliker makket foar de ûntwikkelder:

writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");

Bewarje it bestân en ferfarskje dan de webside om Hallo Marco te sjen, lykas werjûn yn 'e skermprint hjirûnder:

Quarkus: Applikaasje modernisearring mei Helloworld as foarbyld fan JBoss EAP Quickstart

Rys. 6. Hello Marco side yn Quarkus dev.

Litte wy no de útfier yn 'e terminal kontrolearje:

INFO  [io.qua.dev] (vert.x-worker-thread-3) Changed source files detected, recompiling [/home/mrizzi/git/forked/jboss-eap-quickstarts/helloworld/src/main/java/org/jboss/as/quickstarts/helloworld/HelloWorldServlet.java]
INFO  [io.quarkus] (vert.x-worker-thread-3) Quarkus stopped in 0.003s
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Beginning quarkus augmentation
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Quarkus augmentation completed in 232ms
INFO  [io.quarkus] (vert.x-worker-thread-3) Quarkus 0.23.2 started in 0.257s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (vert.x-worker-thread-3) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (vert.x-worker-thread-3) Installed features: [cdi]
INFO  [io.qua.dev] (vert.x-worker-thread-3) Hot replace total time: 0.371s

De side ferfarskje triggerde de deteksje fan feroaringen yn 'e boarnekoade, en Quarkus hat automatysk in stop-startproseduere útfierd. En dit alles waard foltôge yn mar 0.371 sekonden (hjir is it, dat "ultra-snelle subatomic Java").

Helloworld bouwe yn in JAR-pakket
No't de koade wurket sa't it moat, litte wy it pakke mei it folgjende kommando:

$ ./mvnw clean package

Dit kommando makket twa JAR-bestannen yn 'e /target-map: it helloworld-.jar-bestân, dat is in standert artefakt gearstald troch it Maven-team tegearre mei de klassen en middels fan it projekt. En it bestân helloworld-runner.jar, dat in útfierbere JAR is.

Tink derom dat dit gjin uber-jar is, om't alle ôfhinklikens gewoan kopiearre wurde nei de map /target/lib (net ferpakt yn in JAR-bestân). Dêrom, om dizze JAR út in oare map of op in oare host út te fieren, moatte jo sawol it JAR-bestân sels as de /lib-map dêr kopiearje, jûn dat it Class-Path-elemint yn it MANIFEST.MF-bestân yn it JAR-pakket befettet in eksplisite list fan JAR's út lib-mappen
Om te learen hoe't jo uber-jar-applikaasjes kinne oanmeitsje, ferwize asjebleaft it tutorial Uber-Jar Creation.

Start helloworld ferpakt yn JAR

No kinne wy ​​ús JAR útfiere mei it standert java kommando:

$ java -jar ./target/helloworld-<version>-runner.jar
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 0.673s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

Nei dit alles is dien, gean nei jo blêder op 0.0.0.0: 8080 en kontrolearje dat alles wurket sa't it moat.

Helloworld kompilearje yn in native útfierber bestân

Dat ús helloworld rint as in standalone Java-applikaasje mei Quarkus-ôfhinklikens. Mar jo kinne fierder gean en it feroarje yn in native útfierber bestân.

Ynstallaasje fan GraalVM
As earste, hjirfoar moatte jo de nedige ark ynstallearje:

1. Download GraalVM 19.2.0.1 fan github.com/oracle/graal/releases/tag/vm-19.2.0.1.

2. Wreidzje it ynladen argyf út:

$ tar xvzf graalvm-ce-linux-amd64-19.2.0.1.tar.gz

3. Gean nei de untar map.

4. Laad it kommando hjirûnder om de native ôfbylding te downloaden en ta te foegjen:

$ ./bin/gu install native-image

5. Registrearje de map makke yn stap 2 nei de GRAALVM_HOME omjouwingsfariabele:

$ export GRAALVM_HOME={untar-folder}/graalvm-ce-19.2.0.1)

Foar mear ynformaasje en ynstallaasje ynstruksjes op oare OSes, sjoch de hânlieding It bouwen fan in native útfierber - Betingsten.

Helloworld bouwe yn in native útfierber bestân
It lêzen fan de hânlieding It bouwen fan in native útfierbere-produsearjen fan in native útfierbere: "Litte wy no in native útfierber bestân meitsje foar ús applikaasje om de starttiid en skiifgrutte te ferminderjen. It útfierbere bestân sil alles hawwe dat nedich is om de applikaasje út te fieren, ynklusyf de JVM (of leaver, in ôfkoarte ferzje dêrfan, mei allinich wat nedich is om de applikaasje út te fieren) en ús applikaasje sels.

Om in native útfierber bestân te meitsjen, moatte jo it native Maven-profyl ynskeakelje:

$ ./mvnw package -Pnative

Us bou naam ien minút en 10 sekonden, en it definitive helloworld-runner f-bestân waard makke yn 'e /doelmap.

Run de native helloworld útfierbere

Yn 'e foarige stap krigen wy it útfierbere bestân /target/helloworld-runner. No litte wy it útfiere:

$ ./target/helloworld-<version>-runner
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 0.006s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

Iepenje it opnij yn 'e browser 0.0.0.0: 8080 en kontrolearje dat alles wurket sa't it moat.

Wurdt ferfolge!

Wy leauwe dat de metoade foar it modernisearjen fan Java-applikaasjes mei Quarkus-mooglikheden besprutsen yn dizze post (alhoewol mei in ienfâldich foarbyld) aktyf moat wurde brûkt yn it echte libben. Dêrby sille jo wierskynlik in oantal problemen tsjinkomme, dy't wy foar in part sille oanpakke yn 'e folgjende post, wêr't wy sille prate oer hoe't jo ûnthâldferbrûk mjitten om prestaasjesferbetteringen te evaluearjen, in wichtich ûnderdiel fan it heule proses foar modernisearring fan applikaasjes.

Boarne: www.habr.com

Add a comment