guide to the java ecosystem

Upload: hfhernandezf

Post on 21-Feb-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Guide to the java ecosystem

    1/37

    THE DZONE GUIDE TO

    2015 EDITION

    THE JAVA

    ECOSYSTEM

    BROUGHT TO YOU IN PARTNERSHIP WITH

  • 7/24/2019 Guide to the java ecosystem

    2/372

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    TABLE OF CONTENTS

    20 yearsa lieime or a programming language, never

    mind a whole platorm. This year, we celebrate Javas

    20th birthday, and what better way to celebrate than to

    release DZonesfirstGuide to the Java Ecosystem.

    I can sill remember the 10THJavaOne. There was

    energy and a belie that Java would ulfill its mission

    to give developers a true chance to Write Once,

    Run Anywhere. All this while Sun Microsystems

    struggled to find a place in the market amid a changing

    economy and a rapidly evolving Internet. Today, Java is

    everywhere, and it is the workhorse o enterprises and

    independent developers alike. It is open. It is more than

    just a language. And ater all this ime, Java remains the

    most popular language or developers (Tiobe) and one o

    the most acive or job hunters (Indeed.com).

    Long beore DZone.com, we started Javalobby.org: an

    independent group o Java developers eager to talk

    about this new language that didnt require memory

    management and had the backing o some powerul

    organizaions. Weve evolved our vision o Javalobby

    over the years (now our Java topic portal), but it remains

    one o the largest secions o our site and one o the

    primary desinaions or Java developers on the web. Its

    because o Javas role in the very oundaion o DZone

    that finding the right itle and ocus or this guide was

    one o the hardest decisions our editorial team has had

    to make this year.

    This guide, which youre hopeully enjoying today,

    ocuses on trying to understand the trends about how

    developers such as yoursel are using the Java platorm.

    What version o the platorm are you using? Are you

    using a ull JEE stack or just using simpler tools like

    Spring? What percentage o developers preer Tomcat

    over Websphere? Staisics like thesealong with

    expert analysis and aricles rom industry leaders

    await you in the 2015 Guide to the Java Ecosystem.

    Thanks, as always, or your support, and pleaseconinue to visit DZone.comdaily.

    P.S. Were always hiringget in touch i youd like to

    help build the platorm that powers DZone.com and

    communiies or LinkedIn, Microsot, and a variety o

    other organizaions.

    MATT SCHMIDTPRESIDENT AND CTO

    [email protected]

    EXECUTIVE SUMMARY

    KEY RESEARCH FINDINGS

    WHY JAVA 8?BY TRISHA GEE

    DIVING DEEPER INTO THE JAVA ECOSYSTEM

    FIRST STEPS IN JAVA MICROSERVICESBY IVAR GRIMSTAD

    PRODUCTION DEBUGGING IS NOT A CRIMEBY ALEX ZHITNITSKY

    JAVA POPULARITY: BY THE NUMBERSINFOGRAPHIC

    REACTIVE TRENDS ON THE JVMBY JONAS BONR

    JAVA ECOSYSTEM EXECUTIVE INSIGHTSBY TOM SMITH

    THE POWER, PATTERNS, AND PAINS OF MICROSERVICESBY JOSH LONG

    JAVA BEST PRACTICES CHECKLIST

    SOLUTIONS DIRECTORY

    DIVING DEEPER INTO FEATURED JAVA ECOSYSTEMSOLUTIONS

    GLOSSARY

    3

    4

    6

    9

    12

    16

    18

    20

    24

    28

    32

    33

    36

    37

    EDITORIALJohn [email protected]

    G. Ryan SpainDIRECTOR OF PUBLICATIONS

    Mitch PronschinskeSR. RESEARCH ANALYST

    Matt WernerMARKET RESEARCHER

    Moe LongMARKET RESEARCHER

    John WalterEDITOR

    Allen CoinEDITOR

    Tom SmithRESEARCH ANALYST

    BUSINESSRick RossCEO

    Matt SchmidtPRESIDENT & CTO

    Kellet AtkinsonVP & PUBL ISH ER

    Matt OBrianDIRECTOR OF BUSINESS

    DEVELOPMENT

    Jane ForemanVP OF MARKET ING

    Alex [email protected] OF MAJOR

    ACC OUN TS

    Chelsea BosworthMARKETING ASSOCIATE

    Chris SmithPRODUCTION ADVISOR

    Jim HowardSALES ASSOCIATE

    Chris Brumfeld

    CUSTOMER SUCCESS

    ASSOC IATE

    ARTAshley SlateDESIGN DIRECTOR

    Yassee MohebbiGRAPHIC DESIGNER

    Special thanks to our texperts Paul Bakker, Reza

    Rahman, Markus Eisele, A

    Gupta, Josh Long, Ivan StIvanov, Marcus Lagergren

    and our trusted DZone Mo

    Valuable Bloggers for all t

    help and feedback in mak

    this report a great succes

    WANT YOUR SOLUTION TO BE FEATURED IN COMING GUIDES?Please [email protected] submission information.

    LIKE TO CONTRIBUTE CONTENT TO COMING GUIDES?Please contact [email protected] consideration.

    INTERESTEDIN BECOMING ADZONE RESEARCH PARTNER?Please contact [email protected] information.

    Dear Reader,

    http://www.dzone.com/guideshttp://dzone.com/http://dzone.com/mailto:?subject=research%40dzone.commailto:research%40dzone.com?subject=mailto:sales%40dzone.com?subject=mailto:research%40dzone.com?subject=mailto:research%40dzone.com?subject=mailto:research%40dzone.com?subject=mailto:?subject=sales%40dzone.commailto:?subject=sales%40dzone.commailto:?subject=sales%40dzone.commailto:?subject=sales%40dzone.commailto:?subject=sales%40dzone.commailto:?subject=sales%40dzone.commailto:?subject=research%40dzone.commailto:[email protected]:research%40dzone.com?subject=mailto:research%40dzone.com?subject=mailto:sales%40dzone.com?subject=mailto:research%40dzone.com?subject=http://dzone.com/http://dzone.com/http://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    3/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZone surveyed more than 600 IT proessionals and

    produced several expert aricles or our 2015 Guide to

    the Java Ecosystem to give Java organizaions greater

    insight into the eects o major trends on the larger Java

    development community and to discover common patterns

    and technology stacks currently in use across the Java

    industry. In this summary you will learn about the current

    state o the Java platorm and the ecosystem o tooling

    around the Java language.

    RESEARCH TAKEAWAYS

    01 DEVELOPERS ARE MOVING TO NEW VERSIONS OF

    JAVA MORE QUICKLY

    Data: 53% o respondents say they their new apps will useJava 8 in the next six months and 35% are going to startconvering exising apps to Java 8 in that same ime rame. 62%o respondents said their exising apps are in Java 7 and 20%already have exising apps in Java 8.

    Implicaions: A slight majority o Java organizaions seem to be

    moving to the latest version o Java or new applicaions. Thisshows a bit more orward movement in the Java community thanthere has been in years past. Large swaths o Java companieshave sizable legacy codebases due to their organizaions ageand the constant progression o the language, which has letsome o them behind. There will always be a large number oorganizaions where there isnt enough risk or enough resourcesto moivate an update to their legacy code, but its surprising tosee significant numbers o Java companies moving their apps tothe newest version.

    Recommendaions: The act that Oracle has declared Java SE7 end-o-lie is a significant contributor to this trend towardsaster migraion. To maintain a high level o security and takeadvantage o new language eatures that other programminglanguages have had or a long ime, migraion to the latest versionJava is always the best opion i an organizaion can aord it.Trisha Gees aricle in this guide, Why Java 8? illustrates theposiive impact Java 8 can have on your applicaions. Somekey things enicing developers toward Java 8 are uncionalprogramming eatures and perormance improvements.

    02 INTEREST IN CONTAINERS & MICROSERVICES IS

    GROWING IN THE JAVA WORLD

    Data: While nearly hal o respondents havent researchedcontainers or microservices enough to comment on them (43%

    or microservices, 46% or containers), 21% want to implement

    containers (12% already have) and 15% want to implement

    microservices (10% already have). There are more respondents

    interested in containersor actually using themthan

    those that arent (12% not interested) and the same goes or

    microservices (20% not interested).

    Implicaions: These trends have made a significant impact in

    the Java community over the last 2-3 years, but it will sill take

    several more years or containers or microservices to obtain

    mainstream adopion in most o the organizaions where they

    can be beneficial. However, many o the most successul web

    properies menioned previously (Google, Net lix, Twitter, etc.)

    have already implemented containers and microservices where

    appropriate. These companies are driving trends by sharing

    some o their implementaions.

    Recommendaions: Developers, architects, and business

    execuives need to start researching the potenial benefits that

    containers and microservices bring to their applicaions. Some

    may decide that they are not appropriate or mature enough or

    their systems, but more definiive research must be done so that

    a decision can be made. Several technologies have already moved

    to support microservicessuch as Spring Boot, Wildly Swarm,and Akka. Docker already has a dominant posiion in the

    containerizaion space. A good place to start researching Docker

    is by reading Docker and Kubernetes in the Java Ecosystem by

    Paul Bakker on DZone. For building microservices in the Java

    ecosystem, you should read Ivar Grimstads aricle in this guide,

    Building Microservices With Java.

    03 JAVA IS ONE OF THE MOST POPULAR PROGRAMMING

    LANGUAGES

    Data: There are several indexes in tech media that use various

    metrics to measure programming language popularity, including

    TIOBE, RedMonk, and IEEE. Java is ranked #1 or #2 in all othese major indexes. No other language has rankings that are as

    consistently high as Javas across all these indices. On the TIOBE

    index, one o the longest running indices, Java has been the number

    one language or 11 o the last 14 years, and it is currently number

    one by a significant margin. Only 3% o respondents in our Java

    ecosystem survey said they are pessimisic about the uture o Java.

    Recommendaions: Java has reached a point where its

    popularity results in urther popularity. More developers are

    using it, more open-source uiliies exist around it, and there

    is more maturity and reliability around the platorm and its

    ecosystem o tools. As a result, even more organizaions and

    developers choose to build applicaions in Java.

    Recommendaions: While many thought Java would decline ater

    the announcement o Oracles acquisiion o Sun Microsystems

    in 2009, it only took a ew years to reestablish itsel. Now with the

    release o Java 8, Java is finally catching up with the expressiveness

    o C# and now has the ability to be written with less verbosity than

    ever beore. People are now opimisic about the uture o Java, and

    its being used in many o the most well-respected tech companies.

    Its popularity in the sotware industry is expected to coninue

    and even grow urther due to its advantages in data analysis and

    embedded systems, which will likely make Java a significant

    programming language in the Internet o Things industry.

    ExecutiveSummary

    http://www.dzone.com/guideshttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    4/374

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    01. MOST DEVELOPERS ARE KEEPING UP FAIRLY

    WELL WITH NEW JAVA VERSIONSA majority o respondents (58%) said their organizaion was

    using Java 8the latest version o Javain at least some

    o their new applicaions. 48% said some o their new apps

    would be built on Java 7. Only 10% o respondents indicated

    the use o Java 6 or below or any new apps, and a minuscule

    1% said new apps would use Java 5 or lower. As ar as exising

    apps are concerned, Java 8 has not caught up to Java 7; most

    organizaions (62%) sill have apps built on Java 7, and almost

    hal (47%) have apps in Java 6. Only 20% o respondents said

    they had any exising apps built on Java 8. While this data

    shows that many developers are eager to move orward

    with Java as it evolves, they are hesitant to reactor exising

    applicaions already built on a previous platorm. 18% o Java 7

    users who have not moved to Java 8 have no plans to start usingJava 8 in the next 6 months, or either new or exising apps.

    02. JAVA EE AND SPRING USAGE IS ALMOST EQUALOne o the significant rits in the Enterprise Java community

    is the dierence between organizaions that use Spring and

    those that use Java EE. Our survey shows that the usage o some

    components o the two platorms is pretty close, with Java EE

    having a slight edge. Overall, 58% use some version o Spring

    and 67% use some version o Java EE. Very ew respondents used

    Java EE 5 or lower, or Spring 2.x or lower. The breakdown o each

    versions usage can be ound in the charts, but whats interesing

    is that almost one-third (32%) o respondents use both.

    03. JVM LANGUAGES HAVE A STRONG SHARE OF JAVA

    DEVELOPERS57% o respondents have written code in a non-Java, JVM-

    based language. Groovy (40% o al l respondents) is the

    language that most have tried, with Scala (31%) close behind.

    The next highest languages were JRuby and Clojure, which

    were both around 6%. For each o the groups who had

    tried a specific JVM language, over 80% said they enjoyed

    using it. Only Groovy and Scala had large enough groups o

    users to make a staisically significant observaion about

    user opinions. When asked i they would li ke to use these

    languages at their job, 45% o Groovy users said they would,and 55% o Scala users said they would.

    04. CERTAIN TOOLS DOMINATE IN MOST AREAS OF

    THE JAVA ECOSYSTEMWe asked respondents what their primaryIDE, build tools,and CI engines were. For IDEs, Eclipse is sill king with 54% orespondents using it. 30% use IntelliJ IDEA (most respondents[23%] actually use the paid version, with only 7% using thecommunity ediion). 13% use NetBeans. For build tools, Maven

    KeyResearchFindings

    02. WHICH OF THE FOLLOWING JAVA PLATFORMS DO YOU USE?01.WHAT VERSIONS OF JAVA ARE BEING USED AT YOUR ORGANIZATION?

    More than 600 IT professionals respondedto DZones 2015 Java Ecosystem Survey.Here are the demographics for this survey:

    Developers (42%) and Development Leads (25%) were

    the most common roles.

    63% of respondents come from large organizations

    (100 or more employees) and 37% come from small

    organizations (under 100 employees).

    The majority of respondents are headquartered in

    Europe (44%) or the US (32%).

    Over half of the respondents (61%) have over 10 years

    of experience as IT professionals.

    We only surveyed developers who use Java in their

    organization. Other language ecosystems for these

    organizations include C# (31%), C/C++ (29%),

    Universal JavaScript (28%), PHP (26%), Python(26%), and Groovy (23%).

    Java 5 or lower

    Java 6

    Java 7

    Java 8

    VERSION

    1%

    10%

    48%

    58%

    11%

    47%

    62%

    20%

    FOR NEW APPS FOR EXISTING APPS

    JAVA EE 6

    JAVA EE 7

    SPRING 3.X

    SPRING 4.X

    39%

    36%

    38%

    34%

    JAVA EE SPRING32%

    http://www.dzone.com/guideshttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    5/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    (66%) is much more popular than other compeitors like Ant(18%) and Gradle (11%). Jenkins absolutely dominates the CIspace, with 62% using it. The next highest CI server has lessthan 10% share o respondents. 20% dont use a CI server. Wealso asked respondents to list all t he Java persistence toolsthey use and ound that standard JPA/Hibernate is the mostcommon persistence soluion or Java developers (64%), whilea ew others preer JDBCeither standard (38%) or SpringJdbcTemplate (24%) versions.

    05. JSF AND SPRING MVC ARE NECK-AND-NECK IN

    THE JAVA WEB FRAMEWORKS RACEThe Java web ramework battle is much closer than thepreviously menioned tooling compeiions. In an August 2015poll, DZone surveyed over 1,300 developers, and the resultsshowed Spring MVC (34.2%) and Java Server Faces (34.5%) ina virtual ie. However, more Java developers are looking orront-end development tools outside o the Java ecosystem.When asked in the 2015 Java Ecosystem Surveyabout the toolsthey use or applicaion ront-ends, respondents actuallychose AngularJS (43%) more than Spring MVC (34%) and JSF(30%). All o Angulars direct compeitorsReact.js, Ember.js,Backbone.jswere under 10%.

    06. FULL JEE APP SERVERS ARE NOT COMMONLightweight applicaion servers like Tomcat (68%) and Jetty(27%) have been dominant in Java development or someime. For several years, the trend in Java development hasbeen moving toward the use o only the components that youneed, and JEE eatures in applicaion servers are no excepion[1]. We also ound that most o these app servers are used indevelopment more oten than they are used in producion.Only WebLogic and WebSphere were deployed in producionmore oten than development.

    07.JAVA DEVS SLOWLY ADOPTING CLOUD, BUTMICROSERVICES AND CONTAINERS ARE FURTHER OFF

    The adopion o cloud inrastructure is sil l modest in Javaorganizaions, with only 37% r unning some percentage o

    their applicaions on the cloud during the development phase.

    43% ran some percentage o their tests/QA on the cloud, and

    42% are using some cloud inrastructure in their producion

    environment. When we asked about more recent development

    trends like microser vices and containers, only 10% were

    using microservices and only 12% were using containers

    (specifically, 9% were using Docker). Most respondents haven

    researched these two trends enough to even think about

    using them (43% or microservices, 46% or containers), and

    some dont see a use or them currently or or the oreseeableuture (20% or microservices, 12% or containers). However,

    the interest in these two trends is significant with 15%

    waning to implement microservices and 21% waning to

    implement Docker containers.

    08. NEWER SERVER TECHNOLOGIES ARE STILL

    BLEEDING-EDGE AND RAREWe asked respondents about the server technologies they

    were using, and while most were sil l using Java EE or Spring

    primarily, we ound small groups using some o the newer

    server technologies in the Java space. 11% said they are using

    a containerless method with Spring Boot and Dropwizard.

    However, Spring Boot and Dropwizard are used or more

    than just containerless deployment, so its definitely not an

    indicator o the two products overall popularity. 9% said they

    are using Scala and Akka, and 2% are using Vert.x.

    [1] bit.ly/1NYf7v

    04. WHICH APP SERVER(S) DO YOU USE?

    05. WHICH OF THE FOLLOWING SERVER TECHNOLOGIES DO YOU USE?

    03. WHAT FRAMEWORKS DO YOU USE FOR WEB APPLICATIONS?

    TOMCAT

    WILDFLY/JBOSS

    JETTY

    WEBLOGIC

    GLASSFISH/PAYARA

    WEBSPHERE

    NONE

    TOMEE

    68%

    35%

    27%

    18%

    15%

    15%

    6%

    5%

    use a containerless method

    with Spring Boot/Dropwizard

    useScala/Akka

    use Vert.x

    STRUTS

    JSF

    SPRING MVC

    SERVER SIDE

    CLIENT SIDE

    ANGULARJS

    BACKBONEJS EMBERJSREACTJS

    43%

    34%

    30%

    16%

    8%8% 6%

    http://www.dzone.com/guideshttp://bit.ly/1NYfj7vhttp://bit.ly/1NYfj7vhttp://bit.ly/1NYfj7vhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    6/376

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    WhyJava 8?

    BY TRISHA GEE

    Java 8 came out early last yearand

    Java 7 is now end of lifemaking Java

    8 the only Oracle-supported opion unil

    Java 9 comes out at the end of next year.

    However, since organizaions value

    stability over trendiness, many of us aresill working with Java 7, or even 6.

    Lets look at some features of Java 8, and

    provide some arguments to persuade your

    organizaion to upgrade.

    ITS FASTER

    Heres a selling point that might please your boss, the

    business, or the operaions guys: youll probably findJava 8 runs your applicaion aster. Generally speaking,

    applicaions that have moved to Java 8 see some sort o speed

    improvement without any specific work or tuning. This may

    not apply to an applicaion that has been highly tuned to a

    specific JVM, but there are a number o reasons why Java 8

    perorms better:

    Performance Improvements in Common Data Structures:

    Benchmarks o the ever-popular HashMapshow that

    perormance is better in Java 8. These sorts o improvements

    are very compellingyou dont need to learn the new

    Streams API or lambda syntax or even change your exising

    code to get speed improvements in your applicaion.

    Garbage Collector Improvements: Oten Java Perormance

    is synonymous with Garbage Collecion, and it is certainly

    true that poor garbage collecion perormance will impact an

    applicaions perormance. Java 8 has substanial changes to

    GC that improve perormance and simpliy tuning. The most

    well-known o these changes is the removal o PermGen andthe introducion o Metaspace.

    Fork/Join Speed Improvements: The ork/join ramework

    was new in Java 7, and was the latest eort to simpliy

    concurrent programming using the JVM. A lot o work

    went into improving it urther or Java 8. Fork/join is now

    the ramework thats used under the covers or parallel

    operaions in the Streams API(more on this later).

    In addiion, there are plenty more changes in Java 8 to

    support concurrency, and Oracle has summarized some o

    the perormance improvements in JDK 8.

    FEWER LINES OF CODE

    Java is regularly accused o being heavy on boilerplate code.

    Java 8 addresses some o these issues by embracing a more

    uncional style or the new APIs, ocusing on what you want

    to achieve and not howto do it.

    LAMBDA EXPRESSIONS

    Lambda expressionsin Java 8 are not just syntacic sugar

    over Javas exising anonymous inner classesthe pre-

    QUICK VIEW

    01In many cases, Java 8 will improve

    application performance without any

    specific work or tuning.

    02Lambda expressions, the StreamsAPI, and new methods on existing

    classes are some of the key productivity

    improvements.

    03Java 8s new Optionaltype gives

    developers significant flexibility when

    dealing with null values, reducing the

    likelihood ofNullPointerExceptions

    http://www.dzone.com/guideshttps://www.java.com/en/download/faq/java_7.xmlhttps://dzone.com/articles/hashmap-performancehttps://dzone.com/articles/java-8-permgen-metaspacehttps://dzone.com/articles/java-8-permgen-metaspacehttps://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.htmlhttps://dzone.com/articles/java-7-vs-java-8-performancehttp://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.htmlhttp://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.htmlhttp://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.htmlhttps://blogs.oracle.com/thejavatutorials/entry/learn_more_about_performance_andhttps://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.htmlhttps://blogs.oracle.com/thejavatutorials/entry/learn_more_about_performance_andhttp://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.htmlhttp://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.htmlhttp://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.htmlhttps://dzone.com/articles/java-7-vs-java-8-performancehttps://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.htmlhttps://dzone.com/articles/java-8-permgen-metaspacehttps://dzone.com/articles/java-8-permgen-metaspacehttps://dzone.com/articles/hashmap-performancehttps://www.java.com/en/download/faq/java_7.xmlhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    7/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    Java 8 method o passing behavior around. Lambdas take

    advantage o Java 7s under-the-hood changes, so they

    perorm well. To see examples o where using lambda

    expressions can simpliy your code, read on.

    NEW METHODS ON OUR FAVORITE COLLECTIONS

    While Lambdas and Streams (which well cover next) are

    probably the top two selling points o Java 8, whats less well-

    known is that changes in Java 8have allowed the language

    developers to add new methods to exising classes without

    compromising backwards compaibility. The result is that

    the new methods, combined with lambda expressions, allow

    us to drasically simpliy our code. Take, or example, the

    common case o figuring out i an element already exists in

    a Mapand creaing a new one i not. Beore Java 8, you might

    write something like:

    private finalMap

    customers= newHashMap();

    publicvoidincrementCustomerOrders(CustomerId

    customerId) {

    Customer customer =customers.

    get(customerId);

    if(customer==null) {

    customer= newCustomer(customerId);

    customers.put(customerId, customer);

    }

    customer.incrementOrders();

    }

    This operaion o check i the item is in the map; i not,

    create it and add it is so common that theres a new method

    on Mapto support it: computeIfAbsent. This method takes as

    its second argument a lambda that states how to create the

    missing item:

    publicvoidincrementCustomerOrders(CustomerId

    customerId) {

    Customercustomer =customers.

    computeIfAbsent(customerId,

    id -> newCustomer(id));

    customer.incrementOrders();

    }

    In act, theres another new eature in Java 8 called method

    reerencesthat makes this even shorter:

    publicvoidincrementCustomerOrders(CustomerId

    customerId) {

    Customercustomer =customers.

    computeIfAbsent(customerId, Customer::new);

    customer.incrementOrders();

    }

    Mapand Listboth have new methods in Java 8. Its worth

    checking them out to see how many lines o code they can

    save you.

    STREAMS API

    The Streams API gives you lexibility to query and

    manipulate your data. This is a powerul tool. Check outsome o the ariclesor books on the subject or a more

    complete view. Building luent queries or your data is

    interesing in a Big Data world, but is just as useul or

    common operaions. Lets say, or example, that you have a

    list o books and you want to get a list o unique authors or

    these books, in alphabeical order:

    publicList

    getAllAuthorsAlphabetically(Listbooks)

    {

    Listauthors = new ArrayList();

    for(Bookbook :books) {

    Authorauthor =book.getAuthor();

    if(!authors.contains(author)) {

    authors.add(author);

    }

    }

    Collections.sort(authors, new

    Comparator() {

    publicintcompare(Authoro1, Author

    o2) {

    returno1.getSurname().

    compareTo(o2.getSurname()); }

    });

    returnauthors;

    }

    In the code above, we first iterate through the list o books,

    adding the books author to the author list i it hasnt seen it

    beore; then we sort the authors alphabeically by surname.

    This is exactly the sort o operaion that streams have been

    designed to solve elegantly:

    Generally speaking,

    applications that have moved

    to Java 8 see some sort of

    speed improvement without

    any specific work or tuning.

    http://www.dzone.com/guideshttps://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.htmlhttps://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttp://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.htmlhttp://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttps://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.htmlhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    8/378

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    publicList

    getAllAuthorsAlphabetically(Listbooks)

    {

    returnbooks.stream()

    .map(book ->book.

    getAuthor())

    .distinct()

    .sorted((o1, o2) ->

    o1.getSurname().compareTo(o2.getSurname()))

    .collect(Collectors.toList());

    }

    Not only is this ewer lines o code, its arguably more

    descripivea developer coming to this code later can read

    it and understand that 1) its geting authors rom the books,

    2) its only interested in unique authors, and 3) the list that is

    returned is sorted by author surname. Combine the Streams

    API with other new eaturesmethod reerencesand

    new methods on Comparatorand you get an even more

    succinct version:

    publicList

    getAllAuthorsAlphabetically(Listbooks)

    {

    returnbooks.stream()

    .map(Book::getAuthor)

    .distinct()

    .sorted(Comparator.

    comparing(Author::getSurname))

    .collect(Collectors.toList());

    }

    Here its even more obvious that the sorted method orders

    by the authors surname.

    EASY TO PARALLELIZEWe spoke about better out-o-the-box perormance, and

    in addiion to those earlier menioned eatures, Java 8

    can explicitly make use o more CPU cores. By simply

    replacing the method streamin the examples above with

    parallelStream , the JVM will split the operaion into

    separate jobs and use ork/jointo run them on muliple

    cores. However, parallelizaion is not a magic incantaion

    to make everything aster. Doing operaions in parallel

    always requires more workspliting up operaions and

    recombining resultsand will thereore not always take

    less ime. But this opion is very interesing or areas that

    are suitable or parallelizaion.

    MINIMIZE NULL POINTERSAnother new eature o Java 8 is the new Optionaltype.

    This type is a way o explicitly staing I might have a value,

    or I might be null. Which means an API can now be explicit

    about either returning values that might be null vs. values

    that will a lways be non-null, minimizing the chances orunning into a NullPointerException.

    Whats nice about Optionalis the way you tell it to deal

    with nulls. For example, i were looking or a paricular

    book in a list, t he new findFirst()method returns an

    Optional, which tells us its not guaranteed to find a value.

    Given this opional value, we can then decide what to do i

    its null. I we wanted to throw a custom Excepion, we can

    use orElseThrow :

    publicBookfindBookByTitle(Listbooks,

    Stringtitle) {

    OptionalfoundBook =books.stream()

    .filter(book ->book.getTitle().

    equals(title))

    .findFirst();

    returnfoundBook.orElseThrow(() -> new

    BookNotFoundException(Didnot find book with

    title +title));

    }

    or you could return some other book:

    returnfoundBook.orElseGet(() ->

    getRecommendedAlternativeBook(title));

    Or we could return an Optionalso that callers o the

    method can make their own decision on what to do i the

    book is not ound.

    IN SUMMARYJava 8 was a big release or Java, with syntax changes, new

    methods and types, and under-the-cover changes that

    will help your applicaion even i you dont use the new

    language eatures. Java 7 is no longer supported by Oracle,

    so organizaions are being pushed to migrate to Java 8. The

    good news is that Java 8 has many benefits or your business

    your exising applicaion, and or developers looking to

    improve their producivity.

    New methods, combined with

    lambda expressions, allow us to

    drastically simplify our code.

    TRISHA GEEhas developed Java applications for a range ofindustries, including nance, manufacturing, technology; open source

    and non-protfor companies of all sizes. She has expertise in Java

    high-performance systems, and is passionate about enabling developer

    productivity. Trisha is a Developer Advocate for JetBrains, a leader of the

    Sevilla Java User Group, a key member of the London Java Community,

    a MongoDB Master, and a Java Champion.

    http://www.dzone.com/guideshttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttps://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function-https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.htmlhttps://docs.oracle.com/javase/tutorial/collections/streams/parallelism.htmlhttps://www.java.com/en/download/faq/java_7.xmlhttps://www.java.com/en/download/faq/java_7.xmlhttps://docs.oracle.com/javase/tutorial/collections/streams/parallelism.htmlhttps://docs.oracle.com/javase/tutorial/collections/streams/parallelism.htmlhttps://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function-https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    9/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    DZONES 2015 GUIDE TO THE JAVA ECOSY

    DevOpsdzone.com/devops

    DevOps is a cultural movement, supported by

    exciting new tools, that is aimed at encouraging

    close cooperation within cross-disciplinary teams

    of developers and IT operations/system admins.

    The DevOps Zone is your hot spot for news and

    resources about Continuous Delivery, Puppet, Chef,

    Jenkins, and much more.

    diving deeperTOP 10 #JAVA TWITTER FEEDS

    DZONE JAVA ZONESWeb Dev

    dzone.com/webdev

    Web professionals make up one of the largest sections

    of IT audiences; we are collecting content that helps web

    professionals navigate in a world of quickly changing languageprotocols, trending frameworks, and new standards for user

    experience. The Web Dev Zone is devoted to all things web

    developmentand that includes everything from front-end user

    experience to back-end optimization, JavaScript frameworks,

    and web design. Popular web technology news and releases will

    be covered alongside mainstay web languages.

    TOP JAVA

    WEBSITES

    TOP JAVA

    TUTORIALS

    TOP JAVA

    REFCARDZ

    ProgramCreekprogramcreek.com

    IBM DeveloperWorksibm.com/developerworks/java

    Baeldungbaeldung.com

    Vogellavogella.com

    Programming By Doingprogrammingbydoing.com

    Java (Beginner)Programming Tutorialsbit.ly/YouTubeJava

    Core JavaGives you an overview of key aspects of the Java language and

    references on the core library as well as the most commonly

    used tools.

    Java Performance OptimizationCovers JVM internals, class loading, garbage collection,

    troubleshooting, monitoring, concurrency, and more.

    Getting Started with ScalaCovers creating a new Scala project, a tour of Scalas features, an

    introduction to classes and objects within Scala, and much more.

    Javadzone.com/java

    The largest, most active Java developer

    community on the web. With news and

    tutorials on Java tools, performance tricks,

    and new standards and strategies that

    keep your skills razor-sharp.

    @MREINHOLD @SPRINGROD

    @TRISHA_GEE @ADAMBIEN

    @LUKASEDER @PETERLAWREY @REZA_RAHMAN

    @JODASTEPHEN @JBONER @JSTRACHAN

    INTO THE JAVA ECOSYSTEM

    http://bit.ly/1iQL31ohttp://bit.ly/1OyRMK2http://www.programcreek.com/http://www.ibm.com/developerworks/javahttp://www.baeldung.com/http://www.vogella.com/http://www.programmingbydoing.com/http://bit.ly/YouTubeJavahttp://bit.ly/1iAFkfkhttp://bit.ly/1LSztJHhttp://bit.ly/1PCNz5Ahttp://bit.ly/1iQKSTChttp://www.twitter.com/mreinholdhttp://www.twitter.com/springrodhttp://www.twitter.com/trisha_geehttp://www.twitter.com/AdamBienhttp://www.twitter.com/lukasederhttp://www.twitter.com/PeterLawreyhttp://www.twitter.com/reza_rahmanhttp://www.twitter.com/jodastephenhttp://www.twitter.com/jbonerhttp://www.twitter.com/jstrachanhttp://bit.ly/1LSztJHhttp://www.twitter.com/jodastephenhttp://www.twitter.com/trisha_geehttp://www.twitter.com/reza_rahmanhttp://www.twitter.com/jstrachanhttp://www.twitter.com/jbonerhttp://www.twitter.com/AdamBienhttp://www.twitter.com/PeterLawreyhttp://www.twitter.com/springrodhttp://www.twitter.com/lukasederhttp://www.twitter.com/mreinholdhttp://bit.ly/YouTubeJavahttp://www.programmingbydoing.com/http://www.vogella.com/http://www.baeldung.com/http://www.ibm.com/developerworks/javahttp://www.programcreek.com/http://bit.ly/1iAFkfkhttp://bit.ly/1PCNz5Ahttp://bit.ly/1iQL31ohttp://bit.ly/1OyRMK2http://bit.ly/1iQKSTC
  • 7/24/2019 Guide to the java ecosystem

    10/3710

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    http://www.dzone.com/guideshttp://bit.ly/1FAKsLmhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    11/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    DZONES 2015 GUIDE TO THE JAVA ECOSY

    Generaions o developers have created muliple tools to

    automaically ensure code quality, yet none o these tools

    can guarantee you bug-ree code. Whatever programming

    language you use, however small or large your project,

    problems o various severity pop up here and there that can

    only be spotted by a human. It is becoming clearer to many

    o us that building peer code review into the development

    process is crucial to having better quality code.

    To get the most value out o code review, there are our key

    aspects one needs to have in mind:

    Code review does not mean that other ways o ensuring

    code quality should be neglected. You sill need to write

    tests, use staic code analysis, ormatter, spellchecker, etc.

    Dont waste your reviewers ime on bugs that your IDE

    can find or can be otherwise automated.

    Distracion is the archenemy o code review; you need

    to be able to ocus. Pick a code review tool that doesntspam your mailbox with noificaions and has a clean,

    uncluttered UI.

    Code changes are best understood in context. Try toprovide meaningul comments in your own code oryour reviewers, and use a tool that lets reviewers inspect

    changes as i they were working in their IDEs.

    Look or paricular things as you review, be it businesslogic, security issues, SOLID principles, or somethingelse. Scanning or general problems is surely helpul, but

    when given a chance to apply your experise, take it.

    The right code review tool is hal the job. The rest is up

    to you!

    WRITTEN BY MARIA KHALUSOVAPRODUCT MARKETING MANAGER, JETBRAINS

    Getting theMost Out of

    Code Review

    Dont waste your reviewers time on

    bugs that your IDE can find or can be

    otherwise automated.

    Upsource is a smart, lightweight code review and collaboraion tool that provides

    unique IDE-level Java code insight.

    BLOG blog.jetbrains.com/upsource WEBSITE jetbrains.com/upsourceTWITTER @upsource_jb

    Upsource by JetBrains

    CASE STUDY

    Our team at Zando.co.za implemented a code review culture to

    improve the way we developed and maintained our eCommerce

    platorm, and we were looking or the right tool: ater watchingthe demo videos or Upsource on the day o its release, we

    installed it r ight away. As a team, weve come to know and trust

    the JetBrains brand and were excited to experiment with this

    new shiny toy! Installaion was extremely simple, and we were

    up and runn ing very quickly. JetBrains put a lot o thought into

    2.0, and Upsource now boasts a lot o the eatures weve been

    waiing or since we began code reviewing intensely. Many

    thanks to JetBrains and the Upsource team or a great piece o

    sotware t hat gets things done, instead o geting in our way!

    STRENGTHS

    Major VCSs are supported: Git, Mercurial , Subversion,

    and Perorce

    Upsource eatures Java code insight that helps you conduc

    code review aster and more easily

    With the IDE integraion plugin, you do not have to leaveyour IDE to perorm a review

    Comprehensive repository browsing and powerul search

    NOTABLE CUSTOMERS

    CATEGORY

    Code Review

    NEW RELEASES

    Semi-Annual

    OPEN SOURCE?

    No

    Companies all over the world, large and small, trust team

    collaboraion tools rom JetBrains.

    SPONSORED OPINION

    http://bit.ly/1GT3GXAhttp://bit.ly/1GT3GXAhttp://bit.ly/1GpBjFrhttp://bit.ly/1GpBjFrhttp://bit.ly/1GpBjFrhttps://twitter.com/upsource_jbhttps://twitter.com/upsource_jbhttps://twitter.com/upsource_jbhttp://bit.ly/1GpBjFrhttps://twitter.com/upsource_jbhttp://bit.ly/1GT3GXA
  • 7/24/2019 Guide to the java ecosystem

    12/3712

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    Architectures based on microservices introduce new

    challenges for architects and developers. An ever-

    increasing list of languages and tools brings with it

    the capabiliies to conquer this challenge. Java is no

    excepion. This aricle explores diferent approaches to

    building microservices using the Java ecosystem.

    INTRODUCTIONThis aricle does notdiscuss whether microservices are good orevil, norwhether you should design your app or microservicesupront or extract the ser vices as they emerge rom yourmonolith applicaion.

    The approaches described here are not the only ones available,but they should give you a pretty good overview o severalpossibiliies. Even though the Java ecosystem is the main ocusin this aricle, the concepts should be transerrable to otherlanguages and technologies.

    I have named the approaches in this aricle container-less, self-contained, and in-container. These terms may not be enirelyestablished, but they ulfill their purpose here to diereniatethe approaches. I will describe what each means in t he secionsthat ollow.

    CONTAINER-LESSIn the container-less approach, the developer treats everythingon top o the JVM as a part o the applicaion.

    The container-less approach enables so-calledsingle JARdeployment(also called a fat JAR deployment). This means that

    the applicaion, with all its dependencies, is packaged as a singleJAR file and can be run as a standalone Java process.

    $ java -jar myservice.jar

    One advantage o this approach is that it is extremely easy tostart and stop services as needed when scaling up or down.Another advantage is convenient distribuion. You just need topass one JAR file around.

    A downside o this approach is library compaibility. You are

    on your own or things l ike transacion support, or you needto bring in a third party l ibrary that provides support or thisscenario. Later oni you need support or something else,say persistenceyou may need to fight compaibility issuesbetween the libraries.

    SELF-CONTAINEDAnother variant o single JAR deployment is building yourservices with an embedded ramework. In this approach, theramework provides implementaions o the services neededand the developer can choose which to include in the service.

    You may argue that this is exactly the same as the container-

    QUICK VIEW

    01Strategies for building microservices in

    the Java ecosystem include container-less,

    self-contained, andin-container.

    02Container-less microservices package the

    application, with all its dependencies, into a

    single fat JAR file.

    03Self-contained microservices also

    package a single fat JAR, but these also

    include an embedded framework with

    optional third-party libraries that will be

    compatible.

    04In-container microservices package an

    entire Java EE container and its service

    implementation in a Docker image.

    First Steps

    in JavaMicroservicesBY IVAR GRIMSTAD

    SECURITY PERSISTENCE MESSAGING TRANSACTIONS INTEGRATION PRESENTATION

    APPLICATION

    JV M

    OPERATING SYSTEM

    HARDWARE

    http://www.dzone.com/guideshttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    13/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    lesssoluion, but I like to dis inguish them here since theself-containedapproach actually gives you a set o third partylibraries that you knoware compaible.

    This approach can involve tools like Spring Bootand WildlySwarm.

    SPRING BOOT

    Spring Bootand the Spring Cloudprojects have excellentsupport or building microservices in Java. Spring Boot allowsyou to pick and choose various par ts o the Spring ecosystem,as well as popular external tools and then package them alongwith your applicaion in a JAR file. Spring Iniializrallows

    you to do this with a simple checkbox list orm. A simple HelloWorldservice is shown in this example:

    GIST SNIPPET: bit.ly/1YgUO9c

    WILDFLY SWARM

    A Java EE counterpart to Spring Boot is WildFly Swarm. Itenables you to pick and choose which parts o the Java EEspecificaion you need and package them and your applicaionin a JAR file. The Hello World example looks like this:

    GIST SNIPPET: bit.ly/1LADHW9

    The advantage o theself-containedapproach is that you get toselect only what you need in order or the service to run.

    One disadvantage o this approach is that the configuraion isa little more complex and the resuling deliverable JAR file is abit bigger since it builds in the required container capabiliiesin the actual service.

    IN-CONTAINERWhile it seems li ke a lot o overhead to require an enire JavaEE container to be able to deploy a microservice, keep in mindthat some developers argue that the the micro in microservicedoes not necessarily mean that the service is small or simple.

    In these cases it may seem appropriate to treat the Java EEcontainer as the required platorm. Thus, the only dependencyyou need is the Java EE API. Note that the dependency isprovided since the implementaion is providedby the container.That means that the resuling WAR file is extremely lean.

    The implementaion o the service is the same as the Wild lySwarm example above. See it here:

    GIST SNIPPET: bit.ly/1ik7Hya

    The advantage o this approach is that the container providestested and verified implementaions o standard uncionalitythrough standard APIs. Thus, you as a developer can ocusenirely on the business uncionality and leave the plumbingout o the applicaion source. Another advantage o thisapproach is that the actual applicaion code does not depend

    on the Java EE applicaion server it is deployed to, whether it isGlassFish, WildFly, WebLogic, WebSphere, or any other Java EEcompaible implementaions.

    The disadvantage is that you need to deploy the service into acontainer and thus increase the complexity o the deployment.

    DOCKER

    This is where Dockercomes in. By packaging the Java EEContainer and the service implementaion in a Docker image,you achieve more or less the same result as you would with asingle JAR deployment. The di erence is that now the serviceis contained in a Docker image and not a JAR file.

    Dockerfile

    FROM jboss/wildfly:9.0.1.Final

    ADD myservice.war /opt/jboss/wildfly/standalone/

    deployments

    The service is started by staring the Docker image in theDocker engine.

    $ docker run -it -p 8081:8080 myorganization/myservice

    SNOOP

    The observant reader may have noiced the

    @EnableEurekaClientannotaion in the Spring Boot codesnippet rom beore. This annotaion registers the service with

    Eureka,making it discoverable by service consumers. Eurekais a part o the Spring Cloud bundle and is an extremely easy-to-use and configure service discovery soluion.

    Java EE does not oer this uncionality out o the box,but there are several open-source soluions available. Onesuch soluion is Snoop, which uncions in a simi lar way toEureka. The only thing needed to make a Java EE microserviceavailable or service lookup is the @EnableSnoopClientannotaion as shown in this example:

    GIST SNIPPET: bit.ly/1Kp2PP1

    CONCLUSIONJava is an excellent choice when building microservices. Any

    o the approaches described in this ar icle will get things done.The most appropriate method or your paricular case dependson the requirements o the service. For simpler services, acontainer-less orself-containedservice is the better choice, butmore advanced services may be aster and easier to implementwith the power o an in-containerimplementaion. Either way,Java isa proven ecosystem or implemening microservices.

    IVAR GRIMSTADis an experienced software architect andconference speaker focusing on Enterprise Java. He is a member of the

    JCP and currently works on JSR 371 (MVC 1.0), JSR 375 (Java EE Security

    API), and JSR 368 (JMS 2.1). Working as a Java developer since the

    languages very beginning, he has built applications using everything from

    JavaEE to Spring and a variety of other open-source products.

    APPLICATION

    JV M

    SE CU RITY PERSISTENCE MESSAGING TRANSACTIONS INTE GRATION PRESENTATION

    OPERATING SYSTEM

    HARDWARE

    APPLICATION

    JAVA EE CONTAINER

    JV M

    OPERATING SYSTEM

    HARDWARE

    http://www.dzone.com/guideshttp://projects.spring.io/spring-boot/http://projects.spring.io/spring-cloud/https://start.spring.io/http://bit.ly/1YgUO9chttp://wildfly.org/swarm/http://bit.ly/1LADHW9http://bit.ly/1ik7Hyahttps://glassfish.java.net/http://wildfly.org/http://www.oracle.com/us/products/middleware/cloud-app-foundation/weblogic/overview/index.htmlhttp://www.ibm.com/software/webspherehttps://www.docker.com/https://github.com/Netflix/eureka/wiki/Eureka-at-a-glancehttps://github.com/Netflix/eureka/wiki/Eureka-at-a-glancehttps://github.com/ivargrimstad/snoophttp://bit.ly/1Kp2PP1http://bit.ly/1Kp2PP1https://github.com/ivargrimstad/snoophttps://github.com/Netflix/eureka/wiki/Eureka-at-a-glancehttps://www.docker.com/http://www.ibm.com/software/webspherehttp://www.oracle.com/us/products/middleware/cloud-app-foundation/weblogic/overview/index.htmlhttp://wildfly.org/https://glassfish.java.net/http://bit.ly/1ik7Hyahttp://bit.ly/1ik7Hyahttp://bit.ly/1LADHW9http://wildfly.org/swarm/http://bit.ly/1YgUO9chttp://bit.ly/1YgUO9chttps://start.spring.io/http://projects.spring.io/spring-cloud/http://projects.spring.io/spring-boot/http://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    14/37

    Source:TechvalidatesurveyofRiverbedusersofSteelC

    entralandPerformanceManagement

    2015 Riverbed Technology. All rights reserved. Riverbed and any Riverbed product or service name or logo used herein are trademarks of Riverbed Technology. All other trademarks usedherein belong to their respective owners. The trademarks and logos displayed herein may not be used without the prior written consent of Riverbed Technology or their respective owners.

    How to detect & fix

    problems 10x faster

    Were now able to look inside of the

    developers code without having to

    modify the code while its running in our

    production environment. Thats fantastic.

    I cant imagine someone running a site ofany real size without this capability.

    AppInternals has drastically

    reduced the amount of timerequired to pinpoint issues and

    allowed us to pinpoint wherethe problems exist.

    Eric McCraw, Global Web Systems Manager for IT,National Instruments

    Eric Saxe, IT Manager, Asurion

    Top 5 benefits cited by users

    Challenges

    Improved appperformance

    Reduced timespent in war

    rooms

    Reducedcost of

    fixing appsImprovedapp user

    satisfaction

    Fasterdevelopment ofnew apps and

    features

    TechValidate ID: 958-DAB-5CA

    1 2

    3

    4

    5

    IDG, 2013 Gartner, 2012 Forrester, 2013

    of ITorganizations

    suffer fromslow apps

    75%

    learn aboutproblemsfrom end

    users

    70%

    performanceissues take morethan a month to

    resolve

    31% Performance

    Transactions

    User Experience

    Application Map

    1:1 fit

    Take control of app performance with

    SteelCentral AppInternals

    Try AppInternals today atwww.appinternals.com

    http://bit.ly/1Ng3QNyhttp://bit.ly/1Ng3QNy
  • 7/24/2019 Guide to the java ecosystem

    15/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    DZONES 2015 GUIDE TO THE JAVA ECOSY

    Applicaion perormance equals business perormance. Apps

    have transormed how businesses operate, have increased

    producivity, and have enabled numerous innovaive

    markets. Developers make this possible.

    As indispensable as applicaions have become, users expect

    more eatures as needs evolve and depend on developers to

    deliver these requently, without compromising reliability or

    around-the-clock availability. Failing to do so will drive users

    to compeitors or alternaives.

    How do developers expedite release cycles and maximize

    ime spent on new eatures as opposed to maintaining

    exising code? It comes down to two pracices:

    ENSURE RELEASE QUALITY PRIOR TO RELEASE

    Ideniying all erroneous code during tesing helpsdevelopers fix issues early. Detailed transacion tracing canhelp QA expose and diagnose bottlenecks so that developershave the inormaion they need to resolve them quickly. Thishelps make releases producion ready.

    RESOLVE ERRORS IN PRODUCTION ASAP

    Monitoring apps in producion ensures that you are the firstknow when problems strike. Recording every transacionrom user to back-endalong with its associated systemmetrics and call tree detailshelps developers reconstructincidents and eliminate the root cause quickly.

    Helping developers stay ocused on new eatures is importanor businesses to stay compeiive. Applicaion perormancemonitoring products arm them with the diagnosics theyneed to minimize the ime spent fixing bugs, maximizerelease quality, and keep them ocused on deliveringbusiness-impacing applicaions.

    WRITTEN BY KRISHNAN BADRINARAYANANSR. PRODUCT MARKETING MANAGER, RIVERBED TECHNOLOGY

    Developing andDelivering High-

    PerformingApplicationsWE R E NOW A BLE TO LOOK IN SIDE OF T HE DEV ELOPERS

    CODE WITHOUT HAVING TO MODIFY THE CODE WHILE

    ITS RUNNING IN OUR PRODUCTION ENVIRONMENT. THATS

    FANTASTIC. I CANT IM AGINE SOMEONE RUNNING A SITE OF

    AN Y R EA L SIZ E W IT HOU T THIS C APA BILI TY.

    GLOBAL WEB SYSTEMS MANAGER, NATIONAL INSTRUMENTS

    Trace all transacions rom user device to back-end. Get comprehensive visibility and

    analyics across apps, networks and inrastructure.

    BLOG riverbed.com/blogs/ WEBSITE appinternals.comTWITTER @riverbed

    SteelCentral by Riverbed Technology

    CASE STUDY

    The web systems team at Naional Instruments is tasked with

    ensuring that its public website, www.ni.com, runs opima lly.

    They used to spend 1000s o hours each year troubleshooingissues caused by newly released apps. Their inability to quickly

    find causes o app perormance problems created tension between

    them and the developers, and oten hurt user experience. The

    web systems team now uses AppInternals to quickly diagnose

    root causes o app perormance problems. Troubleshooing ime

    is down by 90%, along with MTTR. Developers use AppInternals

    to test their code resuling in 20% to 30% ewer issues introduced

    into producion. Scheduled updates are up rom 16 to 120 per year.

    ni.com is more stable and delivers better user experience.

    STRENGTHS

    Major VCSs are supported: Git, Mercurial , Subversion, andPerorce

    Upsource eatures Java code insight that helps conductcode review aster and easier

    With IDE integraion plugin, you do not have to leave your

    IDE to perorm a review

    Comprehensive repository browsing and powerul search

    NOTABLE CUSTOMERS

    CATEGORY

    APM

    NEW RELEASES

    Quarterly

    OPEN SOURCE?

    No

    Asurion

    Naional Instruments

    Shell

    Visa

    SPONSORED OPINION

    http://bit.ly/1NMfl26http://bit.ly/1NMfl26http://bit.ly/1NMfl26http://bit.ly/1jsCKclhttp://bit.ly/1jsCKclhttp://bit.ly/1jsCKclhttp://bit.ly/1GKiAPRhttp://bit.ly/1GKiAPRhttp://bit.ly/1GKiAPRhttp://bit.ly/1jsCKclhttp://bit.ly/1GKiAPRhttp://bit.ly/1NMfl26
  • 7/24/2019 Guide to the java ecosystem

    16/3716

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    Today more than ever, speed plays a larger role

    in the sotware development lifecycle. We see R&D

    teams who want to push code faster to producion

    environments with rising complexity, and this

    amplifies a vulnerability that must be addressed.

    Those ew hours ater a new deployment set the tone or its

    success. Every once in a while, things go wrong, no matter how

    strict your tests are. When your code is out in producion and

    it meets the real-world architecture and scale o your system,

    with real data lowing through the applicaion, things can go

    south pretty quickly. In order to be resilient and stay on top o

    things, a strategy needs to be implemented that allows you to:

    Ideniy when theres an error happening

    Assess the errors severity to prioriize it

    Draw out the state that caused the error

    Trace back and solve the root cause

    Deploy a hotfix

    In this ar icle well cover some o the most useul pracices toallow you to assemble a ime-criical response and weaponizeyour applicaion.

    THE CASE FOR DISTRIBUTED LOGGINGWith producion environments spread across muliple nodes

    and clusters, its easy or a transacion that starts on one

    machine or service to cause an error someplace else. When an

    excepion happens, theres a need to be able to trace back this

    type o distributed transacion, and the logs are oten the first

    place to look or clues.

    This is why, or every log line printed out, we need to be able to

    extract the ull context to understand exactly what happened

    there. Some data might come rom the logger itsel and the

    locaion the log is created in; other data needs to be extracted

    at the moment o the event. A good way to trace such errors

    to their origin would be generaing UUIDs at every threads

    applicaion entry point.

    A useul yet underuilized eature here is using thread names

    to provide a window or this precious context, right beore the

    stack collapses and the data is lost. You can ormat your thread

    name to something like:

    Thread.currentThread().

    setName(prettyFormat(threadName, getUUID(), message.

    getMsgType(), message.getMsgID(), getCurrentTime()));

    So instead o an anonymous name like pool-1-thread-17your

    applicaion now produces smart stack traces that start this

    way: threadName: pool-1-thread-17, UUID: AB5CAD, MsgType:

    AnalyzeGraph, MsgID: 5678956, 30/08/2015 17:37

    This works well when handling caught excepions, but what

    i theres an uncaught excepion involved? A good pracice is

    to set a deault uncaught excepion handler, both to cover or

    that and to help extract any useul data you need. Other than

    thread names, addiional places we can use to store hints about

    what happened are the TLS (Thread Local Storage) and the MDC

    (Mapped Diagnosic Context, which is provided by your logging

    ramework). All other data gets lost as the stack rames collapse.

    LEANING ON THE JVM TOOL BELTSome more complex bugs like deadlocks or heavy perormance

    QUICK VIEW

    01Developers need as much context information

    as possible in their logs when debugging in

    production. The data extraction needs to be

    planned and built in before deployment to

    production so that context data is not lost as the

    stack frames collapse.

    02For bugs like deadlocks or heavy performance

    bottlenecks, jstack is a great debugging tool,

    but developers need to modify it for preemptive

    execution if they want to collect information at

    the exact time the bug occurs.

    03Java agents are an important debugging tool.

    They retrieve data straight from the source in

    a lightweight way, allowing access to the exact

    variable values that caused each error.

    04Successful production testing strategies can

    include duplicating live traffic into new appversions or creating a canary server with varying

    degrees of features and controls.

    Production

    Debugging IsNot a CrimeBY ALEX ZHITNITSKY

    http://www.dzone.com/guideshttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    17/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    bottlenecks require a di erent approach. Take jstack, or

    instance: a powerul tool that ships together with the JDK.

    Most o you are probably already amiliar with it in some way.

    Basically, jstack allows you to hook into a running process and

    output all the threads that are currently running in it. It will

    print each threads stack trace; rameseither Java or naive;

    locks theyre holding; and all sorts o other metadata. It can

    also analyze heap dumps or core dumps o processes that have

    already ended. Its a longstanding and super useul toolkit.

    The problem here is that jstack is mostly used in retrospect.

    The condiion youre looking to debug has already happened,

    and now youre let searching through the debris. The server

    isnt responding, the throughput is dropping, database queries

    are taking orever: a typical output would be a ew threads

    stuck on some nasty database query, with no clue o how we

    got there. A nice hack that would allow you to get the jstack

    output where it matters most is to acivate it automaically

    when things start tumbling down. For example, you can set

    a certain throughput threshold and get jstack to run at the

    moment it drops[1].

    Combined with using smart thread names, we can now know

    exactly which messages caused us to get stuck, and we can

    retrace our steps back, reproduce the error, isolate it, and solve it.

    USING JAVA AGENTS TO SKIP LOGGING ALTOGETHERThe next step in this process is gaining visibility into your

    applicaion during runime. Logs are inspected in retrospect

    and only include the inormaion that youve decided to put

    there in advance. Weve seen how we can enrich them with

    stateul data, but we also need a way to access the exact

    variable values that caused each error to get down to the real

    root cause. Java agents give us the ability to get to the data

    we need straight rom the source without wriing to disk

    and using huge log files, so we can extract only the data well

    actually be using.

    One interesing approach is using BTrace, an open-source Java

    agent that hooks up to a JVM and opens up a scriping language

    that lets you query it during runime. For instance, you can get

    access to things like ClassLoaders and their subclasses, and load

    up jstack whenever some troubled new class is instaniated. Its

    a useul tool or invesigaing specific issues and requires you to

    write scripts or each case you want to cover.

    You could also write your own custom Java agent, just like

    BTrace. One way this helped our team at Takipiwas when

    a certain class was instaniaing millions o new objects

    or some reason. We wrote an agentthat hooks up to the

    constructor o that object. Anyime the object was allocated

    an instance, the agent would extract its stack trace. Later

    we analyzed the results and understood where the load was

    coming rom. These kinds o problems really pique our teams

    interest. On our day-to-day were building a producion grade

    agentthat knows how to extract t he variable values that causeeach excepion or logged error, all across the stack trace, and

    across dierent machines.

    TESTING IN PRODUCTION: NOT FOR THE FAINT-HEARTEDJokes aside, tesing in producion is a serious pracice that

    many companies are taking part in . They dont cancel the

    tesing phase completely, but they understand that staging

    environments are not enough to mimic ull-blown distributed

    environments, no matter how much ime and e ort you

    put into seting them up. The only real tesing takes place in

    producion, with real data lowing through the system andunexpected use cases being thrown at it.

    There are several approaches you can adopt or perorming

    controlled producion tesing, depending on what kind o

    uncionality it is that youre trying to test. One opion is

    duplicaing and rouing live trafic both through the current

    system and through the new version o the component that

    youre tesing. This way you can see how the new component

    behaves and compare it direct ly to the current version without

    risking the delivery o wrong results back to the user i, or

    example, its some data crunching task.

    Another opion is segmening your tra fic and releasing

    new eatures gradually. One way to do this is to use a canary

    server, which is a single node in your system updated with

    the new version youd like to roll out (just like a canary in

    a coal mine). Someimes its also helpul to add more fine-

    grained monitoring and logging to the canary server. Another

    opion is to add more abstracion on top o the canary setup,

    implemening and making use o gradual rollouts with eature

    switches, or A/B tesing sma ll changes in your applicaion to

    see how they impact perormance.

    FINAL THOUGHTSDebugging Java applicaions in producion requires a creaive

    and orward-thinking mindset. Unless we prepare our

    applicaions and environment in advance, there will not

    be much insight to recover ater geting hit by errors and

    perormance issues.

    [1] https: //github.com/takipi/jstack

    ALEX ZHITNITSKYis an engineer working at Takipion a mission tohelp Java and Scala developers solve bugs in production and rid the

    world of buggy software. Passionate about all things tech, he is also the

    co-founder & lead of GDG Haifa, a local developer group. Alex holds a

    B.Sc from the Technion, Israels Institute of Technology.

    Unless we prepare our applications

    and environment in advance, there

    will not be much insight to recover

    after getting hit by errors and

    performance issues.

    http://www.dzone.com/guideshttp://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.htmlhttps://github.com/takipi/jstack/https://github.com/takipi/jstack/https://kenai.com/projects/btracehttps://www.takipi.com/https://github.com/takipi/debugAgenthttp://land.takipi.com/why-takipi/http://land.takipi.com/why-takipi/https://github.com/takipi/jstackhttps://www.takipi.com/https://github.com/takipi/jstackhttps://www.takipi.com/https://github.com/takipi/jstackhttp://land.takipi.com/why-takipi/http://land.takipi.com/why-takipi/https://github.com/takipi/debugAgenthttps://www.takipi.com/https://kenai.com/projects/btracehttps://github.com/takipi/jstack/https://github.com/takipi/jstack/http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.htmlhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    18/37

    IEEE LanguageRankings 2015Methodology:

    Measures Google searches, social media trends, GitHub and SO projects/tags plus

    activity, and recent job postings on Career Builder and Dice.

    RedMonk 15 Program.Language RankingsMethodology:

    Measures the number of repositories on GitHub using each language and the number of

    questions on Stack Overflow with each language tag.

    05 06

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    2008 09 10 11 12 13 14 15

    JAVASCRIPT

    JAVA

    RUBY

    PHP

    PYTHON

    CSS

    C++

    C#

    C

    PERL

    OBJECTIVE-C

    HTMLSHELLVmLEMACS LISP

    TIOBE ProgrammingCommunity Index

    GitHub LanguageRankings

    Javas Current Rank: #1

    SOURCE tiobe.com/index.php/content/paperinfo/tpci/

    JAVA

    C

    C++

    C#

    PYTHON

    OBJECTIVE-C

    PHP

    JAVASCRIPT

    PERL

    2003 04 05 06 07 08 09 10 11 12 13 14 15

    2006 07 08 09 10 11 12 13 14 15

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1%

    2%

    3%

    MATCHING

    JOBP

    OSTINGS

    RANK

    Javas Current Rank: #2

    SOURCE github.com/blog/2047-language-trends-on-github

    Javas Current Rank: #1

    SOURCE bit.ly/indeed-rankings

    Javas Current Rank: #2

    SOURCE makingdataeasy.com/stackoverflow-trends

    Methodology:

    Measures language search trends on Google, Google Blogs, Amazon, Bing, Yahoo!,

    Baidu, Wikipedia, and YouTube.

    Indeed Job KeywordTrendsMethodology:

    Measures Indeed.com job posting keyword search results for selected languages. C was

    not included because there were too many false positives.

    Methodology:

    Measures the number of public and private GitHub repositories using each language

    (excluding forks) as detected by Linguist.

    Stack OverflowLanguage RankingsMethodology:

    Measures the number of questions on Stack Overflow with each language tag.

    01 02

    03 04

    JAVA C++ C# JAVASCRIPT PERL PHP PYTHON

    RANK

    RANKINGS

    OVER

    TIME

    RANKINGS

    OVER

    TIME

    CUR

    RENT

    RANKINGS

    CUR

    RENT

    RANKINGS

    RANKINGS

    OVERT

    IME

    RANKINGS

    OVERT

    IME

    RAN

    K

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    2008 09 10 11 12 13 14 15

    RUBY

    JAVASCRIPT

    JAVA

    C#

    PHP

    PYTHON

    C++

    CSS

    SQL

    OBJECTIVE-C

    C

    JAVAJAVA C 99 9100 21

    Java Popularity:By the Numbers

    Anyone whos spent a little time in the software industry

    knows how widespread the use of Java is, but how popular

    is it exactly? There are multiple places where we can look to

    help answer this question. Google searches, job postings,

    open source repositories, Stack Overflow questions, and

    social media are all good sources to give us a fairly accurate

    picture of language popularity overall. Here are some chart

    to show how amazingly popular Java is.

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.htmlhttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.htmlhttps://github.com/blog/2047-language-trends-on-githubhttps://github.com/blog/2047-language-trends-on-githubhttp://www.bit.ly/indeed-rankingshttp://www.bit.ly/indeed-rankingshttp://makingdataeasy.com/stackoverflow-trendshttp://makingdataeasy.com/stackoverflow-trendshttps://github.com/github/linguisthttps://github.com/github/linguisthttp://makingdataeasy.com/stackoverflow-trendshttp://www.bit.ly/indeed-rankingshttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.htmlhttps://github.com/blog/2047-language-trends-on-githubhttps://github.com/github/linguist
  • 7/24/2019 Guide to the java ecosystem

    19/3720

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    Two years ago, I collaborated with a few other

    developers to define a new set of architectural

    principles in the enterprise. It was clear at that

    ime that everything from emergent deployment

    environments to user expectaions to the size of

    datasets had outgrown previous patterns for buildingsotware. Basically what was typically breaking

    ied back to most sotware having synchronous call

    request chains and poor isolaion, yielding single

    points of failure and too much contenion.

    In the Reacive Maniestowe created a new set o keyprinciples that described the responsiveness, resilience,elasicity, and message-driven characterisics that webelieved defined eecive applicaion architectures in themodern era o applicaions, running on everything rommobile devices to cloud-based clusters with t housands omuli-core processors.

    Over the last two years, the response rom the communityhas ranged rom enthusiasic support (12,000+ signatureson the Reacive Maniesto) to eye-rol ling (my avorite,in a Slashdot comment: We want a machine that makesthings cold. We dont care how its built. Well call t his...The Rerigerator Maniesto.). Some elt that Reaciveencapsulated key attributes that had long been embraced intheir inter nal development philosophy, in the same way thatsome companies did Agile sotware development beore itwas Agile. Some elt Reacive too prescripive, while otherselt it was too generic.

    SO WHAT IS REACTIVE?The Reacive Maniestos goal is to condense the knowledgearound designing highly-scalable and reliable applicaionsinto a set o our required architecture traits:

    RESPONSIVE

    The systemresponds in a imely manner i at all possible.Responsiveness is the cornerstone o usability and ui lity, but

    more than that, responsiveness means that problems maybe detected quickly and dealt with eecively. Responsivesystems ocus on providing rapid and consistent responseimes, establishing reliable upper bounds so they deliver aconsistent quality o service. This consistent behavior in turnsimplifies error handling, builds end user confidence, andencourages urther interacion.

    RESILIENT

    The systemstays responsive in the ace o ailure. This appliesnot only to highly-available, mission criical systems anysystem that is not resilient will be unresponsive duringand ater ailure. Resilience is achieved by replicaion,containment, isolaion, and delegaion. Failures are contained

    within each component, isolaing components rom eachother and thereby ensuring that parts o the system can ailand recover without compromising the system as a whole.Recovery o each component is delegated to another (external)component and high-availability is ensured by replicaionwhere necessary. The client o a component is not burdenedwith handling its ailures.

    ELASTIC

    The system stays responsive under varying workload. ReaciveSystems can react to changes in the input rate by increasingor decreasing the resourcesallocated to service these inputs.This implies designs that have no contenion points or central

    QUICK VIEW

    01Reactive Systems rely on a foundation

    of asynchronous message-passing to

    create loosely-coupled systems that areresponsive, resilient, and elastic.

    02Analytics are being pushed into thestream (via Spark), which is emergingas the de facto approach for sub-second

    query response times across billions of

    rows of data.

    03Fast Data, or streaming data, can

    make systems more responsive.Reactive Streams can make Fast Data

    manageable by intelligently controlling

    the rate of data consumption.

    04Systems become very resilient when they

    are backed by a database with the fullhistory of an application, which is built

    by event logging that is being used as

    the Service of Record.

    Reactive

    Trends onthe JVMBY JONAS BONR

    http://www.dzone.com/guideshttp://www.reactivemanifesto.org/http://developers.slashdot.org/story/14/09/21/0547231/reactive-development-turns-20http://www.reactivemanifesto.org/glossary#Systemhttp://www.reactivemanifesto.org/glossary%23Systemhttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary#Replicationhttp://www.reactivemanifesto.org/glossary#Isolationhttp://www.reactivemanifesto.org/glossary#Delegationhttp://www.reactivemanifesto.org/glossary#Componenthttp://www.reactivemanifesto.org/glossary#Resourcehttp://www.reactivemanifesto.org/glossary#Resourcehttp://www.reactivemanifesto.org/glossary#Componenthttp://www.reactivemanifesto.org/glossary#Delegationhttp://www.reactivemanifesto.org/glossary#Isolationhttp://www.reactivemanifesto.org/glossary#Replicationhttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary%23Systemhttp://www.reactivemanifesto.org/glossary#Systemhttp://developers.slashdot.org/story/14/09/21/0547231/reactive-development-turns-20http://www.reactivemanifesto.org/http://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    20/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    bottlenecks, resuling in the ability to shard or replicatecomponents and distribute inputs among them. ReaciveSystems support predicive, as well as Reacive, scalingalgorithms by providing relevant live perormance measures.They achieve elasicityin a cost-eecive way on commodityhardware and sotware platorms.

    MESSAGE-DRIVEN

    As the oundaion to the three traits above, Reacive Systemsrely on asynchronousmessage-passingto establish a

    boundary between components that ensures loose coupling,isolaion, locaion transparency, and provides the means toreiy and delegate ailuresas messages. Employing explicitmessage-passing enables load management, elasicity,and low control by shaping and monitoring the messagequeues in the system and applying back-pressurewhennecessary. Locaion-transparent messaging as a means ocommunicaion makes it possible or the management oailure to work with the same constructs and semanicsacross a cluster or within a single host. Non-blockingcommunicaion allows recipients to only consume resourceswhile acive, leading to more eficient system uilizaion.

    NEW PATTERNS DRIVING REACTIVE INNOVATIONOver the last couple o years, I believe the three mostinteresing new trends driving Reacive innovaion are:

    MICROSERVICES

    In tradiional Java EE apps, services are written in a verymonolithic way. That ies back to a strong coupling betweenthe components in the service and between ser vices. Appservers (WebLogic, JBoss, Tomcat, etc.) are encouragingthis monolithic model. They assume that you are bundlingyour service JARs into an EAR file as a way o grouping yourservices, which you then deployalongside all your otherapplicaions and servicesinto the single running instance othe app server, which manages the service isolaion through

    class loader tricks; a very ragile model.

    Today we have a much more evolved oundaion orisolaionrom the ground upstaring with, or example,Docker containers, isolated all the way up through betterhardware and communicaion protocols. Im excited aboutthe Microservices momentum because it makes isolaionfirst class, which is a necessity or resilience. You cant builda Reacive system without isolaing ailures and having aseparate context outside the ailed component to react to theailure. You need isolaion in order to avoid cascading ailures.

    FAST DATATHE WORLD IS GOING STREAMING

    The whole movement towards Fast Data and real-ime data

    requires closed eedback loops or geting data into and outo the system. T he benefit o Fast Data is that you get systemsthat are more responsive and adapive, allowing you to eedthe results o real-ime data processing back into the runningsystem, which allows it to react to change. This capabilitycan also be used to make these systems more resilient andscalable, but with reduced complexity.

    One o the early pitalls or streaming data in Fast Datascenarios, or example, was the lack o back-pressure. I a

    processing stage produced data aster than the next stage couldconsume that data, it would lead to a ailure in the consumer,which would cause cascading ailures throughout the enireprocessing pipeline. Reacive Streamsaddress that problemby bringing back-pressure to streams to control the rate o dataconsumpion. In general, the back-end systems that scale BigData and IoT are a perect fit or Reacive architectures.

    EVENT LOGGING AS THE SERVICE OF RECORD

    Another area in which Im seeing a lot o Reacive innovaion,specifically on the JVM, is when event logging is being usedas the Ser vice o Record. In event logging, each state changeto the applicaion is materialized as an event in the log. What

    you get is a database with the ull history o the applicaion;a database o acts, rather than the tradiional SQL databaseapproach that only works with a cache o the subset o thelog, as Pat Helland aptly put it. I your durable state is basedon an event log, it can be easi ly replicated and replayedsomewhere else to bring t he system or component up to speedwherever it is. This is a great pattern or ailure handling indistributed stream processingi one thing ails it can bebrought back up to speed and coninue. Architectural patternsmaking use o the event log include Event Sourcing and CQRSThis way o thinking about durable state works very well withMicroservices, where each ser vice can have its own isolated,strongly consistent, event log-based, durable storage thatrelies on eventual consistency between t he services or scale

    and availability. Fast Data is the oundaion or this durablestate and streaming architecture.

    REACTIVE EVOLVING FROM PRINCIPLES TOIMPLEMENTATION PATTERNSI believe that Reacive is on a similar arc to the one the Agilemethodology ollowed. A lot o companies were using Agilemethodologies without calling it Agile years beore the termwas coined. But calling it Agile made it easier to talk aboutand communicate the philosophy, so the Agile Maniestowascreated. When this set o principles became more amiliar in thedeveloper community, you started to see the adopion o Scrumor disilling the essence o the processes and XP or supporingprogramming principles and pracices like test-drivendevelopment, pair programming, and coninuous integraion.

    Today were seeing the same shi t or Reacive. The coremessage o Reacive is aimed at core principles rather thantools and techniques. But Microser vices, Fast Data, and EventLogging are great examples o how implementaion patternswithin the Reacive movement are staring to get moredefiniion and momentum.

    JONAS BONRis the co-founder and CTO of Typesafe. He is also theinventor of Akka, a JVM-based toolkit and runtime that uses the actor

    model to build concurrent, distributed applications. Jonas is a Java

    Champion and a co-author of the Reactive Manifesto.

    What was typically breaking

    tied back to most software having

    synchronous call request chains and

    poor isolation, yielding single points

    of failure and too much contention.

    http://www.dzone.com/guideshttp://www.reactivemanifesto.org/glossary#Elasticityhttp://www.reactivemanifesto.org/glossary#Asynchronoushttp://www.reactivemanifesto.org/glossary#Message-Drivenhttp://www.reactivemanifesto.org/glossary#Location-Transparencyhttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary#Non-Blockinghttp://www.reactivemanifesto.org/glossary#Resourcehttp://www.reactivemanifesto.org/glossary%23Back-Pressurehttp://www.reactive-streams.org/http://blogs.msdn.com/b/pathelland/archive/2007/06/14/accountants-don-t-use-erasers.aspxhttp://www.agilemanifesto.org/http://www.agilemanifesto.org/http://blogs.msdn.com/b/pathelland/archive/2007/06/14/accountants-don-t-use-erasers.aspxhttp://www.reactive-streams.org/http://www.reactivemanifesto.org/glossary%23Back-Pressurehttp://www.reactivemanifesto.org/glossary#Resourcehttp://www.reactivemanifesto.org/glossary#Non-Blockinghttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary#Failurehttp://www.reactivemanifesto.org/glossary#Location-Transparencyhttp://www.reactivemanifesto.org/glossary#Message-Drivenhttp://www.reactivemanifesto.org/glossary#Asynchronoushttp://www.reactivemanifesto.org/glossary#Elasticityhttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    21/3722

    ZONE.COM/GUIDES DZONES 2015 GUIDE TO THE JAVA ECOSY

    DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    Constantly monitoring

    your applications soyou dont have to.

    New Relics SaaS-based Application

    Performance Monitoring helps you

    build, deploy, and maintain great web

    and mobile software.

    Start your free trial now.

    newrelic.com/java

    Application Response Times

    Error Tracking & Analytics

    Transaction Tracing

    Thread Profiling

    JVM Performance Analysis

    Deployment Comparisons

    2008-15 New Relic, Inc. All rights reserved.

    http://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://www.newrelic.com/javahttp://www.newrelic.com/javahttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://bit.ly/1Ng3GWchttp://www.newrelic.com/javahttp://bit.ly/1Ng3GWchttp://www.dzone.com/guides
  • 7/24/2019 Guide to the java ecosystem

    22/37DZONES 2015 GUIDE TO THE JAVA ECOSYSTEM

    DZONES 2015 GUIDE TO THE JAVA ECOSY

    Developer aigue, that rustrated exhausion you eel

    trying to keep up with the constant lood o new languages,

    libraries, rameworks, platorms and programming models,

    is a real problem. While theres nothing wrong with trying

    to stay up-to-date, a number o downsides work against you:

    loss o producivity, lost cycles spent on immature tools, short

    hal-lie and the risk o making bad bets.

    This problem has been around since the dawn o computers,

    but its geting worse. Causes include the push or ull stack

    developers who must do more with less, the rising numbero open source projects, the prolieraion o new types o

    hardware and the pressure to introduce the new in order to

    stay ahead o the compeiion.

    How can you possibly keep up? Perhaps the best way is to take

    it slowly: integrate the eatures o new technologies as you

    need them. In my experience, the need to use a technology is

    the best reason to start learning about it and the best wayto retain the skills once learned. Jumping in and learninga new technology or its own sake (aka warehousing) is

    popular, but much less eecive.

    With gradual introducion to new technologies and a ocus othe aspects that can help solve immediate problems, you canstay producive while sill using amiliar tools, and introduc

    new stu one eature at a ime. While not possible in all

    cases, i your amiliar platorm is Java or .NET, and the newtechnology is .NET or Java-based, JNBridgePro can help.

    JNBridge has examplesthat show how a amiliar legacytechnology like .NET or Java can be integrated with a newer

    technology like Hadoop, Groovy, Python or Clojure. The

    examples ocus on how you can bring in new technologiesat your own pace, without having to assimilate the enirety

    o a new language, API, or platorm. Our goal is to help youavoid developer aigue while keeping current on the ever-

    increasing number o new technologies being introduced.

    Developer fatigue is frustrating andcostly. Stay productive using famili