Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

اس بلاگ پر سب کو ہیلو، Quarkus سیریز میں یہ چوتھی پوسٹ ہے!

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

پچھلی پوسٹ اس بارے میں تھا کہ کوارکس کس طرح مائیکرو پروفائل اور اسپرنگ کو جوڑتا ہے۔ آئیے آپ کو یاد دلاتے ہیں۔ کوارکوس "الٹرا فاسٹ سباٹامک جاوا" کے طور پر پوزیشن میں ہے، عرف "Kubernetes-oriented Java stack، GraalVM اور OpenJDK HotSpot کے لیے تیار کیا گیا ہے اور بہترین لائبریریوں اور معیارات سے اسمبل کیا گیا ہے۔" آج ہم مثال کا استعمال کرتے ہوئے، Quarkus کی صلاحیتوں کو استعمال کرتے ہوئے موجودہ جاوا ایپلی کیشنز کو جدید بنانے کا طریقہ دکھائیں گے۔ Red Hat JBoss انٹرپرائز ایپلی کیشن پلیٹ فارم (JBoss EAP) کوئیک اسٹارٹ ریپوزٹری سے ہیلوورلڈ ایپلی کیشنزجو کہ CDI اور Servlet 3 ٹیکنالوجیز استعمال کرتا ہے جو Quarkus کے تعاون سے ہیں۔

یہاں یہ نوٹ کرنا ضروری ہے کہ Quarkus اور JBoss EAP دونوں ایسے ٹولز استعمال کرنے پر زور دیتے ہیں جو ممکن حد تک معیار پر مبنی ہوں۔ JBoss EAP پر کوئی ایپلیکیشن نہیں چل رہی ہے؟ کوئی حرج نہیں، اسے آسانی سے آپ کے موجودہ ایپلیکیشن سرور سے JBoss EAP میں منتقل کیا جا سکتا ہے۔ ریڈ ہیٹ ایپلیکیشن مائیگریشن ٹول کٹ. جس کے بعد جدید شدہ کوڈ کا حتمی اور ورکنگ ورژن ریپوزٹری میں دستیاب ہوگا۔ github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus، ماڈیول میں helloworld.

اس پوسٹ کو لکھتے وقت ہم نے استعمال کیا۔ کوارکس کے دستورالعمل، بنیادی طور پر اپنی پہلی درخواست بنانا اور عمارت a مقامی ایگزیکیوٹیبل.

آئیے کوڈ حاصل کریں۔

سب سے پہلے، آئیے ریپوزٹری کا ایک مقامی کلون بنائیں JBoss EAP جلدی شروع ہوتا ہے۔:

$ 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/

آئیے دیکھتے ہیں کہ اصل ہیلوورلڈ کیسے کام کرتا ہے۔

دراصل، اس ایپلی کیشن کا جوہر نام سے واضح ہے، لیکن ہم اس کے کوڈ کو سختی سے سائنسی طور پر جدید بنائیں گے۔ اس لیے پہلے اس ایپلی کیشن کو اس کی اصل شکل میں دیکھتے ہیں۔

ہیلوورلڈ کو تعینات کیا جا رہا ہے۔

1. ایک ٹرمینل کھولیں اور JBoss EAP فولڈر کے روٹ پر جائیں (آپ اسے ڈاؤن لوڈ کر سکتے ہیں۔ یہاں)، یعنی EAP_HOME فولڈر میں۔

2. ڈیفالٹ پروفائل کے ساتھ JBoss EAP سرور لانچ کریں:

$ EAP_HOME/bin/standalone.sh

نوٹ: پر Windows EAP_HOMEbinstandalone.bat اسکرپٹ لانچ کے لیے استعمال ہوتی ہے۔

چند سیکنڈ کے بعد، لاگ میں کچھ اس طرح ظاہر ہونا چاہئے:

