{"id":16755,"date":"2023-09-12T19:25:41","date_gmt":"2023-09-12T17:25:41","guid":{"rendered":"https:\/\/vived.io\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/"},"modified":"2023-09-13T07:45:54","modified_gmt":"2023-09-13T05:45:54","slug":"project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/","title":{"rendered":"Project Babylon: Chance for LINQ (and not only) on JVM  &#8211; JVM Weekly vol. 148"},"content":{"rendered":"\n<h2 id=\"1-chance-for-linq-and-not-only-on-jvm-project-babylon\" data-num=1>1. Chance for LINQ (and not only) on JVM &#8211; Project Babylon<\/h2>\n\n\n\n<p>I&#8217;ve already had occasion to mention how much I appreciate creativity in java project naming? Well, I have to do it again. Last week, Paul Sandoz, Java architect at Oracle, suggested starting a new Java project called <a href=\"https:\/\/mail.openjdk.org\/pipermail\/discuss\/2023-September\/006226.html\">Babylon<\/a>. Why do I like this name so much? You&#8217;ll find out at the end of the paragraph. But in the meantime&#8230;<\/p>\n\n\n\n<p>Remember how we discussed the ongoing efforts to enhance Java&#8217;s GPU capabilities in the previous edition? You might recall that TornadoVM was working in the background, transforming Java code into a format that specific hardware architectures could understand. But imagine if there was a system that could not only adapt to the instructions of various chips (like GPUs or FPGAs), but also dynamically generate native code for other runtime environments, or even SQL queries, similar to the functionality of LINQ in C#?<\/p>\n\n\n\n<p>For individuals who haven&#8217;t interacted with C# before, here&#8217;s a demonstration of how to utilize LINQ:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  DataContext dataContext = new DataContext();\n\n    \/\/ LINQ Query\n    var query = from student in dataContext.GetTable&lt;Student&gt;()\n                where student.FirstName == &quot;Artur&quot;\n                select student;\n\n    \/\/ Execute the query and print the results\n    foreach (var student in query)\n    {\n        Console.WriteLine(&quot;ID: {student.Id}, First Name: {student.FirstName}, Last Name: {student.LastName}&quot;); \n} <\/code><\/pre>\n\n\n\n<p>In the provided code, the LINQ query is looking for all students with the name &#8222;Artur&#8221; in the Students table. The query is run when it&#8217;s iterated over using a foreach loop. At this point, the <code>LINQ to SQL<\/code> process converts the LINQ query into an equivalent SQL query, which is then dispatched to the database.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"505\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-3.png\" alt=\"\" class=\"wp-image-16735\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-3.png 640w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-3-300x237.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Maybe they&#8217;ll end up laughing at us soon.<\/figcaption><\/figure><\/div>\n\n\n<p>Babylon strives to enable of building such mechanisms, showcasing what it refers to as 'code reflection&#8217;. To understand what this means, we need to return to the fundamentals. In programming languages like Java, reflection gives programs the capacity to examine and alter their own structures. In Java, reflection is presently utilized to analyze classes, interfaces, fields, and methods during execution time without the need to know their names at compile time. It&#8217;s akin to having the capability to understand the properties of a class or object and manipulate them while the program is in operation.<\/p>\n\n\n\n<p>However, the concept of 'code reflection&#8217; within the scope of Project Babylon, seeks to advance beyond this basic level. Instead of merely analyzing and modifying pre-compiled code structures, code reflection strives to offer a more comprehensive and adaptable access to the actual source code. It&#8217;s almost as though the software has the ability to read, analyze, and alter its own source files.<\/p>\n\n\n\n<p>This is a simplified explanation of how code reflection would function in Project Babylon: Initially, a program model would be created, which is a representation of the Java code in a structured format, similar to a detailed building blueprint. This blueprint, known as a 'code model&#8217; (which I believe is akin to an Abstract Syntax Tree), displays the structure of the code and its operations. Subsequently, the existing Java reflection capabilities would be enhanced, enabling not just the examination of compiled structures, but also the access to the aforementioned code model, both at the time of compilation and during execution. Additionally, there would be APIs that would enable developers to scrutinize code models, make alterations to them, and then convert those changes back into executable code.<\/p>\n\n\n\n<p>The idea of code reflection in the Babylon Project for Java is to offer comprehensive access to and control over source code, essentially a self-altering and introspective feature. Picture a Java coder creating code intended for a graphics card (GPU). Through code reflection, the Java software could examine its own code, comprehend it, and then modify itself to be fine-tuned for the GPU, all without requiring manual transformation by the coder. The goal is to equip Java with the capacity to adapt based on particular usage.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"431\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-1024x431.png\" alt=\"\" class=\"wp-image-16737\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-1024x431.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-300x126.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-768x323.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-1536x646.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-2048x861.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>Compared to other JVM languages like Kotlin, Scala, and Clojure, which already possess features enabling meta-programming or a macro system to aid in code 'introspection&#8217; and transformation, Babylon&#8217;s approach to code reflection strives to establish a standard mechanism. It aims to elevate Java&#8217;s reflection capabilities to the same level, or even surpass, other JVM languages. If this topic has sparked your interest, I encourage you to view a video presentation from JVMLS about Code Reflection found here:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Code Reflection #JVMLS\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/xbk9_6XA_IY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>As promised, here&#8217;s a fun fact about naming: &#8222;Babel&#8221; and &#8222;Babylon&#8221; originate from the biblical tale of the Tower of Babel in Genesis. As most people likely know, in this narrative, individuals speaking a single language attempted to construct a tower in the city of Babel to reach the heavens. Their ambition led to God confusing their language, resulting in multiple languages and the dispersion of humans across the globe. In a way, the Babylon project aims to do the reverse: it seeks to unify various programming 'languages&#8217; or models, making them more consistent within the Java framework<\/p>\n\n\n\n<p>However, the story doesn&#8217;t end here. The English terms 'Babel&#8217; and 'Babylon&#8217; originate from the Hebrew word 'B\u0101\u1e07el&#8217; (\u05d1\u05b8\u05bc\u05d1\u05b6\u05dc), which has connections to the ancient city of Babylon. This city, located in Mesopotamia, was renowned for its cultural and historical importance. In history, Babylon served as a convergence point for various cultures, languages, and knowledge in ancient Mesopotamia. In a similar vein, the Babylon Project seeks to unify different programming models, thereby enhancing Java&#8217;s versatility and relevance to a range of paradigms.<\/p>\n\n\n\n<p>Or am I overcomplicating things for myself \ud83e\udd37.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5.png\" alt=\"\" class=\"wp-image-16739\" style=\"width:544px;height:348px\" width=\"544\" height=\"348\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5.png 960w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5-300x192.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5-768x491.png 768w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><figcaption class=\"wp-element-caption\">Translation at end of today&#8217;s edition \ud83d\ude03<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-another-method-to-optimize-cold-start-in-java-azul-platform-prime\" data-num=2>2. Another method to optimize Cold Start in Java &#8211; Azul Platform Prime<\/h2>\n\n\n\n<p>I was contemplating if I should incorporate this news into the new edition, as it pertains to a solution that is highly specific to the Azul platform. However, it seamlessly integrates into the overall image of cloud Java in the widest sense. Hence, I chose to share some details about the <a href=\"https:\/\/www.azul.com\/blog\/giving-java-long-term-memory-with-azul-platform-prime\">recently announced Azul Platform Prime<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"571\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-1024x571.png\" alt=\"\" class=\"wp-image-16743\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-1024x571.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-300x167.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-768x429.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-1536x857.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-2048x1143.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">I&#8217;m currently preparing presentations on Cloud-Native Java and I didn&#8217;t even expect what a glut of books there are on the subject.<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Also to the point: The JVM begins each new application run as if it were a blank slate, with no recollection of its past activities. This way of operating results in a necessary initial 'start-up&#8217; each time to reach optimal performance. During this period, issues impact application responsiveness, like noticeable CPU load spikes during JIT optimisation, or unusual latency spikes may arise. To tackle these problems, developers frequently resort to workarounds such as manually 'warming up&#8217; the application before it goes live. However, these solutions increase operational complexity and cost.<\/p>\n\n\n\n<p>Azul explored the topic and integrated Azul Platform Prime with ReadyNow technology. ReadyNow gathers profiling data from the JVM session, enabling future runs to bypass the lengthy profiling phase and commence compiling immediately &#8211; somewhat similar to PGO from GraalVM or the profiling suggested by Project Loom&#8217;s developers. To me, the entire process also resembles CRaC, but it halts a step earlier &#8211; rather than 'dumping&#8217; all the JIT-compiled code to disk, the project stores the 'input&#8217; to the compilation process.<\/p>\n\n\n\n<p>Well, it appears to me that this is a particularly intriguing new piece in the overall ecosystem, which is the reason I chose to dedicate this section to it. Additionally, if you believed I was overreaching with pop culture references, Azul successfully incorporated a nod to Nolan&#8217;s Memento in their announcement and I respect that, as it&#8217;s my second favorite movie from the director, following closely behind &#8222;Interstellar&#8221;.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"436\" height=\"461\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1.png\" alt=\"\" class=\"wp-image-16731\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1.png 436w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1-284x300.png 284w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/www.youtube.com\/watch?v=m3zvVGJrTP8\">I came here to learn about Java, not to feel.<\/a><\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Micronaut 4.1.0<\/h3>\n\n\n\n<p>The Micronaut Foundation has released <a href=\"https:\/\/micronaut.io\/2023\/09\/01\/micronaut-framework-4-1-0-released\/\">Micronaut 4.1.0<\/a>. One of the most important new features are the Bean Mappers annotated as <code>@Introspected<\/code> (the second time I&#8217;ve used that word today), which facilitate automatic mappings between different types, based on the <a href=\"https:\/\/docs.micronaut.io\/latest\/guide\/#evaluatedExpressions\">Expression Language<\/a>&nbsp;introduced in version 4.0 that works at compile time, without the use of reflection and ensures type safety. The framework also introduces <code>IntrospectionBuilder<\/code> for dynamically generating constructors for specific types using the <code>@Introspected<\/code> annotation.<\/p>\n\n\n\n<p>Support for KSP (Kotlin Symbol Processing API) has been significantly enhanced, particularly for those developing Micronaut applications using this successor to the annotation processor, which is touted as superior by newer versions of Kotlin. Furthermore, modules such as Micronaut Data, Micronaut Serialisation and Micronaut Kafka have been updated with new versions, with the latter introducing significant improvements concerning Kafka offsets. Micronaut OpenAPI continues to enhance OpenAPI documentation generation at compile time, and Micronaut RabbitMQ introduces features related to the AMQP <code>mandatory<\/code> flag and RabbitMQ consumer events.<\/p>\n\n\n\n<p>However, the list of new features does not end there. Micronaut Security now offers better debugging capabilities, especially during login failures. A noticeable change came in the integration with Neo4j, which migrated to Neo4j Testcontainers and removed dependencies on <code>EmbeddedNeo4jServer<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hibernate 6.3<\/h3>\n\n\n\n<p>The latest version of the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">Hibernate ORM<\/a><a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">&nbsp;6.3.0<\/a>, aligns the framework with the Jakarta Persistence 3.2 standard. This is evident in the support for numeric literals (such as 123L symbolising long) in HQL\/JPQL queries. This version also introduces syntax standardisation for BigInteger and BigDecimal.<\/p>\n\n\n\n<p>The query capabilities in Hibernate have been enhanced. A notable addition is the creation of DAO-style methods for Named Queries, facilitated by the JPA static metamodel generator, which simplifies their usage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Book&gt; books =\n        Book_.findByTitleAndType(entityManager, titlePattern, Type.BOOK);\n<\/code><\/pre>\n\n\n\n<p>Finder methods have also been introduced, where the new <code>@Find<\/code> annotation allows arbitrary methods to be processed by the generator, creating query-like methods. Support for dynamic fetching for SUBSELECT queries, meanwhile, introduces a more flexible fetching style, allowing developers to define profiles that control which links are loaded at execution time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@FetchProfile(name = &quot;EagerBook&quot;)\n@FetchProfile(name = &quot;EagerBookWithSubselect&quot;)\n@Entity\nclass Book {\n    @FetchProfileOverride(profile = Book_.EAGER_BOOK_WITH_SUBSELECT, mode = SUBSELECT)\n    Set&lt;Author&gt; authors;\n}\n\nSession session = ...;\n\nsession.enableFetchProfile( Book_.EAGER_BOOK_WITH_SUBSELECT);\n<\/code><\/pre>\n\n\n\n<p>An important feature introduced in this version is also the capability to form criteria directly from HQL, and the newly added <code>CriteriaDefinition<\/code> class makes handling these criteria more straightforward. The implementation of the <code>StatelessSession.upsert()<\/code> function, on the other hand, simplifies the execution of SQL-like operations <code>UPSERT\/MERGE<\/code> using <code>StatelessSession<\/code>.<\/p>\n\n\n\n<p>For the adoption of the new version of Hibernate, it will also be important to release of the new version <strong>two new guides<\/strong>: one offers an <a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/6.3\/introduction\/html_single\/Hibernate_Introduction.html\">introduction to Hibernate 6<\/a> and the other delves into the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">syntax of the Hibernate Query Language<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quarkus 3.3.0<\/h3>\n\n\n\n<p>Quarkus has announced its latest release, <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-3-0-released\/\">Quarkus 3.3.0<\/a>. It introduces a number of enhancements, including OpenTelemetry version 1.28, the Pulsar extension in Reactive Messaging, various security-related improvements, especially in OIDC, and a switch from the deprecated Elasticsearch high-level-rest-client extension to the newer <strong>Elasticsearch Java Client<\/strong> extension. Furthermore, developers using REST Client Reactive can now customise ObjectMapper when using REST Client Reactive Jackson. The latest iteration of Micrometer allows customisation of <code>MeterRegistry<\/code> and introduces metrics for Netty.<\/p>\n\n\n\n<p>A significant shift has taken place in how GraalVM is defined. Quarkus has altered its dependencies, transitioning from an unofficial <code>svm<\/code> artifact to an official GraalVM SDK named <code>org.graalvm.sdk:graal-sdk<\/code>. The dependencies of this artifact in Quarkus are labeled as <code>provided<\/code>, indicating that they are not automatically incorporated into the project. Luckily, <code>org.graalvm.sdk:graal-sdk<\/code> is included in the Quarkus BOM, so there&#8217;s no need to specify its version when adding it to your project. However, if you need to use GraalVM substitutions in your applications, you&#8217;ll have to manually add the relevant dependency.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">For those who are ambitious: What exactly are substitutions in GraalVM?<\/h4>\n\n\n\n<p>Substitution is a process that enables developers to alter or override classes, methods, or fields during the native image generation process. This mechanism provides a solution to issues or allows for code optimization when transforming Java applications into native executables using the Native Image tool in GraalVM. Through substitution, developers can designate that a specific class, method, or field should be substituted with an alternative implementation suited for the native environment during the native image building process, without the need to modify the original source code or wait for updates from library developers.<\/p>\n\n\n\n<h2 id=\"bonus-what-is-the-future-of-java-in-todays-enterprise\" data-num=4>Bonus: What is the future of Java in today&#8217;s enterprise?<\/h2>\n\n\n\n<p>Alright, and ultimately, a small announcement.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1024x512.png\" alt=\"\" class=\"wp-image-16729\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1024x512.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-300x150.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-768x384.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1536x768.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Recently, I&#8217;ve had the chance to become the Head of Java\/Kotlin Development at VirtusLab, the company responsible for, among other things, the <a href=\"https:\/\/www.scala-lang.org\/blog\/2023\/05\/30\/scala-3.3.0-released.html\">Scala compiler<\/a>. This gives me a unique chance to promote the latest developments in the Java world \u2013 all those features I regularly write about \u2013 among businesses and see how they are actually being used in production. That&#8217;s why last week, I published an article titled <a href=\"https:\/\/virtuslab.com\/blog\/what-is-the-future-of-java-in-todays-enterprise\/\">What is the future of Java in today&#8217;s enterprise?<\/a>. In this article, I tried to explain to the broader business audience how the recent updates to the language, JVM, and ecosystem translate into real-world applications. The initial feedback was positive, so I decided to give it a little <strong>#selfplug<\/strong>.<\/p>\n\n\n\n<p>So, if you&#8217;re looking for a way to share some of the knowledge from this newsletter with decision-makers, I recommend checking out this publication \ud83d\ude03<\/p>\n\n\n\n<p>PS: A prize for those who have made it through &#8211; the phrase from the Gru meme translates to &#8222;The workers are speaking new languages&#8221; in ancient Greek \ud83d\ude03\nPS2: No need for gratitude \ud83d\ude03<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What would a week be without a new project in Java? That&#8217;s why today we&#8217;ll discuss Project Babylon, among other topics.<\/p>\n","protected":false},"author":10,"featured_media":16757,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-16755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"11","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived\" \/>\n<meta property=\"og:description\" content=\"What would a week be without a new project in Java? That&#039;s why today we&#039;ll discuss Project Babylon, among other topics.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-12T17:25:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-13T05:45:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Project Babylon: Chance for LINQ (and not only) on JVM &#8211; JVM Weekly vol. 148\",\"datePublished\":\"2023-09-12T17:25:41+00:00\",\"dateModified\":\"2023-09-13T05:45:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\"},\"wordCount\":2124,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\",\"url\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\",\"name\":\"Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png\",\"datePublished\":\"2023-09-12T17:25:41+00:00\",\"dateModified\":\"2023-09-13T05:45:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Project Babylon: Chance for LINQ (and not only) on JVM &#8211; JVM Weekly vol. 148\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/","og_locale":"pl_PL","og_type":"article","og_title":"Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived","og_description":"What would a week be without a new project in Java? That's why today we'll discuss Project Babylon, among other topics.","og_url":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/","og_site_name":"Vived","article_published_time":"2023-09-12T17:25:41+00:00","article_modified_time":"2023-09-13T05:45:54+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Project Babylon: Chance for LINQ (and not only) on JVM &#8211; JVM Weekly vol. 148","datePublished":"2023-09-12T17:25:41+00:00","dateModified":"2023-09-13T05:45:54+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/"},"wordCount":2124,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/","url":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/","name":"Project Babylon: Chance for LINQ (and not only) on JVM - JVM Weekly vol. 148 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","datePublished":"2023-09-12T17:25:41+00:00","dateModified":"2023-09-13T05:45:54+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-1.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/project-babylon-chance-for-linq-and-not-only-on-jvm-jvm-weekly-vol-148\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Project Babylon: Chance for LINQ (and not only) on JVM &#8211; JVM Weekly vol. 148"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. Chance for LINQ (and not only) on JVM - Project Babylon<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Chance for LINQ (and not only) on JVM - Project Babylon<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I've already had occasion to mention how much I appreciate creativity in java project naming? Well, I have to do it again. Last week, Paul Sandoz, Java architect at Oracle, suggested starting a new Java project called <a href=\"https:\/\/mail.openjdk.org\/pipermail\/discuss\/2023-September\/006226.html\">Babylon<\/a>. Why do I like this name so much? You'll find out at the end of the paragraph. But in the meantime...<\/p>\n","innerContent":["\n<p>I've already had occasion to mention how much I appreciate creativity in java project naming? Well, I have to do it again. Last week, Paul Sandoz, Java architect at Oracle, suggested starting a new Java project called <a href=\"https:\/\/mail.openjdk.org\/pipermail\/discuss\/2023-September\/006226.html\">Babylon<\/a>. Why do I like this name so much? You'll find out at the end of the paragraph. But in the meantime...<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Remember how we discussed the ongoing efforts to enhance Java's GPU capabilities in the previous edition? You might recall that TornadoVM was working in the background, transforming Java code into a format that specific hardware architectures could understand. But imagine if there was a system that could not only adapt to the instructions of various chips (like GPUs or FPGAs), but also dynamically generate native code for other runtime environments, or even SQL queries, similar to the functionality of LINQ in C#?<\/p>\n","innerContent":["\n<p>Remember how we discussed the ongoing efforts to enhance Java's GPU capabilities in the previous edition? You might recall that TornadoVM was working in the background, transforming Java code into a format that specific hardware architectures could understand. But imagine if there was a system that could not only adapt to the instructions of various chips (like GPUs or FPGAs), but also dynamically generate native code for other runtime environments, or even SQL queries, similar to the functionality of LINQ in C#?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>For individuals who haven't interacted with C# before, here's a demonstration of how to utilize LINQ:<\/p>\n","innerContent":["\n<p>For individuals who haven't interacted with C# before, here's a demonstration of how to utilize LINQ:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>  DataContext dataContext = new DataContext();\n\n    \/\/ LINQ Query\n    var query = from student in dataContext.GetTable&lt;Student>()\n                where student.FirstName == \"Artur\"\n                select student;\n\n    \/\/ Execute the query and print the results\n    foreach (var student in query)\n    {\n        Console.WriteLine(\"ID: {student.Id}, First Name: {student.FirstName}, Last Name: {student.LastName}\"); \n} <\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>  DataContext dataContext = new DataContext();\n\n    \/\/ LINQ Query\n    var query = from student in dataContext.GetTable&lt;Student>()\n                where student.FirstName == \"Artur\"\n                select student;\n\n    \/\/ Execute the query and print the results\n    foreach (var student in query)\n    {\n        Console.WriteLine(\"ID: {student.Id}, First Name: {student.FirstName}, Last Name: {student.LastName}\"); \n} <\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>In the provided code, the LINQ query is looking for all students with the name \"Artur\" in the Students table. The query is run when it's iterated over using a foreach loop. At this point, the <code>LINQ to SQL<\/code> process converts the LINQ query into an equivalent SQL query, which is then dispatched to the database.<\/p>\n","innerContent":["\n<p>In the provided code, the LINQ query is looking for all students with the name \"Artur\" in the Students table. The query is run when it's iterated over using a foreach loop. At this point, the <code>LINQ to SQL<\/code> process converts the LINQ query into an equivalent SQL query, which is then dispatched to the database.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16735,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-3.png\" alt=\"\" class=\"wp-image-16735\"\/><figcaption class=\"wp-element-caption\">Maybe they'll end up laughing at us soon.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-3.png\" alt=\"\" class=\"wp-image-16735\"\/><figcaption class=\"wp-element-caption\">Maybe they'll end up laughing at us soon.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Babylon strives to enable of building such mechanisms, showcasing what it refers to as 'code reflection'. To understand what this means, we need to return to the fundamentals. In programming languages like Java, reflection gives programs the capacity to examine and alter their own structures. In Java, reflection is presently utilized to analyze classes, interfaces, fields, and methods during execution time without the need to know their names at compile time. It's akin to having the capability to understand the properties of a class or object and manipulate them while the program is in operation.<\/p>\n","innerContent":["\n<p>Babylon strives to enable of building such mechanisms, showcasing what it refers to as 'code reflection'. To understand what this means, we need to return to the fundamentals. In programming languages like Java, reflection gives programs the capacity to examine and alter their own structures. In Java, reflection is presently utilized to analyze classes, interfaces, fields, and methods during execution time without the need to know their names at compile time. It's akin to having the capability to understand the properties of a class or object and manipulate them while the program is in operation.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>However, the concept of 'code reflection' within the scope of Project Babylon, seeks to advance beyond this basic level. Instead of merely analyzing and modifying pre-compiled code structures, code reflection strives to offer a more comprehensive and adaptable access to the actual source code. It's almost as though the software has the ability to read, analyze, and alter its own source files.<\/p>\n","innerContent":["\n<p>However, the concept of 'code reflection' within the scope of Project Babylon, seeks to advance beyond this basic level. Instead of merely analyzing and modifying pre-compiled code structures, code reflection strives to offer a more comprehensive and adaptable access to the actual source code. It's almost as though the software has the ability to read, analyze, and alter its own source files.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>This is a simplified explanation of how code reflection would function in Project Babylon: Initially, a program model would be created, which is a representation of the Java code in a structured format, similar to a detailed building blueprint. This blueprint, known as a 'code model' (which I believe is akin to an Abstract Syntax Tree), displays the structure of the code and its operations. Subsequently, the existing Java reflection capabilities would be enhanced, enabling not just the examination of compiled structures, but also the access to the aforementioned code model, both at the time of compilation and during execution. Additionally, there would be APIs that would enable developers to scrutinize code models, make alterations to them, and then convert those changes back into executable code.<\/p>\n","innerContent":["\n<p>This is a simplified explanation of how code reflection would function in Project Babylon: Initially, a program model would be created, which is a representation of the Java code in a structured format, similar to a detailed building blueprint. This blueprint, known as a 'code model' (which I believe is akin to an Abstract Syntax Tree), displays the structure of the code and its operations. Subsequently, the existing Java reflection capabilities would be enhanced, enabling not just the examination of compiled structures, but also the access to the aforementioned code model, both at the time of compilation and during execution. Additionally, there would be APIs that would enable developers to scrutinize code models, make alterations to them, and then convert those changes back into executable code.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>The idea of code reflection in the Babylon Project for Java is to offer comprehensive access to and control over source code, essentially a self-altering and introspective feature. Picture a Java coder creating code intended for a graphics card (GPU). Through code reflection, the Java software could examine its own code, comprehend it, and then modify itself to be fine-tuned for the GPU, all without requiring manual transformation by the coder. The goal is to equip Java with the capacity to adapt based on particular usage.<\/p>\n","innerContent":["\n<p>The idea of code reflection in the Babylon Project for Java is to offer comprehensive access to and control over source code, essentially a self-altering and introspective feature. Picture a Java coder creating code intended for a graphics card (GPU). Through code reflection, the Java software could examine its own code, comprehend it, and then modify itself to be fine-tuned for the GPU, all without requiring manual transformation by the coder. The goal is to equip Java with the capacity to adapt based on particular usage.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16737,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-1024x431.png\" alt=\"\" class=\"wp-image-16737\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-4-1024x431.png\" alt=\"\" class=\"wp-image-16737\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Compared to other JVM languages like Kotlin, Scala, and Clojure, which already possess features enabling meta-programming or a macro system to aid in code 'introspection' and transformation, Babylon's approach to code reflection strives to establish a standard mechanism. It aims to elevate Java's reflection capabilities to the same level, or even surpass, other JVM languages. If this topic has sparked your interest, I encourage you to view a video presentation from JVMLS about Code Reflection found here:<\/p>\n","innerContent":["\n<p>Compared to other JVM languages like Kotlin, Scala, and Clojure, which already possess features enabling meta-programming or a macro system to aid in code 'introspection' and transformation, Babylon's approach to code reflection strives to establish a standard mechanism. It aims to elevate Java's reflection capabilities to the same level, or even surpass, other JVM languages. If this topic has sparked your interest, I encourage you to view a video presentation from JVMLS about Code Reflection found here:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=xbk9_6XA_IY","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=xbk9_6XA_IY\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=xbk9_6XA_IY\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>As promised, here's a fun fact about naming: \"Babel\" and \"Babylon\" originate from the biblical tale of the Tower of Babel in Genesis. As most people likely know, in this narrative, individuals speaking a single language attempted to construct a tower in the city of Babel to reach the heavens. Their ambition led to God confusing their language, resulting in multiple languages and the dispersion of humans across the globe. In a way, the Babylon project aims to do the reverse: it seeks to unify various programming 'languages' or models, making them more consistent within the Java framework<\/p>\n","innerContent":["\n<p>As promised, here's a fun fact about naming: \"Babel\" and \"Babylon\" originate from the biblical tale of the Tower of Babel in Genesis. As most people likely know, in this narrative, individuals speaking a single language attempted to construct a tower in the city of Babel to reach the heavens. Their ambition led to God confusing their language, resulting in multiple languages and the dispersion of humans across the globe. In a way, the Babylon project aims to do the reverse: it seeks to unify various programming 'languages' or models, making them more consistent within the Java framework<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>However, the story doesn't end here. The English terms 'Babel' and 'Babylon' originate from the Hebrew word 'B\u0101\u1e07el' (\u05d1\u05b8\u05bc\u05d1\u05b6\u05dc), which has connections to the ancient city of Babylon. This city, located in Mesopotamia, was renowned for its cultural and historical importance. In history, Babylon served as a convergence point for various cultures, languages, and knowledge in ancient Mesopotamia. In a similar vein, the Babylon Project seeks to unify different programming models, thereby enhancing Java's versatility and relevance to a range of paradigms.<\/p>\n","innerContent":["\n<p>However, the story doesn't end here. The English terms 'Babel' and 'Babylon' originate from the Hebrew word 'B\u0101\u1e07el' (\u05d1\u05b8\u05bc\u05d1\u05b6\u05dc), which has connections to the ancient city of Babylon. This city, located in Mesopotamia, was renowned for its cultural and historical importance. In history, Babylon served as a convergence point for various cultures, languages, and knowledge in ancient Mesopotamia. In a similar vein, the Babylon Project seeks to unify different programming models, thereby enhancing Java's versatility and relevance to a range of paradigms.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Or am I overcomplicating things for myself \ud83e\udd37.<\/p>\n","innerContent":["\n<p>Or am I overcomplicating things for myself \ud83e\udd37.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16739,"width":544,"height":348,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5.png\" alt=\"\" class=\"wp-image-16739\" style=\"width:544px;height:348px\" width=\"544\" height=\"348\"\/><figcaption class=\"wp-element-caption\">Translation at end of today's edition \ud83d\ude03<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-5.png\" alt=\"\" class=\"wp-image-16739\" style=\"width:544px;height:348px\" width=\"544\" height=\"348\"\/><figcaption class=\"wp-element-caption\">Translation at end of today's edition \ud83d\ude03<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Another method to optimize Cold Start in Java - Azul Platform Prime<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Another method to optimize Cold Start in Java - Azul Platform Prime<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I was contemplating if I should incorporate this news into the new edition, as it pertains to a solution that is highly specific to the Azul platform. However, it seamlessly integrates into the overall image of cloud Java in the widest sense. Hence, I chose to share some details about the <a href=\"https:\/\/www.azul.com\/blog\/giving-java-long-term-memory-with-azul-platform-prime\">recently announced Azul Platform Prime<\/a>.<\/p>\n","innerContent":["\n<p>I was contemplating if I should incorporate this news into the new edition, as it pertains to a solution that is highly specific to the Azul platform. However, it seamlessly integrates into the overall image of cloud Java in the widest sense. Hence, I chose to share some details about the <a href=\"https:\/\/www.azul.com\/blog\/giving-java-long-term-memory-with-azul-platform-prime\">recently announced Azul Platform Prime<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16743,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-1024x571.png\" alt=\"\" class=\"wp-image-16743\"\/><figcaption class=\"wp-element-caption\">I'm currently preparing presentations on Cloud-Native Java and I didn't even expect what a glut of books there are on the subject.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-6-1024x571.png\" alt=\"\" class=\"wp-image-16743\"\/><figcaption class=\"wp-element-caption\">I'm currently preparing presentations on Cloud-Native Java and I didn't even expect what a glut of books there are on the subject.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><\/p>\n","innerContent":["\n<p><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Also to the point: The JVM begins each new application run as if it were a blank slate, with no recollection of its past activities. This way of operating results in a necessary initial 'start-up' each time to reach optimal performance. During this period, issues impact application responsiveness, like noticeable CPU load spikes during JIT optimisation, or unusual latency spikes may arise. To tackle these problems, developers frequently resort to workarounds such as manually 'warming up' the application before it goes live. However, these solutions increase operational complexity and cost.<\/p>\n","innerContent":["\n<p>Also to the point: The JVM begins each new application run as if it were a blank slate, with no recollection of its past activities. This way of operating results in a necessary initial 'start-up' each time to reach optimal performance. During this period, issues impact application responsiveness, like noticeable CPU load spikes during JIT optimisation, or unusual latency spikes may arise. To tackle these problems, developers frequently resort to workarounds such as manually 'warming up' the application before it goes live. However, these solutions increase operational complexity and cost.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Azul explored the topic and integrated Azul Platform Prime with ReadyNow technology. ReadyNow gathers profiling data from the JVM session, enabling future runs to bypass the lengthy profiling phase and commence compiling immediately - somewhat similar to PGO from GraalVM or the profiling suggested by Project Loom's developers. To me, the entire process also resembles CRaC, but it halts a step earlier - rather than 'dumping' all the JIT-compiled code to disk, the project stores the 'input' to the compilation process.<\/p>\n","innerContent":["\n<p>Azul explored the topic and integrated Azul Platform Prime with ReadyNow technology. ReadyNow gathers profiling data from the JVM session, enabling future runs to bypass the lengthy profiling phase and commence compiling immediately - somewhat similar to PGO from GraalVM or the profiling suggested by Project Loom's developers. To me, the entire process also resembles CRaC, but it halts a step earlier - rather than 'dumping' all the JIT-compiled code to disk, the project stores the 'input' to the compilation process.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Well, it appears to me that this is a particularly intriguing new piece in the overall ecosystem, which is the reason I chose to dedicate this section to it. Additionally, if you believed I was overreaching with pop culture references, Azul successfully incorporated a nod to Nolan's Memento in their announcement and I respect that, as it's my second favorite movie from the director, following closely behind \"Interstellar\".<\/p>\n","innerContent":["\n<p>Well, it appears to me that this is a particularly intriguing new piece in the overall ecosystem, which is the reason I chose to dedicate this section to it. Additionally, if you believed I was overreaching with pop culture references, Azul successfully incorporated a nod to Nolan's Memento in their announcement and I respect that, as it's my second favorite movie from the director, following closely behind \"Interstellar\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16731,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1.png\" alt=\"\" class=\"wp-image-16731\"\/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/www.youtube.com\/watch?v=m3zvVGJrTP8\">I came here to learn about Java, not to feel.<\/a><\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1.png\" alt=\"\" class=\"wp-image-16731\"\/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/www.youtube.com\/watch?v=m3zvVGJrTP8\">I came here to learn about Java, not to feel.<\/a><\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Micronaut 4.1.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Micronaut 4.1.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>The Micronaut Foundation has released <a href=\"https:\/\/micronaut.io\/2023\/09\/01\/micronaut-framework-4-1-0-released\/\">Micronaut 4.1.0<\/a>. One of the most important new features are the Bean Mappers annotated as <code>@Introspected<\/code> (the second time I've used that word today), which facilitate automatic mappings between different types, based on the <a href=\"https:\/\/docs.micronaut.io\/latest\/guide\/#evaluatedExpressions\">Expression Language<\/a>&nbsp;introduced in version 4.0 that works at compile time, without the use of reflection and ensures type safety. The framework also introduces <code>IntrospectionBuilder<\/code> for dynamically generating constructors for specific types using the <code>@Introspected<\/code> annotation.<\/p>\n","innerContent":["\n<p>The Micronaut Foundation has released <a href=\"https:\/\/micronaut.io\/2023\/09\/01\/micronaut-framework-4-1-0-released\/\">Micronaut 4.1.0<\/a>. One of the most important new features are the Bean Mappers annotated as <code>@Introspected<\/code> (the second time I've used that word today), which facilitate automatic mappings between different types, based on the <a href=\"https:\/\/docs.micronaut.io\/latest\/guide\/#evaluatedExpressions\">Expression Language<\/a>&nbsp;introduced in version 4.0 that works at compile time, without the use of reflection and ensures type safety. The framework also introduces <code>IntrospectionBuilder<\/code> for dynamically generating constructors for specific types using the <code>@Introspected<\/code> annotation.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Support for KSP (Kotlin Symbol Processing API) has been significantly enhanced, particularly for those developing Micronaut applications using this successor to the annotation processor, which is touted as superior by newer versions of Kotlin. Furthermore, modules such as Micronaut Data, Micronaut Serialisation and Micronaut Kafka have been updated with new versions, with the latter introducing significant improvements concerning Kafka offsets. Micronaut OpenAPI continues to enhance OpenAPI documentation generation at compile time, and Micronaut RabbitMQ introduces features related to the AMQP <code>mandatory<\/code> flag and RabbitMQ consumer events.<\/p>\n","innerContent":["\n<p>Support for KSP (Kotlin Symbol Processing API) has been significantly enhanced, particularly for those developing Micronaut applications using this successor to the annotation processor, which is touted as superior by newer versions of Kotlin. Furthermore, modules such as Micronaut Data, Micronaut Serialisation and Micronaut Kafka have been updated with new versions, with the latter introducing significant improvements concerning Kafka offsets. Micronaut OpenAPI continues to enhance OpenAPI documentation generation at compile time, and Micronaut RabbitMQ introduces features related to the AMQP <code>mandatory<\/code> flag and RabbitMQ consumer events.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>However, the list of new features does not end there. Micronaut Security now offers better debugging capabilities, especially during login failures. A noticeable change came in the integration with Neo4j, which migrated to Neo4j Testcontainers and removed dependencies on <code>EmbeddedNeo4jServer<\/code>.<\/p>\n","innerContent":["\n<p>However, the list of new features does not end there. Micronaut Security now offers better debugging capabilities, especially during login failures. A noticeable change came in the integration with Neo4j, which migrated to Neo4j Testcontainers and removed dependencies on <code>EmbeddedNeo4jServer<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Hibernate 6.3<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Hibernate 6.3<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>The latest version of the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">Hibernate ORM<\/a><a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">&nbsp;6.3.0<\/a>, aligns the framework with the Jakarta Persistence 3.2 standard. This is evident in the support for numeric literals (such as 123L symbolising long) in HQL\/JPQL queries. This version also introduces syntax standardisation for BigInteger and BigDecimal.<\/p>\n","innerContent":["\n<p>The latest version of the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">Hibernate ORM<\/a><a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">&nbsp;6.3.0<\/a>, aligns the framework with the Jakarta Persistence 3.2 standard. This is evident in the support for numeric literals (such as 123L symbolising long) in HQL\/JPQL queries. This version also introduces syntax standardisation for BigInteger and BigDecimal.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>The query capabilities in Hibernate have been enhanced. A notable addition is the creation of DAO-style methods for Named Queries, facilitated by the JPA static metamodel generator, which simplifies their usage.<\/p>\n","innerContent":["\n<p>The query capabilities in Hibernate have been enhanced. A notable addition is the creation of DAO-style methods for Named Queries, facilitated by the JPA static metamodel generator, which simplifies their usage.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>List&lt;Book&gt; books =\n        Book_.findByTitleAndType(entityManager, titlePattern, Type.BOOK);\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>List&lt;Book&gt; books =\n        Book_.findByTitleAndType(entityManager, titlePattern, Type.BOOK);\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Finder methods have also been introduced, where the new <code>@Find<\/code> annotation allows arbitrary methods to be processed by the generator, creating query-like methods. Support for dynamic fetching for SUBSELECT queries, meanwhile, introduces a more flexible fetching style, allowing developers to define profiles that control which links are loaded at execution time.<\/p>\n","innerContent":["\n<p>Finder methods have also been introduced, where the new <code>@Find<\/code> annotation allows arbitrary methods to be processed by the generator, creating query-like methods. Support for dynamic fetching for SUBSELECT queries, meanwhile, introduces a more flexible fetching style, allowing developers to define profiles that control which links are loaded at execution time.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>@FetchProfile(name = \"EagerBook\")\n@FetchProfile(name = \"EagerBookWithSubselect\")\n@Entity\nclass Book {\n    @FetchProfileOverride(profile = Book_.EAGER_BOOK_WITH_SUBSELECT, mode = SUBSELECT)\n    Set&lt;Author&gt; authors;\n}\n\nSession session = ...;\n\nsession.enableFetchProfile( Book_.EAGER_BOOK_WITH_SUBSELECT);\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>@FetchProfile(name = \"EagerBook\")\n@FetchProfile(name = \"EagerBookWithSubselect\")\n@Entity\nclass Book {\n    @FetchProfileOverride(profile = Book_.EAGER_BOOK_WITH_SUBSELECT, mode = SUBSELECT)\n    Set&lt;Author&gt; authors;\n}\n\nSession session = ...;\n\nsession.enableFetchProfile( Book_.EAGER_BOOK_WITH_SUBSELECT);\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>An important feature introduced in this version is also the capability to form criteria directly from HQL, and the newly added <code>CriteriaDefinition<\/code> class makes handling these criteria more straightforward. The implementation of the <code>StatelessSession.upsert()<\/code> function, on the other hand, simplifies the execution of SQL-like operations <code>UPSERT\/MERGE<\/code> using <code>StatelessSession<\/code>.<\/p>\n","innerContent":["\n<p>An important feature introduced in this version is also the capability to form criteria directly from HQL, and the newly added <code>CriteriaDefinition<\/code> class makes handling these criteria more straightforward. The implementation of the <code>StatelessSession.upsert()<\/code> function, on the other hand, simplifies the execution of SQL-like operations <code>UPSERT\/MERGE<\/code> using <code>StatelessSession<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>For the adoption of the new version of Hibernate, it will also be important to release of the new version <strong>two new guides<\/strong>: one offers an <a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/6.3\/introduction\/html_single\/Hibernate_Introduction.html\">introduction to Hibernate 6<\/a> and the other delves into the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">syntax of the Hibernate Query Language<\/a>.<\/p>\n","innerContent":["\n<p>For the adoption of the new version of Hibernate, it will also be important to release of the new version <strong>two new guides<\/strong>: one offers an <a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/6.3\/introduction\/html_single\/Hibernate_Introduction.html\">introduction to Hibernate 6<\/a> and the other delves into the <a href=\"https:\/\/in.relation.to\/2023\/08\/31\/orm-630\/\">syntax of the Hibernate Query Language<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Quarkus 3.3.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Quarkus 3.3.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Quarkus has announced its latest release, <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-3-0-released\/\">Quarkus 3.3.0<\/a>. It introduces a number of enhancements, including OpenTelemetry version 1.28, the Pulsar extension in Reactive Messaging, various security-related improvements, especially in OIDC, and a switch from the deprecated Elasticsearch high-level-rest-client extension to the newer <strong>Elasticsearch Java Client<\/strong> extension. Furthermore, developers using REST Client Reactive can now customise ObjectMapper when using REST Client Reactive Jackson. The latest iteration of Micrometer allows customisation of <code>MeterRegistry<\/code> and introduces metrics for Netty.<\/p>\n","innerContent":["\n<p>Quarkus has announced its latest release, <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-3-0-released\/\">Quarkus 3.3.0<\/a>. It introduces a number of enhancements, including OpenTelemetry version 1.28, the Pulsar extension in Reactive Messaging, various security-related improvements, especially in OIDC, and a switch from the deprecated Elasticsearch high-level-rest-client extension to the newer <strong>Elasticsearch Java Client<\/strong> extension. Furthermore, developers using REST Client Reactive can now customise ObjectMapper when using REST Client Reactive Jackson. The latest iteration of Micrometer allows customisation of <code>MeterRegistry<\/code> and introduces metrics for Netty.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A significant shift has taken place in how GraalVM is defined. Quarkus has altered its dependencies, transitioning from an unofficial <code>svm<\/code> artifact to an official GraalVM SDK named <code>org.graalvm.sdk:graal-sdk<\/code>. The dependencies of this artifact in Quarkus are labeled as <code>provided<\/code>, indicating that they are not automatically incorporated into the project. Luckily, <code>org.graalvm.sdk:graal-sdk<\/code> is included in the Quarkus BOM, so there's no need to specify its version when adding it to your project. However, if you need to use GraalVM substitutions in your applications, you'll have to manually add the relevant dependency.<\/p>\n","innerContent":["\n<p>A significant shift has taken place in how GraalVM is defined. Quarkus has altered its dependencies, transitioning from an unofficial <code>svm<\/code> artifact to an official GraalVM SDK named <code>org.graalvm.sdk:graal-sdk<\/code>. The dependencies of this artifact in Quarkus are labeled as <code>provided<\/code>, indicating that they are not automatically incorporated into the project. Luckily, <code>org.graalvm.sdk:graal-sdk<\/code> is included in the Quarkus BOM, so there's no need to specify its version when adding it to your project. However, if you need to use GraalVM substitutions in your applications, you'll have to manually add the relevant dependency.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">For those who are ambitious: What exactly are substitutions in GraalVM?<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">For those who are ambitious: What exactly are substitutions in GraalVM?<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Substitution is a process that enables developers to alter or override classes, methods, or fields during the native image generation process. This mechanism provides a solution to issues or allows for code optimization when transforming Java applications into native executables using the Native Image tool in GraalVM. Through substitution, developers can designate that a specific class, method, or field should be substituted with an alternative implementation suited for the native environment during the native image building process, without the need to modify the original source code or wait for updates from library developers.<\/p>\n","innerContent":["\n<p>Substitution is a process that enables developers to alter or override classes, methods, or fields during the native image generation process. This mechanism provides a solution to issues or allows for code optimization when transforming Java applications into native executables using the Native Image tool in GraalVM. Through substitution, developers can designate that a specific class, method, or field should be substituted with an alternative implementation suited for the native environment during the native image building process, without the need to modify the original source code or wait for updates from library developers.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Bonus: What is the future of Java in today's enterprise?<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Bonus: What is the future of Java in today's enterprise?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Alright, and ultimately, a small announcement.<\/p>\n","innerContent":["\n<p>Alright, and ultimately, a small announcement.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16729,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1024x512.png\" alt=\"\" class=\"wp-image-16729\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-1024x512.png\" alt=\"\" class=\"wp-image-16729\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Recently, I've had the chance to become the Head of Java\/Kotlin Development at VirtusLab, the company responsible for, among other things, the <a href=\"https:\/\/www.scala-lang.org\/blog\/2023\/05\/30\/scala-3.3.0-released.html\">Scala compiler<\/a>. This gives me a unique chance to promote the latest developments in the Java world \u2013 all those features I regularly write about \u2013 among businesses and see how they are actually being used in production. That's why last week, I published an article titled <a href=\"https:\/\/virtuslab.com\/blog\/what-is-the-future-of-java-in-todays-enterprise\/\">What is the future of Java in today's enterprise?<\/a>. In this article, I tried to explain to the broader business audience how the recent updates to the language, JVM, and ecosystem translate into real-world applications. The initial feedback was positive, so I decided to give it a little <strong>#selfplug<\/strong>.<\/p>\n","innerContent":["\n<p>Recently, I've had the chance to become the Head of Java\/Kotlin Development at VirtusLab, the company responsible for, among other things, the <a href=\"https:\/\/www.scala-lang.org\/blog\/2023\/05\/30\/scala-3.3.0-released.html\">Scala compiler<\/a>. This gives me a unique chance to promote the latest developments in the Java world \u2013 all those features I regularly write about \u2013 among businesses and see how they are actually being used in production. That's why last week, I published an article titled <a href=\"https:\/\/virtuslab.com\/blog\/what-is-the-future-of-java-in-todays-enterprise\/\">What is the future of Java in today's enterprise?<\/a>. In this article, I tried to explain to the broader business audience how the recent updates to the language, JVM, and ecosystem translate into real-world applications. The initial feedback was positive, so I decided to give it a little <strong>#selfplug<\/strong>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>So, if you're looking for a way to share some of the knowledge from this newsletter with decision-makers, I recommend checking out this publication \ud83d\ude03<\/p>\n","innerContent":["\n<p>So, if you're looking for a way to share some of the knowledge from this newsletter with decision-makers, I recommend checking out this publication \ud83d\ude03<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: A prize for those who have made it through - the phrase from the Gru meme translates to \"The workers are speaking new languages\" in ancient Greek \ud83d\ude03\nPS2: No need for gratitude \ud83d\ude03<\/p>\n","innerContent":["\n<p>PS: A prize for those who have made it through - the phrase from the Gru meme translates to \"The workers are speaking new languages\" in ancient Greek \ud83d\ude03\nPS2: No need for gratitude \ud83d\ude03<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=16755"}],"version-history":[{"count":6,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16755\/revisions"}],"predecessor-version":[{"id":16764,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16755\/revisions\/16764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16757"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}