เด•เตเดตเดพเตผเด•เตเด•เดธเต เด’เดฐเต เดธเต‚เดชเตเดชเตผเดธเต‹เดฃเดฟเด•เต เดธเดฌเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดœเดพเดตเดฏเดพเดฃเต. เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดฟเดจเตเดฑเต† เดนเตเดฐเดธเตเดต เด…เดตเดฒเต‹เด•เดจเด‚

เด•เตเดตเดพเตผเด•เตเด•เดธเต เด’เดฐเต เดธเต‚เดชเตเดชเตผเดธเต‹เดฃเดฟเด•เต เดธเดฌเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดœเดพเดตเดฏเดพเดฃเต. เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดฟเดจเตเดฑเต† เดนเตเดฐเดธเตเดต เด…เดตเดฒเต‹เด•เดจเด‚

เด†เดฎเตเด–เด‚

เดฎเดพเตผเดšเตเดšเต 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";
   }
}

เด‡เดคเต เด…เด•เตเดทเดฐเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด’เดฐเต เด•เตเดฒเดพเดธเต เด†เดฃเต, เด…เดคเต เดฎเดคเดฟ! เดตเดฟเด•เดธเดจ เดฎเต‹เดกเดฟเตฝ Maven เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

mvn compile quarkus:dev
โ€ฆ
$ curl http://localhost:8080/hello
hello

เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เตเดฒเดพเดธเต เด‡เดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต! Quarkus เดนเต‹เดŸเตเดŸเต เดฑเต€เดฒเต‹เดกเดฟเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดฑเตเดฑเดพเดจเดพเด•เตเด‚, เด‡เดคเต เดตเดฟเด•เดธเดจเด‚ เด•เต‚เดŸเตเดคเตฝ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเต เดŽเดจเตเดคเดพเดฃเต? เด’เดฐเต เดตเตเดฏเดพเด–เตเดฏเดพเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เตบเดŸเตเดฐเต‹เดณเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเต‡เดตเดจเด‚ เดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ เด•เตเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเด•. เดธเต‡เดตเดจ เด•เต‹เดกเต:

@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 เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดชเตเดคเดฟเดฏเดคเดพเดฏเดฟ เด’เดจเตเดจเตเด‚ เดชเด เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ.

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต

เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดนเตˆเดฌเตผเดจเต‡เดฑเตเดฑเต, เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดœเต†เดชเดฟเดŽ เดตเตเดฏเดพเด–เตเดฏเดพเดจเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. 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

เดฐเดธเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตโ€Œเดค เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด‡เดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดจเต‡เดฑเตเดฑเต€เดตเต เด•เต‹เดกเดฟเดจเตเดฑเต† เดจเดฟเตผเดตเตเดตเดนเดฃเด‚ เดœเต†เดตเดฟเดŽเดฎเตเดฎเดฟเดฒเต† เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. @SubstrateTest เดตเตเดฏเดพเด–เตเดฏเดพเดจเด‚ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เต‹เดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดŸเต†เดธเตเดฑเตเดฑเต เด•เต‹เดกเต เดชเตเดจเดฐเตเดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดจเดจเตเดคเดฐเดพเดตเด•เดพเดถเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚; เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เด’เดฐเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚ เด†เดถเตเดฐเดฟเดค เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เต‹เดกเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตโ€Œเดค เดšเดฟเดคเตเดฐเด‚ เดกเต‹เด•เตเด•เดฑเดฟเตฝ เดชเดพเด•เตเด•เต‡เดœเตเดšเต†เดฏเตโ€Œเดคเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต‹ เด“เดชเตเดชเตบเดทเดฟเดซเตเดฑเตเดฑเดฟเดฒเต‹ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚, เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ.

เดŸเต‚เตพเด•เดฟเดฑเตเดฑเต

