{"id":25658,"date":"2017-03-02T15:46:35","date_gmt":"2017-03-02T15:46:35","guid":{"rendered":"https:\/\/blog.jetbrains.com\/idea\/?p=15142"},"modified":"2017-03-03T13:41:29","modified_gmt":"2017-03-03T13:41:29","slug":"java-annotated-monthly-march-2017","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ja\/idea\/2017\/03\/java-annotated-monthly-march-2017","title":{"rendered":"Java Annotated Monthly \u2013 March 2017"},"content":{"rendered":"<p>We&#8217;ve taken on board suggestions from last month&#8217;s experiment and this month we&#8217;re trying to please everyone &#8211; what could possibly go wrong? February is a short month so you might\u00a0expect a shortage of news, but far from it! \u00a0It&#8217;s a big year for releases, with Java 9 and Java EE 8\u00a0on their way, and it&#8217;s never too early to get up to speed on what&#8217;s coming.<\/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>For anyone who doubted whether we&#8217;d ever see Java 9, it&#8217;s finally entering <a href=\"https:\/\/www.infoq.com\/news\/2017\/01\/java9-rampdown-phase-start\" target=\"_blank\" rel=\"noopener\">the First Bug Fixing Round<\/a>. That means it&#8217;s &#8220;complete&#8221; enough that we can more-or-less rely on <a href=\"https:\/\/jdk9.java.net\/\" target=\"_blank\" rel=\"noopener\">which features will be in it<\/a>, and start playing with them &#8211; <a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/02\/intellij-idea-2017-1-public-preview-java-9-debugger-vcs-search-editor-and-many-more\/\">IntelliJ IDEA 2017.1 supports Java 9<\/a>. \u00a0Since Java 9 introduces the Reactive Streams API as part of the language, there is some overlap in conversations around Java 9 and Reactive Programming, a theme <a href=\"https:\/\/qconlondon.com\/london-2017\/presentation\/real-world-java-9\" target=\"_blank\" rel=\"noopener\">I will be presenting on<\/a> next week at QCon London.<\/p>\n<ul>\n<li><a href=\"https:\/\/blogs.oracle.com\/thejavatutorials\/entry\/early_access_documentation_for_oracle\" target=\"_blank\" rel=\"noopener\">Early Access documentation for Oracle JDK 9 has been released<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/Latest-Project-Jigsaw-Usage-Tutorial\" target=\"_blank\" rel=\"noopener\">Programming with Modularity and Project Jigsaw. A Tutorial Using the Latest Early Access Build<\/a><\/li>\n<li><a href=\"https:\/\/blogs.oracle.com\/jtc\/entry\/automating_the_creation_of_jdk9\" target=\"_blank\" rel=\"noopener\">Automating The Creation of JDK9 Reduced Runtime Images in NetBeans<\/a> (or in other IDE of choice!)<\/li>\n<li><a href=\"https:\/\/alidg.me\/blog\/2016\/12\/30\/least-significant-bits-of-java-9\" target=\"_blank\" rel=\"noopener\">The Non-Jigsaw Improvements of Java 9<\/a><\/li>\n<li><a href=\"https:\/\/www.sitepoint.com\/inside-java-9-part-ii\/\" target=\"_blank\" rel=\"noopener\">Inside Java 9 \u2013 Performance, Compiler, and More<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/java9-cldr-ldml\" target=\"_blank\" rel=\"noopener\">Date and Time Formatting in Java 9 Will Get Closer to Unicode Locale Standards<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/java-memory-limit-container\" target=\"_blank\" rel=\"noopener\">Java 9 Will Adjust Memory Limits if Running with Docker<\/a><\/li>\n<\/ul>\n<p>The release is close enough that conversations around current Java includes overlap between features from 8 and 9:<\/p>\n<ul>\n<li><a href=\"https:\/\/dzone.com\/guides\/modern-java\" target=\"_blank\" rel=\"noopener\">DZone&#8217;s Guide to Modern Java<\/a><\/li>\n<li><a href=\"https:\/\/www.voxxed.com\/blog\/2017\/02\/java-9-streams-api\/\" target=\"_blank\" rel=\"noopener\">Java 9 and Streams API<\/a><\/li>\n<\/ul>\n<p>Of course development on the language doesn&#8217;t stop at Java 9, we can get a heads-up on possible features for future releases too:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/01\/java10-lambda-leftovers\" target=\"_blank\" rel=\"noopener\">Java 10 Could Bring Upgraded Lambdas<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/03\/java-epsilon-gc\" target=\"_blank\" rel=\"noopener\">The Last Frontier in Java Performance: Remove the Garbage Collector<\/a><\/li>\n<\/ul>\n<h2>Java In General<\/h2>\n<p>New and interesting is all very well, but it doesn&#8217;t help us in the day job. \u00a0It&#8217;s arguably more important to get better at what we do all the time.<\/p>\n<ul>\n<li><a href=\"https:\/\/blogs.oracle.com\/java-platform-group\/entry\/incoming_filter_serialization_data_a\" target=\"_blank\" rel=\"noopener\">Filter Incoming Serialization Data &#8211; JDK 9 goodness available now in\u00a06, 7 and 8<\/a><\/li>\n<li><a href=\"https:\/\/blogs.oracle.com\/java-platform-group\/entry\/further_updates_to_moving_to\" target=\"_blank\" rel=\"noopener\">Further Updates to &#8216;Moving to a Plugin-Free Web&#8217;<\/a>\u00a0(Applets are basically not supported anywhere any more)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/Deterministic-Execution-JVM\" target=\"_blank\" rel=\"noopener\">Deterministic Execution on the JVM<\/a>\u00a0(in the context of\u00a0blockchain)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-memory-and-cpu-monitoring-tools-and-technique\" target=\"_blank\" rel=\"noopener\">Java Memory and CPU Monitoring Tools and Techniques<\/a><\/li>\n<li><a href=\"http:\/\/blog.takipi.com\/the-surprising-truth-of-java-exceptions-what-is-really-going-on-under-the-hood\/\" target=\"_blank\" rel=\"noopener\">The Surprising Truth of Java Exceptions: What Is REALLY Going on Under the Hood?<\/a><\/li>\n<li><a href=\"https:\/\/zeroturnaround.com\/rebellabs\/jvm-options-cheat-sheet\/\" target=\"_blank\" rel=\"noopener\">JVM Options Cheat Sheet<\/a><\/li>\n<li><a href=\"http:\/\/blog.takipi.com\/java-wish-list-the-top-differences-between-java-scala-groovy-clojure-and-kotlin\/\" target=\"_blank\" rel=\"noopener\">The Top Differences Between Java, Scala, Groovy, Clojure, and Kotlin<\/a><\/li>\n<li><a href=\"http:\/\/blog.eisele.net\/2017\/02\/from-microservices-to-distributed-systems-java.html\" target=\"_blank\" rel=\"noopener\">From Microservices to Distributed Systems &#8211; Survival guide for Java Developers<\/a><\/li>\n<\/ul>\n<p>As usual,\u00a0we&#8217;re still finding out plenty about Java 8 features, including embracing a more functional approach to development:<\/p>\n<ul>\n<li><a href=\"https:\/\/lankydanblog.wordpress.com\/2017\/01\/08\/getting-started-with-javafx\/\" target=\"_blank\" rel=\"noopener\">Making Apps With JavaFX<\/a><\/li>\n<li><a href=\"https:\/\/blog-rmannibucau.rhcloud.com\/#\/post\/java-stream-error-handling\" target=\"_blank\" rel=\"noopener\">Java 8 Streams and error handling?<\/a><\/li>\n<li><a href=\"https:\/\/glenware.wordpress.com\/2017\/02\/05\/how-lambdas-and-anonymous-inner-classesaic-work\/\" target=\"_blank\" rel=\"noopener\">How Lambdas And Anonymous Inner Classes Work<\/a><\/li>\n<li><a href=\"https:\/\/glenware.wordpress.com\/2017\/02\/07\/java-8-streams-cookbook\/?\" target=\"_blank\" rel=\"noopener\">A Java 8 Streams Cookbook<\/a><\/li>\n<li><a href=\"http:\/\/miromannino.com\/blog\/java-8-lambdas-limitations-closures\/\" target=\"_blank\" rel=\"noopener\">Java 8 Lambdas limitations: closures<\/a><\/li>\n<li><a href=\"https:\/\/flyingbytes.github.io\/programming\/java8\/functional\/part1\/2017\/01\/23\/Java8-Part1.html\" target=\"_blank\" rel=\"noopener\">An Introduction to Functional Programming in Java 8: Part 1 &#8211; Functions as Objects<\/a><\/li>\n<li><a href=\"https:\/\/flyingbytes.github.io\/programming\/java8\/functional\/part2\/2017\/02\/04\/Java8-Part2.html\" target=\"_blank\" rel=\"noopener\">An Introduction to Functional Programming in Java 8: Part 2 &#8211; Optionals<\/a><\/li>\n<li><a href=\"https:\/\/www.functionalgeekery.com\/episode-85-trisha-gee\/\" target=\"_blank\" rel=\"noopener\">Functional Programming in Java 8<\/a> (podcast, featuring me talking about how function Java is, or is not)<\/li>\n<\/ul>\n<p>Reactive Programming styles really are here to stay with Java 9, so it&#8217;s worth getting up to speed now:<\/p>\n<ul>\n<li><a href=\"https:\/\/spring.io\/blog\/2016\/04\/19\/understanding-reactive-types\" target=\"_blank\" rel=\"noopener\">Understanding Reactive types<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/rxjava2-by-example\" target=\"_blank\" rel=\"noopener\">RXJava2 by Example<\/a><\/li>\n<li><a href=\"https:\/\/zeroturnaround.com\/rebellabs\/rxjava-for-easy-concurrency-and-backpressure\/\" target=\"_blank\" rel=\"noopener\">RxJava for easy concurrency and backpressure<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/Building-Reactive-Applications-with-Akka\" target=\"_blank\" rel=\"noopener\">Building Reactive Applications with Akka Actors and Java 8<\/a><\/li>\n<\/ul>\n<h2>Enterprise Java<\/h2>\n<p>2016 certainly was an&#8230; <a href=\"http:\/\/blog.payara.fish\/a-curious-case-of-java-ee-2016-recap\" target=\"_blank\" rel=\"noopener\">interesting&#8230; time for\u00a0Java EE<\/a>, leading to a lot of speculation about\u00a0<a href=\"https:\/\/www.infoq.com\/articles\/enterprise-java-opinion\" target=\"_blank\" rel=\"noopener\">the Future of Java in the Enterprise<\/a>. <a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/microprofile-eclipse-foundation\" target=\"_blank\" rel=\"noopener\">Microprofile certainly seems to be gaining momentum<\/a>, but then <a href=\"https:\/\/blogs.oracle.com\/theaquarium\/entry\/java_ee_8_february_recap\" target=\"_blank\" rel=\"noopener\">Java EE 8 is also back on the move<\/a>. \u00a0Exciting times&#8230;<\/p>\n<h2>Android<\/h2>\n<p>This month\u00a0I&#8217;m blatantly showing my preference for\u00a0a focus on automated testing, design principles and self-improvement rather than showcasing any specific frameworks\u00a0or libraries. But I am throwing in RxJava, since this seems to be well-used in the Android space, and I included Reactive Streams in the vanilla Java section.<\/p>\n<ul>\n<li><a href=\"https:\/\/twitter.com\/corey_latislaw\/status\/831624360175603713\" target=\"_blank\" rel=\"noopener\">Want to move into Android? Here\u2019s a set of self guided resources<\/a><\/li>\n<li><a href=\"http:\/\/jeroenmols.com\/blog\/2017\/02\/16\/unittests\/\" target=\"_blank\" rel=\"noopener\">Write awesome unit tests<\/a><\/li>\n<li><a href=\"https:\/\/afterecho.uk\/blog\/your-unit-tests-might-not-be-as-reliable-as-you-thought.html\" target=\"_blank\" rel=\"noopener\">Your Unit tests might not be as reliable as you thought<\/a><\/li>\n<li><a href=\"https:\/\/android.jlelse.eu\/stress-testing-android-apps-601311ebf590#.veendymb8\" target=\"_blank\" rel=\"noopener\">Stress-testing Android apps<\/a><\/li>\n<li><a href=\"http:\/\/tech.trello.com\/sync-architecture\/\" target=\"_blank\" rel=\"noopener\">Airplane Mode: Enabling Trello Mobile Offline<\/a><\/li>\n<li><a href=\"https:\/\/riggaroo.co.za\/android-things-electricity-monitoring-app\/\" target=\"_blank\" rel=\"noopener\">Android Things \u2013 Electricity Monitoring App<\/a><\/li>\n<li><a href=\"https:\/\/www.philosophicalhacker.com\/post\/towards-godless-android-development-how-and-why-i-kill-god-objects\" target=\"_blank\" rel=\"noopener\">Towards Godless Android Development: How and Why I Kill God Objects<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@manuelvicnt\/composite-views-in-android-composition-over-inheritance-4a7114609560#.fzbvm2msx\" target=\"_blank\" rel=\"noopener\">Composite Views in Android: Composition over Inheritance<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@ValCanBuild\/making-rxjava-code-tidier-with-doonsubscribe-and-dofinally-3748f223d32d#.ock4y1h2a\" target=\"_blank\" rel=\"noopener\">Making RxJava code tidier with doOnSubscribe and doFinally<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@scanarch\/how-to-leak-memory-with-subscriptions-in-rxjava-ae0ef01ad361#.fojx693ue\" target=\"_blank\" rel=\"noopener\">How to leak memory with Subscriptions in RxJava<\/a><\/li>\n<\/ul>\n<h2>Design and Architecture<\/h2>\n<p>Yes, we need to stay up to date on technologies and so forth, but understanding architectural patterns and design approaches will be valuable regardless of current trends. Probably. Except the Singleton pattern, you can just go ahead and ignore that.<\/p>\n<ul>\n<li><a href=\"https:\/\/dzone.com\/articles\/gof-design-patterns-using-java-part-1\" target=\"_blank\" rel=\"noopener\">GoF Design Patterns Using Java (Part 1)<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/gof-design-patterns-using-java-02\" target=\"_blank\" rel=\"noopener\">GoF Design Patterns Using Java (Part 2)<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/dead-code\" target=\"_blank\" rel=\"noopener\">Dead code must be removed<\/a>\u00a0(the code is dead, long live the code)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/how-to-avoid-messy-code\" target=\"_blank\" rel=\"noopener\">How to Avoid Messy Code<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/functional-programming-is-not-what-you-probably-th\" target=\"_blank\" rel=\"noopener\">Functional Programming Is Not What You (Probably) Think<\/a>\u00a0(worth understanding probably before following the earlier functional programming links)<\/li>\n<li><a href=\"http:\/\/tidyjava.com\/layered-architecture-good\/\" target=\"_blank\" rel=\"noopener\">Layered Architecture Is Good<\/a><\/li>\n<li>but\u00a0<a href=\"http:\/\/tidyjava.com\/hexagonal-architecture-powerful\/\" target=\"_blank\" rel=\"noopener\">Hexagonal Architecture is Powerful<\/a><\/li>\n<li><a href=\"https:\/\/hackernoon.com\/lesser-known-git-commands-151a1918a60#.4rt6l7njf\" target=\"_blank\" rel=\"noopener\">Lesser known Git commands<\/a>\u00a0(OK fine, not design or architecture, but may be useful and doesn&#8217;t fit into any of the other categories either)<\/li>\n<\/ul>\n<p>It feels like Microservices has <a href=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/d\/d3\/Technology-Adoption-Lifecycle.png\" target=\"_blank\" rel=\"noopener\">crossed the chasm<\/a>\u00a0and we&#8217;re now talking about when and why to use it, not just what it is.\u00a0There&#8217;s a trend of talking about Event Sourcing and Domain Driven Design in this context, familiarity with these topics is important:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/microservices-in-practice\" target=\"_blank\" rel=\"noopener\">Virtual Panel: Microservices in Practice<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/microservices-design-observe\" target=\"_blank\" rel=\"noopener\">The Future of Microservices: Functional Service Design and Observability<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2016\/12\/microservices-events-ddd\" target=\"_blank\" rel=\"noopener\">Start with Events and DDD When Building Microservices<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/patterns-domain-driven-design\" target=\"_blank\" rel=\"noopener\">The Importance of Patterns in DDD<\/a><\/li>\n<\/ul>\n<h2>Events<\/h2>\n<p>JetBrains is going to be at several events this month. Firstly, <a href=\"https:\/\/qconlondon.com\/\" target=\"_blank\" rel=\"noopener\">QCon London<\/a> next week: we&#8217;ll have a booth there (come and say &#8220;Hi&#8221;!), I&#8217;m running the\u00a0<a href=\"https:\/\/qconlondon.com\/london-2017\/track\/java-interesting-stuff-space\" target=\"_blank\" rel=\"noopener\">Java track <\/a>and speaking on it,\u00a0and\u00a0I&#8217;ve outlined\u00a0<a href=\" https:\/\/www.infoq.com\/articles\/qcon-london-paths#java-developer\">an example conference schedule<\/a>\u00a0for Java developers. Secondly, we also have a booth at the very first <a href=\"https:\/\/devoxx.us\/\" target=\"_blank\" rel=\"noopener\">DevoxxUS<\/a>, and I&#8217;ll be presenting on\u00a0<a href=\"http:\/\/cfp.devoxx.us\/2017\/talk\/PPJ-6907\/Anticipating_Java_9_-_Functionality_and_Tooling\" target=\"_blank\" rel=\"noopener\">Java 9 features<\/a> and how they&#8217;re supported in IntelliJ IDEA.<\/p>\n<h2>And Finally<\/h2>\n<ul>\n<li>The <a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/02\/intellij-idea-2017-1-public-preview-java-9-debugger-vcs-search-editor-and-many-more\/\">2017.1 Public Preview is\u00a0available<\/a>, and you can try out the aforementioned Java 9 support.<\/li>\n<li>My <a href=\"https:\/\/youtu.be\/2xOtyGUTpQU\" target=\"_blank\" rel=\"noopener\">Refactoring to Java 8 webinar recording<\/a> is available.<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2017\/03\/kotlin-1-1\/\">Kotlin 1.1 was released<\/a>\u00a0this week, with JavaScript support, coroutines, and more.<\/li>\n<\/ul>\n<h2>Subscribe<\/h2>\n<p style=\"background-color: #f1f6fe; margin-bottom: 40px; padding: 15px; margin-right: 0%; font-size: 18px; line-height: 20px; text-align: justify;\"><a title=\"Subscribe to Java Annotated\" href=\"http:\/\/info.jetbrains.com\/Java-Annotated-Subscription.html\" target=\"_blank\" rel=\"noopener\">Complete this form<\/a> and get Java Annotated Monthly delivered fresh to your email.<\/p>\n","protected":false},"author":360,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","categories":[89],"tags":[2993,3140,3236,492],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25658"}],"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=25658"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25658\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=25658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=25658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=25658"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=25658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}