Java Ecosystem: The Dzone Guide To
Java Ecosystem: The Dzone Guide To
Java Ecosystem: The Dzone Guide To
JAVA
ECOSYSTEM
THE
2015 EDITION
BROUGHT TO YOU IN PARTNERSHIP WITH
DZONE.COM/GUIDES
Dear Reader,
TABLE OF CONTENTS
EXECUTIVE SUMMARY
KE Y RESEARCH FINDINGS
WHY JAVA 8?
BY TRISHA GEE
12
16
18
20
24
28
32
33
SOLUTIONS DIRECTORY
36
37
GLOSSARY
EDITORIAL
B US I N E S S
John Esposito
[email protected]
Rick Ross
EDITOR-IN-CHIEF
G. Ryan Spain
DIRECTOR OF PUBLICATIONS
Mitch Pronschinske
Matt Werner
Moe Long
John Walter
EDITOR
Allen Coin
M AT T S C H M I D T
PRESIDENT AND CTO
M AT T@ DZ O N E .C O M
Matt Schmidt
PRODUCTION ADVISOR
Jim Howard
SALES ASSOCIATE
Chris Brumfield
Kellet Atkinson
CUSTOMER SUCCESS
ASSOCIATE
Matt OBrian
ART
VP & PUBLISHER
DIRECTOR OF BUSINESS
DE VELOPMENT
Ashley Slate
Jane Foreman
Yassee Mohebbi
VP OF MARKETING
GRAPHIC DESIGNER
Alex Crafts
[email protected]
EDITOR
DIRECTOR OF MA JOR
ACCOUNTS
Tom Smith
Chelsea Bosworth
CEO
Chris Smith
MARKETING ASSOCIATE
DESIGN DIRECTOR
DZONE.COM/GUIDES
Executive
Summary
DZone surveyed more than 600 IT professionals and
produced several expert articles for our 2015 Guide to
the Java Ecosystem to give Java organizations greater
insight into the effects of 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 of the Java platform and the ecosystem of tooling
around the Java language.
RESEARCH TAKEAWAYS
01 DEVELOPERS ARE MOVING TO NEW VERSIONS OF
JAVA MORE QUICKLY
Data: 53% of respondents say they their new apps will use
Java 8 in the next six months and 35% are going to start
converting existing apps to Java 8 in that same time frame. 62%
of respondents said their existing apps are in Java 7 and 20%
already have existing apps in Java 8.
Implications: A slight majority of Java organizations seem to be
moving to the latest version of Java for new applications. This
shows a bit more forward movement in the Java community than
there has been in years past. Large swaths of Java companies
have sizable legacy codebases due to their organizations age
and the constant progression of the language, which has left
some of them behind. There will always be a large number of
organizations where there isnt enough risk or enough resources
to motivate an update to their legacy code, but its surprising to
see significant numbers of Java companies moving their apps to
the newest version.
Recommendations: The fact that Oracle has declared Java SE
7 end-of-life is a significant contributor to this trend towards
faster migration. To maintain a high level of security and take
advantage of new language features that other programming
languages have had for a long time, migration to the latest version
Java is always the best option if an organization can afford it.
Trisha Gees article in this guide, Why Java 8? illustrates the
positive impact Java 8 can have on your applications. Some
key things enticing developers toward Java 8 are functional
programming features and performance improvements.
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 of
these major indexes. No other language has rankings that are as
consistently high as Javas across all these indices. On the TIOBE
index, one of the longest running indices, Java has been the number
one language for 11 of the last 14 years, and it is currently number
one by a significant margin. Only 3% of respondents in our Java
ecosystem survey said they are pessimistic about the future of Java.
Recommendations: Java has reached a point where its
popularity results in further popularity. More developers are
using it, more open-source utilities exist around it, and there
is more maturity and reliability around the platform and its
ecosystem of tools. As a result, even more organizations and
developers choose to build applications in Java.
Recommendations: While many thought Java would decline after
the announcement of Oracles acquisition of Sun Microsystems
in 2009, it only took a few years to reestablish itself. Now with the
release of Java 8, Java is finally catching up with the expressiveness
of C# and now has the ability to be written with less verbosity than
ever before. People are now optimistic about the future of Java, and
its being used in many of the most well-respected tech companies.
Its popularity in the software industry is expected to continue
and even grow further due to its advantages in data analysis and
embedded systems, which will likely make Java a significant
programming language in the Internet of Things industry.
DZONE.COM/GUIDES
Key
Research
Findings
More than 600 IT professionals responded
to 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%).
VERSION
Java 5 or lower
1%
11%
the use of Java 6 or below for any new apps, and a minuscule
1% said new apps would use Java 5 or lower. As far as existing
apps are concerned, Java 8 has not caught up to Java 7; most
organizations (62%) still have apps built on Java 7, and almost
half (47%) have apps in Java 6. Only 20% of respondents said
they had any existing apps built on Java 8. While this data
shows that many developers are eager to move forward
with Java as it evolves, they are hesitant to refactor existing
applications already built on a previous platform. 18% of Java 7
users who have not moved to Java 8 have no plans to start using
Java 8 in the next 6 months, for either new or existing apps.
02.
57% of respondents have written code in a non-Java, JVMbased language. Groovy (40% of all 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 of the groups who had
tried a specific JVM language, over 80% said they enjoyed
using it. Only Groovy and Scala had large enough groups of
users to make a statistically significant observation about
user opinions. When asked if they would like to use these
languages at their job, 45% of Groovy users said they would,
and 55% of Scala users said they would.
39%
JAVA EE 7
36%
JAVA EE 6
Java 6
10%
47%
Java 7
48%
62%
SPRING 4.X
Java 8
58%
20%
SPRING 3.X
38%
34%
DZONE.COM/GUIDES
CLIENT SIDE
8%8%
6%
43%
68%
TOMCAT
35%
WILDFLY/JBOSS
27%
JETTY
18%
WEBLOGIC
15%
GLASSFISH/PAYARA
15%
WEBSPHERE
6%
NONE
5%
TOM EE
ANGULARJS
BACKBONEJS
REACTJS
EMBERJS
SERVER SIDE
34%
30%
16%
SPRING MVC
JSF
use
Scala/Akka
STRUTS
use Vert.x
DZON E S 2 01 5 GU ID E TO T H E JAVA E C OSYS T E M
DZONE.COM/GUIDES
Why
Java 8?
QUICK VIE W
01
In many cases, Java 8 will improve
application performance without any
specific work or tuning.
02
Lambda expressions, the Streams
API, and new methods on existing
classes are some of the key productivity
improvements.
03
Java 8s new Optional type gives
developers significant flexibility when
dealing with null values, reducing the
likelihood of NullPointerExceptions
BY TRISHA GEE
ITS FASTER
Heres a selling point that might please your boss, the
business, or the operations guys: youll probably find
Java 8 runs your application faster. Generally speaking,
applications that have moved to Java 8 see some sort of speed
improvement without any specific work or tuning. This may
not apply to an application that has been highly tuned to a
specific JVM, but there are a number of reasons why Java 8
performs better:
LAMBDA EXPRESSIONS
Lambda expressions in Java 8 are not just syntactic sugar
over Javas existing anonymous inner classesthe pre-
DZONE.COM/GUIDES
Map and List both have new methods in Java 8. Its worth
checking them out to see how many lines of code they can
save you.
Generally speaking,
applications that have moved
to Java 8 see some sort of
speed improvement without
any specific work or tuning.
STREAMS API
The Streams API gives you f lexibility to query and
manipulate your data. This is a powerful tool. Check out
some of the articles or books on the subject for a more
complete view. Building f luent queries for your data is
interesting in a Big Data world, but is just as useful for
common operations. Lets say, for example, that you have a
list of books and you want to get a list of unique authors for
these books, in alphabetical order:
public List<Author>
getAllAuthorsAlphabetically(List<Book> books)
{
List<Author> authors = new ArrayList<>();
for (Book book : books) {
Author author = book.getAuthor();
if (!authors.contains(author)) {
authors.add(author);
}
}
Collections.sort(authors, new
Comparator<Author>() {
public int compare(Author o1, Author
o2) {
return o1.getSurname().
compareTo(o2.getSurname());
}
});
return authors;
}
DZONE.COM/GUIDES
public List<Author>
getAllAuthorsAlphabetically(List<Book> books)
{
return books.stream()
.map(book -> book.
getAuthor())
.distinct()
.sorted((o1, o2) ->
o1.getSurname().compareTo(o2.getSurname()))
.collect(Collectors.toList());
}
Here its even more obvious that the sorted method orders
by the authors surname.
EASY TO PARALLELIZE
We spoke about better out-of-the-box performance, and
in addition to those earlier mentioned features, Java 8
can explicitly make use of more CPU cores. By simply
replacing the method stream in the examples above with
parallelStream, the JVM will split the operation into
separate jobs and use fork/join to run them on multiple
cores. However, parallelization is not a magic incantation
to make everything faster. Doing operations in parallel
always requires more worksplitting up operations and
recombining resultsand will therefore not always take
8
less time. But this option is very interesting for areas that
are suitable for parallelization.
MINIMIZE NULL POINTERS
Another new feature of Java 8 is the new Optional type.
This type is a way of explicitly stating 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 always be non-null, minimizing the chances of
running into a NullPointerException.
diving deeper
@SPRINGROD
@LUKASEDER
@PETERLAWREY
@REZA_RAHMAN
@TRISHA_GEE
@ADAMBIEN
@JODASTEPHEN
@JBONER
@JSTRACHAN
Web Dev
DevOps
dzone.com/java
dzone.com/webdev
dzone.com/devops
TOP JAVA
REFCARDZ
Core Java
TOP JAVA
WEBSITES
TOP JAVA
TUTORIALS
ProgramCreek
Vogella
IBM DeveloperWorks
Programming By Doing
programcreek.com
ibm.com/developerworks/java
Baeldung
baeldung.com
vogella.com
programmingbydoing.com
Java (Beginner)
Programming Tutorials
bit.ly/YouTubeJava
DZONE.COM/GUIDES
10
SPONSORED OPINION
Getting the
Most Out of
Code Review
To get the most value out of code review, there are four key
aspects one needs to have in mind:
The right code review tool is half the job. The rest is up
to you!
Upsource
by JetBrains
Upsource is a smart, lightweight code review and collaboration tool that provides
unique IDE-level Java code insight.
CATEGORY
Code Review
NEW RELEASES
Semi-Annual
OPEN SOURCE?
No
CASE STUDY
Our team at Zando.co.za implemented a code review culture to
improve the way we developed and maintained our eCommerce
platform, and we were looking for the right tool: after watching
the demo videos for Upsource on the day of its release, we
installed it right away. As a team, weve come to know and trust
the JetBrains brand and were excited to experiment with this
new shiny toy! Installation was extremely simple, and we were
up and running very quickly. JetBrains put a lot of thought into
2.0, and Upsource now boasts a lot of the features weve been
waiting for since we began code reviewing intensely. Many
thanks to JetBrains and the Upsource team for a great piece of
software that gets things done, instead of getting in our way!
BLOG blog.jetbrains.com/upsource
STRENGTHS
Major VCSs are supported: Git, Mercurial, Subversion,
and Perforce
Upsource features Java code insight that helps you conduct
code review faster and more easily
With the IDE integration plugin, you do not have to leave
your IDE to perform a review
Comprehensive repository browsing and powerful search
NOTABLE CUSTOMERS
Companies all over the world, large and small, trust team
collaboration tools from JetBrains.
WEBSITE jetbrains.com/upsource
11
DZONE.COM/GUIDES
First Steps
in Java
Microservices
QUICK VIE W
01
02
03
04
BY IVAR GRIMSTAD
APPLICATION
SECURITY
PERSISTENCE
MESSAGING
TRANSACTIONS
INTEGRATION
PRESENTATION
JVM
OPERATING SYSTEM
HARDWARE
DZONE.COM/GUIDES
PERSISTENCE
MESSAGING
TRANSACTIONS
INTEGRATION
PRESENTATION
JVM
OPERATING SYSTEM
HARDWARE
This approach can involve tools like Spring Boot and Wildf ly
Swarm.
SPRING BOOT
Spring Boot and the Spring Cloud projects have excellent
support for building microservices in Java. Spring Boot allows
you to pick and choose various parts of the Spring ecosystem,
as well as popular external tools and then package them along
with your application in a JAR file. Spring Initializr allows
you to do this with a simple checkbox list form. A simple Hello
World service is shown in this example:
GIST SNIPPET: bit.ly/1YgUO9c
WILDFLY SWARM
A Java EE counterpart to Spring Boot is WildFly Swarm. It
enables you to pick and choose which parts of the Java EE
specification you need and package them and your application
in a JAR file. The Hello World example looks like this:
GIST SNIPPET: bit.ly/1LADHW9
SNOOP
The observant reader may have noticed the
@EnableEurekaClient annotation in the Spring Boot code
snippet from before. This annotation registers the service with
Eureka, making it discoverable by service consumers. Eureka
is a part of the Spring Cloud bundle and is an extremely easyto-use and configure service discovery solution.
Java EE does not offer this functionality out of the box,
but there are several open-source solutions available. One
such solution is Snoop, which functions in a similar way to
Eureka. The only thing needed to make a Java EE microservice
available for service lookup is the @EnableSnoopClient
annotation as shown in this example:
GIST SNIPPET: bit.ly/1Kp2PP1
CONCLUSION
Java is an excellent choice when building microservices. Any
of the approaches described in this article will get things done.
The most appropriate method for your particular case depends
on the requirements of the service. For simpler services, a
container-less or self-contained service is the better choice, but
more advanced services may be faster and easier to implement
with the power of an in-container implementation. Either way,
Java is a proven ecosystem for implementing microservices.
APPLICATION
JAVA EE CONTAINER
JVM
OPERATING SYSTEM
HARDWARE
13
Challenges
70%
31%
Performance
User Experience
Transactions
Application Map
1:1
of IT
organizations
suffer from
slow apps
learn about
problems
from end
users
performance
issues take more
than a month to
resolve
IDG, 2013
Gartner, 2012
Forrester, 2013
fit
Improved app
performance
Reduced time
spent in war
rooms
5
Faster
development of
new apps and
features
3
4
Improved
app user
satisfaction
Reduced
cost of
fixing apps
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 used
herein 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.
75%
SteelCentral AppInternals
SPONSORED OPINION
Developing and
Delivering HighPerforming
Applications
SteelCentral
by Riverbed Technology
Trace all transactions from user device to back-end. Get comprehensive visibility and
analytics across apps, networks and infrastructure.
CATEGORY
APM
NEW RELEASES
Quarterly
OPEN SOURCE?
No
CASE STUDY
The web systems team at National Instruments is tasked with
ensuring that its public website, www.ni.com, runs optimally.
They used to spend 1000s of hours each year troubleshooting
issues caused by newly released apps. Their inability to quickly
find causes of app performance problems created tension between
them and the developers, and often hurt user experience. The
web systems team now uses AppInternals to quickly diagnose
root causes of app performance problems. Troubleshooting time
is down by 90%, along with MTTR. Developers use AppInternals
to test their code resulting in 20% to 30% fewer issues introduced
into production. Scheduled updates are up from 16 to 120 per year.
ni.com is more stable and delivers better user experience.
BLOG riverbed.com/blogs/
STRENGTHS
Major VCSs are supported: Git, Mercurial, Subversion, and
Perforce
Upsource features Java code insight that helps conduct
code review faster and easier
With IDE integration plugin, you do not have to leave your
IDE to perform a review
Comprehensive repository browsing and powerful search
NOTABLE CUSTOMERS
Asurion
Shell
National Instruments
Visa
WEBSITE appinternals.com
15
DZONE.COM/GUIDES
Production
Debugging Is
Not a Crime
BY ALEX ZHITNITSKY
QUICK VIEW
01
02
03
04
This is why, for every log line printed out, we need to be able to
extract the full context to understand exactly what happened
there. Some data might come from the logger itself and the
location the log is created in; other data needs to be extracted
at the moment of the event. A good way to trace such errors
to their origin would be generating UUIDs at every threads
application entry point.
Those few hours after a new deployment set the tone for its
success. Every once in a while, things go wrong, no matter how
strict your tests are. When your code is out in production and
it meets the real-world architecture and scale of your system,
with real data f lowing through the application, things can go
south pretty quickly. In order to be resilient and stay on top of
things, a strategy needs to be implemented that allows you to:
Thread.currentThread().
setName(prettyFormat(threadName, getUUID(), message.
getMsgType(), message.getMsgID(), getCurrentTime()));
DZONE.COM/GUIDES
You could also write your own custom Java agent, just like
BTrace. One way this helped our team at Takipi was when
a certain class was instantiating millions of new objects
for some reason. We wrote an agent that hooks up to the
constructor of that object. Anytime 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 from. These kinds of problems really pique our teams
interest. On our day-to-day were building a production grade
agent that knows how to extract the variable values that cause
each exception or logged error, all across the stack trace, and
across different machines.
TESTING IN PRODUCTION: NOT FOR THE FAINTHEARTED
Jokes aside, testing in production is a serious practice that
many companies are taking part in. They dont cancel the
testing phase completely, but they understand that staging
environments are not enough to mimic full-blown distributed
environments, no matter how much time and effort you
put into setting them up. The only real testing takes place in
production, with real data f lowing through the system and
unexpected use cases being thrown at it.
There are several approaches you can adopt for performing
controlled production testing, depending on what kind of
functionality it is that youre trying to test. One option is
duplicating and routing live traffic both through the current
system and through the new version of the component that
youre testing. This way you can see how the new component
behaves and compare it directly to the current version without
risking the delivery of wrong results back to the user if, for
example, its some data crunching task.
Another option is segmenting your traffic and releasing
new features 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). Sometimes its also helpful to add more finegrained monitoring and logging to the canary server. Another
option is to add more abstraction on top of the canary setup,
implementing and making use of gradual rollouts with feature
switches, or A/B testing small changes in your application to
see how they impact performance.
FINAL THOUGHTS
Debugging Java applications in production requires a creative
and forward-thinking mindset. 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.
[1] https://github.com/takipi/jstack
17
Java Popularity:
By the Numbers
01
02
Methodology:
Measures the number of public and private GitHub repositories using each language
(excluding forks) as detected by Linguist.
JAVA
JAVASCRIPT
JAVA
C++
RUBY
C#
PHP
PYTHON
PYTHON
CSS
OBJECTIVE-C
PHP
JAVASCRIPT
PERL
2003
04
05
06
07
08
09
10
11
12
13
14
RANK
RANK
Methodology:
Measures language search trends on Google, Google Blogs, Amazon, Bing, Yahoo!,
Baidu, Wikipedia, and YouTube.
knows how widespread the use of Java is, but how popular
GitHub Language
Rankings
TIOBE Programming
Community Index
C++
OBJECTIVE-C
8
9
10
EMACS LISP
VmL
09
10
2008
15
11
12
04
JAVASCRIPT
PERL
PHP
Methodology:
Measures the number of questions on Stack Overflow with each language tag.
PYTHON
RANK
3%
2%
1%
JAVASCRIPT
JAVA
C#
PHP
PYTHON
C++
CSS
SQL
RUBY
OBJECTIVE-C
10
2006
07
08
09
10
11
12
13
14
15
C
2008
09
10
11
12
15
100
2 C
99.9
3 PYTHON
99.5
4 C++
99.4
5 C#
91.3
6 R
84.8
84.5
76.2
8 JAVASCRIPT
10 MATLAB
CREATED BY DZONE.COM
83.0
72.4
RedMonk 15 Program.
Language Rankings
Methodology:
Measures the number of repositories on GitHub using each language and the number of
questions on Stack Overflow with each language tag.
# OF GITHUB REPOS
1 JAVA
CURRENT RANKINGS
CURRENT RANKINGS
06
Methodology:
Measures Google searches, social media trends, GitHub and SO projects/tags plus
activity, and recent job postings on Career Builder and Dice.
9 RUBY
14
SOURCE makingdataeasy.com/stackoverflow-trends
IEEE Language
Rankings 2015
7 PHP
13
SOURCE bit.ly/indeed-rankings
05
15
Stack Overflow
Language Rankings
C#
14
Methodology:
Measures Indeed.com job posting keyword search results for selected languages. C was
not included because there were too many false positives.
C++
13
SOURCE github.com/blog/2047-language-trends-on-github
HTML
SHELL
03
C#
PERL
JAVA
PYTHON
C++
PHP
CSS
C#
OBJECTIVE-C
R
C
PERL
SCALA
JAVASCRIPT
RUBY
SHELL
HASKELL
DZONE.COM/GUIDES
Reactive
Trends on
the JVM
BY JONAS BONR
01
Reactive Systems rely on a foundation
of asynchronous message-passing to
create loosely-coupled systems that are
responsive, resilient, and elastic.
02
Analytics are being pushed into the
stream (via Spark), which is emerging
as the de facto approach for sub-second
query response times across billions of
rows of data.
03
Fast Data, or streaming data, can
make systems more responsive.
Reactive Streams can make Fast Data
manageable by intelligently controlling
the rate of data consumption.
04
Systems become very resilient when they
are backed by a database with the full
history of an application, which is built
by event logging that is being used as
the Service of Record.
SO WHAT IS REACTIVE?
The Reactive Manifestos goal is to condense the knowledge
around designing highly-scalable and reliable applications
into a set of four required architecture traits:
RESILIENT
The system stays responsive in the face of failure. This applies
not only to highly-available, mission critical systemsany
system that is not resilient will be unresponsive during
and after failure. Resilience is achieved by replication,
containment, isolation, and delegation. Failures are contained
within each component, isolating components from each
other and thereby ensuring that parts of the system can fail
and recover without compromising the system as a whole.
Recovery of each component is delegated to another (external)
component and high-availability is ensured by replication
where necessary. The client of a component is not burdened
with handling its failures.
Over the last two years, the response from the community
has ranged from enthusiastic support (12,000+ signatures
on the Reactive Manifesto) to eye-rolling (my favorite,
in a Slashdot comment: We want a machine that makes
things cold. We dont care how its built. Well call this...
The Refrigerator Manifesto.). Some felt that Reactive
encapsulated key attributes that had long been embraced in
their internal development philosophy, in the same way that
some companies did Agile software development before it
was Agile. Some felt Reactive too prescriptive, while others
felt it was too generic.
20
QUICK VIE W
RESPONSIVE
The system responds in a timely manner if at all possible.
Responsiveness is the cornerstone of usability and utility, but
more than that, responsiveness means that problems may
be detected quickly and dealt with effectively. Responsive
systems focus on providing rapid and consistent response
times, establishing reliable upper bounds so they deliver a
consistent quality of service. This consistent behavior in turn
simplifies error handling, builds end user confidence, and
encourages further interaction.
ELASTIC
The system stays responsive under varying workload. Reactive
Systems can react to changes in the input rate by increasing
or decreasing the resources allocated to service these inputs.
This implies designs that have no contention points or central
DZONE.COM/GUIDES
MICROSERVICES
In traditional Java EE apps, services are written in a very
monolithic way. That ties back to a strong coupling between
the components in the service and between services. App
servers (WebLogic, JBoss, Tomcat, etc.) are encouraging
this monolithic model. They assume that you are bundling
your service JARs into an EAR file as a way of grouping your
services, which you then deployalongside all your other
applications and servicesinto the single running instance of
the app server, which manages the service isolation through
class loader tricks; a very fragile model.
Today we have a much more evolved foundation for
isolationfrom the ground upstarting with, for example,
Docker containers, isolated all the way up through better
hardware and communication protocols. Im excited about
the Microservices momentum because it makes isolation
first class, which is a necessity for resilience. You cant build
a Reactive system without isolating failures and having a
separate context outside the failed component to react to the
failure. You need isolation in order to avoid cascading failures.
FAST DATATHE WORLD IS GOING STREAMING
The whole movement towards Fast Data and real-time data
requires closed feedback loops for getting data into and out
of the system. The benefit of Fast Data is that you get systems
that are more responsive and adaptive, allowing you to feed
the results of real-time data processing back into the running
system, which allows it to react to change. This capability
can also be used to make these systems more resilient and
scalable, but with reduced complexity.
One of the early pitfalls for streaming data in Fast Data
scenarios, for example, was the lack of back-pressure. If a
processing stage produced data faster than the next stage could
consume that data, it would lead to a failure in the consumer,
which would cause cascading failures throughout the entire
processing pipeline. Reactive Streams address that problem
by bringing back-pressure to streams to control the rate of data
consumption. In general, the back-end systems that scale Big
Data and IoT are a perfect fit for Reactive architectures.
EVENT LOGGING AS THE SERVICE OF RECORD
Another area in which Im seeing a lot of Reactive innovation,
specifically on the JVM, is when event logging is being used
as the Service of Record. In event logging, each state change
to the application is materialized as an event in the log. What
you get is a database with the full history of the application;
a database of facts, rather than the traditional SQL database
approach that only works with a cache of the subset of the
log, as Pat Helland aptly put it. If your durable state is based
on an event log, it can be easily replicated and replayed
somewhere else to bring the system or component up to speed
wherever it is. This is a great pattern for failure handling in
distributed stream processingif one thing fails it can be
brought back up to speed and continue. Architectural patterns
making use of the event log include Event Sourcing and CQRS.
This way of thinking about durable state works very well with
Microservices, where each service can have its own isolated,
strongly consistent, event log-based, durable storage that
relies on eventual consistency between the services for scale
and availability. Fast Data is the foundation for this durable
state and streaming architecture.
REACTIVE EVOLVING FROM PRINCIPLES TO
IMPLEMENTATION PATTERNS
I believe that Reactive is on a similar arc to the one the Agile
methodology followed. A lot of companies were using Agile
methodologies without calling it Agile years before the term
was coined. But calling it Agile made it easier to talk about
and communicate the philosophy, so the Agile Manifesto was
created. When this set of principles became more familiar in the
developer community, you started to see the adoption of Scrum
for distilling the essence of the processes and XP for supporting
programming principles and practices like test-driven
development, pair programming, and continuous integration.
Today were seeing the same shift for Reactive. The core
message of Reactive is aimed at core principles rather than
tools and techniques. But Microservices, Fast Data, and Event
Logging are great examples of how implementation patterns
within the Reactive movement are starting to get more
definition and momentum.
JONAS BONR is the co-founder and CTO of Typesafe. He is also the
inventor 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.
21
DZONE.COM/GUIDES
Constantly monitoring
your applications so
you dont have to.
New Relics SaaS-based Application
Performance Monitoring helps you
build, deploy, and maintain great web
and mobile software.
newrelic.com/java
Transaction Tracing
Thread Profiling
Deployment Comparisons
SPONSORED OPINION
Interoperability
Tools Help Cure
Developer Fatigue
the best reason to start learning about it and the best way
to retain the skills once learned. Jumping in and learning
a new technology for its own sake (aka warehousing) is
popular, but much less effective.
With gradual introduction to new technologies and a focus on
the aspects that can help solve immediate problems, you can
stay productive while still using familiar tools, and introduce
new stuff one feature at a time. While not possible in all
cases, if your familiar platform is Java or .NET, and the new
technology is .NET or Java-based, JNBridgePro can help.
How can you possibly keep up? Perhaps the best way is to take
it slowly: integrate the features of new technologies as you
need them. In my experience, the need to use a technology is
JNBridgePro
by JNBridge
Exponentially faster than web services, JNBridgePro can fully expose any Java or .NET
API or binaryservices-enabled or not.
CATEGORY
Java and .NET
Interoperability
NEW RELEASES
Semi-Annual
OPEN SOURCE?
No
CASE STUDY
Customers use JNBridgePro to connect Java and .NET in all kinds
of applications. Adobe adds .NET integration services into Javabased ColdFusion. Swiss Re delivers a standardized numerical
analysis Java API for their actuaries to code into Excel. A media
company calls Apache Phoenix, a relational database layer
over HBase, from an IIS application. ShapeTech uses the Javabased NASA World Wind API in their C# defense training apps.
Ebiexperts integrates Java-based SAP BusinessObjects into their
.NET-based BI product. A financial services firm accesses serverside EJBs for client data and screen pops it into their call centers
.NET desktop telephony display. An aerospace company embeds
.NET-based video controls into a Swing GUI user control.
BLOG jnbridge.com/jnblog
STRENGTHS
Access Java classes from .NET as if Java were a .NET
language (C#, VB, etc)
Access .NET classes (written in C#, VB, F#...) from Java as if
they were Java classes
Gain full access to any API on the other side, whether its
service-enabled or not
Expose any Java or .NET binary, no source code required
Deploy anywhere: same process, separate processes,
separate devices, across a network
NOTABLE CUSTOMERS
More than 600 global enterprises and software development
houses rely on JNBridge products in a variety of applications,
including aerospace, financial services, healthcare,
manufacturing, media, retail, telecommunications, and more.
WEBSITE jnbridge.com
23
DZONE.COM/GUIDES
Java Ecosystem
Executive
Insights
QUICK VIE W
01
02
03
BY TOM SMITH
As the owner of Java, and the JDK, Oracle is clearly the most
important player in the ecosystem, producing the official
elements of the platform; however, it is not the only player.
In fact, there are at least 60 million Java developers. The Java
Advisory Committee is actively overseeing the evolution of
Java and ensuring standards and best practices are being
maintained. The JCP is driving evolution in every sector.
Google is important because of Android. IBM is committed
to leading development and standards while serving on the
governing board for OpenJDK. Pro-open-source organizations
like Pivotal/Spring, Apache, Typesafe, and Red Hat are adding
more interest and innovation around Java. Azul is leading JVM
development while SAP is staying involved in development as
well. Open-source communities around JVM languages like JRuby,
Groovy, Clojure, and Scala are driving additional innovation.
03
Twitter is the most popular way for respondents to stay upto-date on the deluge of Java ecosystem trends, with most
respondents following specific thought leaders and using
DZONE.COM/GUIDES
Twitter to find the most relevant and timely blog posts. The
Java community and elements thereof, as well as developer
communitieslike DZones Java Zone (formerly Javalobby),
InfoQ, Hacker News, and StackExchangewere also mentioned
as being great sources of knowledge and information.
04
25
SPONSORED OPINION
Continuous Delivery
Is Eating DevOps as
Software Is Eating
the Business
What if you could release dozens of tested software
improvements to production daily? Could your business respond
to market pressures more quickly? The answer is yesand
continuous delivery makes it possible.
Continuous delivery involves automation of software delivery
pipelinesfrom code to production. With automation, releases
are delivered more quickly than is possible with legacy
processes. Delivery can occur as often as several times each
hour, day or week. Deployment becomes a non-event.
WHETHER YOU DEVELOP IN JAVA OR NOT, THE TREND
Jenkins Platform
by CloudBees
Based on the time-tested, proven, extensible, and popular Jenkins automation platform.
Advanced CD Pipeline execution and management.
CATEGORY
Continuous Deployment
and CI Platform
NEW RELEASES
As Needed
OPEN SOURCE?
Yes
STRENGTHS
Proven CI/CD platform
Built-in high availability
CASE STUDY
Challenge: Orbtiz needed to shorten delivery times for more than 180
applications that power 13 different websites.
Advanced analytics
Enterprise scale-out features
Solution: Refine software delivery processes and implement opensource Jenkins and CloudBees solutions for continuous delivery to
automate tests, ensure reliable builds, and increase build consistency
across the organization.
NOTABLE CUSTOMERS
Netf lix
Nokia
TD Bank
Orbitz
Lufthansa
Apple
WEBSITE cloudbees.com
SPONSORED OPINION
Microservices
and Cloud
Native Java
Spring Cloud
by Pivotal
Spring Cloud Services for Pivotal Cloud Foundry 1.0 beta packages server-side components of
Spring Cloud projects and makes them available as services inside Pivotal Cloud Foundry.
CATEGORY
Java Framework for
Distributed Computing
NEW RELEASES
As Needed
OPEN SOURCE?
Yes
STRENGTHS
Full Cloud Foundry service broker
Threat modeling, supports OAUTH2, HTTPS, and CF UAA
CASE STUDY
Spring Cloud Netf lix provides Netf lix OSS integrations for
Spring Boot apps through autoconfiguration and binding to the
Spring Environment and other Spring programming model
idioms. With a few simple annotations you can quickly enable
and configure the common patterns inside your application
and build large distributed systems with battle-tested Netf lix
components. The patterns provided include Service Discovery
(Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul)
and Client Side Load Balancing (Ribbon). Eureka instances
can be registered and clients can discover the instances using
Spring-managed beans, and an embedded Eureka server can be
created with declarative Java configuration.
BLOG spring.io/blog
Chris Schaefer
Will Tran
Ben Hale
Craig Walls
Mike Heath
Scott Frederick
Roy Clarkson
WEBSITE cloud.spring.io
27
DZONE.COM/GUIDES
The Power,
Patterns,
and Pains of
Microservices
QUICK VIE W
01
Microservices make software faster
to release and easier to maintain, but
also invite the complexity inherent in
distributed systems.
02
Distributed computing problems are
extremely hard; but many have been
solved already.
03
Use known distributed systems
patterns to make your microservicesbased applications more resilient and
more robust.
BY JOSH LONG
DZONE.COM/GUIDES
29
DZONE.COM/GUIDES
DZONE.COM/GUIDES
Independently deployed
software formalizes
service boundaries and
domain models
DONT REINVENT THE RIDES WHEELS
31
DZONE.COM/GUIDES
CHECKLIST
G ENER AL
U SE ENCA P SUL ATION
CL O SE S T RE A M S
PERFORMANCE
U SE PRIMITI V E T Y PE S
Java has a number of wrapper classes available
for dealing with primitives, but use these
only if they are absolutely necessary for your
application. Wrapper classes are slow, while
primitive types are simple values.
U SE T RY WIT H RE SOURCE S
Empty catch blocks are useless for the readability of your class. You should
always attempt to do something in your catch blocks. At the very least this should
include logging the exception and should possibly inform the user.
In try-catch blocks that include some work with I/O resources, use the try
with resources syntax to ensure that all resources are closed when the
block has completed execution. If you are using a version of Java below
Java SE 7, then use the finally block to clean up resources.
You should never rely on exceptions to catch issues such as an array index out of
bounds, when instead you can use defensive programming in your code to check
if the index is within the size of the array. Exception checks run slower than the
checks you can do within your own code.
WRITTEN BY: James Sugrue is the CIO at Carma, and has been a Zone Leader at DZone since 2008. This list was compiled from James experiences with Java
across a 14 year career, both using Java in practice and reading countless books and articles on the language. He recommends that every Java developer should
read Effective Java by Joshua Bloch.
32
DZONE.COM/GUIDES
Solutions
Directory
PRODUCT
CATEGORY
FREE TRIAL
WEBSITE
AngularFaces
Open Source
angularfaces.com
Apache Ant
Build Automation
Open Source
ant.apache.org
Apache Ignite
Open Source
ignite.apache.org
Apache Ivy
Dependency Manager
Open Source
ant.apache.org/ivy
Apache Maven
Open Source
maven.apache.org
Apache MyFaces
JSF Framework
Open Source
myfaces.apache.org
Apache Struts
Open Source
struts.apache.org
Apache Tapestry
Open Source
tapestry.apache.org
Apache Tomcat
Open Source
tomcat.apache.org
Apache Wicket
Open Source
wicket.apache.org
AppDynamics
APM
appdynamics.com
Artifactory by JFrog
Binary/Artifact Repository
Open Source
jfrog.com/open-source
90 Days
terracotta.org/products/bigmemory
CA Application Monitoring
APM
30 Days
ca.com
Censum by jClarity
GC Analysis
7 Days
jclarity.com
Codenvy IDE
SaaS IDE
codenvy.com
Java Framework
cuba-platform.com
DCHQ
dchq.io
DripStat
dripstat.com
Dropwizard
Open Source
dropwizard.io
APM
30 Days
dynatrace.com
Eclipse
IDE
Open Source
eclipse.org
33
DZONE.COM/GUIDES
PRODUCT
34
CATEGORY
FREE TRIAL
WEBSITE
Finatra
Open Source
twitter.github.io/finatra
GemFire by Pivotal
Open Source
pivotal.io/big-data/pivotal-gemfire
Open Source
gwtproject.org
Gradle
Build Automation
Open Source
gradle.org
Grails
Open Source
grails.org
GridGain
gridgain.com
30 Days
hazelcast.com
Heroku Platform
PaaS
heroku.com
IceFaces by IceSoft
JSF Framework
Open Source
icesoft.org
Illuminate by jClarity
14 Days
jclarity.com
Open Source
infinispan.org
IDE
jetbrains.com/idea
ItsNat
Open Source
itsnat.sourceforge.net
Open Source
oracle.com
redhat.com
JDeveloper by Oracle
IDE
Free Product
oracle.com
2 Weeks
cloudbees.com
Open Source
azulsystems.com
30 Days
jnbridge.com
JNBridgePro
30 Days
jnbridge.com
JRebel by ZeroTurnaround
zeroturnaround.com/software/jrebel
Lift
Open Source
liftweb.net
MyEclipse by Genuitec
IDE
30 Days
genuitec.com/products/myeclipse
NetBeans by Oracle
IDE
Open Source
netbeans.org
New Relic
APM
14 Days
newrelic.com
Nexus by Sonatype
Binary/Artifact Repository
Open Source
sonatype.org/nexus
Oracle Coherence
Open Source
oracle.com
DZONE.COM/GUIDES
PRODUCT
CATEGORY
FREE TRIAL
WEBSITE
Payara Micro
Open Source
payara.fish/home
Play! Framework
Open Source
playframework.com
Plumbr
plumbr.eu
PrimeFaces
JSF Framework
Open Source
primefaces.org
N/A
thinkingsoftware.com
JSF Framework
Open Source
richfaces.jboss.org
Ring
Open Source
github.com/ring-clojure/ring
Ruxit APM
APM
30 Days
ruxit.com
Scalatra
Open Source
scalatra.org
60 Days
smartclient.com
Spray
Open Source
spray.io
Spring Boot
Open Source
projects.spring.io/spring-boot
PaaS
Open Source
cloud.spring.io
Spring MVC
Open Source
spring.io
APM
14 Days
riverbed.com
Takipi
takipi.com
Tasktop Dev
30 Days
tasktop.com/tasktop-dev
Tayzgrid by Alachisoft
Open Source
tayzgrid.com
Upsource by JetBrains
Code Review
jetbrains.com/upsource
Vaadin
Open Source
vaadin.com
Vert.x
Open Source
vertx.io
VisualVM by Oracle
JVM Monitoring
Open Source
visualvm.java.net
8 Hours
ibm.com
Open Source
wildfly.org/swarm
XRebel by ZeroTurnaround
Java Profiler
14 Days
zeroturnaround.com
YourKit
15 Days
yourkit.com
JVM Platform
azulsystems.com
ZK Framework by ZKoss
Open Source
zkoss.org
35
diving deeper
DZONE.COM/GUIDES
I N T O F E AT U R E D J AV A E C O S Y S T E M S O L U T I O N S
jHiccup
BY SALESFORCE
BY AZUL SYSTEMS
PRICING cloudbees.com/products/pricing
PRICING heroku.com/pricing
PRICING azulsystems.com/product/jHiccup
JRebel
BY JNBRIDGE
BY ZEROTURNAROUND
New Relic
BY NEW RELIC
PRICING jnbridge.com/purchase
PRICING zeroturnaround.com/software/jrebel/pricing/
PRICING newrelic.com/application-monitoring/pricing
36
Heroku Platform
Spring Cloud
SteelCentral
Upsource
BY PIVOTAL
BY RIVERBED TECHNOLOGIES
BY JETBRAINS
DESCRIPTION SteelCentral is the only end-toend solution that combines user experience,
application, infrastructure, and network monitoring
for comprehensive visibility and diagnostics, and
centralized control. Development, operations,
and support teams rely on SteelCentral to quickly
expose, diagnose, and fix problems throughout the
application lifecycle.
PRICING cloud.spring.io
PRICING riverbed.com/appinternals/buy
PRICING jetbrains.com/upsource/buy
DZONE.COM/GUIDES
glossary
INTEGRATED DEVELOPMENT
ENVIRONMENT (IDE) An application that
37
Continuous Delivery
Powered by Jenkins
Your DevOps Foundation