เด•เตเดตเดพเตผเด•เตเด•เดธเต เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต Maven, Gradle เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. Gradle-เตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ Maven เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เด‡เดชเตเดชเต‹เตพ เด’เดฐเต เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† Gradle เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ; เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเดฟเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เดฃเตเดŸเต เดชเดพเด เดชเตเดธเตเดคเด•เด‚.

เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด™เตเด™เตพ

เด•เตเดตเดพเตผเด•เตเด•เดธเต เด’เดฐเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดพเดฃเต. เดจเดฟเดฒเดตเดฟเตฝ เด’เดฐเต เด“เตผเดกเตผ เด‰เดฃเตเดŸเต 40 เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด™เตเด™เตพ, เดตเดฟเดตเดฟเดง เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต - เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดชเตเดฐเดฟเด‚เด—เต เดกเดฟเด เด•เดฃเตเดŸเต†เดฏเตเดจเตผ ะธ เด…เดชเตเดชเดพเดšเตเดšเต† เด’เดŸเตเดŸเด•เด‚ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเต‡เดตเดจเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฎเต†เดŸเตเดฐเดฟเด•เตโ€Œเดธเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฎเตเดฎเตเดชเต. เดœเดพเดตเดฏเตโ€Œเด•เตเด•เต เดชเตเดฑเดฎเต‡, เด•เต‹เดŸเตโ€Œเดฒเดฟเดจเดฟเตฝ เดฑเตˆเดฑเตเดฑเดฟเด‚เด—เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดฎเตเดฃเตเดŸเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เด•เตเดตเดพเตผเด•เตเด•เดธเต เด…เด•เตเด•เดพเดฒเดคเตเดคเต† เดŸเตเดฐเต†เตปเดกเตเด•เดณเตเดฎเดพเดฏเดฟ เดคเดฟเด•เดšเตเดšเตเด‚ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต. เดฌเดพเด•เตเด•เตโ€ŒเดŽเตปเดกเต เด•เต‹เดกเต เดกเต†เดตเดฒเดชเตโ€Œเดฎเต†เดจเตเดฑเต เดŽเดณเตเดชเตเดชเดตเตเด‚ เดŽเดณเตเดชเตเดชเดตเตเดฎเดพเดฃเต, เดˆ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดกเต‹เด•เตเด•เดฑเดฟเดจเตเด‚ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเตเด‚ เดจเต‡เดฑเตเดฑเต€เดตเต เดชเดฟเดจเตเดคเตเดฃ เดšเต‡เตผเดคเตเดคเต เดธเต‡เดตเดจ เดตเดฟเด•เดธเดจเด‚ เด•เต‚เดŸเตเดคเตฝ เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. GraalVM-เดจเตเดณเตเดณ เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดชเดฟเดจเตเดคเตเดฃเดฏเตเด‚ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚-เด†เดถเตเดฐเดฟเดค เด‡เดฎเต‡เดœเตเด•เดณเตเดŸเต† เดœเดจเดฑเต‡เดทเดจเตเด‚ เด’เดฐเต เดตเดฒเดฟเดฏ เดชเตเดฒเดธเต เด†เดฃเต, เด‡เดคเต เดธเต‡เดตเดจเด™เตเด™เตพ เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเด‚ เด•เตเดฑเดšเตเดšเต เดฎเต†เดฎเตเดฎเดฑเดฟ เด‡เดŸเด‚ เดŽเดŸเตเด•เตเด•เดพเดจเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเต‹เดŸเตเด‚ เดธเต†เตผเดตเตผเดฒเต†เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเต‹เดŸเตเดฎเตเดณเตเดณ เดจเดฎเตเดฎเตเดŸเต† เดตเตป เด…เดญเดฟเดจเดฟเดตเต‡เดถเดคเตเดคเดฟเตฝ เด‡เดคเต เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต.

เด”เดฆเตเดฏเต‹เด—เดฟเด• เดธเตˆเดฑเตเดฑเต - quarkus.io. เดตเต‡เด—เดคเตเดคเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต เดธเดพเดฎเต‚เดนเดฟเด•เด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•