เช•เซเชตเชพเชฐเซเช•เชธ เช เชธเซเชชเชฐเชธเซ‹เชจเชฟเช• เชธเชฌเชเชŸเซ‹เชฎเชฟเช• เชœเชพเชตเชพ เช›เซ‡. เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชจเซ€ เชธเช‚เช•เซเชทเชฟเชชเซเชค เชเชพเช‚เช–เซ€

เช•เซเชตเชพเชฐเซเช•เชธ เช เชธเซเชชเชฐเชธเซ‹เชจเชฟเช• เชธเชฌเชเชŸเซ‹เชฎเชฟเช• เชœเชพเชตเชพ เช›เซ‡. เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชจเซ€ เชธเช‚เช•เซเชทเชฟเชชเซเชค เชเชพเช‚เช–เซ€

เชชเชฐเชฟเชšเชฏ

XNUMXเชฎเซ€ เชฎเชพเชฐเซเชšเซ‡, RedHat (เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ IBM) เชชเซเชฐเชธเซเชคเซเชค เชจเชตเซเช‚ เชฎเชพเชณเช–เซเช‚ - เช•เซเชตเชพเชฐเซเช•เชธ. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเชพ เชฎเชคเซ‡, เช† เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• GraalVM เช…เชจเซ‡ OpenJDK HotSpot เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ เช…เชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เช•เซเชตเชพเชฐเซเช•เชธ เชธเซเชŸเซ‡เช•เชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเชพเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus เช…เชจเซ‡ เช…เชจเซเชฏ.

เชงเซเชฏเซ‡เชฏ เชœเชพเชตเชพเชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชœเชฎเชพเชตเชŸ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเชฒเซ‡เชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เช…เช—เซเชฐเชฃเซ€ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เช›เซ‡, เชœเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชถเซ€เชฒ เช…เชจเซ‡ เช…เชจเชฟเชตเชพเชฐเซเชฏ เชฌเช‚เชจเซ‡ เชถเซˆเชฒเซ€เชฎเชพเช‚ เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡ เชเช•เซ€เช•เซƒเชค เช…เชญเชฟเช—เชฎ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‹ เชคเชฎเซ‡ เชœเซเช“ เช† เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชจเซเช‚ เชตเชฐเซเช—เซ€เช•เชฐเชฃ, เชชเช›เซ€ เช•เซเชตเชพเชฐเซเช•เชธ เช•เซเชฏเชพเช‚เช• โ€œเชเช—เซเชฐเซ€เช—เซ‡เชŸเชฐเซเชธ/เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸเชฐเซเชธโ€ เช…เชจเซ‡ โ€œเชนเชพเชˆ-เชฒเซ‡เชตเชฒ เชซเซเชฒเชธเซเชŸเซ‡เช• เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•โ€ เชตเชšเซเชšเซ‡ เช›เซ‡. เช† เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชเช• เชเช—เซเชฐเซ€เช—เซ‡เชŸเชฐ เช•เชฐเชคเชพเช‚ เชตเชงเซ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเซ‚เชฐเซเชฃ-เชธเซเชŸเซ…เช• เชธเซเชงเซ€ เชชเชฃ เชชเชนเซ‹เช‚เชšเชคเซเช‚ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡... เชฌเซ‡เช•เชเชจเซเชก เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช‚เชšเชจเซ€ เช–เซ‚เชฌ เชœ เชŠเช‚เชšเซ€ เชเชกเชช เช…เชจเซ‡ เช“เช›เซ€ เชฎเซ‡เชฎเชฐเซ€ เชตเชชเชฐเชพเชถเชจเซเช‚ เชตเชšเชจ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เช…เชนเซ€เช‚ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซ€ เชตเซ‡เชฌเชธเชพเช‡เชŸเชจเซ‹ เชกเซ‡เชŸเชพ เช›เซ‡:

เชถเชฐเซ‚เช†เชคเชฅเซ€ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชคเชฟเชธเชพเชฆ (เช“) เชธเซเชงเซ€เชจเซ‹ เชธเชฎเชฏ:

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ
REST
REST+JPA

เช•เซเชตเชพเชฐเซเช•เชธ+เช—เซเชฐเชพเชฒเชตเซ€เชเชฎ
0.014
0.055

เช•เซเชตเชพเชฐเซเช•เชธ+เช“เชชเชจเชœเซ‡เชกเซ€เช•เซ‡
0.75
2.5

เชชเชฐเช‚เชชเชฐเชพเช—เชค เช•เซเชฒเชพเช‰เชก เชจเซ‡เชŸเชฟเชต เชธเซเชŸเซ‡เช•*
4.3
9.5

เชฎเซ‡เชฎเชฐเซ€ เชตเชชเชฐเชพเชถ (Mb):

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ
REST
REST+JPA

เช•เซเชตเชพเชฐเซเช•เชธ+เช—เซเชฐเชพเชฒเชตเซ€เชเชฎ
13
35

เช•เซเชตเชพเชฐเซเช•เชธ+เช“เชชเชจเชœเซ‡เชกเซ€เช•เซ‡
74
130

เชชเชฐเช‚เชชเชฐเชพเช—เชค เช•เซเชฒเชพเช‰เชก เชจเซ‡เชŸเชฟเชต เชธเซเชŸเซ‡เช•*
140
218

เชชเซเชฐเชญเชพเชตเชถเชพเชณเซ€, เชคเซ‡ เชจเชฅเซ€?