[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. براؤزر میں کھولیں۔ 127.0.0.1:8080 اور ہم یہ دیکھتے ہیں:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 1. JBoss EAP ہوم پیج۔

4. دستی میں دی گئی ہدایات پر عمل کریں۔ کوئیک سٹارٹ بنائیں اور تعینات کریں۔: ہیلو ورلڈ کو پھیلائیں اور (پروجیکٹ روٹ فولڈر سے) درج ذیل کمانڈ کو چلائیں:

$ mvn clean install wildfly:deploy

اس کمانڈ کو کامیابی کے ساتھ انجام دینے کے بعد، ہم لاگ میں درج ذیل کی طرح کچھ دیکھیں گے۔

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

لہذا، JBoss EAP پر ہیلوورلڈ ایپلیکیشن کی پہلی تعیناتی میں صرف 8 سیکنڈ لگے۔

ہیلو ورلڈ کی جانچ کر رہا ہے۔

ہدایات کے مطابق سختی سے کام کرنا درخواست تک رسائی حاصل کریں۔، براؤزر میں کھولیں۔ 127.0.0.1:8080/helloworld اور ہم اسے دیکھتے ہیں:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 2. JBoss EAP سے اصل ہیلو ورلڈ۔

تبدیلیاں کرنا

ان پٹ پیرامیٹر createHelloMessage(سٹرنگ کا نام) کو ورلڈ سے مارکو میں تبدیل کریں:

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

درج ذیل کمانڈ کو دوبارہ چلائیں:

$ mvn clean install wildfly:deploy

پھر ہم براؤزر میں صفحہ کو ریفریش کرتے ہیں اور دیکھتے ہیں کہ متن بدل گیا ہے:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 3. JBoss EAP میں ہیلو مارکو۔

ہیلوورلڈ کی تعیناتی کو رول بیک کریں اور JBoss EAP کو بند کریں۔

یہ اختیاری ہے، لیکن اگر آپ تعیناتی کو منسوخ کرنا چاہتے ہیں، تو آپ درج ذیل کمانڈ کے ساتھ ایسا کر سکتے ہیں:

$ mvn clean install wildfly:undeploy

اپنے JBoss EAP مثال کو بند کرنے کے لیے، ٹرمینل ونڈو میں بس Ctrl+C دبائیں۔

ہیلو ورلڈ کو اپ گریڈ کیا جا رہا ہے۔

آئیے اب اصل ہیلو ورلڈ ایپلی کیشن کو جدید بنائیں۔

ایک نئی برانچ بنائیں

کوئیک اسٹارٹ پروجیکٹ مکمل ہونے کے بعد ہم ایک نئی ورکنگ برانچ بناتے ہیں:

$ git checkout -b quarkus 7.2.0.GA

pom.xml فائل کو تبدیل کرنا

ہم pom.xml فائل سے ایپلیکیشن کو تبدیل کرنا شروع کر دیں گے۔ کوارکس کو اس میں XML بلاکس داخل کرنے کی اجازت دینے کے لیے، helloworld فولڈر میں درج ذیل کمانڈ کو چلائیں:

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

یہ مضمون لکھتے وقت، ورژن 0.23.2 استعمال کیا گیا تھا۔ Quarkus اکثر نئے ورژن جاری کرتا ہے، آپ ویب سائٹ پر معلوم کر سکتے ہیں کہ کون سا ورژن تازہ ترین ہے۔ github.com/quarkusio/quarkus/releases/latest.

مندرجہ بالا کمانڈ درج ذیل عناصر کو pom.xml میں داخل کرے گی۔

  • پراپرٹی، جو استعمال کرنے کے لیے Quarkus کے ورژن کی وضاحت کرتی ہے۔
  • Quarkus BOM (مادی کا بل) درآمد کرنے کے لیے بلاک، تاکہ ہر Quarkus کے انحصار کے لیے ایک ورژن شامل نہ کیا جائے۔
  • quarkus-maven-plugin ایپلی کیشن کی پیکیجنگ اور ڈیولپمنٹ موڈ فراہم کرنے کا ذمہ دار ہے۔
  • ایپلیکیشن ایگزیکیوٹیبل بنانے کے لیے مقامی پروفائل۔

اس کے علاوہ، ہم دستی طور پر pom.xml میں درج ذیل تبدیلیاں کرتے ہیں:

  1. ہم بلاک سے ٹیگ نکالتے ہیں اور اسے ٹیگ کے اوپر رکھتے ہیں۔ چونکہ اگلے مرحلے میں ہم بلاک کو حذف کر دیں گے، ہمیں کو محفوظ کرنے کی ضرورت ہے۔
  2. ہم بلاک کو ہٹاتے ہیں کیونکہ Quarkus کے ساتھ کام کرتے وقت، اس ایپلی کیشن کو JBoss سے پیرنٹ پوم کی ضرورت نہیں ہوگی۔
  3. ایک ٹیگ شامل کریں اور اسے ٹیگ کے نیچے رکھیں۔ آپ اپنا مطلوبہ ورژن نمبر بتا سکتے ہیں۔
  4. ہم ٹیگ کو ہٹا دیتے ہیں، کیونکہ یہ ایپلیکیشن اب جنگ نہیں ہے، بلکہ ایک باقاعدہ JAR ہے۔
  5. ہم مندرجہ ذیل انحصار میں ترمیم کرتے ہیں:
    1. ہم javax.enterprise:cdi-api انحصار کو io.quarkus:quarkus-arc میں تبدیل کرتے ہیں، provided کو ہٹاتے ہیں، کیونکہ (دستاویزات کے مطابق) یہ Quarkus ایکسٹینشن CDI انحصار کا انجیکشن فراہم کرتا ہے۔
    2. ہم انحصار کو org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec میں تبدیل کر دیتے ہیں سرولیٹ سپورٹ 'ov فراہم کرتا ہے۔
    3. ہم org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec انحصار کو ہٹاتے ہیں کیونکہ یہ انحصار کے ساتھ آتا ہے جسے ہم نے ابھی تبدیل کیا ہے۔

تمام تبدیلیوں کے ساتھ pom.xml فائل کا ورژن پر واقع ہے۔ github.com/mrizzi/jboss-eap-quickstarts/blob/quarkus/helloworld/pom.xml.

نوٹ کریں کہ اوپر دی گئی mvn io.quarkus:quarkus-maven-plugin:0.23.2:create کمانڈ نہ صرف pom.xml فائل کو تبدیل کرتی ہے بلکہ پروجیکٹ میں کئی اجزاء بھی شامل کرتی ہے، یعنی درج ذیل فائلز اور فولڈرز:

  • mvnw اور mvnw.cmd فائل اور .mvn فولڈر: Maven Wrapper آپ کو اس ورژن کو انسٹال کیے بغیر دیئے گئے Maven ورژن کے Maven پروجیکٹس کو چلانے کی اجازت دیتا ہے۔
  • ڈوکر فولڈر (src/main/ ڈائریکٹری میں): اس میں مقامی اور jvm موڈز (.dockerignore فائل کے ساتھ) کے لیے مثال Dockerfiles پر مشتمل ہے۔
  • وسائل کا فولڈر (src/main/ ڈائریکٹری میں): اس میں ایک خالی application.properties فائل اور ایک نمونہ Quarkus index.html شروع صفحہ شامل ہے (مزید تفصیلات کے لیے جدید ہیلوورلڈ کو چلائیں)۔

ہیلو ورلڈ لانچ کریں۔
ایپلیکیشن کو جانچنے کے لیے، ہم quarkus:dev استعمال کرتے ہیں، جو Quarkus کو ڈیولپمنٹ موڈ میں لانچ کرتا ہے (مزید تفصیلات کے لیے، مینول میں یہ سیکشن دیکھیں ڈویلپمنٹ وضع).

نوٹ: اس قدم کے نتیجے میں متوقع طور پر ایک غلطی ہو گی، کیونکہ ہم نے ابھی تک تمام ضروری تبدیلیاں نہیں کی ہیں۔

اب یہ دیکھنے کے لیے کمانڈ چلائیں کہ یہ کیسے کام کرتا ہے:

$ ./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

تو، یہ کام نہیں کرتا ... کیوں؟

UnsatisfiedResolutionException HelloService کلاس کی طرف اشارہ کرتا ہے، جو HelloWorldServlet کلاس کا رکن ہے (جاوا ممبر: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService)۔ مسئلہ یہ ہے کہ HelloWorldServlet کو HelloService کی انجکشن شدہ مثال کی ضرورت ہے، اور یہ نہیں مل سکتا (حالانکہ یہ دونوں کلاسیں ایک ہی پیکیج میں ہیں)۔

واپسی کا وقت آگیا ہے۔ دستاویزات اور پڑھیں کہ یہ Quarkus میں کیسے کام کرتا ہے۔ انجکشن، شامل کرنا، اور اس وجہ سے سیاق و سباق اور انحصار انجیکشن (سی ڈی آئی)۔ لہذا، سیاق و سباق اور انحصار انجیکشن گائیڈ کھولیں اور سیکشن میں بین کی دریافت ہم پڑھتے ہیں: "ایک بین کلاس جس میں بین کی وضاحت کرنے والی تشریح نہیں ہوتی ہے تلاش نہیں کی جاتی ہے۔"

آئیے HelloService کلاس کو دیکھیں - اس میں واقعی اس طرح کی تشریح نہیں ہے۔ لہذا، اسے شامل کرنا ضروری ہے تاکہ Quarkus بین کو تلاش کر سکے. اور چونکہ یہ ایک سٹیٹ لیس آبجیکٹ ہے، اس لیے ہم آسانی سے @ApplicationScoped تشریح اس طرح شامل کر سکتے ہیں:

@ApplicationScoped
public class HelloService {

نوٹ: یہاں ترقیاتی ماحول آپ سے مطلوبہ پیکج شامل کرنے کے لیے کہہ سکتا ہے (نیچے لائن دیکھیں)، اور آپ کو یہ دستی طور پر کرنا پڑے گا، اس طرح:

import javax.enterprise.context.ApplicationScoped;

اگر آپ کو شک ہے کہ اس معاملے میں کون سا دائرہ کار استعمال کیا جانا چاہئے جب یہ سورس بین کے لئے بالکل بھی متعین نہیں ہے، دستاویزات کو پڑھیں JSR 365: جاوا 2.0 کے لیے سیاق و سباق اور انحصار کا انجکشن — پہلے سے طے شدہ دائرہ کار.

اب ہم دوبارہ ./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]

اب سب کچھ غلطیوں کے بغیر ہوتا ہے۔

جدید ہیلوورلڈ کا آغاز کرنا
جیسا کہ لاگ میں لکھا ہے، اسے براؤزر میں کھولیں۔ 0.0.0.0:8080 (پہلے سے طے شدہ Quarkus آغاز صفحہ) اور ہم اسے دیکھتے ہیں:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 4. Quarkus dev شروع صفحہ۔

اس ایپلیکیشن کے لیے WebServlet تشریح درج ذیل سیاق و سباق کی تعریف پر مشتمل ہے:

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

لہذا، ہم براؤزر میں جاتے ہیں 0.0.0.0:8080/HelloWorld اور ہم درج ذیل دیکھتے ہیں:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 5: ہیلو ورلڈ ایپلی کیشن کے لیے کوارکس دیو صفحہ۔

ٹھیک ہے، سب کچھ کام کرتا ہے.

اب آئیے کوڈ میں تبدیلی کرتے ہیں۔ نوٹ کریں کہ ./mvnw compile quarkus:dev کمانڈ اب بھی چل رہی ہے اور ہمارا اسے روکنے کا کوئی ارادہ نہیں ہے۔ اب آئیے اسی کو لاگو کرنے کی کوشش کریں - بہت معمولی - تبدیلیاں خود کوڈ میں اور دیکھیں کہ کوارکس کس طرح ڈویلپر کی زندگی کو آسان بناتا ہے:

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

فائل کو محفوظ کریں اور پھر ہیلو مارکو کو دیکھنے کے لیے ویب پیج کو ریفریش کریں، جیسا کہ نیچے اسکرین شاٹ میں دکھایا گیا ہے:

Quarkus: JBoss EAP Quickstart سے مثال کے طور پر Helloworld کا استعمال کرتے ہوئے ایپلی کیشن ماڈرنائزیشن

چاول۔ 6. Quarkus dev میں ہیلو مارکو صفحہ۔

اب ٹرمینل میں آؤٹ پٹ چیک کرتے ہیں:

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

صفحہ کی تازہ کاری نے سورس کوڈ میں تبدیلیوں کا پتہ لگانے کو متحرک کیا، اور Quarkus نے خود بخود اسٹاپ اسٹارٹ طریقہ کار انجام دیا۔ اور یہ سب کچھ صرف 0.371 سیکنڈ میں مکمل ہوا (یہاں یہ ہے، وہ "الٹرا فاسٹ سباٹامک جاوا")۔

ہیلوورلڈ کو ایک JAR پیکیج میں بنانا
اب جب کہ کوڈ کام کرتا ہے جیسا کہ اسے چاہیے، آئیے اسے درج ذیل کمانڈ کے ساتھ پیک کریں:

$ ./mvnw clean package

یہ کمانڈ /target فولڈر میں دو JAR فائلیں بناتی ہے: helloworld-.jar فائل، جو کہ ماون ٹیم کی طرف سے پروجیکٹ کی کلاسز اور وسائل کے ساتھ جمع کردہ ایک معیاری نمونہ ہے۔ اور helloworld-runner.jar فائل، جو کہ ایک قابل عمل JAR ہے۔

براہ کرم نوٹ کریں کہ یہ ایک uber-jar نہیں ہے، کیونکہ تمام انحصار کو آسانی سے /target/lib فولڈر میں کاپی کیا جاتا ہے (JAR فائل میں پیک نہیں کیا جاتا)۔ لہذا، اس JAR کو کسی دوسرے فولڈر سے یا کسی دوسرے میزبان پر چلانے کے لیے، آپ کو JAR فائل اور وہاں /lib فولڈر دونوں کو کاپی کرنے کی ضرورت ہے، اس لیے کہ JAR پیکج میں MANIFEST.MF فائل میں کلاس-پاتھ عنصر پر مشتمل ہے۔ lib فولڈرز سے JARs کی واضح فہرست
uber-jar ایپلی کیشنز بنانے کا طریقہ سیکھنے کے لیے، براہ کرم ٹیوٹوریل سے رجوع کریں۔ Uber-Jar تخلیق.

JAR میں پیک کیا ہوا ہیلو ورلڈ لانچ کریں۔

اب ہم معیاری جاوا کمانڈ کا استعمال کرتے ہوئے اپنے JAR کو چلا سکتے ہیں۔

$ 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]

