{"id":74793,"date":"2020-03-20T20:42:19","date_gmt":"2020-03-20T17:42:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka"},"modified":"2020-03-20T20:42:19","modified_gmt":"2020-03-20T17:42:19","slug":"quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","title":{"rendered":"Quarkus \u2013 supersonisk subatom\u00e4r Java. En kort \u00f6versikt av ramverket","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Quarkus \u2013 supersonisk subatom\u00e4r Java. En kort \u00f6versikt av ramverket\" src=\"\/wp-content\/uploads\/2020\/03\/b40e193b4a696206aad8b08a5e4795a1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"vvedenie\">Introduktion<\/h3>\n<p><\/p>\n<p>Den 7 mars meddelade f\u00f6retaget RedHat (snart IBM) <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/03\/07\/quarkus-next-generation-kubernetes-native-java-framework\/\">har presenterat<\/a><\/noindex> ett nytt ramverk \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus<\/a><\/noindex>. Enligt utvecklarna bygger detta ramverk p\u00e5 GraalVM och OpenJDK HotSpot och \u00e4r avsett f\u00f6r Kubernetes. Quarkus-stack inkluderar: JPA\/Hibernate, JAX-RS\/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus och andra.<\/p>\n<p><\/p>\n<p>Syftet med skapandet \u00e4r att g\u00f6ra Java till en ledande plattform f\u00f6r distribution i Kubernetes och utveckling av serverl\u00f6sa applikationer, genom att ge utvecklare en enhetlig metod f\u00f6r utveckling b\u00e5de i reaktiv och imperativ stil.<\/p>\n<p><\/p>\n<p>Om vi ser p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/dzone.com\/articles\/classification-of-development-frameworks-for-enter\"><u>denna<\/u><\/a><\/noindex> \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u0442\u043e Quarkus \u0433\u0434\u0435-\u0442\u043e \u043c\u0435\u0436\u0434\u0443 &#171;Aggregators\/Code Generators&#187; \u0438 &#171;High-level fullstack frameworks&#187;. \u042d\u0442\u043e \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440, \u043d\u043e \u0438 \u0434\u043e full-stack \u043d\u0435 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442, \u0442.\u043a. \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 backend.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Mycket h\u00f6g starttid f\u00f6r applikationen och l\u00e5g minnesf\u00f6rbrukning utlovas. H\u00e4r \u00e4r data fr\u00e5n utvecklarens webbplats:<\/p>\n<p><\/p>\n<p>Tiden fr\u00e5n start till f\u00f6rsta svar (s):<\/p>\n<p><\/p>\n<p>Konfiguration<br \/>\nREST<br \/>\nREST+JPA<\/p>\n<p>Quarkus+GraalVM<br \/>\n0.014<br \/>\n0.055<\/p>\n<p>Quarkus+OpenJDK<br \/>\n0.75<br \/>\n2.5<\/p>\n<p>Traditionell Cloud Native Stack*<br \/>\n4.3<br \/>\n9.5<\/p>\n<p><\/p>\n<p>Minnesf\u00f6rbrukning (Mb):<\/p>\n<p><\/p>\n<p>Konfiguration<br \/>\nREST<br \/>\nREST+JPA<\/p>\n<p>Quarkus+GraalVM<br \/>\n13<br \/>\n35<\/p>\n<p>Quarkus+OpenJDK<br \/>\n74<br \/>\n130<\/p>\n<p>Traditionell Cloud Native Stack*<br \/>\n140<br \/>\n218<\/p>\n<p><\/p>\n<p>Imponerande, eller hur?<\/p>\n<p><\/p>\n<p>*<em>Jag har inte hittat information om denna teknikstack, man kan anta att det \u00e4r n\u00e5got slags Spring Boot med extra till\u00e4gg.<\/em>.<\/p>\n<p><\/p>\n<h3 id=\"hello-world\">Hello World!<\/h3>\n<p><\/p>\n<p>Det enklaste applikationen skriven i Quarkus skulle se ut s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   public String hello() {\n       return \"hello\";\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Det \u00e4r bokstavligen en klass och det r\u00e4cker! Applikationen kan startas med hj\u00e4lp av Maven i utvecklingsl\u00e4ge:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">mvn compile quarkus:dev\n\u2026\n$ curl http:\/\/localhost:8080\/hello\nhello<\/code><\/pre>\n<p><\/p>\n<p>Skillnaden fr\u00e5n vanliga applikationer \u00e4r \u2013 ingen Application-klass! Quarkus st\u00f6djer hot reload, s\u00e5 att man kan \u00e4ndra applikationen utan att starta om den, vilket g\u00f6r utvecklingen \u00e4nnu snabbare. <\/p>\n<p><\/p>\n<p>Vad h\u00e4nder h\u00e4rn\u00e4st? Man kan l\u00e4gga till en tj\u00e4nst i kontrollern med hj\u00e4lp av annoteringen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/inject\/\" class=\"user_link\">Inject<\/a><\/noindex>. Koden f\u00f6r tj\u00e4nsten:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@ApplicationScoped\npublic class GreetingService {\n\n   public String greeting(String name) {\n       return \"Hello \" + name + \"!\";\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Kontrollern:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @Inject\n   GreetingService service;\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   @Path(\"\/{name}\")\n   public String greeting(@PathParam(\"name\") String name) {\n       return service.greeting(name);\n   }\n}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/hello\/developer\nHello developer!<\/code><\/pre>\n<p><\/p>\n<p>Observera att Quarkus anv\u00e4nder standardannoteringar fr\u00e5n v\u00e4lk\u00e4nda ramverk \u2014 CDI och JAX-RS. Det finns inget nytt att l\u00e4ra sig, om du har arbetat med CDI och JAX-RS tidigare, f\u00f6rst\u00e5s. <\/p>\n<p><\/p>\n<h3 id=\"rabota-s-bazoy-dannyh\">Arbete med databas<\/h3>\n<p><\/p>\n<p>Hibernate och standard JPA-annoteringar anv\u00e4nds f\u00f6r entiteter. Precis som med REST-kontroller kr\u00e4vs det minimalt med kod. Det r\u00e4cker att ange beroenden i byggfilen och l\u00e4gga till annoteringar. <code>@Entity<\/code> och konfigurera datak\u00e4lla i application.properties. <\/p>\n<p><\/p>\n<p>Det \u00e4r allt. Inga sessionFactory, persistence.xml och andra tj\u00e4nstefiler. Skriv bara den kod som beh\u00f6vs. Men om det beh\u00f6vs kan du skapa en persistence.xml-fil och konfigurera ORM-lagret mer detaljerat. <\/p>\n<p><\/p>\n<p>Quarkus st\u00f6djer caching av entiteter, kollektioner f\u00f6r en-till-m\u00e5nga-relationer och \u00e4ven f\u00f6rfr\u00e5gningar. P\u00e5 ytan ser det bra ut, men det <em>\u00e4r lokalt<\/em> caching f\u00f6r en enda Kubernetes-nod. D.v.s. cachar mellan olika noder \u00e4r inte synkroniserade. Jag hoppas att detta \u00e4r tillf\u00e4lligt. <\/p>\n<p><\/p>\n<h3 id=\"asinhronnoe-vypolnenie-koda\">Asynkron kod exekvering<\/h3>\n<p><\/p>\n<p>Som redan n\u00e4mnts st\u00f6djer Quarkus ocks\u00e5 reaktiv programmering. Koden f\u00f6r den tidigare applikationen kan skrivas p\u00e5 ett annat s\u00e4tt.<\/p>\n<p><\/p>\n<pre><code class=\"java\">@Path(\"\/hello\")\npublic class GreetingResource {\n\n   @GET\n   @Produces(MediaType.TEXT_PLAIN)\n   @Path(\"\/{name}\")\n   public CompletionStage greeting(@PathParam(\"name\") String name) {\n       return CompletableFuture.supplyAsync(() -&gt; {\n           return \"Hello \" + name + \"!\";\n       });\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Asynkron kod kan ocks\u00e5 flyttas till en tj\u00e4nst, resultatet blir detsamma. <\/p>\n<p><\/p>\n<h3 id=\"testirovanie\">Testning<\/h3>\n<p><\/p>\n<p>Tester f\u00f6r Quarkus-applikationer kan skrivas med JUnit4 eller JUnit5. H\u00e4r \u00e4r ett exempel p\u00e5 ett test f\u00f6r endpointen, skrivet med RestAssured, men ett annat ramverk kan anv\u00e4ndas: <\/p>\n<p><\/p>\n<pre><code class=\"java\">@QuarkusTest\npublic class GreetingResourceTest {\n\n   @Test\n   public void testGreetingEndpoint() {\n       String uuid = UUID.randomUUID().toString();\n       given()\n         .pathParam(\"name\", uuid)\n         .when().get(\"\/hello\/{name}\")\n         .then()\n           .statusCode(200)\n           .body(is(\"Hello \" + uuid + \"!\"));\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Annoteringen @QuarkusTest f\u00f6reskriver att applikationen ska startas innan testerna k\u00f6rs. I \u00f6vrigt \u2014 bekant kod f\u00f6r alla utvecklare. <\/p>\n<p><\/p>\n<h3 id=\"platformo-zavisimoe-prilozhenie\">Plattformsberoende applikation<\/h3>\n<p><\/p>\n<p>Eftersom Quarkus \u00e4r t\u00e4tt integrerat med GraalVM kan plattformsberoende kod genereras. F\u00f6r detta kr\u00e4vs att GraalVM installeras och milj\u00f6variabeln GRAALVM_HOME anges. Sedan <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus-quickstarts\/blob\/fae88eaab10ed4d68ac44e0b8b7416e631b8a6f9\/getting-started-knative\/pom.xml#L105\">definiera en byggprofil<\/a><\/noindex> och ange den vid byggandet av applikationen:<\/p>\n<p><\/p>\n<pre><code class=\"java\">mvn package -Pnative<\/code><\/pre>\n<p><\/p>\n<p>Det som \u00e4r intressant \u00e4r att den genererade applikationen kan testas. Detta \u00e4r viktigt eftersom k\u00f6rningen av \"inbyggd\" kod kan skilja sig fr\u00e5n k\u00f6rningen p\u00e5 JVM. Annotationen @SubstrateTest k\u00f6r plattformsberoende kod f\u00f6r applikationen. \u00c5teranv\u00e4ndning av existerande testkod kan g\u00f6ras med hj\u00e4lp av arv, vilket g\u00f6r att koden f\u00f6r att testa plattformsberoende applikationer ser ut s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<pre><code class=\"java\">@SubstrateTest\npublic class GreetingResourceIT extends GreetingResourceTest {\n\n}<\/code><\/pre>\n<p><\/p>\n<p>Den genererade bilden kan packas i Docker och k\u00f6ras i Kubernetes eller OpenShift, detaljerat beskrivet i <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kubernetes-guide\">instruktionerna<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"instrumentariy\">Verktygsl\u00e5da<\/h3>\n<p><\/p>\n<p>Ramverket Quarkus kan anv\u00e4ndas med Maven och Gradle. Maven st\u00f6ds fullt ut, till skillnad fr\u00e5n Gradle. Tyv\u00e4rr st\u00f6der Gradle i nul\u00e4get inte skapandet av tomma projekt, det finns detaljerad information p\u00e5 webbplatsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/gradle-tooling.html\">en handledning<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"rasshireniya\">Till\u00e4gg<\/h3>\n<p><\/p>\n<p>Quarkus \u00e4r ett utbyggbart ramverk. F\u00f6r n\u00e4rvarande finns det omkring <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/\">40 till\u00e4gg<\/a><\/noindex>, som l\u00e4gger till olika funktioner - fr\u00e5n st\u00f6d f\u00f6r <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/#migration\">Spring DI-container<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/extensions\/#integration\">Apache Camel<\/a><\/noindex> till loggning och publicering av metrik f\u00f6r aktiva tj\u00e4nster. Det finns redan ett till\u00e4gg f\u00f6r att st\u00f6dja skapandet av applikationer p\u00e5 spr\u00e5ket Kotlin, ut\u00f6ver Java. <\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Slutsats<\/h2>\n<p><\/p>\n<p>Enligt min mening \u00e4r Quarkus helt i linje med tidens trender. Utvecklingen av backendkod blir allt enklare, och detta ramverk f\u00f6renklar och p\u00e5skyndar utvecklingen av tj\u00e4nster ytterligare, med \"inbyggt\" st\u00f6d f\u00f6r Docker och Kubernetes. En stor f\u00f6rdel \u00e4r det inbyggda st\u00f6det f\u00f6r GraalVM och skapandet av plattformsberoende bilder, vilket g\u00f6r att tj\u00e4nster kan starta verkligen snabbt och ta upp lite minne. Detta \u00e4r mycket viktigt i v\u00e5r tid av massintresse f\u00f6r mikrotj\u00e4nster och serverl\u00f6s arkitektur.<\/p>\n<p><\/p>\n<p>Den officiella webbplatsen - <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">quarkus.io<\/a><\/noindex>. Exempel p\u00e5 projekt f\u00f6r snabb start finns redan p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus-quickstarts\">GitHub<\/a><\/noindex>.\n<\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0421\u0435\u0434\u044c\u043c\u043e\u0433\u043e \u043c\u0430\u0440\u0442\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f RedHat (\u0432\u0441\u043a\u043e\u0440\u0435 \u2014 IBM) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u2014 Quarkus. \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 GraalVM \u0438 OpenJDK HotSpot \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f Kubernetes. \u0421\u0442\u0435\u043a Quarkus \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f: JPA\/Hibernate, JAX-RS\/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0426\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c Java \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 Kubernetes [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74794,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Quarkus \u2014 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u0430\u044f Java. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-20T17:42:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-20T17:42:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Quarkus - \u00f6verljudsubatom\u00e4r Java. En kort \u00f6versikt av ramverket | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Quarkus \u2014 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u0430\u044f Java. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 | ProHoster","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/quarkus-sverhzvukovaya-subatomnaya-java-kratkij-obzor-frejmvorka","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-20T17:42:19+00:00","article:modified_time":"2020-03-20T17:42:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74793","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:07:28","updated":"2022-09-30 18:17:47","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/74793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=74793"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/74793\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/74794"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=74793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=74793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=74793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}