guide to the java ecosystem
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
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