یہ سب کرنے کے بعد، اپنے براؤزر پر جائیں۔ 0.0.0.0:8080 اور چیک کریں کہ سب کچھ کام کرتا ہے جیسا کہ اسے ہونا چاہئے۔

ہیلوورلڈ کو مقامی ایگزیکیوٹیبل فائل میں مرتب کرنا

لہذا ہمارا ہیلوورلڈ کوارکس انحصار کا استعمال کرتے ہوئے اسٹینڈ اسٹون جاوا ایپلی کیشن کے طور پر چلتا ہے۔ لیکن آپ آگے جا کر اسے ایک مقامی ایگزیکیوٹیبل فائل میں تبدیل کر سکتے ہیں۔

GraalVM انسٹال کرنا
سب سے پہلے، اس کے لیے آپ کو ضروری ٹولز انسٹال کرنے کی ضرورت ہے:

1. سے GraalVM 19.2.0.1 ڈاؤن لوڈ کریں۔ github.com/oracle/graal/releases/tag/vm-19.2.0.1.

2. ڈاؤن لوڈ کردہ آرکائیو کو پھیلائیں:

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

3. untar فولڈر میں جائیں۔

4. مقامی تصویر کو ڈاؤن لوڈ اور شامل کرنے کے لیے نیچے دی گئی کمانڈ کو چلائیں:

