āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻ¸āĻ¨āĻŋāĻ• āĻ¸āĻžāĻŦāĻāĻŸāĻŽāĻŋāĻ• āĻœāĻžāĻ­āĻžāĨ¤ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻ¸āĻ¨āĻŋāĻ• āĻ¸āĻžāĻŦāĻāĻŸāĻŽāĻŋāĻ• āĻœāĻžāĻ­āĻžāĨ¤ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

ā§­āĻ‡ āĻŽāĻžāĻ°ā§āĻš, āĻ°ā§‡āĻĄāĻšā§āĻ¯āĻžāĻŸ (āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻ†āĻ‡āĻŦāĻŋāĻāĻŽ) āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ¨āĻ¤ā§āĻ¨ āĻ•āĻžāĻ āĻžāĻŽā§‹ - āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸. āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻŽāĻ¤ā§‡, āĻāĻ‡ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻŸāĻŋ GraalVM āĻāĻŦāĻ‚ OpenJDK HotSpot-āĻāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ Kubernetes-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯āĨ¤

āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻœāĻžāĻ­āĻžāĻ•ā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻŦāĻŋāĻšā§€āĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨ā§‡āĻ¤ā§ƒāĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°āĻž, āĻ¯āĻž āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻļā§€āĻ˛ āĻāĻŦāĻ‚ āĻ…āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ‰āĻ­āĻ¯āĻŧ āĻļā§ˆāĻ˛ā§€āĻ¤ā§‡ āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻĻāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ•āĻžāĻ“ āĻāĻ‡ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻļā§āĻ°ā§‡āĻŖā§€āĻŦāĻŋāĻ­āĻžāĻ—, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ "āĻāĻ—ā§āĻ°āĻŋāĻ—ā§‡āĻŸāĻ°/āĻ•ā§‹āĻĄ āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸāĻ°" āĻāĻŦāĻ‚ "āĻšāĻžāĻ‡-āĻ˛ā§‡āĻ­ā§‡āĻ˛ āĻĢā§āĻ˛āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•" āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•ā§‹āĻĨāĻžāĻ“ āĻ†āĻ›ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻˇā§āĻŸāĻŋāĻ•āĻžāĻ°ā§€āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻŦā§‡āĻļāĻŋ, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ-āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ“ āĻĒā§ŒāĻāĻ›āĻžāĻ¯āĻŧ āĻ¨āĻž, āĻ•āĻžāĻ°āĻŖ... āĻŦā§āĻ¯āĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€.

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻžā§āĻšā§‡āĻ° āĻ–ā§āĻŦ āĻ‰āĻšā§āĻš āĻ—āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ•āĻŽ āĻŽā§‡āĻŽāĻ°āĻŋ āĻ–āĻ°āĻš āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ. āĻāĻ–āĻžāĻ¨ā§‡ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ° āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻžāĻ‡āĻŸ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

āĻļā§āĻ°ā§ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž (āĻ—ā§āĻ˛āĻŋ) āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŽāĻ¯āĻŧ:

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨
āĻŦāĻŋāĻļā§āĻ°āĻžāĻŽ
REST+JPA

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸+āĻ—ā§āĻ°āĻžāĻ˛āĻ­āĻŋāĻāĻŽ
0.014
0.055

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸+āĻ“āĻĒā§‡āĻ¨āĻœā§‡āĻĄāĻŋāĻ•ā§‡
0.75
2.5

āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•*
4.3
9.5

āĻŽā§‡āĻŽāĻ°āĻŋ āĻ–āĻ°āĻš (Mb):

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨
āĻŦāĻŋāĻļā§āĻ°āĻžāĻŽ
REST+JPA

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸+āĻ—ā§āĻ°āĻžāĻ˛āĻ­āĻŋāĻāĻŽ
13
35

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸+āĻ“āĻĒā§‡āĻ¨āĻœā§‡āĻĄāĻŋāĻ•ā§‡
74
130

āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•*
140
218

