Halo a h-uile duine air a’ bhlog seo, seo an ceathramh post san t-sreath Quarkus!
Tha e cudromach toirt fa-near an seo gu bheil an dà chuid Quarkus agus JBoss EAP a’ cur cuideam air cleachdadh innealan a tha cho stèidhichte air inbhean sa ghabhas. Nach eil tagradh agad a’ ruith air JBoss EAP? Gun duilgheadas sam bith, faodar a ghluasad gu furasta bhon t-seirbheisiche tagraidh gnàthach agad gu JBoss EAP a ’cleachdadh
Nuair a bha sinn a’ sgrìobhadh na dreuchd seo chleachd sinn
Gheibh sinn an còd
An toiseach, cruthaichidh sinn clon ionadail den stòr
$ 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/
Chì sinn mar a tha an saoghal hello tùsail ag obair
Gu fìrinneach, tha brìgh an tagraidh seo soilleir bhon ainm, ach ùraichidh sinn a chòd gu teann saidheansail. Mar sin, an toiseach, leig dhuinn sùil a thoirt air an tagradh seo anns a’ chruth thùsail aige.
A ' cleachdadh helloworld
1. Fosgail terminal agus rach gu freumh am pasgan JBoss EAP (faodaidh tu a luchdachadh sìos
2. Cuir air bhog am frithealaiche JBoss EAP leis a 'phròifil bunaiteach:
$ EAP_HOME/bin/standalone.sh
Note: Air Windows, thèid an sgriobt EAP_HOMEbinstandalone.bat a chleachdadh airson a chuir air bhog.
Às deidh diog no dhà, bu chòir rudeigin mar seo nochdadh sa loga:
[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. Fosgail ann am brabhsair
Reis. 1. Duilleag-dhachaigh JBoss EAP.
4. Lean an stiùireadh anns an leabhar-làimhe
$ mvn clean install wildfly:deploy
Às deidh dhuinn an àithne seo a chuir an gnìomh gu soirbheachail, chì sinn rudeigin mar a leanas sa loga:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.224 s
Mar sin, thug a’ chiad cleachdadh den tagradh helloworld air JBoss EAP beagan a bharrachd air 8 diogan.
A ' dèanamh deuchainn air helloworld
Ag obair gu teann a rèir an stiùiridh
Reis. 2. Hello World tùsail bho JBoss EAP.
A’ dèanamh atharrachaidhean
Atharraich am paramadair cuir a-steach cruthaichHelloMessage (ainm sreang) bho World gu Marco:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
Ruith an òrdugh a leanas a-rithist:
$ mvn clean install wildfly:deploy
An uairsin bidh sinn ag ùrachadh na duilleige sa bhrobhsair agus chì sinn gu bheil an teacsa air atharrachadh:
Reis. 3. Halo Marco ann an JBoss EAP.
Rol air ais cleachdadh helloworld agus dùin sìos JBoss EAP
Tha seo roghainneil, ach ma tha thu airson an cleachdadh a chuir dheth, faodaidh tu sin a dhèanamh leis an òrdugh a leanas:
$ mvn clean install wildfly:undeploy
Gus an t-eisimpleir JBoss EAP agad a dhùnadh, dìreach brùth Ctrl + C san uinneag crìche.
Luchdaich a-nuas helloworld
A-nis ùraich sinn an tagradh helloworld tùsail.
Cruthaich meur ùr
Bidh sinn a’ cruthachadh meur obrach ùr às deidh don phròiseact quickstart a bhith deiseil:
$ git checkout -b quarkus 7.2.0.GA
Ag atharrachadh am faidhle pom.xml
Tòisichidh sinn ag atharrachadh an tagraidh bhon fhaidhle pom.xml. Gus leigeil le Quarkus blocaichean XML a chuir a-steach ann, ruith an àithne a leanas ann am pasgan helloworld:
$ mvn io.quarkus:quarkus-maven-plugin:0.23.2:create
Nuair a bha mi a’ sgrìobhadh an artaigil seo, chaidh dreach 0.23.2 a chleachdadh. Bidh Quarkus gu tric a 'leigeil a-mach dreachan ùra, gheibh thu a-mach dè an dreach as ùire air an làrach-lìn
Cuiridh an àithne gu h-àrd na h-eileamaidean a leanas a-steach do pom.xml:
- Seilbh , a tha a 'sònrachadh an dreach de Quarkus a chleachdadh.
- Bloc gus Quarkus BOM (bile stuthan) a thoirt a-steach, gus nach cuir thu dreach airson gach eisimeileachd Quarkus.
- Tha an quarkus-maven-plugin an urra ri bhith a’ pacadh an tagraidh agus a’ toirt seachad modh leasachaidh.
- Am pròifil dhùthchasach airson a bhith a’ cruthachadh gnìomhan tagraidh.
A bharrachd air an sin, bidh sinn le làimh a’ dèanamh na h-atharrachaidhean a leanas air pom.xml:
- A 'tarraing a-mach an tag bhon bhloc agus cuir e os cionn an taga . Oir anns an ath cheum bheir sinn air falbh am bloca , an uairsin feumaidh tu a shàbhaladh .
- A 'toirt air falbh bloc , oir nuair a bhios e a’ ruith le Quarkus, cha bhith feum aig an aplacaid seo tuilleadh air pàrant pom bho JBoss.
- Cuir taga ris agus cuir e fon chlib . Faodaidh tu an àireamh tionndaidh a tha thu ag iarraidh a shònrachadh.
- A 'toirt air falbh an taga , leis nach e WAR a th’ anns an tagradh seo tuilleadh, ach JAR cunbhalach.
- Bidh sinn ag atharrachadh nan eisimeileachd a leanas:
- Atharraich an eisimeileachd javax.enterprise:cdi-api gu io.quarkus:quarkus-arc, a’ toirt air falbh air a thoirt seachad , oir (a rèir na docaichean) tha an leudachadh Quarkus seo a’ toirt seachad in-stealladh de eisimeileachd CDI.
- Atharraich an eisimeileachd org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec gu io.quarkus:quarkus-undertow, a’ toirt air falbh air a thoirt seachad , oir (a rèir na docaichean) tha an leudachadh Quarkus seo a’ toirt taic dha servlets.
- Bheir sinn air falbh an eisimeileachd org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec leis gu bheil e a’ tighinn leis na h-eisimeileachd a dh’ atharraich sinn.
Tha an tionndadh den fhaidhle pom.xml leis na h-atharrachaidhean gu lèir suidhichte aig
Thoir an aire gu bheil am mvn io.quarkus: quarkus-maven-plugin: 0.23.2: cruthaich àithne gu h-àrd chan ann a-mhàin ag atharrachadh am faidhle pom.xml, ach cuideachd a ’cur grunn phàirtean ris a’ phròiseact, is e sin na faidhlichean agus na pasganan a leanas:
- Am faidhle mvnw agus mvnw.cmd agus am pasgan .mvn: leigidh Maven Wrapper leat pròiseactan Maven de dhreach sònraichte Maven a ruith gun a bhith a’ stàladh an dreach sin.
- Pasgan docker (anns an src/prìomh/eòlaire): Seo eisimpleir Dockerfiles airson modhan dùthchasach agus jvm (còmhla ris an fhaidhle .dockerignore).
- Pasgan ghoireasan (anns an src/prìomh/eòlaire): Tha faidhle application.properties falamh ann agus duilleag tòiseachaidh sampall Quarkus index.html (faic Ruith an helloworld ùr-nodha airson tuilleadh fiosrachaidh).
Cuir air bhog helloworld
Gus an tagradh a dhearbhadh, bidh sinn a’ cleachdadh quarkus: dev, a chuireas Quarkus air bhog ann am modh leasachaidh (airson tuilleadh fiosrachaidh, faic an roinn seo san leabhar-làimhe
Note: Tha dùil gum bi mearachd mar thoradh air a’ cheum seo, leis nach eil sinn air na h-atharrachaidhean riatanach uile a dhèanamh fhathast.
A-nis leig leinn an àithne a ruith gus faicinn mar a tha e ag obair:
$ ./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
Mar sin, chan obraich e... Carson?
Tha an UnsatisfiedResolutionException a’ comharrachadh a’ chlas HelloService, a tha na bhall den chlas HelloWorldServlet (ball java: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). Is e an duilgheadas a th’ ann gu bheil HelloWorldServlet feumach air eisimpleir stealladh de HelloService, agus chan fhaighear e (ged a tha an dà chlas sin san aon phacaid).
Tha an t-àm ann tilleadh gu
Bheir sinn sùil air a’ chlas HelloService - dha-rìribh chan eil an leithid de nota aige. Mar sin, feumar a chuir ris gus an urrainn dha Quarkus am bean a lorg agus a lorg. Agus leis gur e rud gun stàit a tha seo, is urrainn dhuinn an nota @ApplicationScoped a chuir ris gu furasta mar seo:
@ApplicationScoped
public class HelloService {
Note: an seo is dòcha gun iarr an àrainneachd leasachaidh ort am pasgan a tha a dhìth a chur ris (faic an loidhne gu h-ìosal), agus feumaidh tu seo a dhèanamh le làimh, mar seo:
import javax.enterprise.context.ApplicationScoped;
Ma tha thu teagmhach mu dè an raon a bu chòir a chleachdadh anns a’ chùis nuair nach eil e air a shònrachadh airson an stòr bean idir, leugh na sgrìobhainnean
A-nis feuchaidh sinn a-rithist ris an tagradh a chuir air bhog leis an àithne ./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]
A-nis thèid a h-uile càil gun mhearachdan.
A 'cur air bhog an helloworld ùr-nodha
Mar a tha e sgrìobhte sa log, fosgail e sa bhrobhsair
Reis. 4. Duilleag tòiseachaidh Quarkus dev.
Anns an nota WebServlet airson an aplacaid seo tha am mìneachadh co-theacsa a leanas:
@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {
Mar sin, thèid sinn sa bhrobhsair gu
Reis. 5: An duilleag Quarkus dev airson an tagradh Hello World.
Uill, tha a h-uile càil ag obair.
A-nis leig dhuinn atharrachaidhean a dhèanamh air a 'chòd. Thoir an aire gu bheil an àithne ./mvnw compile quarkus: dev fhathast a’ ruith agus chan eil dùil againn stad a chuir air. A-nis feuchaidh sinn ris na h-aon atharrachaidhean a chuir an sàs - glè bheag - air a’ chòd fhèin agus faic mar a nì Quarkus beatha nas fhasa don leasaiche:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
Sàbhail am faidhle agus an uairsin ùraich an duilleag lìn gus Hello Marco fhaicinn, mar a chithear san dealbh gu h-ìosal:
Reis. 6. Duilleag Hello Marco ann an Quarkus dev.
A-nis leig dhuinn sùil a thoirt air an toradh anns a’ chrìoch:
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
Bhrosnaich ùrachadh na duilleige lorg atharrachaidhean anns a’ chòd stòr, agus rinn Quarkus modh-obrach stad-tòiseachaidh gu fèin-ghluasadach. Agus chaidh seo uile a chrìochnachadh ann an dìreach 0.371 diogan (seo e, an “Java subatomic ultra-luath”).
A’ togail helloworld ann am pasgan JAR
A-nis gu bheil an còd ag obair mar a bu chòir, leig dhuinn a phacaid leis an òrdugh a leanas:
$ ./mvnw clean package
Bidh an àithne seo a’ cruthachadh dà fhaidhle JAR sa phasgan / targaid: am faidhle helloworld-.jar, a tha na artifact àbhaisteach a chruinnich sgioba Maven còmhla ri clasaichean is goireasan a’ phròiseict. Agus am faidhle helloworld-runner.jar, a tha na JAR so-ghnìomhaichte.
Thoir an aire nach e uber-jar a tha seo, leis gu bheil a h-uile eisimeileachd dìreach air a chopaigeadh a-steach don phasgan /target/lib (chan eil e air a phacaigeadh a-steach do fhaidhle JAR). Mar sin, gus an JAR seo a ruith bho phasgan eile no air òstair eile, feumaidh tu an dà chuid am faidhle JAR fhèin agus am pasgan / lib an sin a chopaigeadh, leis gu bheil an eileamaid Class-Path anns an fhaidhle MANIFEST.MF sa phacaid JAR anns a bheil liosta soilleir de JARn bho phasganan lib
Gus ionnsachadh mar a chruthaicheas tu tagraidhean uber-jar, thoir sùil air an oideachadh
Cuir air bhog helloworld air a phacaigeadh ann an JAR
A-nis is urrainn dhuinn ar JAR a ruith a’ cleachdadh an òrdugh java àbhaisteach:
$ 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]
Às deidh seo uile a dhèanamh, rachaibh chun bhrobhsair agad aig
A’ cur ri chèile helloworld ann am faidhle so-ghnìomhaichte dùthchasach
Mar sin tha an saoghal hello againn a’ ruith mar thagradh Java leis fhèin a’ cleachdadh eisimeileachd Quarkus. Ach faodaidh tu a dhol nas fhaide agus a thionndadh gu faidhle gnìomhach dùthchasach.
Stàladh GraalVM
An toiseach, airson seo feumaidh tu na h-innealan riatanach a stàladh:
1. Luchdaich sìos GraalVM 19.2.0.1 bho
2. Leudaich an tasglann a chaidh a luchdachadh sìos:
$ tar xvzf graalvm-ce-linux-amd64-19.2.0.1.tar.gz
3. Rach don phasgan untar.
4. Ruith an àithne gu h-ìosal gus an ìomhaigh dhùthchasach a luchdachadh sìos agus a chur ris:
$ ./bin/gu install native-image
5. Clàraich am pasgan a chaidh a chruthachadh ann an ceum 2 gu caochladair àrainneachd GRALVM_HOME:
$ export GRAALVM_HOME={untar-folder}/graalvm-ce-19.2.0.1)
Airson tuilleadh fiosrachaidh agus stiùireadh stàlaidh air OSes eile, faic an leabhar-làimhe
A’ togail helloworld gu bhith na fhaidhle so-ghnìomhaichte dùthchasach
A 'leughadh an leabhar-làimhe
Gus faidhle gnìomhachaidh dùthchasach a chruthachadh, feumaidh tu pròifil dùthchasach Maven a chomasachadh:
$ ./mvnw package -Pnative
Thug an togail againn aon mhionaid agus 10 diogan, agus chaidh am faidhle helloworld-runner f mu dheireadh a chruthachadh sa phasgan / targaid.
Ruith an gnìomh helloworld dùthchasach
Anns a’ cheum roimhe, fhuair sinn am faidhle so-ghnìomhaichte /target/helloworld-runner. A-nis leig leinn a ruith:
$ ./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]
Fosgail e sa bhrobhsair a-rithist
Ri leantainn!
Tha sinn den bheachd gum bu chòir an dòigh air tagraidhean Java ùrachadh a’ cleachdadh comasan Quarkus a chaidh a dheasbad san dreuchd seo (ged a tha e a’ cleachdadh eisimpleir shìmplidh) a chleachdadh gu gnìomhach ann am fìor bheatha. Ann a bhith a’ dèanamh seo, tha coltas ann gun tig thu tarsainn air grunn dhuilgheadasan, air am bi sinn a’ dèiligeadh gu ìre anns an ath phost, far am bruidhinn sinn mu mar a thomhaiseas tu caitheamh cuimhne gus leasachaidhean coileanaidh a mheasadh, pàirt chudromach den phròiseas ùrachadh tagraidh gu lèir.
Source: www.habr.com