$ ./bin/gu install native-image

5. مرحلہ 2 میں بنائے گئے فولڈر کو GRAALVM_HOME ماحولیاتی متغیر میں رجسٹر کریں:

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

دیگر OS پر مزید معلومات اور تنصیب کی ہدایات کے لیے، دستی دیکھیں مقامی ایگزیکیوٹیبل تعمیر کرنا — شرائط.

ہیلو ورلڈ کو مقامی قابل عمل فائل میں بنانا
دستی پڑھنا مقامی ایگزیکیوٹیبل بنانا — ایک مقامی ایگزیکیوٹیبل تیار کرنا: "اب آئیے اپنی ایپلیکیشن کے لانچ کے وقت اور ڈسک کے سائز کو کم کرنے کے لیے ایک مقامی ایگزیکیوٹیبل فائل بنائیں۔ ایگزیکیوٹیبل فائل میں ایپلیکیشن کو چلانے کے لیے ضروری سب کچھ ہوگا، بشمول JVM (یا اس کا ایک چھوٹا ورژن، جس میں صرف وہی چیز ہے جو ایپلیکیشن چلانے کے لیے درکار ہے) اور خود ہماری ایپلیکیشن۔

مقامی ایگزیکیوٹیبل فائل بنانے کے لیے، آپ کو مقامی Maven پروفائل کو فعال کرنے کی ضرورت ہے:

