เชชเชฐเชฟเชเชฏ
XNUMXเชฎเซ เชฎเชพเชฐเซเชเซ, RedHat (เชเซเชเช เชธเชฎเชฏเชฎเชพเช IBM)
เชงเซเชฏเซเชฏ เชเชพเชตเชพเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชฎเชพเชตเช เช เชจเซ เชธเชฐเซเชตเชฐเชฒเซเชธ เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเซเชตเชฒเชชเชฎเซเชจเซเช เชฎเชพเชเซ เช เชเซเชฐเชฃเซ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชฌเชจเชพเชตเชตเชพเชจเซ เชเซ, เชเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเชจเซ เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชถเซเชฒ เช เชจเซ เช เชจเชฟเชตเชพเชฐเซเชฏ เชฌเชเชจเซ เชถเซเชฒเซเชฎเชพเช เชตเชฟเชเชพเชธ เชฎเชพเชเซ เชเชเซเชเซเชค เช เชญเชฟเชเชฎ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
เชเซ เชคเชฎเซ เชเซเช
เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชเชเชจเซ เชเซเชฌ เช เชเชเชเซ เชเชกเชช เช เชจเซ เชเชเซ เชฎเซเชฎเชฐเซ เชตเชชเชฐเชพเชถเชจเซเช เชตเชเชจ เชเชชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ. เช เชนเซเช เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเซ เชตเซเชฌเชธเชพเชเชเชจเซ เชกเซเชเชพ เชเซ:
เชถเชฐเซเชเชคเชฅเซ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชคเชฟเชธเชพเชฆ (เช) เชธเซเชงเซเชจเซ เชธเชฎเชฏ:
เชฐเซเชชเชฐเซเชเชพเชเชเชจ
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 เชตเชฟเชชเชฐเซเชค. เชเชฎเชจเชธเซเชฌเซ, เช
เชคเซเชฏเชพเชฐเซ เชเซเชฐเซเชกเชฒ เชเชพเชฒเซ เชชเซเชฐเซเชเซเชเซเช เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซเช เชธเชฎเชฐเซเชฅเชจ เชเชฐเชคเซเช เชจเชฅเซ; เชตเซเชฌเชธเชพเชเช เชชเชฐ เชตเชฟเชเชคเชตเชพเชฐ เชฎเชพเชนเชฟเชคเซ เชเซ
เชเชเซเชธเซเชเซเชจเซเชถเชจเซเชธ
เชเซเชตเชพเชฐเซเชเชธ เช เชเชเซเชธเซเชเซเชจเซเชธเชฟเชฌเชฒ เชซเซเชฐเซเชฎเชตเชฐเซเช เชเซ. เชนเชพเชฒเชฎเชพเช เชเชฐเซเชกเชฐ เชเซ
เชจเชฟเชทเซเชเชฐเซเชท
เชฎเชพเชฐเชพ เชฎเชคเซ, เชเซเชตเชพเชฐเซเชเชธ เชคเซ เชธเชฎเชฏเชจเชพ เชตเชฒเชฃเซ เชธเชพเชฅเซ เชเชเชฆเชฎ เชธเซเชธเชเชเชค เชเซ. เชฌเซเชเชเชจเซเชก เชเซเชก เชกเซเชตเชฒเชชเชฎเซเชจเซเช เชตเชงเซ เชธเชฐเชณ เช เชจเซ เชธเชฐเชณ เชฌเชจเซ เชฐเชนเซเชฏเซเช เชเซ, เช เชจเซ เช เชซเซเชฐเซเชฎเชตเชฐเซเช เชกเซเชเชฐ เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชฎเชพเชเซ เชฎเซเชณ เชเชงเชพเชฐ เชเชฎเซเชฐเซเชจเซ เชธเซเชตเชพเชจเชพ เชตเชฟเชเชพเชธเชจเซ เชตเชงเซ เชธเชฐเชณ เช เชจเซ เชเชกเชชเซ เชฌเชจเชพเชตเซ เชเซ. เชเช เชตเชฟเชถเชพเชณ เชตเชคเซเชคเชพ เช GraalVM เชฎเชพเชเซ เชฌเชฟเชฒเซเช-เชเชจ เชธเชชเซเชฐเซเช เช เชจเซ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ-เชเชงเชพเชฐเชฟเชค เชเชฎเซเชเซเชธเชจเซ เชชเซเชขเซ เชเซ, เชเซ เชธเซเชตเชพเชเชจเซ เชเชฐเซเชเชฐ เชเชกเชชเชฅเซ เชถเชฐเซ เชเชฐเชตเชพ เช เชจเซ เชฅเซเชกเซ เชฎเซเชฎเชฐเซ เชธเซเชชเซเชธ เชฒเซเชตเชพ เชฆเซ เชเซ. เช เชจเซ เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธเชฟเชธ เช เชจเซ เชธเชฐเซเชตเชฐเชฒเซเชธ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชฎเชพเชเซเชจเชพ เช เชฎเชพเชฐเชพ เชธเชพเชฎเซเชนเชฟเช เชเซเชธเซเชธเชพเชจเชพ เชธเชฎเชฏเชฎเชพเช เช เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ.
เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชพเชเช -
เชธเซเชฐเซเชธ: www.habr.com