{"id":25728,"date":"2017-05-05T09:47:14","date_gmt":"2017-05-05T09:47:14","guid":{"rendered":"https:\/\/blog.jetbrains.com\/idea\/?p=15319"},"modified":"2017-05-05T09:47:50","modified_gmt":"2017-05-05T09:47:50","slug":"java-annotated-monthly-may-2017","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ja\/idea\/2017\/05\/java-annotated-monthly-may-2017","title":{"rendered":"Java Annotated Monthly \u2013 May 2017"},"content":{"rendered":"<p style=\"text-align: justify;\">After a few, blissful, drama-free issues, this month we look into the tension between the community and the Stewards of Java (again), this time the topic is Modularity. \u00a0Feedback from the community is always a Good Thing to help improve the platform, but when Jigsaw was due for release with Java 9 in two months it gets a little more&#8230; interesting. Java 9 isn&#8217;t the only news, as usual we&#8217;re covering Java&#8217;s future, linking to blogs and tutorials for\u00a0Java (including Android) code and design, and we&#8217;ve added a whole new section for Java Performance this month.<\/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>Probably the most important news of the month is community concerns around Jigsaw (modularity for Java), the big ticket item for Java 9. \u00a0The first article in this section is a long, in-depth critique of the approach taken by Oracle.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.jboss.org\/blogs\/scott.stark\/2017\/04\/14\/critical-deficiencies-in-jigsawjsr-376-java-platform-module-system-ec-member-concerns\" target=\"_blank\" rel=\"noopener\">Concerns Regarding Jigsaw (JSR-376, Java Platform Module System)<\/a><\/li>\n<li><a href=\"https:\/\/blog.plan99.net\/is-jigsaw-good-or-is-it-wack-ec634d36dd6f\" target=\"_blank\" rel=\"noopener\">Is Jigsaw good or is it wack?<\/a>\u00a0(thoughts on the article above)<\/li>\n<li><a href=\"https:\/\/jaxenter.com\/jigsaw-fragment-java-community-133373.html\" target=\"_blank\" rel=\"noopener\">Will Jigsaw lead to the fragmentation of the Java community?<\/a>\u00a0(short overview of both previous articles)<\/li>\n<li>InfoQ reports this week that <a href=\"https:\/\/www.infoq.com\/news\/2017\/05\/no-jigsaw\" target=\"_blank\" rel=\"noopener\">IBM and Red Hat to Vote &#8220;No&#8221; on Java Modules (Jigsaw)<\/a><\/li>\n<li>For others, the problem is not playing nicely with Maven: <a href=\"https:\/\/www.sitepoint.com\/maven-cannot-generate-module-declaration\/\" target=\"_blank\" rel=\"noopener\">Why Maven Cannot Generate Your Module Declaration<\/a><\/li>\n<\/ul>\n<p>This is an unusual situation for Java, and\u00a0it&#8217;s not clear yet what it means. \u00a0Will Java 9 be pushed back again so it can be amended further? Or will the community prefer to simply get their hands on the solution that&#8217;s been in progress for so long? Voting on <a href=\"https:\/\/www.jcp.org\/en\/jsr\/detail?id=376\" target=\"_blank\" rel=\"noopener\">JSR 376<\/a> (Jigsaw) closes on\u00a08 May so we&#8217;ll keep you updated.<\/p>\n<p>Of course there&#8217;s more Java 9 news and background.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.infoworld.com\/article\/3188454\/java\/the-true-impact-of-modular-java.html\" target=\"_blank\" rel=\"noopener\">The true impact of modular Java<\/a>\u00a0(written less than a month ago, but before\u00a0the above &#8220;concerns&#8221; were published)<\/li>\n<li><a href=\"https:\/\/www.romexsoft.com\/blog\/java-8-vs-java-9\/\" target=\"_blank\" rel=\"noopener\">Java 8 Vs. Java 9: Get Ready for a New Era<\/a> (very business-focused, may be useful to wave at &#8220;management&#8221;. Be aware the content is out of date, e.g. the <a href=\"http:\/\/javamoney.github.io\/api.html\" target=\"_blank\" rel=\"noopener\">Money API<\/a> was pulled out of Java 9 a while ago)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-tutorial-step-by-step-from-zero-to-modules\" target=\"_blank\" rel=\"noopener\">Java 9: Step by Step From Zero to Modules (Part 1)<\/a>\u00a0(but remember you <a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/03\/support-for-java-9-modules-in-intellij-idea-2017-1\/\">don&#8217;t have to do everything from the command line<\/a>)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/java-9-tutorial-part-2-jshell-easy-step-by-step\" target=\"_blank\" rel=\"noopener\">Java 9 (Part 2): JShell Step by Step<\/a>\u00a0(for more help check out the <a href=\"https:\/\/java.net\/downloads\/adoptopenjdk\/REPL_Tutorial.pdf\" target=\"_blank\" rel=\"noopener\">quite old, but very detailed, REPL tutorial<\/a>)<\/li>\n<\/ul>\n<p>Note: if you were previously downloading your Early Access copies of Java 9 from https:\/\/jdk9.java.net\/download\/\u00a0you need to update your bookmarks to\u00a0<a href=\"http:\/\/jdk.java.net\/9\/\" target=\"_blank\" rel=\"noopener\">http:\/\/jdk.java.net\/9\/<\/a><\/p>\n<blockquote class=\"twitter-tweet\" data-lang=\"en\">\n<p dir=\"ltr\" lang=\"en\">PSA: JDK 9 early-access builds are now here: <a href=\"https:\/\/t.co\/ZxHRIfj18j\" target=\"_blank\">https:\/\/t.co\/ZxHRIfj18j<\/a>; Jigsaw builds are here: <a href=\"https:\/\/t.co\/L8tYIskLpM\" target=\"_blank\">https:\/\/t.co\/L8tYIskLpM<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/jdk9?src=hash\" target=\"_blank\" rel=\"noopener\">#jdk9<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/jigsaw?src=hash\" target=\"_blank\" rel=\"noopener\">#jigsaw<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/java?src=hash\" target=\"_blank\" rel=\"noopener\">#java<\/a><\/p>\n<p>\u2014 Mark Reinhold (@mreinhold) <a href=\"https:\/\/twitter.com\/mreinhold\/status\/855526406834470912\" target=\"_blank\" rel=\"noopener\">April 21, 2017<\/a><\/p><\/blockquote>\n<p><script src=\"\/\/platform.twitter.com\/widgets.js\" async=\"\" charset=\"utf-8\"><\/script><\/p>\n<h2>Java\u00a0Future<\/h2>\n<p>News about Java EE 8 has been quiet lately (again), but it&#8217;s not\u00a0due to lack of progress.<\/p>\n<ul>\n<li><a href=\"https:\/\/blogs.oracle.com\/theaquarium\/entry\/java_ee_8_march_recap\" target=\"_blank\" rel=\"noopener\">Java EE 8 &#8211; March recap<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/04\/long-road-for-java-ee-8\" target=\"_blank\" rel=\"noopener\">Light at the End of the Long Tunnel for Java EE 8<\/a>\u00a0(summary of where we are today)<\/li>\n<li><a href=\"https:\/\/www.theregister.co.uk\/2017\/04\/24\/stanford_tests_javascript_in_place_of_java\/\" target=\"_blank\" rel=\"noopener\">Stanford Uni&#8217;s intro to CompSci course adopts JavaScript, bins Java<\/a>\u00a0(hold the\u00a0Java-is-dead hand-wringing,\u00a0it was replaced for intro courses only, still in use for advanced)<\/li>\n<\/ul>\n<h2>Java In General<\/h2>\n<p>A mixed offering of Java-specific but otherwise-difficult-to-classify articles.<\/p>\n<ul>\n<li><a href=\"https:\/\/dzone.com\/articles\/salaries-and-job-offerings-categorized-by-programm\" target=\"_blank\" rel=\"noopener\">Salaries and Job Offerings Categorized by Programming Language<\/a>\u00a0(spoiler: Java is about what you&#8217;d expect)<\/li>\n<li><a href=\"https:\/\/zeroturnaround.com\/rebellabs\/maven-cheat-sheet\" target=\"_blank\" rel=\"noopener\">Maven cheat sheet<\/a>\u00a0(note: we&#8217;ve also just updated our <a href=\"https:\/\/youtu.be\/pt3uB0sd5kY\" target=\"_blank\" rel=\"noopener\">Working with Maven in IntelliJ IDEA video<\/a>)<\/li>\n<li><a href=\"http:\/\/marxsoftware.blogspot.com.es\/2017\/04\/stringbuffer-implications.html\" target=\"_blank\" rel=\"noopener\">Implications of the Presence of StringBuffer<\/a><\/li>\n<li><a href=\"http:\/\/www.codeguru.com\/java\/article.php\/c14463\/Compile-Time-Dynamism-Using-Java-Generics.htm\" target=\"_blank\" rel=\"noopener\">Compile Time Dynamism Using Java Generics<\/a><\/li>\n<li><a href=\"https:\/\/www.sitepoint.com\/which-java-logging-framework-has-the-best-performance\/\" target=\"_blank\" rel=\"noopener\">Which Java Logging Framework Has the Best Performance?<\/a><\/li>\n<li><a href=\"http:\/\/marxsoftware.blogspot.com.es\/2017\/04\/how-to-effectively-sweep-problems-under.html\" target=\"_blank\" rel=\"noopener\">How to Effectively Sweep Problems Under the Rug in Java<\/a><\/li>\n<\/ul>\n<h2>Android<\/h2>\n<p>Android O continues to be a big talking point, and as usual we throw in a bunch of articles on good practice which may be applicable to all Java developers.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/03\/android-o\" target=\"_blank\" rel=\"noopener\">Android O: Notification Channels, Background Limits, PIP and More<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@ianhlake\/hidden-gems-of-android-o-7def63136629\" target=\"_blank\" rel=\"noopener\">Hidden Gems of Android O<\/a><\/li>\n<li><a href=\"https:\/\/commonsware.com\/blog\/2017\/04\/11\/android-o-implicit-broadcast-ban.html\" target=\"_blank\" rel=\"noopener\">Android O and the Implicit Broadcast Ban<\/a><a href=\"https:\/\/www.philosophicalhacker.com\/post\/test-driving-away-coupling-in-activities\/\" target=\"_blank\" rel=\"noopener\">\u00a0(sounds like a Harry Potter book)|<\/a><\/li>\n<li><a href=\"https:\/\/www.philosophicalhacker.com\/post\/test-driving-away-coupling-in-activities\/\" target=\"_blank\" rel=\"noopener\">Test Driving away Coupling in Activities<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/@JasonWyatt\/squeezing-performance-from-sqlite-insertions-971aff98eef2\" target=\"_blank\" rel=\"noopener\">Squeezing Performance from SQLite: Insertions<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/02\/android-things-dev-preview-2\" target=\"_blank\" rel=\"noopener\">Android Things Brings TensorFlow-Based Machine Learning and Computer Vision to IoT Devices<\/a><\/li>\n<li><a href=\"https:\/\/android.jlelse.eu\/dont-put-view-null-checks-in-your-presenters-4b6026c67423\" target=\"_blank\" rel=\"noopener\">Don\u2019t put view != null checks in your Presenters<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/google-developer-experts\/finally-understanding-how-references-work-in-android-and-java-26a0d9c92f83\" target=\"_blank\" rel=\"noopener\">Finally understanding how references work in Android and Java<\/a><\/li>\n<\/ul>\n<h2>Design and Architecture<\/h2>\n<p>This month we have a mix of OO design patterns, approaches like Domain Driven Design and Test Driven Design, and take a look at a critique of OO, to understand not only its strengths but its weaknesses.<\/p>\n<ul>\n<li><a href=\"http:\/\/harmful.cat-v.org\/software\/OO_programming\/why_oo_sucks\" target=\"_blank\" rel=\"noopener\">Why OO Sucks by Joe Armstrong<\/a> (worth reading to\u00a0be reminded of differences in approaches to design)<\/li>\n<li><a href=\"https:\/\/zeroturnaround.com\/webframeworksindex\" target=\"_blank\" rel=\"noopener\">ZeroTurnaround&#8217;s Java Web Frameworks Index<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/04\/tornhill-prioritise-tech-debt\" target=\"_blank\" rel=\"noopener\">A Crystal Ball to Prioritise Technical Debt in Monoliths or Microservices<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2017\/04\/new-distributed-primitives-developers.html\" target=\"_blank\" rel=\"noopener\">New Distributed Primitives for Developers<\/a> (or: how containers have change the way a developer thinks)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2017\/03\/does-tdd-harm-architecture\" target=\"_blank\" rel=\"noopener\">Does TDD Harm Architecture?<\/a> (spoiler: not if you do it right, apparently)<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/why-should-i-write-getters-and-setters\" target=\"_blank\" rel=\"noopener\">Why Should I Write Getters and Setters?<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/domain-color-modeling\" target=\"_blank\" rel=\"noopener\">Domain Analysis by Color Modeling<\/a><\/li>\n<li><a href=\"http:\/\/tidyjava.com\/aggregate-pattern\/\" target=\"_blank\" rel=\"noopener\">Aggregate Pattern<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/factory-method-vs-simple-factory-1\" target=\"_blank\" rel=\"noopener\">Factory Method vs. Simple Factory<\/a>\u00a0(patterns are well and good, but it&#8217;s better to understand how to <a href=\"https:\/\/refactoring.com\/catalog\/replaceConstructorWithFactoryMethod.html\" target=\"_blank\" rel=\"noopener\">refactor to use them<\/a>)<\/li>\n<li><a href=\"https:\/\/hackernoon.com\/oo-tricks-the-art-of-command-query-separation-9343e50a3de0\" target=\"_blank\" rel=\"noopener\">Object Oriented Tricks: #1 The Art of Command Query Separation<\/a>\u00a0(see also: <a href=\"https:\/\/refactoring.com\/catalog\/separateQueryFromModifier.html\" target=\"_blank\" rel=\"noopener\">Refactoring &#8211; Separate Query from Modifier<\/a>)<\/li>\n<li><a href=\"https:\/\/hackernoon.com\/object-oriented-tricks-2-law-of-demeter-4ecc9becad85\" target=\"_blank\" rel=\"noopener\">Object Oriented Tricks: #2 Law of Demeter<\/a><\/li>\n<\/ul>\n<h2>Performance<\/h2>\n<p>It&#8217;s harder to find the time to watch presentations\u00a0than to skim documents, but QCon London had some great presentations on performance that have just been published and well worth a look:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/asynchronous-vs-synchronous\" target=\"_blank\" rel=\"noopener\">Async or Bust!? &#8211;\u00a0Todd Montgomery<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/performance-managed-languages\" target=\"_blank\" rel=\"noopener\">High Performance Managed Languages &#8211; Martin Thompson<\/a>\u00a0(or: when is Java better than C\/C++)\u00a0(video)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/cd-performance-testing\" target=\"_blank\" rel=\"noopener\">Continuous Performance Testing &#8211; Mark Price<\/a>\u00a0\u00a0(video)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/latency-sensitive-microservices\" target=\"_blank\" rel=\"noopener\">Latency Sensitive Microservices &#8211;\u00a0Peter Lawrey<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/java-performance-testing\" target=\"_blank\" rel=\"noopener\">Performance Testing in Java &#8211;\u00a0Ix-chel Ruiz &amp; Andres Almiray<\/a>\u00a0(video)<\/li>\n<li><a href=\"https:\/\/www.infoq.com\/articles\/GC-Log-Uncovers-Pause\" target=\"_blank\" rel=\"noopener\">Want to Know What\u2019s in a GC Pause? Go Look at the GC Log<\/a> (article)<\/li>\n<\/ul>\n<h2>Events<\/h2>\n<p>JetBrains is going to be at a number of events in May. Come and say hello, ask us questions or give feedback at our booth:<\/p>\n<ul>\n<li>10-11 May: <a href=\"https:\/\/conferences.oreilly.com\/oscon\/oscon-tx\" target=\"_blank\" rel=\"noopener\">OSCON, Austin<\/a>\u00a0(no booth, <a href=\"http:\/\/hadihariri.com\/\" target=\"_blank\" rel=\"noopener\">Hadi Hariri<\/a> is giving a <a href=\"https:\/\/conferences.oreilly.com\/oscon\/oscon-tx\/public\/schedule\/detail\/57604\" target=\"_blank\" rel=\"noopener\">workshop on Kotlin<\/a>)<\/li>\n<li>11-12 May: <a href=\"http:\/\/www.devoxx.co.uk\/\" target=\"_blank\" rel=\"noopener\">DevoxxUK, London<\/a> (no booth, <a href=\"https:\/\/blog.jetbrains.com\/idea\/author\/trishagee\/\">Trisha Gee<\/a> is presenting a <a href=\"http:\/\/cfp.devoxx.co.uk\/2017\/talk\/JPZ-5869\/Don&#039;t_just_Embrace_Change,_Create_Change\" target=\"_blank\" rel=\"noopener\">BoF<\/a> and a <a href=\"http:\/\/cfp.devoxx.co.uk\/2017\/talk\/UOG-8968\/Real_World_Java_9\" target=\"_blank\" rel=\"noopener\">talk<\/a>)<\/li>\n<li>15-19 May: <a href=\"http:\/\/sddconf.com\/agenda\/\" target=\"_blank\" rel=\"noopener\">SDD London<\/a> (no booth, <a href=\"http:\/\/sddconf.com\/agenda\/#ag615\" target=\"_blank\" rel=\"noopener\">Hadi is presenting<\/a>)<\/li>\n<li>17 May: <a href=\"http:\/\/www.oracle.co.jp\/events\/javaday\/2017\/\" target=\"_blank\" rel=\"noopener\">Java Day, Tokyo<\/a><\/li>\n<li>17-19 May: <a href=\"https:\/\/2017.geecon.org\/\" target=\"_blank\" rel=\"noopener\">GeeCon, Krakow<\/a><\/li>\n<li>17-19 May: <a href=\"https:\/\/jonthebeach.com\/\" target=\"_blank\" rel=\"noopener\">J on the Beach, Malaga<\/a>\u00a0(no booth, <a href=\"https:\/\/jonthebeach.com\/schedule\" target=\"_blank\" rel=\"noopener\">Trisha is presenting<\/a>)<\/li>\n<li>18-19 May: <a href=\"http:\/\/www.oracle.co.jp\/events\/javaday\/2017\/\" target=\"_blank\" rel=\"noopener\">Spring I\/O, Barcelona<\/a><\/li>\n<li>30 May &#8211; 2 June: <a href=\"http:\/\/event.scaladays.org\/scaladays-cph-2017\" target=\"_blank\" rel=\"noopener\">Scala Days, Copenhagen<\/a><\/li>\n<\/ul>\n<h2>And Finally<\/h2>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/04\/intellij-idea-2017-1-2-update-is-available\/\">IntelliJ IDEA 2017.1.2 update is available<\/a><\/li>\n<li>Which means the\u00a0<a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/04\/intellij-idea-2017-1-3-eap-is-open\/\">2017.1.3 EAP is open<\/a>, but more excitingly&#8230;<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2017\/05\/intellij-idea-2017-2-eap-is-here\/\">The 2017.2 EAP is here<\/a>!<\/li>\n<li>Most of the readers of\u00a0Java Annotated won&#8217;t need this, but the <a href=\"https:\/\/youtu.be\/c0efB_CKOYo\" target=\"_blank\" rel=\"noopener\">Running IntelliJ IDEA for the First Time<\/a> video tutorial has been updated, feel free to share.<\/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":[3140,3236,3264],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25728"}],"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=25728"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/idea\/25728\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=25728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=25728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=25728"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=25728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}