āĻšāĻŋāĻ¤ā§āĻ¤āĻžāĻ•āĻ°ā§āĻˇāĻ•, āĻ¤āĻžāĻ‡ āĻ¨āĻž?

*āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•ā§‹āĻ¨ āĻ¤āĻĨā§āĻ¯ āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡āĻ¨āĻŋ, āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻŦāĻĄāĻŋ āĻ•āĻŋāĻŸ āĻ¸āĻš āĻāĻ• āĻ§āĻ°āĻŖā§‡āĻ° āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻŦā§āĻŸ.

āĻ“āĻšā§‡ āĻŦāĻŋāĻļā§āĻŦ!

Quarkus āĻ āĻ˛ā§‡āĻ–āĻž āĻ¸āĻšāĻœāĻ¤āĻŽ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻāĻ°āĻ•āĻŽ āĻšāĻŦā§‡:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

āĻāĻŸāĻž āĻ†āĻ•ā§āĻˇāĻ°āĻŋāĻ• āĻāĻ• āĻŦāĻ°ā§āĻ— āĻāĻŦāĻ‚ āĻ¯ā§‡ āĻ¯āĻĨā§‡āĻˇā§āĻŸ! āĻ†āĻĒāĻ¨āĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻŽā§‹āĻĄā§‡ Maven āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

mvn compile quarkus:dev
â€Ļ
$ curl http://localhost:8080/hello
hello

āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻšāĻ˛ āĻ•ā§‹āĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¨ā§‡āĻ‡! āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻšāĻŸ āĻ°āĻŋāĻ˛ā§‹āĻĄ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ¨āĻž āĻ•āĻ°ā§‡āĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻŦāĻŋāĻ•āĻžāĻļāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻĻā§āĻ°ā§āĻ¤āĻ¤āĻ° āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤

āĻāĻ°āĻĒāĻ° āĻ•āĻŋ? āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ‰āĻĻā§āĻŦā§āĻĻā§āĻ§ āĻ•āĻ°āĻž. āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ•ā§‹āĻĄ:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻ•:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–ā§āĻ¯ āĻ¯ā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• - CDI āĻāĻŦāĻ‚ JAX-RS āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻŸā§€āĻ•āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ†āĻ—ā§‡ CDI āĻāĻŦāĻ‚ JAX-RS āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ¨āĻ¤ā§āĻ¨ āĻ•āĻŋāĻ›ā§ āĻļā§‡āĻ–āĻžāĻ° āĻĻāĻ°āĻ•āĻžāĻ° āĻ¨ā§‡āĻ‡āĨ¤

āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž

āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻšāĻžāĻ‡āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ JPA āĻŸā§€āĻ•āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ REST āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡āĻ° āĻŽāĻ¤ā§‹, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ, āĻŸā§€āĻ•āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ @Entity āĻāĻŦāĻ‚ application.properties-āĻ āĻĄā§‡āĻŸāĻžāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ¸āĻŦ āĻ•ā§‹āĻ¨ā§‹ sessionFactory, persistence.xml āĻŦāĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĢāĻžāĻ‡āĻ˛ āĻ¨ā§‡āĻ‡ā§ˇ āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻŋāĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ persistence.xml āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ ORM āĻ¸ā§āĻ¤āĻ°āĻŸāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽāĻ­āĻžāĻŦā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚, āĻāĻ•-āĻĨā§‡āĻ•ā§‡-āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻļā§āĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻ¨āĻœāĻ°ā§‡ āĻāĻŸāĻž āĻŽāĻšāĻžāĻ¨ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚, āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¨ā§‹āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹. āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻāĻŸāĻŋ āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€āĨ¤

āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨

āĻ‰āĻĒāĻ°ā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻļā§€āĻ˛ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻļā§ˆāĻ˛ā§€ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻ—ā§‡āĻ° āĻ†āĻŦā§‡āĻĻāĻ¨ā§‡āĻ° āĻ•ā§‹āĻĄ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄāĻ“ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ¤ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ•āĻ‡ āĻšāĻŦā§‡āĨ¤

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŽā§‚āĻ˛āĻ•

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ—ā§āĻ˛āĻŋ JUnit4 āĻŦāĻž JUnit5 āĻ āĻ˛ā§‡āĻ–āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¨ā§€āĻšā§‡ āĻāĻ•āĻŸāĻŋ āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž, āĻāĻŸāĻŋ RestAssured āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest āĻŸā§€āĻ•āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ†āĻ—ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻŦāĻžāĻ•āĻŋ āĻ¸āĻŦ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•ā§‹āĻĄ.

āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ GraalVM āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻļāĻ•ā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤, āĻ¤āĻžāĻ‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ GraalVM āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ GRAALVM_HOME āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻ°āĻ“ āĻ¸āĻŽāĻžāĻŦā§‡āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨:

mvn package -Pnative

āĻŽāĻœāĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛, āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸ āĻ•āĻ°āĻž āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāĻ°āĻŖ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ•ā§‹āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž JVM-āĻ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻĨā§‡āĻ•ā§‡ āĻ†āĻ˛āĻžāĻĻāĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ @SubstrateTest āĻŸā§€āĻ•āĻžāĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§‹āĻĄ āĻšāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ•ā§‹āĻĄ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡; āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ-āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻāĻ‡āĻ°āĻ•āĻŽ āĻšāĻŦā§‡:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

āĻ‰āĻ¤ā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĄāĻ•āĻžāĻ°ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻŦāĻž āĻ“āĻĒā§‡āĻ¨āĻļāĻŋāĻĢāĻŸā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€.

āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŽā§āĻ¯āĻžāĻ­ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ—ā§āĻ°ā§‡āĻĄāĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ Maven āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤, Gradle āĻĨā§‡āĻ•ā§‡ āĻ­āĻŋāĻ¨ā§āĻ¨āĨ¤ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ Gradle āĻāĻ•āĻŸāĻŋ āĻ–āĻžāĻ˛āĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž; āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻžāĻ‡āĻŸā§‡ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻĒāĻžāĻ ā§āĻ¯āĻĒā§āĻ¸ā§āĻ¤āĻ•.

āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻ¸āĻŋāĻŦāĻ˛ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĨ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ†āĻĻā§‡āĻļ āĻ†āĻ›ā§‡ 40āĻŸāĻŋ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨, āĻ¯āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ - āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻ†āĻ‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° и āĻ…ā§āĻ¯āĻžāĻĒāĻžāĻšāĻŋ āĻ‰āĻŸ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ˛āĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻœāĻžāĻ­āĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ•ā§‹āĻŸāĻ˛āĻŋāĻ¨ā§‡ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ā§‡, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸ā§‡āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻŸā§āĻ°ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦā§‡āĻļ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻŦā§āĻ¯āĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ•ā§‹āĻĄ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸āĻšāĻœ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻšāĻœāĻ¤āĻ° āĻšāĻšā§āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻĄāĻ•āĻžāĻ° āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ¸āĻžāĻĒā§‹āĻ°ā§āĻŸ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻŽā§‡āĻ¨ā§āĻŸāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ¸āĻ°āĻ˛ āĻ“ āĻ—āĻ¤āĻŋāĻļā§€āĻ˛ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļāĻžāĻ˛ āĻĒā§āĻ˛āĻžāĻ¸ āĻšāĻ˛ GraalVM āĻāĻŦāĻ‚ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ-āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ‡āĻŽā§‡āĻœ āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨, āĻ¯āĻž āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻĻā§āĻ°ā§āĻ¤ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻŽā§‡āĻŽāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻŋāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻšā§€āĻ¨ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻžāĻĒāĻ• āĻ†āĻŦā§‡āĻ—ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻāĻŸāĻŋ āĻ–ā§āĻŦāĻ‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤

āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¸āĻžāĻ‡āĻŸ - quarkus.io. āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ GitHub.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