{"id":313490,"date":"2020-11-20T15:01:29","date_gmt":"2020-11-20T15:01:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313490"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313490","title":{"rendered":"\u041b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 \u0432 \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea6\/b8d\/344\/ea6b8d344e2c868b0bffd268013393a4\" width=\"509\" height=\"273\"><figcaption><\/figcaption><\/figure>\n<\/p>\n<p><a href=\"https:\/\/helidon.io\/\" rel=\"noopener noreferrer nofollow\">Helidon<\/a> \u2013 \u043f\u043e \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438 \u043b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 (\u03a7\u03b5\u03bb\u03b9\u03b4\u03cc\u03bd\u03b9), \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u0442\u0438\u0447\u043a\u0430 \u0438\u0437 \u043e\u0442\u0440\u044f\u0434\u0430 \u0432\u043e\u0440\u043e\u0431\u044c\u0438\u043d\u044b\u0445 \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u043e\u0441\u0442\u0440\u044b\u043c\u0438 \u043a\u0440\u044b\u043b\u044c\u044f\u043c\u0438 \u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u043c \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u0445\u0432\u043e\u0441\u0442\u043e\u043c.&nbsp;<\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0430\u0441 \u0432\u043e\u0441\u0445\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0442\u043e\u043c \u0438 \u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u043e\u0439 \u043f\u0442\u0438\u0447\u043a\u0438, \u0430 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0441\u0442\u0430\u044f\u0445, \u0447\u0435\u043c-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043c\u0438\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<p>Helidon \u0434\u043b\u044f \u043d\u0430\u0441, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u043c \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e, MicroProfile based \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 <a href=\"https:\/\/github.com\/oracle\/helidon\" rel=\"noopener noreferrer nofollow\"><u>GitHub<\/u><\/a>, \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0.<\/p>\n<hr>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, <a href=\"https:\/\/microprofile.io\/\" rel=\"noopener noreferrer nofollow\"><u>MicroProfile<\/u><\/a> \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043c\u043d\u043e\u0433\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041d\u0430\u0447\u0430\u0432 \u0441\u0432\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0432 2016\u043c \u0433\u043e\u0434\u0443 \u0432\u0441\u0435\u0433\u043e \u0441 \u0442\u0440\u0435\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 &#8212; CDI, JAX-RS \u0438 JSON-P, \u0434\u0430 \u0438 \u0442\u043e, \u0432\u0437\u044f\u0442\u044b\u0445 \u0441 Java EE, \u043a \u043a\u043e\u043d\u0446\u0443 2020 \u0433\u043e\u0434\u0443 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 3.3 \u044d\u0442\u043e \u0443\u0436\u0435 12 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/88b\/7c3\/509\/88b7c35090629c5d7b18101dff80abac\" alt=\"MicroProfile 3.3. \u0412 \u0436\u0435\u043b\u0442\u043e\u043c \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u0441\u0438\u043d\u0435\u043c \u0431\u0435\u0437.\" title=\"MicroProfile 3.3. \u0412 \u0436\u0435\u043b\u0442\u043e\u043c \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u0441\u0438\u043d\u0435\u043c \u0431\u0435\u0437.\" width=\"1362\" height=\"608\"><figcaption>MicroProfile 3.3. \u0412 \u0436\u0435\u043b\u0442\u043e\u043c \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u0441\u0438\u043d\u0435\u043c \u0431\u0435\u0437.<\/figcaption><\/figure>\n<p>Major release \u0432\u0435\u0440\u0441\u0438\u0438 MicroProfile \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437 \u0432 \u0433\u043e\u0434. Minor release-\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0437 \u0432 \u043a\u0432\u0430\u0440\u0442\u0430\u043b. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0435\u043b\u0438\u0437\u0430 \u043a \u0440\u0435\u043b\u0438\u0437\u0443.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439, \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e MicroProfile, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 GraphQL, Long Running Actions, Concurrency, Reactive Messaging, Event Data \u0438 Reactive DB Access.<\/p>\n<p>\u0421\u0430\u043c \u0441\u0435\u0431\u0435 MicroProfile \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434 \u0448\u0430\u043f\u043a\u043e\u0439 Eclipse Foundation \u0438 \u044d\u0442\u043e \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0430 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430\u043c\u0438 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a Red Hat, IBM, Tomitribe, Payara \u0438 \u0434\u0440. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a OpenLiberty, TomEE \u0438 \u0442.\u0434. \u041d\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 DevOps \u0438 \u043e\u0431\u0449\u0435\u0439 \u0438\u0434\u0435\u0438, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u201c\u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u201d \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442. \u0421\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043a \u0441\u0432\u043e\u0435\u0439 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.&nbsp; \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445, \u0438\u0434\u0435\u0439\u043d\u044b\u043c \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0442\u0435\u043b\u0435\u043c \u0441\u0442\u0430\u043b Spring Boot. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c fat-jar \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u0442\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u043a\u0430. MicroProfile \u0434\u0430\u043b \u0441\u043e\u043b\u0438\u0434\u043d\u0443\u044e \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u044d\u0442\u043e\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0432\u0432\u0435\u043b \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u0435 \u0435\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u043b\u0435\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043d\u043e \u0438 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0438 \u0442.\u0434. \u0418 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0441 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043c\u0438.&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Heldon \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f&nbsp; \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0431\u044b\u0442\u044c Full-Stack \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u043a Spring Boot \u0438\u043b\u0438 Dropwizard, \u043e\u043d \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Helidon (\u043f\u043e\u0434 JVM) \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 20 Mb, \u0447\u0442\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 Spring Boot. \u041d\u0443 \u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ahead-of-time \u0432 Native Image \u0438 \u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0435 10 Mb.&nbsp;<\/p>\n<p>\u0427\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435,&nbsp; API \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 MicroProfile.<\/p>\n<\/p>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f &#8212; Talk is cheap, show me the code:<\/p>\n<pre><code class=\"java\">@Path(\"hello\") public class HelloWorld {     @GET      public String hello() {         return \"Hello World\";     } }<\/code><\/pre>\n<p>\u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 &#8212; \u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0430\u043d!<\/p>\n<\/p>\n<p><strong>Helidon 2.1.0<\/strong><\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u201c\u041b\u0430\u0441\u0442\u043e\u0447\u043a\u0430\u201d \u0432\u0435\u0440\u0441\u0438\u0438 2.1.0?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/81b\/4b7\/449\/81b4b7449fd4675492539aa976b4d2a1.jpg\" alt=\"\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon MP 2.1.1\" title=\"\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon MP 2.1.1\" width=\"1636\" height=\"914\"><figcaption>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon MP 2.1.1<\/figcaption><\/figure>\n<p>\u0410 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Helidon \u0432\u0441\u0435, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432 MicroProfile 3.3 \u043f\u043b\u044e\u0441 CORS \u0438 gRPC (Server + Client)<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u0434\u0438\u0442\u044c? \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 &#8212; <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/about\/05_cli\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u043a\u0430\u0447\u0430\u0442\u044c CLI<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0435 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u043b\u0435\u0435), \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043f\u0443\u0441\u0442\u043e\u043c Maven \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt; &nbsp;&nbsp;&lt;groupId&gt;io.helidon.microprofile.bundles&lt;\/groupId&gt; &nbsp;&nbsp;&lt;artifactId&gt;helidon-microprofile&lt;\/artifactId&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 MicroProfile. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043a\u0435\u0442. \u042d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 MicroProfile (\u0442\u0430\u043a\u0443\u044e \u043a\u0430\u043a JAX-RS, CDI, JSON-P \/ B \u0438 Config) \u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Metrics \u0438 Tracing. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0438\u0447\u0435\u0439 MicroProfile \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt; &nbsp;&nbsp;&lt;groupId&gt;io.helidon.microprofile.bundles&lt;\/groupId&gt; &nbsp;&nbsp;&lt;artifactId&gt;helidon-microprofile-core&lt;\/artifactId&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 Hello World JAX-RS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d JAX-RS Resource Class:<\/p>\n<pre><code class=\"java\">@Path(\"\/\") @RequestScoped public class HelloWorldResource { &nbsp;&nbsp;&nbsp;&nbsp;@GET &nbsp;&nbsp;&nbsp;&nbsp;@Produces(MediaType.TEXTPLAIN) &nbsp;&nbsp;&nbsp;&nbsp;public String message() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return \"Hello World\"; &nbsp;&nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><em>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c JAX-RS Application:<\/em><\/p>\n<pre><code class=\"java\">@ApplicationScoped @ApplicationPath(\"\/\") public class HelloWorldApplication extends Application {  &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public Set&lt;Class&lt;?&gt;&gt; getClasses() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Set.of( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloWorldResource.class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 CDI \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f, \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 <em>beans.xml <\/em>\u0432 <em>src\/main\/resources\/META-INF<\/em><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;beans\/&gt;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 <em>main<\/em> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!<\/p>\n<pre><code class=\"java\">public static void main(String[] args) { &nbsp;&nbsp;&nbsp;&nbsp;io.helidon.microprofile.server.Main.main(args); }<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0432\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 curl \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p><code>curl -X GET http:\/\/localhost:7001\/<\/code><\/p>\n<p><em>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c!&nbsp;<\/em><\/p>\n<p><code>{\"message\":\"Hello World\"}<\/code><\/p>\n<p>\u0422\u0410\u0414\u0410\u0410\u0410\u0410\u041c!! \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e!&nbsp;<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0430, \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Maven Archetype, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">mvn -U archetype:generate -DinteractiveMode=false \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeGroupId=io.helidon.archetypes \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeArtifactId=helidon-quickstart-mp \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeVersion=2.1.0 \\ &nbsp;&nbsp;&nbsp;&nbsp;-DgroupId=io.helidon.examples \\ &nbsp;&nbsp;&nbsp;&nbsp;-DartifactId=helidon-quickstart-mp \\ &nbsp;&nbsp;&nbsp;&nbsp;-Dpackage=io.helidon.examples.quickstart.mp<\/code><\/pre>\n<p>\u0412\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#8212; \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443):<\/p>\n<p><code>cd helidon-quickstart-mp<\/code><\/p>\n<p>\u0412 \u043d\u0435\u0439 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 maven \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c!<\/p>\n<p><code>mvn package<\/code><\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 jar-\u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 runtime \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 target\/libs. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 jar-\u043d\u0438\u043a:<\/p>\n<p><code>java -jar target\/helidon-quickstart-mp.jar<\/code><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 &#8212; \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u00abHello World\u00bb. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b GET \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 PUT \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f. \u041e\u0442\u0432\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JSON. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"json\">curl -X GET http:\/\/localhost:8080\/greet {\"message\":\"Hello World!\"} curl -X GET http:\/\/localhost:8080\/greet\/Joe {\"message\":\"Hello Joe!\"} curl -X PUT -H \"Content-Type: application\/json\" -d '{\"greeting\" : \"Hola\"}' http:\/\/localhost:8080\/greet\/greeting curl -X GET http:\/\/localhost:8080\/greet\/Jose {\"message\":\"Hola Jose!\"}<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0438 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0448\u043a\u0438 MicroProfile, \u043a\u0430\u043a \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 (Health Check) \u0438 \u041c\u0435\u0442\u0440\u0438\u043a\u0438 (Metrics):<\/p>\n<p>\u041f\u0440\u043e \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><code>curl -s -X GET http:\/\/localhost:8080\/health&nbsp;<\/code><\/p>\n<p>\u2026 \u043f\u0440\u043e \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Prometheus:<\/p>\n<p><code>curl -s -X GET http:\/\/localhost:8080\/metrics<\/code><\/p>\n<p>\u2026 \u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0445 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON:<\/p>\n<p><code>curl -H 'Accept: application\/json' -X GET http:\/\/localhost:8080\/metrics<\/code><\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 Docker \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043b\u0435\u0433\u043a\u043e \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c docker image:<\/p>\n<p><code>docker build -t helidon-quickstart-mp .<\/code><\/p>\n<p>\u2026 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<p><code>docker run --rm -p 8080:8080 helidon-quickstart-mp:latest<\/code><\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0438 \u043a \u0434\u0435\u043f\u043b\u043e\u044e \u0432 Kubernetes:<\/p>\n<p><code>kubectl create -f app.yaml<\/code><\/p>\n<p><code>kubectl get pods &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Wait for quickstart pod to be RUNNING<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u043a \u043e\u043d \u0442\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f:<\/p>\n<p><code>kubectl get service helidon-quickstart-mp<\/code><\/p>\n<p>\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \u0432\u0441\u0435 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043b\u043e\u0441\u044c, \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<p><code>curl -X GET http:\/\/localhost:31431\/greet<\/code><\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d\u044b, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e!<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u043a\u0430\u043a \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0435:<\/p>\n<p><code>kubectl delete -f app.yaml<\/code><\/p>\n<p>\u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0438 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0438!!!<\/p>\n<\/p>\n<p><strong>\u041a\u0441\u0442\u0430\u0442\u0438, Helidon \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439!<\/strong><\/p>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435 Java \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u0435\u0440\u0441\u0438\u0438 11. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044f JDK 9 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 jlink, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 custom runtime image. \u041f\u043b\u0430\u0433\u0438\u043d helidon-maven-plugin \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e runtime image \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Helidon, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u044b\u043a\u0438\u043d\u0443\u0432 \u0432\u0441\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Docker<\/p>\n<\/li>\n<\/ul>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c jlink-image<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 helidon-maven-plugin, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u0438 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e \u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<p>\u041a\u0430\u0442\u0430\u043b\u043e\u0433 target\/helidon-quickstart-mp \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043e\u0431\u0440\u0430\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043c\u043e\u0434\u0443\u043b\u0438 JDK, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>.\/target\/helidon-quickstart-mp\/bin\/start<\/code><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0430\u0440\u0445\u0438\u0432 Class Data Sharing (CDS), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 in-memory footprint.&nbsp;<\/p>\n<p>\u0410\u0440\u0445\u0438\u0432 CDS \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0434\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u041c\u0411). \u0420\u0430\u0437\u043c\u0435\u0440 \u0430\u0440\u0445\u0438\u0432\u0430 CDS \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 (\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430), \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0432\u0430 CDS, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><code>mvn package -Pjlink-image -Djlink.image.addClassDataSharingArchive=false<\/code><\/p>\n<p>\u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0438\u043b\u0434\u0438\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 docker \u043e\u0431\u0440\u0430\u0437, \u043f\u0440\u0438\u0447\u0435\u043c \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p><code>docker build -t helidon-quickstart-mp-jlink -f Dockerfile.jlink<\/code> <\/p>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044d\u0442\u043e \u0437\u0430\u0439\u043c\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 Maven \u0438 \u0441\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Docker. \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b pom.xml. \u0415\u0441\u043b\u0438 pom \u0438\u0437\u043c\u0435\u043d\u0435\u043d, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e.<\/p>\n<p>\u0418 \u0432\u0443\u0430\u043b\u044f, \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e \u0432 Docker:<\/p>\n<p><code>docker run --rm -p 8080:8080 helidon-quickstart-mp-jlink:latest<\/code><\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c curl-\u0430\u043c\u0438 quickstarter-a \u0432\u044b\u0448\u0435.<\/p>\n<p>Custom runtime images \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0432\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c JDK JVM \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<\/p>\n<p>\u041d\u0443 \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0431\u0435\u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043d\u043e \u043c\u0430\u043b\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/p>\n<p><strong>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c GraalVM Native Images!<\/strong><\/p>\n<p>Native images \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 ahead-of-time \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 Java, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0438 \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043d\u0430 JVM.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c GraalVM \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0433\u0434\u0435 \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d:<\/p>\n<p><code># \u0412\u0430\u0448 \u043f\u0443\u0442\u044c \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f<\/code><\/p>\n<p><code>export GRAALVMHOME=\/usr\/local\/graalvm-ce-20.0.0\/Contents\/Home\/<\/code><\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 native-image:<\/p>\n<p><code>$GRAALVMHOME\/bin\/gu install native-image<\/code><\/p>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c native image \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e quickstarter-mp \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c native \u0444\u0430\u0439\u043b \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 GraalVM<\/p>\n<\/li>\n<li>\n<p>\u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0436\u0435 \u043d\u0430 Docker-\u0435!<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e! \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c native-image , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 helidon-maven-plugin. \u041f\u0440\u043e\u0441\u0442\u0443 \u0431\u0438\u043b\u0434\u0438\u043c \u0441 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c:<\/p>\n<p><code>mvn package -Pnative-image<\/code><\/p>\n<p>\u0411\u0438\u043b\u0434 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e, \u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e ahead-of-time \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b! \u0414\u0430 \u0434\u0430, \u043f\u0440\u044f\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, JVM \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e! \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432:<\/p>\n<p><code>.\/target\/helidon-quickstart-mp<\/code><\/p>\n<p>\u2026 \u0438 \u0434\u0430, \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f!<\/p>\n<p>\u041d\u0443 \u0438 \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 jlink, \u0432\u0441\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e \u0431\u0438\u043b\u0434\u0443 \u0432 native image, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 docker! \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<p><code>docker build -t helidon-quickstart-mp-native -f Dockerfile.native<\/code> <\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 jlink, \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u043b\u0434 \u0437\u0430\u0439\u043c\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e, \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u043b\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0436\u0435 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<p><code>docker run --rm -p 8080:8080 helidon-quickstart-mp-native:latest<\/code><\/p>\n<p>\u2026 \u0438 \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u043c\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u0430!<\/p>\n<p>Native-images \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432.<\/p>\n<p>\u041d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 native-image \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e Linux \u0438 Mac. Windows \u043f\u043e\u043a\u0430 \u0436\u0434\u0435\u043c. \u0410 \u0432 Docker \u0442\u043e\u043b\u044c\u043a\u043e Linux, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 Mac \u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c Linux binary.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, native images \u0438\u043c\u0435\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0438 \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0433\u0434\u0435 \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 Java SE HotSpot \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 native image \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0442\u0443\u0442:<\/p>\n<p><a href=\"https:\/\/helidon.io\/docs\/v2\/#\/mp\/aot\/01_introduction\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/helidon.io\/docs\/v2\/#\/mp\/aot\/01<\/u>introduction<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 native-image \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 CDI \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439!<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, Helidon \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0432 Java-\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438, \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0431\u0438\u043b\u0434\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432!<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435!..<\/p>\n<\/p>\n<p><strong>Tooling<\/strong><\/p>\n<p>\u0412 Helidon 2 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u043a\u043e\u0440\u044f\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>CLI Helidon \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 Helidon, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u0435\u0433\u043e \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 developer loop, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u0434\u0438\u0442\u044c, \u0430 CLI \u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432\u043d\u0435\u0441\u043b\u0438, \u0438 \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u0438\u0445 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/p>\n<p>CLI \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b (\u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GraalVM) \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u043b\u044f Linux \u0438 Mac. <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/about\/05_cli\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 binary<\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043c\u0435\u0441\u0442\u0435, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u043c \u0438\u0437 \u0432\u0430\u0448\u0435\u0433\u043e PATH, \u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435:<\/p>\n<p><code>helidon init<\/code><\/p>\n<p>\u2026 \u0438 \u043e\u0442\u0432\u0435\u0442\u044c\u0442\u0435 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432\u2026 \u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e!<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043b\u044e\u0431\u0438\u043c\u043e\u043c IDE \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0439\u043a\u0435 \u043a\u043e\u0434\u0438\u0442\u044c!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e15\/563\/2f6\/e155632f641688368db6215670c2f62f.gif\" width=\"836\" height=\"572\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 MicroProfile. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 API \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0418 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DB Client.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b CLI Helidon \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u043a\u043e\u0440\u043e. \u041d\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f 80% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 Helidon \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Intellij IDEA. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0436\u0430\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 shift, \u043d\u0430\u0431\u0440\u0430\u0442\u044c Endpoints, \u0438 IDEA \u043d\u0430\u043c \u0438\u0445 \u043f\u043e\u043a\u0430\u0436\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/821\/a16\/338\/821a16338fd241205449f5661cde03df\" alt=\"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 Intellij Idea\" title=\"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 Intellij Idea\" width=\"1294\" height=\"440\"><figcaption>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 Intellij Idea<\/figcaption><\/figure>\n<p><strong>Welcome to the Danger Zone!<\/strong><\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, Helidon \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437 \u0443\u0441\u0438\u043b\u0438\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u044d\u0442\u0438\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0448\u044c. \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u044d\u0442\u043e \u043c\u043e\u0433\u0443\u0442. \u041f\u0440\u0430\u0432\u0434\u0430, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e, Helidon \u0431\u0443\u0434\u0443\u0447\u0438 MicroProfile based, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0434\u0443\u0449\u0438\u0445 \u043d\u0430 \u043d\u0435\u043c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0435\u043a \u0438 \u0430\u043a\u0446\u0435\u043d\u0442 Helidon.&nbsp;<\/p>\n<p>\u041d\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u043c\u0430\u0433\u0438\u044f \u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0437\u0430 \u043d\u0435\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Helidon \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043d\u0430 CDI Extensions, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 API. \u0412\u0441\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 CDI \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u0442\u043e\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 API? \u0414\u0430\u043d\u043d\u043e\u0435 API \u043d\u043e\u0441\u0438\u0442 \u0438\u043c\u044f Helidon SE.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 Helidon SE \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 toolkit \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 Netty, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f Java SE, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a reactive streams, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 fluent-style APIs.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5c\/4b3\/b12\/c5c4b3b12dbd6cac276702164610d88b.jpg\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Helidon\" title=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Helidon\" width=\"1442\" height=\"868\"><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Helidon<\/figcaption><\/figure>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043c\u044f\u0433\u043a\u0438\u0439 \u0438 \u043f\u0443\u0448\u0438\u0441\u0442\u044b\u0439 Helidon \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u043d\u0430\u0434 \u0441\u0443\u0440\u043e\u0432\u044b\u043c \u0438 \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u043d\u044b\u043c Helidon SE.<\/p>\n<p>Helidon SE \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u043c memory footprint, \u0433\u0434\u0435 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u043d\u0435\u043c \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u201c\u043c\u0430\u0433\u0438\u0438\u201d &#8212; \u043d\u0438\u043a\u0430\u043a\u043e\u0439 dependency injection, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0435 \u0444\u0438\u0447\u0438 Java (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 11). Helidon SE \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 API \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 Helidon SE \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f0d\/bde\/8be\/f0dbde8be485c076b387f5bf6ed00825.jpg\" alt=\"\u041c\u043e\u0434\u0443\u043b\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon SE \" title=\"\u041c\u043e\u0434\u0443\u043b\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon SE \" width=\"1680\" height=\"938\"><figcaption>\u041c\u043e\u0434\u0443\u043b\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon SE <\/figcaption><\/figure>\n<p>\u0417\u0435\u043b\u0435\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 Helidon \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0430\u0432\u043e \u043c\u0435\u043d\u044f\u0442\u044c API \u0432 \u043c\u0438\u043d\u043e\u0440\u043d\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0436\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0432\u0435\u0440\u0435? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u043e\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e. \u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u0435\u0435, \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439.<\/p>\n<pre><code class=\"java\">Routing routing = Routing.builder()     .get(\"\/hello\", (req, res) -&gt; &nbsp;&nbsp;&nbsp;&nbsp; res.send(\"Hello World\")) &nbsp;&nbsp;&nbsp;&nbsp;.build();  WebServer.create(routing)    .start();<\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0435\u043b\u0438\u0442\u044c Helidon DB Client. \u0412 \u043d\u0435\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0439 JDBC \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0411\u0414 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0438\u043b\u0438 \u043d\u0435\u0442. \u0418\u0437 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0421\u0423\u0411\u0414, \u043a\u0430\u043a Postgres, MySQL, MariaDB (\u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0435\u0441\u0442\u044c JDBC \u0434\u0440\u0430\u0439\u0432\u0435\u0440), a \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043a\u0430\u043a MongoDB.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 Select \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"java\">dbClient.inTransaction(tx -&gt; tx &nbsp;&nbsp;&nbsp;&nbsp;.createQuery(\"SELECT name FROM Pokemons WHERE id = :id\") &nbsp; &nbsp;&nbsp;.addParam(\"id\", 1) &nbsp;&nbsp;&nbsp;&nbsp;.execute()  );&nbsp;&nbsp;<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a Update \u0432\u044b\u0437\u043e\u0432 \u0434\u043b\u044f MongoDb:<\/p>\n<pre><code class=\"java\">dbClient.execute(exec -&gt; exec &nbsp;&nbsp;&nbsp;&nbsp;.createUpdate(\"{\\\"collection\\\": \\\"pokemons\\\",\" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ \"\\\"value\\\":{$set:{\\\"name\\\":$name}},\" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ \"\\\"query\\\":{id:$id}}\") &nbsp;&nbsp;&nbsp;&nbsp;.addParam(\"id\", 1) &nbsp;&nbsp;&nbsp;&nbsp;.addParam(\"name\", \"Pikachu\") &nbsp;&nbsp;&nbsp;&nbsp;.execute() );<\/code><\/pre>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 DB Client&nbsp;&nbsp;<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Helidon Config. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"javascript\">db: &nbsp;&nbsp;source: \"jdbc\"&nbsp; &nbsp;&nbsp;connection: &nbsp;&nbsp;&nbsp;&nbsp;url: \"jdbc:mysql:\/\/127.0.0.1:3306\/pokemon?useSSL=false\"&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;username: \"user\" &nbsp;&nbsp;&nbsp;&nbsp;password: \"password\" &nbsp;&nbsp;statements:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ping: \"DO 0\"&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;select-all-pokemons: \"SELECT id, name FROM Pokemons\"<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/se\/dbclient\/01_introduction\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/helidon.io\/docs\/v2\/#\/se\/dbclient\/01<\/u><em><u>introduction<\/u><\/em><\/a><\/p>\n<p>Helidon SE \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 Web Client. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 Helidon SE observability \u0444\u0438\u0447\u0438, \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0434\u0438\u0437\u0430\u0439\u043d\u0443. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e:<\/p>\n<pre><code class=\"java\">WebClient client = WebClient.builder() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.baseUri(\"http:\/\/localhost\") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.build();  Single&lt;String&gt; response = client.get() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.path(\"\/endpoint\") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.request(String.class);&nbsp;<\/code><\/pre>\n<p>\u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 Helidon Config. <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u044b \u0432 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/se\/webclient\/01_introduction\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/helidon.io\/docs\/v2\/#\/se\/webclient\/01<\/u>introduction<\/a><\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0438 Reactive Streams \/ Messaging \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432 Helidon.<\/p>\n<p>Helidon \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0432\u043d\u0435 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Helidon. \u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 java.util.concurrent.Flow. \u0426\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e io.helidon.common.reactive.Multi \u0438\u043b\u0438 io.helidon.common.reactive.Single \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>Reactive Streams API \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0448\u0438\u0440\u043e\u043a\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 API \u0438 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u043c\u0438 (RxJava, Reactor, \u0438 \u0442.\u0434.).<\/p>\n<p>\u0423\u0436\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Kafka \u0438 Oracle Streaming Service.<\/p>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 JMS \u0438 Oracle Advanced Queueing \u0443\u0436\u0435 \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0435.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 Multi:<\/p>\n<pre><code class=\"java\">AtomicInteger sum = new AtomicInteger(); Multi.just(\"1\", \"2\", \"3\", \"4\", \"5\") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.limit(3) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(Integer::parseInt) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(sum::addAndGet);  System.out.println(\"Sum: \" + sum.get());  &gt; Sum: 6<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 Single:&nbsp;<\/p>\n<pre><code class=\"java\">Single.just(\"1\") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(Integer::parseInt) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(i -&gt; i + 5) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toStage() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.whenComplete((i, t) -&gt; System.out.println(\"Result: \" + i));  &gt; Result: 6<\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0443\u044e \u0433\u043e\u0440\u0434\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Helidon \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 gRPC Server &amp; Client. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u043e\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Google, \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 Java9+.<\/p>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0435 gRPC \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">public static void main(String[] args) throws Exception { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Implement the simplest possible gRPC service. &nbsp;       GrpcServer grpcServer = GrpcServer                       .create(GrpcRouting.builder()                       .register(new HelloService())&nbsp;                       .build())                       .start()&nbsp;                       .toCompletableFuture()                       .get(10, TimeUnit.SECONDS);&nbsp;       System.out.println(\"gRPC Server started at: http:\/\/localhost:\"           + grpcServer.port());&nbsp; }  static class HelloService implements GrpcService {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public void update(ServiceDescriptor.Rules rules) {          rules.unary(\"SayHello\", ((request, responseObserver) -&gt; complete(responseObserver, \"Hello \" + request)));&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p>\u041d\u043e, Helidon \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c gRPC \u0443\u0441\u043b\u0443\u0433, \u043d\u043e \u0438 \u0441\u0430\u043c \u0431\u044b\u0442\u044c \u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u043c.<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 Helidon gRPC \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 gRPC. \u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u0443\u0436\u0431\u0430\u043c gRPC, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043b\u0438\u0431\u043e Protobuf, \u043b\u0438\u0431\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.&nbsp;<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"java\">public static void main(String[] args) throws Exception {     \/\/ \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 gRPC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, Java&nbsp;     \/\/ \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.     ClientServiceDescriptor descriptor = ClientServiceDescriptor       .builder(HelloService.class)       .unary(\"SayHello\")       .build();      \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 1408&nbsp;     Channel channel = ManagedChannelBuilder.forAddress(\"localhost\", 1408) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;                                                .usePlaintext()                                                .build();     \/\/ \u041d\u0443 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442&nbsp; &nbsp;&nbsp;&nbsp; GrpcServiceClient client = GrpcServiceClient.create(channel, descriptor);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 SayHello, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 CompletableFuture &nbsp;&nbsp;&nbsp;&nbsp;CompletionStage&lt;String&gt; future = client.unary(\"SayHello\", \"Helidon gRPC!!\");&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u0421 \u0447\u0438\u0441\u0442\u043e\u0439 \u0441\u043e\u0432\u0435\u0441\u0442\u044c\u044e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442! &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(future.get());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/code><\/pre>\n<p>gRPC \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u0436\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432 production. \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0433\u043e\u0440\u043c\u0430\u0446\u0438\u0438: <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/se\/grpc\/01_introduction\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/helidon.io\/docs\/v2\/#\/se\/grpc\/01_introduction<\/u><\/a><\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e, \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Helidon \u0438 Neo4J, \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 API Neo4J, \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u043e\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Helidon SE \u0432 Multi, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 Response. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0431\u044f\u0442\u0430\u043c\u0438 \u0438\u0437 Neo4J \u0438 Helidon! \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u0440\u043e! \u0421\u0435\u0439\u0447\u0430\u0441 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Neo4j \u0438 Helidon.<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 Neo4J \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 GraalVM, \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 Native. \u2026 \u0438 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0440\u0430\u0437 \u0443\u0436 \u0440\u0435\u0447\u044c \u043f\u043e\u0448\u043b\u0430 \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e Helidon \u0447\u0430\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438. \u041f\u043e\u0440\u043e\u0439 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f0\/b39\/8fa\/7f0b398fa16ec73ffbfec960c810a36f\" alt=\"\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0411\u043e\u043b\u044c\u0448\u0435 \u043b\u0443\u0447\u0448\u0435.&nbsp;  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0434\u0435\u0441\u044c: https:\/\/github.com\/danielkec\/helidon-jmh\" title=\"\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0411\u043e\u043b\u044c\u0448\u0435 \u043b\u0443\u0447\u0448\u0435.&nbsp;  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0434\u0435\u0441\u044c: https:\/\/github.com\/danielkec\/helidon-jmh\" width=\"1600\" height=\"841\"><figcaption>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0411\u043e\u043b\u044c\u0448\u0435 \u043b\u0443\u0447\u0448\u0435.&nbsp;  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0434\u0435\u0441\u044c: https:\/\/github.com\/danielkec\/helidon-jmh<\/figcaption><\/figure>\n<\/p>\n<p>\u041d\u0443 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, Helidon SE &#8212;&nbsp; \u0442\u0430\u0439\u043d\u043e\u0435 \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u0430, \u0440\u0435\u0430\u0442\u0438\u0432\u0449\u0438\u043d\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0430.&nbsp;<\/p>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u043e\u0442\u0437\u044b\u0432\u0430\u043c, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Helidon SE. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0442\u043e\u0447\u043a\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0441\u0442\u0430\u0440\u0442\u0435\u0440\u043e\u0432, \u0438 \u0438\u0437 intellisense-a \u0432\u0430\u0448\u0435\u0433\u043e IDE \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043a\u0442\u0443\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 API, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 Helidon \u043e\u0442\u043a\u0440\u044b\u043b\u0430 \u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f 90% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u201c\u043c\u0430\u0433\u0438\u0438\u201d \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0442\u0435 10% \u201c\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432\u201d \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u0438. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u0434\u0430, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0442\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435!&nbsp;&nbsp;&nbsp;<\/p>\n<\/p>\n<p><strong>\u041e\u0442\u043b\u0438\u0447\u043d\u043e.. \u043d\u043e \u043a\u0430\u043a \u0441\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e! Helidon SE \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u0430\u044f Java \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e Junit \ud83d\ude42<\/p>\n<p>\u041d\u043e \u0434\u043b\u044f Helidon MP, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0438\u0438 \u043e\u0442 CDI, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;       \t\t&lt;groupId&gt;io.helidon.microprofile.tests&lt;\/groupId&gt;          &lt;artifactId&gt;helidon-microprofile-tests-junit5&lt;\/artifactId&gt;          &lt;scope&gt;test&lt;\/scope&gt;  &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0422\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 @HelidonTest. \u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 CDI \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430. \u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c Injection \u0432 \u0441\u0430\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c:<\/p>\n<pre><code class=\"java\">@HelidonTest @DisableDiscovery @AddBean(MyBean.class) @AddExtension(ConfigCdiExtension.class) @AddConfig(key = \"app.greeting\", value = \"TestHello\") class TestNoDiscovery {     @Inject     private MyBean myBean;      @Test     void testGreeting() {         assertThat(myBean, notNullValue());         assertThat(myBean.greeting(), is(\"TestHello\"));     } }<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c Beans Discovery, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0442.\u0434.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u0432\u0438\u043a\u0441\u0442\u0430\u0440\u0442\u0435\u0440\u043e\u0432, \u043e\u043d\u0438 \u0432\u0441\u0435 \u0438\u0434\u0443\u0442 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0438\u0437 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0442\u0430\u043c. \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e!<\/p>\n<\/p>\n<p><strong>\u0427\u0442\u043e \u0436\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c?<\/strong><\/p>\n<p>\u0412\u0441\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e, \u0443\u0432\u0435\u0440\u0435\u043d, \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u043d\u0430\u0441 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u0442\u044c \u0446\u0438\u0444\u0440\u044b! \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u041b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 \u0442\u0430\u043a\u0430\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f?<\/p>\n<p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u0435\u0433\u043e \u0431\u0438\u043b\u0434\u0438\u043c. Helidon \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e build \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.<\/p>\n<ol>\n<li>\n<p>Executable JAR: Hollow jar. \u0412\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Docker-\u0430 \u0438 \u0435\u0433\u043e layering-\u0430;<\/p>\n<\/li>\n<li>\n<p>Jlink image: \u043a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, Helidon \u0436\u0438\u0432\u0435\u0442 \u043d\u0430 Java \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u043d\u0438\u0436\u0435 11, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u201c\u043f\u043b\u044e\u0448\u043a\u0430\u043c\u0438\u201d, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 Jlink! \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 JRE + \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u0442\u0430\u0440\u0442, \u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440.. \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u043a\u043e\u0434\u0443!<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e GraalVM native-image: \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u043a\u043e\u0434\u0443 \u0438 runtime \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0430\u043c\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 memory footprint \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440!<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0446\u0438\u0444\u0440\u0430\u0445 \u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/804\/c52\/bd7\/804c52bd78c149398532afc0c07722a8.jpg\" width=\"1930\" height=\"1168\"><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/53e\/051\/79d\/53e05179d0be134426eea3968c13690c.jpg\" width=\"1924\" height=\"1166\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430!!!:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05e\/81c\/e2b\/05e81ce2bbca58a8545d7dce7e8a3606.jpg\" width=\"1918\" height=\"1172\"><figcaption><\/figcaption><\/figure>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b! \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 Helidon SE \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 native-image!<\/p>\n<p>\u0410, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0432\u0440\u0435\u043c\u044f (\u0438 \u043c\u0435\u0441\u0442\u043e) \u044d\u0442\u043e \u0434\u0435\u043d\u044c\u0433\u0438! \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043e\u0431\u043b\u0430\u043a\u0430\u0445!&nbsp;<\/p>\n<\/p>\n<p><strong>\u0412\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0430.<\/strong>&nbsp;<\/p>\n<p>\u041d\u0430\u0448\u0430 \u043b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0438 \u0438\u0437\u044f\u0449\u043d\u043e\u0439. \u041e\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043d\u0435\u0432\u0440\u0435\u043d\u043d\u0430\u044f! Helidon \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 MicroProfile, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0441\u043e\u0447\u0430\u0439\u0448\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0441 \u043d\u0443\u043b\u044f \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c API \u0438 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Java, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 11, \u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u043a \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u043d\u0430 \u043c\u0430\u0433\u0438\u044e.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442 <a href=\"http:\/\/helidon.io\" rel=\"noopener noreferrer nofollow\">http:\/\/helidon.io<\/a> \u0438 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 \u043e\u0447\u0435\u043d\u044c <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/about\/01_overview\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0441 \u043a\u0443\u0447\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a>. \u0414\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u0432\u0438\u0434\u0435\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/channel\/UChg00-uTTrCMmPsuzUNaZsA\" rel=\"noopener noreferrer nofollow\">\u044e\u0442\u0443\u0431\u0447\u0438\u043a\u0435<\/a>, \u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c &#8212; <a href=\"https:\/\/medium.com\/helidon\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u0433<\/a> \ud83d\ude42<\/p>\n<p>\u041d\u0443 \u0430 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/about\/05_cli\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u0430\u0447\u0430\u0442\u044c CLI<\/a> \ud83d\ude42<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439 \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 MicroProfile, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Long Running Actions \u0438 GraphQL. \u0412\u0441\u0435 \u044d\u0442\u043e \u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 GraalVM native-image!&nbsp;<\/p>\n<p>\u0418 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u201c\u041b\u0430\u0441\u0442\u043e\u0447\u043a\u0430\u201d \u0438 \u0442\u0430\u043a \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0434 \u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0435 \u0435\u0449\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.&nbsp;<\/p>\n<p>Helidon \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435, \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043a production, \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Java, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/528764\/\"> https:\/\/habr.com\/ru\/post\/528764\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<\/p>\n<p><a href=\"https:\/\/helidon.io\/\" rel=\"noopener noreferrer nofollow\">Helidon<\/a> \u2013 \u043f\u043e \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438 \u043b\u0430\u0441\u0442\u043e\u0447\u043a\u0430 (\u03a7\u03b5\u03bb\u03b9\u03b4\u03cc\u03bd\u03b9), \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u0442\u0438\u0447\u043a\u0430 \u0438\u0437 \u043e\u0442\u0440\u044f\u0434\u0430 \u0432\u043e\u0440\u043e\u0431\u044c\u0438\u043d\u044b\u0445 \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u043e\u0441\u0442\u0440\u044b\u043c\u0438 \u043a\u0440\u044b\u043b\u044c\u044f\u043c\u0438 \u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u043c \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u0445\u0432\u043e\u0441\u0442\u043e\u043c.&nbsp;<\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0430\u0441 \u0432\u043e\u0441\u0445\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0442\u043e\u043c \u0438 \u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u043e\u0439 \u043f\u0442\u0438\u0447\u043a\u0438, \u0430 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0441\u0442\u0430\u044f\u0445, \u0447\u0435\u043c-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043c\u0438\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<p>Helidon \u0434\u043b\u044f \u043d\u0430\u0441, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u043c \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e, MicroProfile based \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 <a href=\"https:\/\/github.com\/oracle\/helidon\" rel=\"noopener noreferrer nofollow\"><u>GitHub<\/u><\/a>, \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0.<\/p>\n<hr>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, <a href=\"https:\/\/microprofile.io\/\" rel=\"noopener noreferrer nofollow\"><u>MicroProfile<\/u><\/a> \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043c\u043d\u043e\u0433\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041d\u0430\u0447\u0430\u0432 \u0441\u0432\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0432 2016\u043c \u0433\u043e\u0434\u0443 \u0432\u0441\u0435\u0433\u043e \u0441 \u0442\u0440\u0435\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 &#8212; CDI, JAX-RS \u0438 JSON-P, \u0434\u0430 \u0438 \u0442\u043e, \u0432\u0437\u044f\u0442\u044b\u0445 \u0441 Java EE, \u043a \u043a\u043e\u043d\u0446\u0443 2020 \u0433\u043e\u0434\u0443 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 3.3 \u044d\u0442\u043e \u0443\u0436\u0435 12 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<figure class=\"full-width\"><figcaption>MicroProfile 3.3. \u0412 \u0436\u0435\u043b\u0442\u043e\u043c \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u0441\u0438\u043d\u0435\u043c \u0431\u0435\u0437.<\/figcaption><\/figure>\n<p>Major release \u0432\u0435\u0440\u0441\u0438\u0438 MicroProfile \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437 \u0432 \u0433\u043e\u0434. Minor release-\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0437 \u0432 \u043a\u0432\u0430\u0440\u0442\u0430\u043b. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0435\u043b\u0438\u0437\u0430 \u043a \u0440\u0435\u043b\u0438\u0437\u0443.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439, \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e MicroProfile, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 GraphQL, Long Running Actions, Concurrency, Reactive Messaging, Event Data \u0438 Reactive DB Access.<\/p>\n<p>\u0421\u0430\u043c \u0441\u0435\u0431\u0435 MicroProfile \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434 \u0448\u0430\u043f\u043a\u043e\u0439 Eclipse Foundation \u0438 \u044d\u0442\u043e \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0430 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430\u043c\u0438 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a Red Hat, IBM, Tomitribe, Payara \u0438 \u0434\u0440. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a OpenLiberty, TomEE \u0438 \u0442.\u0434. \u041d\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 DevOps \u0438 \u043e\u0431\u0449\u0435\u0439 \u0438\u0434\u0435\u0438, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u201c\u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u201d \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442. \u0421\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043a \u0441\u0432\u043e\u0435\u0439 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.&nbsp; \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445, \u0438\u0434\u0435\u0439\u043d\u044b\u043c \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0442\u0435\u043b\u0435\u043c \u0441\u0442\u0430\u043b Spring Boot. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c fat-jar \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u0442\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u043a\u0430. MicroProfile \u0434\u0430\u043b \u0441\u043e\u043b\u0438\u0434\u043d\u0443\u044e \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u044d\u0442\u043e\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0432\u0432\u0435\u043b \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u0435 \u0435\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u043b\u0435\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043d\u043e \u0438 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0438 \u0442.\u0434. \u0418 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0441 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043c\u0438.&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Heldon \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f&nbsp; \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0431\u044b\u0442\u044c Full-Stack \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u043a Spring Boot \u0438\u043b\u0438 Dropwizard, \u043e\u043d \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Helidon (\u043f\u043e\u0434 JVM) \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 20 Mb, \u0447\u0442\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 Spring Boot. \u041d\u0443 \u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ahead-of-time \u0432 Native Image \u0438 \u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0435 10 Mb.&nbsp;<\/p>\n<p>\u0427\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435,&nbsp; API \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 MicroProfile.<\/p>\n<\/p>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f &#8212; Talk is cheap, show me the code:<\/p>\n<pre><code class=\"java\">@Path(\"hello\") public class HelloWorld {     @GET      public String hello() {         return \"Hello World\";     } }<\/code><\/pre>\n<p>\u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 &#8212; \u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0430\u043d!<\/p>\n<\/p>\n<p><strong>Helidon 2.1.0<\/strong><\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u201c\u041b\u0430\u0441\u0442\u043e\u0447\u043a\u0430\u201d \u0432\u0435\u0440\u0441\u0438\u0438 2.1.0?<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Helidon MP 2.1.1<\/figcaption><\/figure>\n<p>\u0410 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Helidon \u0432\u0441\u0435, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432 MicroProfile 3.3 \u043f\u043b\u044e\u0441 CORS \u0438 gRPC (Server + Client)<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u0434\u0438\u0442\u044c? \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 &#8212; <a href=\"https:\/\/helidon.io\/docs\/v2\/#\/about\/05_cli\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u043a\u0430\u0447\u0430\u0442\u044c CLI<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0435 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u043b\u0435\u0435), \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043f\u0443\u0441\u0442\u043e\u043c Maven \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt; &nbsp;&nbsp;&lt;groupId&gt;io.helidon.microprofile.bundles&lt;\/groupId&gt; &nbsp;&nbsp;&lt;artifactId&gt;helidon-microprofile&lt;\/artifactId&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 MicroProfile. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043a\u0435\u0442. \u042d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 MicroProfile (\u0442\u0430\u043a\u0443\u044e \u043a\u0430\u043a JAX-RS, CDI, JSON-P \/ B \u0438 Config) \u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Metrics \u0438 Tracing. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0438\u0447\u0435\u0439 MicroProfile \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt; &nbsp;&nbsp;&lt;groupId&gt;io.helidon.microprofile.bundles&lt;\/groupId&gt; &nbsp;&nbsp;&lt;artifactId&gt;helidon-microprofile-core&lt;\/artifactId&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 Hello World JAX-RS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d JAX-RS Resource Class:<\/p>\n<pre><code class=\"java\">@Path(\"\/\") @RequestScoped public class HelloWorldResource { &nbsp;&nbsp;&nbsp;&nbsp;@GET &nbsp;&nbsp;&nbsp;&nbsp;@Produces(MediaType.TEXTPLAIN) &nbsp;&nbsp;&nbsp;&nbsp;public String message() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return \"Hello World\"; &nbsp;&nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><em>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c JAX-RS Application:<\/em><\/p>\n<pre><code class=\"java\">@ApplicationScoped @ApplicationPath(\"\/\") public class HelloWorldApplication extends Application {  &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public Set&lt;Class&lt;?&gt;&gt; getClasses() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Set.of( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloWorldResource.class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 CDI \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f, \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 <em>beans.xml <\/em>\u0432 <em>src\/main\/resources\/META-INF<\/em><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;beans\/&gt;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 <em>main<\/em> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!<\/p>\n<pre><code class=\"java\">public static void main(String[] args) { &nbsp;&nbsp;&nbsp;&nbsp;io.helidon.microprofile.server.Main.main(args); }<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0432\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 curl \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p><code>curl -X GET http:\/\/localhost:7001\/<\/code><\/p>\n<p><em>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c!&nbsp;<\/em><\/p>\n<p><code>{\"message\":\"Hello World\"}<\/code><\/p>\n<p>\u0422\u0410\u0414\u0410\u0410\u0410\u0410\u041c!! \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e!&nbsp;<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0430, \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Maven Archetype, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">mvn -U archetype:generate -DinteractiveMode=false \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeGroupId=io.helidon.archetypes \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeArtifactId=helidon-quickstart-mp \\ &nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeVersion=2.1.0 \\ &nbsp;&nbsp;&nbsp;&nbsp;-DgroupId=io.helidon.examples \\ &nbsp;&nbsp;&nbsp;&nbsp;-DartifactId=helidon-quickstart-mp \\ &nbsp;&nbsp;&nbsp;&nbsp;-Dpackage=io.helidon.examples.quickstart.mp<\/code><\/pre>\n<p>\u0412\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#8212; \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443):<\/p>\n<p><code>cd helidon-quickstart-mp<\/code><\/p>\n<p>\u0412 \u043d\u0435\u0439 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 maven \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c!<\/p>\n<p><code>mvn package<\/code><\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 jar-\u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 runtime \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 target\/libs. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 jar-\u043d\u0438\u043a:<\/p>\n<p><code>java -jar target\/helidon-quickstart-mp.jar<\/code><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 &#8212; \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u00abHello World\u00bb. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b GET \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 PUT \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f. \u041e\u0442\u0432\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JSON. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"json\">curl -X GET http:\/\/localhost:8080\/greet {\"message\":\"Hello World!\"} curl -X GET http:\/\/localhost:8080\/greet\/Joe {\"message\":\"Hello Joe!\"} curl -X PUT -H \"Content-Type: application\/json\" -d '{\"greeting\" : \"Hola\"}' http:\/\/localhost:8080\/greet\/greeting curl -X GET http:\/\/localhost:8080\/greet\/Jose {\"message\":\"Hola Jose!\"}<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0438 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0448\u043a\u0438 MicroProfile, \u043a\u0430\u043a \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 (Health Check) \u0438 \u041c\u0435\u0442\u0440\u0438\u043a\u0438 (Metrics):<\/p>\n<p>\u041f\u0440\u043e \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><code>curl -s -X GET http:\/\/localhost:8080\/health&nbsp;<\/code><\/p>\n<p>\u2026 \u043f\u0440\u043e \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Prometheus:<\/p>\n<p><code>curl -s -X GET http:\/\/localhost:8080\/metrics<\/code><\/p>\n<p>\u2026 \u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0445 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON:<\/p>\n<p><code>curl -H 'Accept: application\/json' -X GET http:\/\/localhost:8080\/metrics<\/code><\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 Docker \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043b\u0435\u0433\u043a\u043e \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c docker image:<\/p>\n<p><code>docker build -t helidon-quickstart-mp .<\/code><\/p>\n<p>\u2026 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<p><code>docker run --rm -p 8080:8080 helidon-quickstart-mp:latest<\/code><\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0438 \u043a \u0434\u0435\u043f\u043b\u043e\u044e \u0432 Kubernetes:<\/p>\n<p><code>kubectl create -f app.yaml<\/code><\/p>\n<p><code>kubectl get pods &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Wait for quickstart pod to be RUNNING<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u043a \u043e\u043d \u0442\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f:<\/p>\n<p><code>kubectl get service helidon-quickstart-mp<\/code><\/p>\n<p>\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \u0432\u0441\u0435 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043b\u043e\u0441\u044c, \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<p><code>curl -X GET http:\/\/localhost:31431\/greet<\/code><\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d\u044b, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e!<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u043a\u0430\u043a \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0435:<\/p>\n<p><code>kubectl delete -f app.yaml<\/code><\/p>\n<p>\u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0438 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0438!!!<\/p>\n<\/p>\n<p><strong>\u041a\u0441\u0442\u0430\u0442\u0438, Helidon \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439!<\/strong><\/p>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435 Java \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u0435\u0440\u0441\u0438\u0438 11. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044f JDK 9 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 jlink, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 custom runtime image. \u041f\u043b\u0430\u0433\u0438\u043d helidon-maven-plugin \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e runtime image \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Helidon, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u044b\u043a\u0438\u043d\u0443\u0432 \u0432\u0441\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Docker<\/p>\n<\/li>\n<\/ul>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c jlink-image<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 helidon-maven-plugin, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u0438 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e \u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<p>\u041a\u0430\u0442\u0430\u043b\u043e\u0433 target\/helidon-quickstart-mp \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043e\u0431\u0440\u0430\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043c\u043e\u0434\u0443\u043b\u0438 JDK, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>.\/target\/helidon-quickstart-mp\/bin\/start<\/code><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0430\u0440\u0445\u0438\u0432 Class Data Sharing (CDS), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 in-memory footprint.&nbsp;<\/p>\n<p>\u0410\u0440\u0445\u0438\u0432 CDS \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0434\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u041c\u0411). \u0420\u0430\u0437\u043c\u0435\u0440 \u0430\u0440\u0445\u0438\u0432\u0430 CDS \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 (\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430), \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0432\u0430 CDS, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><code>mvn package -Pjlink-image<\/code><\/p>\n<\/hr>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-313490","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=313490"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313490\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}