$ ./mvnw package -Pnative

ہماری تعمیر میں ایک منٹ اور 10 سیکنڈ لگے، اور حتمی helloworld—رنر f فائل /target فولڈر میں بنائی گئی۔

مقامی ہیلو ورلڈ کو ایگزیکیوٹیبل چلائیں۔

پچھلے مرحلے میں، ہمیں ایگزیکیوٹیبل فائل /target/helloworld—رنر موصول ہوئی۔ اب اسے چلائیں:

$ ./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]

اسے دوبارہ براؤزر میں کھولیں۔ 0.0.0.0:8080 اور چیک کریں کہ سب کچھ کام کرتا ہے جیسا کہ اسے ہونا چاہئے۔

جاری رکھنے کے لئے!

ہمارا ماننا ہے کہ جاوا ایپلی کیشنز کو جدید بنانے کا طریقہ Quarkus کی صلاحیتوں کو استعمال کرتے ہوئے اس پوسٹ میں زیر بحث آیا ہے (اگرچہ ایک سادہ مثال استعمال کرتے ہوئے) حقیقی زندگی میں فعال طور پر استعمال کیا جانا چاہیے۔ ایسا کرنے میں، آپ کو ممکنہ طور پر بہت سی پریشانیوں کا سامنا کرنا پڑے گا، جن کا ہم جزوی طور پر اگلی پوسٹ میں جواب دیں گے، جہاں ہم کارکردگی میں بہتری کا اندازہ لگانے کے لیے میموری کی کھپت کی پیمائش کرنے کے بارے میں بات کریں گے، جو ایپلیکیشن کی جدید کاری کے پورے عمل کا ایک اہم حصہ ہے۔

ماخذ: www.habr.com

DDoS تحفظ، VPS VDS سرورز والی سائٹوں کے لیے قابل اعتماد ہوسٹنگ خریدیں۔ DDoS تحفظ، VPS VDS سرورز کے ساتھ قابل اعتماد ویب سائٹ ہوسٹنگ خریدیں۔ ProHoster