{"id":25904,"date":"2017-08-02T08:42:27","date_gmt":"2017-08-02T08:42:27","guid":{"rendered":"https:\/\/blog.jetbrains.com\/idea\/?p=15645"},"modified":"2017-08-02T08:42:27","modified_gmt":"2017-08-02T08:42:27","slug":"java-annotated-monthly-august-2017","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ja\/idea\/2017\/08\/java-annotated-monthly-august-2017","title":{"rendered":"Java Annotated Monthly &#8211; August 2017"},"content":{"rendered":"<p style=\"text-align: justify;\">\u200bHere in Europe we&#8217;re well into the vacation season. July and August are usually quiet, but at JetBrains we&#8217;ve been working hard on a number of 2017.2 releases, including IntelliJ IDEA and Upsource, so this month&#8217;s Java Annotated includes links to all the information about these releases. In addition, there&#8217;s loads of Java 9 news, and a good chunk of Design and Architecture this month.\u00a0I was going to squeeze in a new section this month, but we&#8217;ve got so much content you&#8217;ll have to wait and see if I ever get space for it&#8230;<\/p>\n<p style=\"text-align: justify;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-14180\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2016\/04\/idea-JavaAnnotatedMonthly@2x.png\" alt=\"JavaAnnotatedMonthly@2x\" width=\"800\" height=\"415\" \/><\/p>\n<p><!--more--><\/p>\n<h2>Java 9<\/h2>\n<p>July saw a lot of Java 9\u00a0articles, news pieces, videos and interviews, probably originally\u00a0timed to coincide with the July release date. \u00a0We didn&#8217;t get the release (Java 9 is <a href=\"https:\/\/jaxenter.com\/java-9-schedule-change-sept-134484.html\" target=\"_blank\" rel=\"noopener\">currently scheduled for 21 September<\/a>), but we did get a lot of great tutorials and opinion pieces.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/07\/jsr-376-approved\" target=\"_blank\" rel=\"noopener\">Java Module Platform System (JSR 376) Passes the Public Review Reconsideration Ballot<\/a>\u00a0&#8211; full steam ahead to Java 9<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-modularity-jigsaw\" target=\"_blank\" rel=\"noopener\">Java 9 Modular Development (Part 1)<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-modular-development-part-2\" target=\"_blank\" rel=\"noopener\">Java 9 Modular Development (Part 2)<\/a><\/li>\n<li><a href=\"http:\/\/www.javamagazine.mozaicreader.com\/JulyAug2017\/#&amp;pageSet=17&amp;page=0&amp;contentItem=0\" target=\"_blank\" rel=\"noopener\">Migrating from Java 8 to Java 9<\/a>\u00a0&#8211; article by me, <a href=\"https:\/\/twitter.com\/trisha_gee\" target=\"_blank\" rel=\"noopener\">Trisha\u00a0Gee<\/a>, for Java Magazine<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/Java-Jigsaw-Migration-Guide\" target=\"_blank\" rel=\"noopener\">Painlessly Migrating to Java Jigsaw Modules &#8211; a Case Study<\/a>\u00a0&#8211; article by me for InfoQ, follows on from the previous article<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-streams-and-process-api\" target=\"_blank\" rel=\"noopener\">Java 9: Streams Improvements<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-new-enhancements-milling-project-coin\" target=\"_blank\" rel=\"noopener\">Java 9: A Look at Milling Project Coin<\/a><\/li>\n<li><a href=\"https:\/\/javax0.wordpress.com\/2017\/07\/19\/process-handling-in-java-9\/\" target=\"_blank\" rel=\"noopener\">Process Handling in Java 9<\/a>\u00a0&#8211; updates to the process API in Java 9, well worth being aware of<\/li>\n<li><a href=\"https:\/\/www.azul.com\/jdk-9-pitfalls-for-the-unwary\/\" target=\"_blank\" rel=\"noopener\">JDK 9: Pitfalls For The Unwary<\/a><\/li>\n<li><a href=\"https:\/\/guides.gradle.org\/building-java-9-modules\/\" target=\"_blank\" rel=\"noopener\">Gradle\u00a0Building Java 9 Modules<\/a>\u00a0&#8211; so excited to see Gradle works with Java 9 now<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/java-9-modules\" target=\"_blank\" rel=\"noopener\">Java Futures: Modules and More<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/youtu.be\/NKY2FYTCo7I\" target=\"_blank\" rel=\"noopener\">A Live Migration to Java 9 Modules<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/youtu.be\/8Y6BV6WXCGI\" target=\"_blank\" rel=\"noopener\">55 New Features in JDK 9<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/jaxenter.com\/java-influencers-interview-2-135720.html\" target=\"_blank\" rel=\"noopener\">Java 9 and the future of modularity: Will Project Jigsaw be a hit or flop?<\/a>\u00a0&#8211; Java Influencers Interview Series part 2 (see Java General for part 1)<\/li>\n<li><a href=\"https:\/\/jaxenter.com\/java-influencers-interview-3-135847.html\" target=\"_blank\" rel=\"noopener\">Java 9 misconceptions &amp; Java 10 wish list<\/a>\u00a0 &#8211; Java Influencers Interview Series part 3<\/li>\n<\/ul>\n<h2>Java In General<\/h2>\n<p>In all the excitement about Java 9, we&#8217;re a bit short of non-Java-9 news. \u00a0However\u00a0what we do have is a smattering of\u00a0tips to understand the JVM&#8217;s performance, and some fundamentals that you probably already know, but it doesn&#8217;t hurt to be reminded.<\/p>\n<ul>\n<li><a href=\"https:\/\/jaxenter.com\/java-influencers-interview-1-135570.html\" target=\"_blank\" rel=\"noopener\">No swan song for Java: 11 influencers weigh in on its reputation, rivals and adoption<\/a>\u00a0&#8211; Java Influencers Interview Series part\u00a01<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/concurrency-java-futures-and-kotlin-coroutines-1\" target=\"_blank\" rel=\"noopener\">Concurrency: Java Futures and Kotlin Coroutines<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/what-false-sharing-is-and-how-jvm-prevents-it\" target=\"_blank\" rel=\"noopener\">What False Sharing is and How the JVM Prevents it<\/a>\u00a0(with reference to the <a href=\"http:\/\/mechanitis.blogspot.com.es\/2011\/07\/dissecting-disruptor-why-its-so-fast_22.html\" target=\"_blank\" rel=\"noopener\">LMAX Disruptor example<\/a>)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/java-performance-guide\" target=\"_blank\" rel=\"noopener\">Java Performance Engineer&#8217;s Survival Guide<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/blog.jooq.org\/2017\/07\/03\/are-java-8-streams-truly-lazy-not-completely\/\" target=\"_blank\" rel=\"noopener\">Are Java 8 Streams Truly Lazy? Not Completely!<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/4-techniques-for-writing-better-java\" target=\"_blank\" rel=\"noopener\">Four Techniques for Writing Better Java<\/a><\/li>\n<li><a href=\"https:\/\/blog.jooq.org\/2017\/07\/20\/a-curious-java-language-feature-and-how-it-produced-a-subtle-bug\/\" target=\"_blank\" rel=\"noopener\">A Curious Java Language Feature and How it Produced a Subtle Bug<\/a><\/li>\n<\/ul>\n<h2>Languages, Frameworks and Libraries<\/h2>\n<p>Normally these types of articles end up in the General Java section, but\u00a0this month we have a good selection so they&#8217;ve earned their own spot.<\/p>\n<ul>\n<li><a href=\"https:\/\/blogs.oracle.com\/theaquarium\/java-ee-8-june-recap\" target=\"_blank\" rel=\"noopener\">Java EE 8 &#8211; June recap<\/a>\u00a0&#8211; summary: nearly there!<\/li>\n<li><a href=\"http:\/\/www.java-allandsundry.com\/2017\/06\/spring-boot-web-slice-test-sample.html\" target=\"_blank\" rel=\"noopener\">Spring Boot Web Test Slicing<\/a><\/li>\n<li><a href=\"https:\/\/vaadin.com\/blog\/-\/blogs\/upgrading-to-vaadin-framework-8-part-1-of-2-\" target=\"_blank\" rel=\"noopener\">Upgrading to Vaadin Framework 8 (Part 1)<\/a><\/li>\n<li><a href=\"https:\/\/vaadin.com\/blog\/-\/blogs\/upgrading-to-vaadin-framework-8-part-2-of-2-\" target=\"_blank\" rel=\"noopener\">Upgrading to Vaadin Framework 8 (Part 2)<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/how-to-build-microservices-with-java-ee-and-jbossf\" target=\"_blank\" rel=\"noopener\">How to Build Microservices With Java EE and JBoss Forge<\/a>\u00a0&#8211; because if you can&#8217;t do Microservices in your technology, it&#8217;s not valid&#8230;<\/li>\n<li><a href=\"https:\/\/stackify.com\/gradle-vs-maven\/?\" target=\"_blank\" rel=\"noopener\">Gradle vs. Maven<\/a>\u00a0&#8211; overview of the two systems and some discussion of the pros and cons of both<\/li>\n<li><a href=\"https:\/\/springframework.guru\/reactive-streams-in-java\/\" target=\"_blank\" rel=\"noopener\">What\u00a0are Reactive Streams In Java?<\/a>\u00a0&#8211; long article\u00a0that covers the differences between Reactive Programming and Reactive Streams, and some of the Reactive Streams implementations<\/li>\n<li><a href=\"https:\/\/medium.com\/@ggonchar\/reactive-spring-5-and-application-design-impact-159f79678739\" target=\"_blank\" rel=\"noopener\">Reactive Spring 5 and application design impact<\/a>\u00a0&#8211; a look at the specific implementation in Spring 5<\/li>\n<li><a href=\"https:\/\/lankydanblog.com\/2017\/07\/16\/a-quick-look-into-reactive-streams-with-spring-data-and-mongodb\/\" target=\"_blank\" rel=\"noopener\">A quick look into Reactive Streams with Spring Data and MongoDB<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2017\/07\/kotlin-workshop-material-for-you-to-use\/\">Kotlin Workshop Material free for you to use<\/a>\u00a0&#8211; if you&#8217;re involved in a user group you might want to share this<\/li>\n<li><a href=\"https:\/\/medium.com\/@Pinterest_Engineering\/kotlin-for-grumpy-java-developers-8e90875cb6ab\" target=\"_blank\" rel=\"noopener\">Kotlin for grumpy Java developers<\/a>\u00a0(written for Android developers)<\/li>\n<\/ul>\n<h2>Android<\/h2>\n<p>Apparently Architecture Components are the Next Big Thing&#8230;<\/p>\n<ul>\n<li><a href=\"https:\/\/riggaroo.co.za\/android-architecture-components-looking-room-livedata-part-1\/\" target=\"_blank\" rel=\"noopener\">Android Architecture Components \u2013 Looking at Room and LiveData \u2013 Part 1<\/a><\/li>\n<li><a href=\"https:\/\/riggaroo.co.za\/android-architecture-components-looking-viewmodels-part-2\/\" target=\"_blank\" rel=\"noopener\">Android Architecture Components \u2013 Looking at ViewModels \u2013 Part 2<\/a><\/li>\n<li><a href=\"https:\/\/riggaroo.co.za\/android-architecture-components-looking-lifecycles-part-3\" target=\"_blank\" rel=\"noopener\">Android Architecture Components \u2013 Looking at Lifecycles \u2013 Part 3<\/a><\/li>\n<li><a href=\"https:\/\/blog.stylingandroid.com\/architecture-components-lifecycle\/\" target=\"_blank\" rel=\"noopener\">Architecture Components: Lifecycle<\/a><\/li>\n<li><a href=\"https:\/\/blog.stylingandroid.com\/architecture-components-livedata\/\" target=\"_blank\" rel=\"noopener\">Architecture Components: LiveData<\/a><\/li>\n<li><a href=\"https:\/\/blog.stylingandroid.com\/architecture-components-viewmodel\" target=\"_blank\" rel=\"noopener\">Architecture Components: ViewModel<\/a><\/li>\n<li><a href=\"https:\/\/blog.stylingandroid.com\/architecture-components-summary\/\" target=\"_blank\" rel=\"noopener\">Architecture Components: Testing &amp; Other Stories<\/a><\/li>\n<li><a href=\"https:\/\/news.realm.io\/news\/converting-an-app-to-use-clean-architecture\/\" target=\"_blank\" rel=\"noopener\">Converting an App to Use Clean Architecture<\/a><\/li>\n<li><a href=\"https:\/\/savvyapps.com\/blog\/how-to-build-restful-api-mobile-app\" target=\"_blank\" rel=\"noopener\">A Massive Guide to Building a RESTful API for Your Mobile App<\/a><\/li>\n<li><a href=\"https:\/\/jeroenmols.com\/blog\/2017\/07\/21\/java8language\/\" target=\"_blank\" rel=\"noopener\">Embracing Java 8 language features<\/a><\/li>\n<li><a href=\"https:\/\/android-developers.googleblog.com\/2017\/07\/developer-preview-4-now-available.html\" target=\"_blank\" rel=\"noopener\">Developer Preview 4 now available, official Android O coming soon!<\/a><\/li>\n<li><a href=\"https:\/\/proandroiddev.com\/learn-kotlin-refactoring-an-app-38cf0cbefe6c\" target=\"_blank\" rel=\"noopener\">Learn how to refactor an app with Kotlin<\/a><\/li>\n<\/ul>\n<h2>Design and Architecture<\/h2>\n<p>A good handful of articles spanning a range of (generally Java-specific)\u00a0concerns beyond the code-level. The usual functional-vs-OO commentary appears, and of course\u00a0microservices. Domain Driven Design is a personal favourite of mine but still not as widely adopted as I&#8217;d expect, so in an attempt to brainwash the Java programming public I will continue to include articles covering DDD in Annotated Monthly.<\/p>\n<ul>\n<li><a href=\"https:\/\/dzone.com\/articles\/programming-without-a-framework\" target=\"_blank\" rel=\"noopener\">Programming Without a Framework<\/a>\u00a0&#8211; or:\u00a0it&#8217;s really good to understand what&#8217;s happening under the covers<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/discussion-recap-to-framework-or-not-to-framework\" target=\"_blank\" rel=\"noopener\">To Framework or Not To Framework?<\/a>\u00a0&#8211; follow up to previous article<\/li>\n<li><a href=\"https:\/\/developers.redhat.com\/promotions\/microservices-for-java-developers\/\" target=\"_blank\" rel=\"noopener\">Microservices for Java Developers: A Hands-On Introduction to Frameworks and Containers<\/a>\u00a0&#8211; free ebook from RedHat\/O&#8217;Reilly<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/06\/fearless-aws-lambda\" target=\"_blank\" rel=\"noopener\">Why the JVM is a Good Choice for Serverless Computing<\/a>\u00a0&#8211; good to know, because normally it sounds like Serverless == Back End Java Is Dead<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/fp-for-the-unitiated\" target=\"_blank\" rel=\"noopener\">Functional Programming for the Uninitiated<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/beginning-to-doubt-object-oriented-programming-1\" target=\"_blank\" rel=\"noopener\">Beginning to Doubt Object-Oriented Programming<\/a>\u00a0(or not&#8230;)<\/li>\n<li><a href=\"http:\/\/dolszewski.com\/architecture\/project-package-organization\/\" target=\"_blank\" rel=\"noopener\">Project Package Organization<\/a>\u00a0&#8211; different approaches, pros and cons<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/3-wise-men-on-tell-dont-ask-1\" target=\"_blank\" rel=\"noopener\">Three Wise Men on Tell, Don&#8217;t Ask<\/a>\u00a0&#8230;and the Single Responsibility Principle and Domain Driven Design<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/07\/capture-embed-protect-ddd\" target=\"_blank\" rel=\"noopener\">Capture &#8211; Embed &#8211; Protect, Guidelines for Domain-Driven Design<\/a><\/li>\n<li><a href=\"https:\/\/www.oreilly.com\/ideas\/eric-freeman-and-elisabeth-robson-on-design-patterns\" target=\"_blank\" rel=\"noopener\">Eric Freeman and Elisabeth Robson on Design Patterns<\/a>\u00a0(podcast with the authors of Head First Design Patterns)<\/li>\n<\/ul>\n<h2>Events<\/h2>\n<p>Nothing for August!<\/p>\n<h2>And Finally<\/h2>\n<p>Everyone at JetBrains has been working really hard on the latest product releases. <a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/intellij-idea-2017-2-is-here-smart-sleek-and-snappy\/\">IntelliJ IDEA 2017.2<\/a> and <a href=\"https:\/\/blog.jetbrains.com\/upsource\/2017\/07\/13\/upsource-2017-2\/\">Upsource 2017.2<\/a> came out in July, so there are a lot of videos and blog posts about the new features in these releases.<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/support-for-java-9-in-intellij-idea-2017-2\/\">Support for Java 9 in IntelliJ IDEA 2017.2<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/debugger-filtering-arrays-collections-in-intellij-idea-2017-2\/\">Debugger: Filtering Arrays &amp; Collections in IntelliJ IDEA 2017.2<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/support-for-junit-5-in-intellij-idea-2017-2\/\">Support for JUnit 5 M4 in IntelliJ IDEA 2017.2<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/loads-of-small-improvements-in-intellij-idea-2017-2\/\">Loads of Small Improvements in IntelliJ IDEA 2017.2<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/database-tools-whats-new-in-intellij-idea-2017-2\/\">Database Tools: What\u2019s New in IntelliJ IDEA 2017.2<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/playlist?list=PLPZy-hmwOdEU6nodWDzqGR9JkKh4SGfGV\" target=\"_blank\" rel=\"noopener\">What&#8217;s\u00a0New in IntelliJ IDEA videos<\/a>\u00a0(Java 9, Spring Boot, VCS)<\/li>\n<li>New\u00a0<a href=\"https:\/\/youtu.be\/lS7E_Vbh9wQ\" target=\"_blank\" rel=\"noopener\">Upsource Overview Video<\/a>, includes features from 2017.2<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/teamcity\/2017\/07\/teamcity-2017-2-eap-is-open\/\">TeamCity 2017.2 EAP is open<\/a><\/li>\n<\/ul>\n<p>And in case you missed it&#8230;<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/git-questions-how-and-when-do-i-merge-or-rebase\/\">Git Questions \u2013 How and When do I Merge or Rebase?<\/a>\u00a0(video and blog post)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/07\/webinar-recording-why-intellij-idea-is-the-premier-ide-for-grails-3\/\">Webinar Recording: Why IntelliJ IDEA is the Premier IDE for Grails 3<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/blog\/2017\/07\/04\/jetbrains-elected-to-the-jcp-executive-committee\/\">JetBrains elected to the JCP Executive Committee<\/a>\u00a0announcement, and\u00a0<a href=\"https:\/\/www.infoq.com\/news\/2017\/07\/jetbrains-elected-to-jcp\" target=\"_blank\" rel=\"noopener\">JetBrains Elected to the JCP Executive Committee, Interview with Trisha Gee<\/a>\u00a0(InfoQ article)<\/li>\n<\/ul>\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Complete this form and get Java Annotated Monthly delivered fresh to your email\" href=\"http:\/\/info.jetbrains.com\/Java-Annotated-Subscription.html\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>Subscribe to Java Annotated<\/a><\/p>\n","protected":false},"author":360,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","categories":[89],"tags":[3140,3236],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25904"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/360"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=25904"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25904\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=25904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=25904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=25904"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=25904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}