*เชฎเชจเซ‡ เช† เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€ เชธเซเชŸเซ‡เช• เชตเชฟเชถเซ‡ เช•เซ‹เชˆ เชฎเชพเชนเชฟเชคเซ€ เชฎเชณเซ€ เชจเชฅเซ€, เช…เชฎเซ‡ เชงเชพเชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช•เซ‡ เช† เชตเชงเชพเชฐเชพเชจเซ€ เชฌเซ‹เชกเซ€ เช•เซ€เชŸ เชธเชพเชฅเซ‡เชจเซเช‚ เช•เซ‹เชˆ เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชธเซเชชเซเชฐเชฟเช‚เช— เชฌเซ‚เชŸ เช›เซ‡.

เชนเซ‡เชฒเซ‹ เชตเชฐเซเชฒเซเชก!

เช•เซเชตเชพเชฐเซเช•เชธเชฎเชพเช‚ เชฒเช–เซ‡เชฒเซ€ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชถเซ‡:

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

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

เชคเซ‡ เชถเชพเชฌเซเชฆเชฟเช• เชฐเซ€เชคเซ‡ เชเช• เชตเชฐเซเช— เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡! เชคเชฎเซ‡ เชตเชฟเช•เชพเชธ เชฎเซ‹เชกเชฎเชพเช‚ เชฎเซ‡เชตเซ‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹:

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 เชตเชฟเชชเชฐเซ€เชค. เช•เชฎเชจเชธเซ€เชฌเซ‡, เช…เชคเซเชฏเชพเชฐเซ‡ เช—เซเชฐเซ‡เชกเชฒ เช–เชพเชฒเซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชฐเซเชฅเชจ เช•เชฐเชคเซเช‚ เชจเชฅเซ€; เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐ เชตเชฟเช—เชคเชตเชพเชฐ เชฎเชพเชนเชฟเชคเซ€ เช›เซ‡ เชชเชพเช เซเชฏเชชเซเชธเซเชคเช•.

เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ

เช•เซเชตเชพเชฐเซเช•เชธ เช เชเช•เซเชธเซเชŸเซ‡เชจเซเชธเชฟเชฌเชฒ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เช›เซ‡. เชนเชพเชฒเชฎเชพเช‚ เช“เชฐเซเชกเชฐ เช›เซ‡ 40 เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ, เชœเซ‡ เชตเชฟเชตเชฟเชง เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡ - เชธเชชเซ‹เชฐเซเชŸเชฅเซ€ เชตเชธเช‚เชค DI เช•เชจเซเชŸเซ‡เชจเชฐ ะธ เช…เชชเชพเชšเซ‡ เชŠเช‚เชŸ เชธเซ‡เชตเชพเช“ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชฒเซ‹เช—เชฟเช‚เช— เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ. เช…เชจเซ‡ เชœเชพเชตเชพ เช‰เชชเชฐเชพเช‚เชค เช•เซ‹เชŸเชฒเชฟเชจเชฎเชพเช‚ เชฒเซ‡เช–เชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชเช• เชตเชฟเชธเซเชคเชฐเชฃ เช›เซ‡.

เชจเชฟเชทเซเช•เชฐเซเชท

เชฎเชพเชฐเชพ เชฎเชคเซ‡, เช•เซเชตเชพเชฐเซเช•เชธ เชคเซ‡ เชธเชฎเชฏเชจเชพ เชตเชฒเชฃเซ‹ เชธเชพเชฅเซ‡ เชเช•เชฆเชฎ เชธเซเชธเช‚เช—เชค เช›เซ‡. เชฌเซ‡เช•เชเชจเซเชก เช•เซ‹เชก เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชตเชงเซ เชธเชฐเชณ เช…เชจเซ‡ เชธเชฐเชณ เชฌเชจเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เช† เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชกเซ‹เช•เชฐ เช…เชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชฎเซ‚เชณ เช†เชงเชพเชฐ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชธเซ‡เชตเชพเชจเชพ เชตเชฟเช•เชพเชธเชจเซ‡ เชตเชงเซ เชธเชฐเชณ เช…เชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชเช• เชตเชฟเชถเชพเชณ เชตเชคเซเชคเชพ เช GraalVM เชฎเชพเชŸเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชธเชชเซ‹เชฐเซเชŸ เช…เชจเซ‡ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ-เช†เชงเชพเชฐเชฟเชค เชˆเชฎเซ‡เชœเซ€เชธเชจเซ€ เชชเซ‡เชขเซ€ เช›เซ‡, เชœเซ‡ เชธเซ‡เชตเชพเช“เชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชเชกเชชเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฅเซ‹เชกเซ€ เชฎเซ‡เชฎเชฐเซ€ เชธเซเชชเซ‡เชธ เชฒเซ‡เชตเชพ เชฆเซ‡ เช›เซ‡. เช…เชจเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเชฒเซ‡เชธ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชฎเชพเชŸเซ‡เชจเชพ เช…เชฎเชพเชฐเชพ เชธเชพเชฎเซ‚เชนเชฟเช• เชœเซเชธเซเชธเชพเชจเชพ เชธเชฎเชฏเชฎเชพเช‚ เช† เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชพเช‡เชŸ - quarkus.io. เชเชกเชชเซ€ เชถเชฐเซ‚เช†เชค เชฎเชพเชŸเซ‡เชจเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ GitHub.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