Dzone Guidetomodernjava
Dzone Guidetomodernjava
MODERN
JAVA
VOLU M E I I
DZONE.COM/GUIDES
Dear Reader,
Why isnt Java dead after more than two decades? A few
guesses: Java is (still) uniquely portable, readable to
fresh eyes, constantly improving its automatic memory
management, provides good full-stack support for highload web services, and enjoys a diverse and enthusiastic
community, mature toolchain, and vigorous dependency
ecosystem.
Java is growing with us, and were growing with Java. Java
8 just expanded our programming paradigm horizons (add
Church and Curry to Kay and Gosling) and were still learning
how to mix functional and object-oriented code. Early next
year Java 9 will add a wealth of bigger-picture upgrades.
But Java remains vibrant for many more reasons than the
robustness of the language and the comprehensiveness of
the platform. JVM languages keep multiplying (Kotlin went
GA this year!), Android keeps increasing market share, and
demand for Java developers (measuring by both new job
posting frequency and average salary) remains high. The key
to the modernization of Java is not a laundry-list of JSRs, but
rather the energy of the Java developer community at large.
In fact, the enthusiasm of practicing developers has been
Javas strength since the beginning. The Java platform has
always been backed, but never limited, by a single entity.
Sun first made Java for their own enterprise hardware
and software ecosystem, but WORA made everyone else
want to use it, too. Microsoft failed to fork Java onto a
Windows-flavored JVM because the developer community
spearheaded by Javalobby, DZone in its earliest form
understood the vital importance of a platform-neutral,
industrial-strength, object-oriented language. Google is plenty
gung-ho to create its own languages (Go, Dart) but chose Java
for Android fatefully, since now Java powers far more feature
and smart phones than any other language. A few months
ago Red Hat, IBM, Tomitribe, Payara, and other groups banded
together to sketch out the beginnings of a specification for
microservice support in Java just the most recent of many
platform-driving endeavors of the Java community beyond the
formal JCP.
One of the more convenient effects of Javas strong
commitment to backwards compatibility is that we dont
have to change when the language and/or platform do. But
those changes arent determined by corporate or academic
experiment. A broad-based community means that the Java
ecosystem evolves in response to developers changing realworld needs. Were steering this ship; lets ride it as fast and
as far as it can take us.
So here at DZone were thrilled to publish our 2016 Guide to
Modern Java. No other language has benefited the world as
much as Java, and were proud to be a part of that ecosystem.
We know you are too, and we hope youll be able to do even
more with Java after reading this Guide.
EXECUTIVE SUMMARY
EDITORIAL
BUSINESS
PRODUCTION
CAITLIN CANDELMO
RICK ROSS
CHRIS SMITH
MATT WERNER
MATT SCHMIDT
MICHAEL THARRINGTON
CONTENT + COMMUNITY MANAGER
NICOLE WOLFE
CONTENT COORDINATOR
MIKE GATES
CEO
JESSE DAVIS
EVP & COO
DIRECTOR OF MARKETING
MATT OBRIAN
SARAH DAVIS
INDUSTRY + VENDOR
RELATIONS
JOHN ESPOSITO
TOM SMITH
RESEARCH ANALYST
ANDRE POWELL
G. RYAN SPAIN
KELLET ATKINSON
CONTENT COORDINATOR
CONTENT COORDINATOR
DIRECTOR OF PRODUCTION
SALES@DZONE.COM
ALEX CRAFTS
ART
ASHLEY SLATE
DESIGN DIRECTOR
JIM HOWARD
SR ACCOUNT EXECUTIVE
CHRIS BRUMFIELD
ACCOUNT MANAGER
BY JOHN ESPOSITO
RESEARCH@DZONE.COM
DZONE.COM/GUIDES
Executive
Summary
The most successful programming language in history
owes much of its continuing vitality to the most
effective development community in history. More than
any other widely used programming language, Java
learns from and responds to millions of developers
needs; and the most important perspective on how
Java is working well, and what Java needs to do better,
comes from experienced software engineers spending
hours every day in their Java weeds. Is Java doing its
job? We surveyed 2977 developers to find out. And we
went deeper, seeking to discover exactly how developers
are using Java to solve todays business problems, on
modern deployment topologies, using modern release
practices, in shortening release cycles, with increasingly
modularized application architectures, meeting
increasingly stringent performance requirements.
Heres what we learned.
growth from October 2014 (27%) through May 2015 (38%), August
2015 (58%), and March 2016 (64%).
for high-productivity scripting, Scala for type-safe and multiparadigm programming, Clojure for Lisp-like macros and
code-as-data functional purity, Kotlin for the pleasure of rapid
development and beyond-Groovy performance on Android.
DATA 73% of developers are using lambdas. 70% are using the
both the highest stakes in the future of Java and also the deepest,
most information-rich engagement with the Java community; so
developers aggregate opinions on the future of Java should be an
excellent indicator of the health of the ecosystem.
RECOMMENDATIONS Keep writing Java. Contribute to open-
source Java projects. Participate actively in the communitydriven improvement of the Java platform, whether via the JCP
or through any of the growing set of ancillary organizations and
communities (MicroProfile.io, Java EE Guardians, local JUGs, etc.).
DZONE.COM/GUIDES
Key
Research
Findings
professionals
42% work at companies whose headquarters are
48% 52%
37% 62%
APPLICATION
40%
REPOSITORY
30%
20%
10%
SOURCE FILE
NEVER MIX
DZONE.COM/GUIDES
1. Java 8 offered many new features, but three stood out as most
important because of their possible ubiquity and significant
effects on program readability, efficiency, and correctness:
lambdas (anonymous functions), the Stream API (function
pipelines w/automatic parallelization via ForkJoinPool
threads), and the Optional (return) type. Of these three, we
hypothesized that lambdas were most likely to be used most,
because they are less likely to require deeper rethinking of
application code.
neutral
35
28%
no 8%
2016
30
64% yes
25
20
15
10
5
2015
SCALA
GROOVY
CLOJURE
KOTLIN
DZONE.COM/GUIDES
2. Overall they have: 64% said yes. Developers who also use
Scala, however, skewed these results significantly: 73% of Scala
users report that the "new style" Java 8 users make it more
fun to program in Java, while only 57% of respondents who
do not use Scala report the same. From this we might draw a
twofold conclusion: that Java 8 had a relatively small effect on
non-Scala Java developers "fun" levels, and has particularly
satisfied developers who were already exploring other
programming paradigms on the JVM.
no, and I
dont plan to
30%
39%
yes
HIGHEST RANK
SCORE:
7,035
JCP Development
Community as a whole
(JCP linked or not)
5,451
Oracle
Current (2012+)
Java Champions
not now,
but I plan to
31%
5,395
5,233
Red Hat
4,508
DZONE.COM/GUIDES
Spring Boot to spin up a web app, for example, may or may not
consider "my organization uses Spring" to be true in the context
of a question that also includes "Java EE" versions as answer
options. The current research project aims to discover further
breakdown of enterprise Java platform usage by module and API;
a breakdown with adequate detail proved too cumbersome to
include in this survey, but is planned for a follow-up survey.
DZONE.COM/GUIDES
SPONSORED OPINION
app to APIs, security layers, middleware all the way to the backend. Make sure your monitoring covers the same ground.
Third, get continuous feedback across DevOps by integrating
monitoring across all parts of the SDLC. This is as much
cultural as it is technical. Collaboration across Dev and Ops is
critical to delivering great user experiences.
Fourth, understand how changes impact performance. Being
able to roll back time to see what changed before an issue helps
you find patient zero and resolve problems faster.
PARTNER SPOTLIGHT
By CA Technologies
Find and fix problems early in the development lifecycle with patent-pending
innovations that speed and simplify triage.
CATEGORY
NEW RELEASES
OPEN SOURCE
STRENGTHS
APM
Quarterly
No
CASE STUDY
NOTABLE CUSTOMERS
Lexmark
U.S. Cellular
Vodafone
Innovapost
Itau Unibanco
Produban
BLOG bit.ly/catechblog
TWITTER @cainc
DZONES GUIDE TO MODERN JAVA
National Australia
Bank
WEBSITE ca.com/apm
DZONE.COM/GUIDES
The Java 8
API Design
Principles
QUICK VIEW
Learn to be a better Java
programmer by mastering Java 8
API design and:
Expose a well designed API
and hide the implementation
details
Make sure that client code can
use lamdas
Ensure that the API can evolve
in a controlled way
Get rid of all those nasty
NullPointerExceptions
BY PER MINBORG
CTO AT SPEEDMENT, INC.
10
DZONE.COM/GUIDES
.build();
return Stream.of(comments);
}
DONT DO THIS:
DONT DO THIS:
public String[] comments() {
return comments; // Exposes the backing array!
}
11
CONTINUED
DZONE.COM/GUIDES
DONT DO THIS:
DO THIS:
public interface Line {
Point start();
Point end();
int length();
DONT DO THIS:
);
AVOID OVERUSINGDEFAULTMETHODS
ININTERFACES
Default methods can easily be added to interfaces and
Objects.requireNonNull(point);
segment.add(point);
}
DONT DO THIS:
public void addToSegment(Segment segment, Point point) {
segment.add(point);
}
12
PER MINBORG has been a Java Developer since Java 1.0 and runs
a popular Java blog and the open-source project Speedment, which
is a tool for accelerating development and execution performance
of Java database applications. Per is a DZone MVB and has also
held numerous presentations on various Java topics, for example at
JavaOne in San Francisco and at other larger Java events.
DZONE.COM/GUIDES
Project
Jigsaw Is
Coming
QUICK VIEW
01
02
03
04
BY NICOLAI PARLOG
FREELANCER AT CODEFX
CREATING MODULES
But how does the module declaration work, and how do the
compiler and JVM interpret it?
(By the way, I assume reading compiler and JVM is as tiring as
writing it, so I will forego some precision and use Java instead.)
MODULE DECLARATION
As stated above, a module declaration defines a modules name,
dependencies, and API. It is usually defined in module-info.java
and looks like this:
module MODULE_NAME {
requires OTHER_MODULE_NAME;
requires YET_ANOTHER_MODULE_NAME;
exports PACKAGE_NAME;
exports OTHER_PACKAGE_NAME;
exports YET_ANOTHER_PACKAGE_NAME;
}
13
JAR. At runtime, the JVM will read the classes and resources along
with module-info.class and turn it all into a module.
NAME
A modules name can be arbitrary, but to ensure uniqueness, it
is recommended to stick with the inverse-URL naming schema
for packages. Guava, for example, will likely be com.google.
guava, and Apache Commons IO could be either org.apache.
commons.commons_io or org.apache.commons.io.
DZONE.COM/GUIDES
API
By default, all types are internal to the module and not visible
outside of it. But surely some types should be visible to the outside,
right? Yes, and this is done by exporting the packages that contain
these types with the exports clause. Other code, and even
reflection, can only access public types in exported packages.
name, the first one found during the scan will be loaded
and will shadow the others.
There is no way to reliably run an application that depends
strong encapsulation
improved security, maintainability, and performance
MODULE GRAPH
The information contained in module descriptors gives Java the
ability to actually understand whats going on between modules.
So, instead of the big ball of mud it created before, it can now
map how they relate to each other.
readability
ACCESSIBILITY
accessibility
Together with readability, the exports clauses are the basis for
Accessibility:
14
reliable configuration
CONTINUED
DZONE.COM/GUIDES
BIRTH PAINS
But not all is well
MIGRATION CHALLENGES
Besides the core features we just discussed, Jigsaw entails a
lot of changes under the hood. While almost all of them are
backwards compatible in the strict meaning of the word, some
interact badly with existing code bases. In the end, whether you
modularize your application or not, running on Java 9 may break
your code.
15
(by aliasing)?
Is it helpful that a module can make its dependencies
SUMMARY
The most important takeaway is that Jigsaw introduces
modules: JARs with a module descriptor that gives them names,
explicit dependencies, and a well-defined API. The module
graph, readability, and accessibility build on these descriptors to
tackle JAR hell and other existing problems as well as to provide
reliable configuration, strong encapsulation, and improved
security, maintainability, and performance. But Jigsaw will make
some migrations to Java 9 daunting and is also being criticized
for a number of shortcomingsperceived or real.
To see for yourself, download JDK 9, play around with itmaybe
by following my hands-on guide and try to judge or even spike
your codes migration.
NICOLAI PARLOG is the editor of SitePoints Java channel,
writes a book about Project Jigsaw, blogs about software
development on codefx.org, and is a long-tail contributor to several
open source projects. You can hire him for all kinds of things.
DZONE.COM/GUIDES
Modernize your
approach with
microservices
With a microservices architecture built on IBM Bluemix,
you can quickly and easily build, test and maintain complex
applications that are agile, reliable, scalable, and secure.
ibm.com/java
16
Copyright IBM Corporation 2016. IBM, the IBM logo, Bluemix and ibm.com are trademarks of International Business
Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks
of IBM or other companies. A current list of IBM trademarks is available on the Web at Copyright and trademark
information at www.ibm.com/legal/copytrade.shtml.
SPONSORED OPINION
Understand the
What, Why and
How of Using
Microservices
PARTNER SPOTLIGHT
NEW RELEASES
OPEN SOURCE
STRENGTHS
Continuous
Yes
CASE STUDY
The KLM Open, one of the oldest golf tournaments in the
European Tour, attracts an average of 45,000 visitors and
wanted to provide fans with a new and more interactive mobile
application but lacked the infrastructure and expertise needed
to develop and deploy such a solution. Turning to IBMs Bluemix
deployment model
PayPal
GitHub
GameStop
Apple
Acccenture
Tumblr
Tata
BLOG developer.ibm.com/wasdev/blog
17
NOTABLE CUSTOMERS
TWITTER @IBMBluemix
DZONES GUIDE TO MODERN JAVA
WEBSITE ibm.com/bluemix
DZONE.COM/GUIDES
QUICK VIEW
REACTIVE MICROSERVICES:
Driving Application
Modernization Efforts
BY MARKUS EISELE
01
02
03
18
RESPONSIVE
A responsive application satisfies the consumers
expectations in terms of availability and real-time
responses. Responsiveness is measured in latency, which
is the time between request and response. Especially with
many small requests by mobile or internet-connected
devices, a microservices-based architecture can achieve
this using the right design.
DZONE.COM/GUIDES
RESILIENT
A very high-quality service performs its function without
any downtime at all. But failures do happen, and handling
and recovering from the failure of an individual service
in a gentle way without affecting the complete system
is what the term resiliency describes. While monolithic
applications need to be recovered completely and handling
failures mostly comes down to proprietary infrastructure
components, individual microservices can easily provide
these features, for example by supervision.
ELASTIC
A successful service will need to be scalable both up
and down in response to changes in the rate at which
the service is used. While monoliths usually are scaled
on a per server basis, the flexibility and elasticity that
comes with microservices has a much greater potential to
respond to changing workloads.
MESSAGE DRIVEN
And basically the only way to fulfill all the above
requirements is to have loosely coupled services with
explicit protocols communicating over messages.
Components can remain inactive until a message arrives,
freeing up resources while doing nothing. In order to
realize this, non-blocking and asynchronous APIs must be
provided that explicitly expose the systems underlying
message structure. While traditional frameworks (e.g.
Spring and Java EE) have very little to offer here, modern
approaches like Akka or Lagom are better equipped to help
implement these requirements.
ISOLATION
It is not enough to build individual services. These
services also need to isolate their failures. Containing
and managing them without cascading throughout all the
services participating in a complete workflow is a pattern
referred to as bulkheading. This includes the ability to heal
from failure, which is called resilience. And this highly
depends on compartmentalization and containment of
failure. Isolation also makes it easier to scale services on
19
AUTONOMY
Acting autonomously as a microservice also means
that those services can only promise their behavior by
publishing their protocols and APIs. And this gives a
great amount of flexibility around service orchestration,
workflow management, and collaborative behavior.
Through communication over well defined protocols,
autonomous services also add to resilience and elasticity.
Lagom services are described by an interface, known as a
service descriptor. This interface not only defines how the
service is invoked and implemented, it also defines the
metadata that describes how the interface is mapped down
onto an underlying transport protocol.
public interface HelloService extends Service {
ServiceCall<String, String> sayHello();
DZONE.COM/GUIDES
ASYNCHRONOUS MESSAGE-PASSING
Communication between microservices needs to be
based on asynchronous message-passing.
Besides being the only effective help in isolating the
MOBILITY
Another requirement for microservices is the ability
to run independent of the physical location. And
asynchronous message-passing provides the needed
decoupling, which is also called location transparency:
this gives the ability to, at runtime, dynamically scale the
microserviceeither on multiple cores or on multiple
nodeswithout changing the code. This kind of service
distribution is needed to take full advantage of cloud
computing infrastructures with microservices.
A successful microservices services architecture needs to be
designed with the core traits of Reactive Microservices in
mind. Isolation, Single Responsibility, Autonomy, Exclusive
State, Asynchronous Message-Passing, and Mobility are
required to build out a reactive microservice architecture.
The most interesting, rewarding, and challenging parts
take place when microservices collaborate and build a
complete system. This is the chance to learn from past
failures and successes in distributed systems and
microservices-based architectures.
20
DZONE.COM/GUIDES
7 HAB IT S O F
Private Internet Access: Easy VPN service (great for hotels and
public networks)
Franz: One chat app to rule them all! Franz supports Slack, Hipchat,
Facebook Messenger, GChat, Whatsapp, and Telegram (and many
others)
RecordIt: Multimedia recorder that turns quick screencasts into
animated gifs
JWT Inspector: Decode, inspect, and debug JWTs from cookies,
local storage, and requests, straight from your browser with this
Chrome extension, by Stormpath
Take breaks. For real. Get up and walk away from your computer, think
about something other than work. Apps like Pause can help force your
brain to disengage from work and slow down.
5. AUTOMATE WHERE POSSIBLE
Scripts are your friend. Take the time to automate your repetitive tasks, even
the simple ones. Those saved seconds add up, and can eliminate errors.
6. DONT STAY STUCK
Start by not being afraid to spike and delete: Try out different approaches
and explore not just their impact on your project and interaction with
existing code, but also where you get stuck. Then, delete that and write
some tests.
OPEN A BOOK!
21
FOR MAC
DZONE.COM/GUIDES
The Elements
Of Modern
Java Style
BY MICHAEL TOFINETTI
QUICK VIEW
01
02
03
22
Nest code and use 4 spaces for indentation. This gives a good
trade-off between emphasizing the text indentation at each
level and does not push text too far into the line if multiple
indentations levels are required.
DZONE.COM/GUIDES
Aligned Braces are better for making the code consistent and
symmetrical, and this especially becomes obvious when the
statement before the first open brace is longer than a single line.
23
...
sequentialCommandProcessor.cleanUp();
...
DZONE.COM/GUIDES
CHAINING CONSTRUCTORS
public ChainedConstructor()
{
// Common setup
...
}
public ChainedConstructor(ObjectTypeA a)
{
ChaintedConstrucor();
this.a = a;
}
EXCEPTION HANDLING
be handled.
At the very least, run-time exceptions should always be
logged. It is very rare that there is an exception that will truly
never occur and can be ignored.
try
{
CONCLUSION
...
}
catch (IOException e)
{
// Should never reach here
logger.debug(Unexpected I/O exception:);
logger.logStackTrace(e);
}
24
SPONSORED OPINION
Java or .NET?
Be TechnologyAgnostic with CrossPlatform Tools
With the proliferation of new platforms and languages,
developers are faced with the challenge of being technologyagnostic, whereby they must mix and match whatever
technologies are necessary to build the best possible system
or to satisfy the end user. Rather than insisting on the purity
of using a single platform or technology, the technologyagnostic developer selects parts of a solution from a wide
array of platforms and other technologies with the aim of
developing a superior or most suitable solution.
Consider the following scenario. A firm has spent years
implementing a trading platform in Java. At some point they
realize they must incorporate a best-of-breed quant package
thats been written in C#. Does the development team resolve
the problem by throwing away the C# library and rewriting it
in Java?
PARTNER SPOTLIGHT
JNBridgePro By JNBridge
Connect anything Java together with anything .NET.
Reuse your existing C#, VB or Java code, and run your applications anywhere.
CATEGORY
Java & .NET Interoperability
NEW RELEASES
Semi-Annual
OPEN SOURCE
STRENGTHS
No
CASE STUDY
25
Gain full access to any API on the other side, whether its
service-enabled or not
NOTABLE CUSTOMERS
Over 600 global enterprises and software development
houses rely on JNBridge products in all kinds of
applications, integrating Java with .NET across every
layer from the UI to the enterprise server backend. See
jnbridge.com/about/customers for details.
TWITTER @jnbridge
DZONES GUIDE TO MODERN JAVA
WEBSITE jnbridge.com
DZONE.COM/GUIDES
26
SPONSORED OPINION
Modernizing
Applications
Many companies are facing the problem of aging
applications that either dont support customers
platforms or dont have a fast enough time to market.
Web as a platform has already won the platform wars
as a platform everybody supports. Even mobile apps are
consolidating towards the web, with emerging browser
features and the ease of findability compared to installable
apps. Your technology stack however defines your time
to market developers can either solve business issues or
use their time on technical issues.
Java as the basis for your technology stack ensures that
your team can stay productive. The less technologies
your team has to juggle the easier it is to get new people
PARTNER SPOTLIGHT
Vaadin
Use a familiar component based approach to build awesome single page web apps faster than with any
other UI framework. Forget complex web technologies and just use Java or any other JVM language. No
plugins or installations required and it works from desktop to mobile.
CATEGORY
NEW RELEASES
OPEN SOURCE
STRENGTHS
Web UI Framework
Every 2 Weeks
Yes
CASE STUDY
Selecting the right tool for the company was imperative back in 2014 so
"Vaadin enabled a highly economic assignment of tasks: the most of the application
NOTABLE CUSTOMERS
including the UI can be implemented by Java developers and only a few specialists
TNT
Nasa
Puma
Accenture
BLOG vaadin.com/blog
27
TWITTER @vaadin
DZONES GUIDE TO MODERN JAVA
CGI
WEBSITE vaadin.com
DZONE.COM/GUIDES
QUICK VIEW
12 Factors and
Beyond in Java
BY PIETER HUMPHREY PRINCIPAL PRODUCT MARKETING MANAGER AT PIVOTAL
AND MARK HECKLER PRINCIPAL TECHNOLOGIST/DEVELOPER ADVOCATE AT PIVOTAL
01
02
Establish a common
understanding between IT and
users of what the modernization
drivers are so project components
can be prioritized.
03
04
05
<parent>
1. ONE CODEBASE
While less of a Java-specific concept, this factor generally
refers to getting to a single code base managed in source
control or a set of repositories from a common root.
Getting to a single codebase makes it cleaner to build and
push any number of immutable releases across various
environments. The best example of violating this is when
your app is composed of a dozen or more code repositories.
While using one code repository to produce multiple
applications can be workable, the goal is a 1:1 relationship
between apps and repos. Operating from one codebase can
be done but is not without its own challenges. Sometimes
one application per repository is the simplest thing that
works for a team or organization.
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository
-->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</
artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</
artifactId>
</dependency>
2. DEPENDENCY MANAGEMENT
<dependency>
28
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</
artifactId>
</dependency>
DZONE.COM/GUIDES
4. CONFIGURATION
This factor is about externalizing the type of configuration
5. LOGS
Logs should be treated as event streams: a time-ordered
sequence of events emitted from an application. Since
you cant log to a file in a cloud, you log to stdout/stderr
and let the cloud provider or related tools handle it. For
example, Cloud Foundrys loggregator will turn logs into
streams so they can be aggregated and managed centrally.
stdout/stderr logging is simple in Java:
Logger log = Logger.getLogger(MyClass.class.getName());
log.setLevel(Level.ALL);
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new SimpleFormatter());
log.addHandler(handler);
handler.setLevel(Level.ALL);
log.fine(This is fine.);
29
6. DISPOSABILITY
If you have processes that takes a while to start up or shut
down, they should be separated into a backing service and
optimized to accelerate performance. A cloud process is
7. BACKING SERVICES
A backing service is something external your app depends
DZONE.COM/GUIDES
8. ENVIRONMENTAL PARITY
Shared development and QA sandboxes have different
Domain-specific telemetry
9. ADMINISTRATIVE PROCESSES
REPLATFORMING
In conclusion, its important to realize that you dont need
of where it is deployed.
11. PROCESS
12.CONCURRENCY
Cloud platforms are built to scale horizontally. There
are design considerations hereyour app should be
disposable, stateless, and use share-nothing processes.
Working with the platforms process management model
30
DZONE.COM/GUIDES
Diving Deeper
INTO JAVA
@reza_rahman
@starbuxman
@trisha_gee
@lukaseder
@arungupta
@myfear
@mariofusco
@dblevins
@omniprof
@javinpaul
JAVA ZONES
LEARN MORE & ENGAGE YOUR PEERS IN OUR JAVA-RELATED TOPIC PORTALS
Java
Web Dev
DevOps
dzone.com/java
dzone.com/webdev
dzone.com/devops
JavaEE-Guardians.io
Java 8 Lambdas:
dzone.com/refcardz/learn-microservices-in-java
A practical guide complete with examples for
designing Java microservices to support building
systems that are tolerant of failure.
ProgramCreek.com
Java-Source.net
Java Containerization
dzone.com/refcardz/java-containerization
Includes suggested configurations and extensive
code snippets to get your Java application up and
running inside a Docker-deployed Linux container.
Core Java
dzone.com/refcardz/core-java
31
DZONE.COM/GUIDES
32
SPONSORED OPINION
Microservices and
Cloud Native Java
Spring Cloud provides tools for Spring Boot developers
to quickly apply some of the common patterns found in
distributed systems (e.g. configuration management, service
discovery, circuit breakers, intelligent routing, micro-proxy,
control bus, and much much more).When moving into
production, Cloud Native applications can leverage a unique
technology for automation of foundational microservice
infrastructure. Spring Cloud Services for Pivotal Cloud
Foundry packages the certain server-side components of
Spring Cloud, making them available as native managed
services inside Pivotal Cloud Foundry (PCF).For DevOps
teams, this creates powerful autoscaling & automation
possibilities for your services via:
PCF-managed NetflixOSS Eureka
PARTNER SPOTLIGHT
NEW RELEASES
OPEN SOURCE
STRENGTHS
As Needed
No
CASE STUDY
Spring Cloud Netflix provides NetflixOSS integrations for Spring
Chris Sterling
Craig Walls
Chris Frost
Ben Klein
Roy Clarkson
Glyn Normington
Scott Frederick
Will Tran
Java configuration.
Chris Schaefer
Mike Heath
BLOG spring.io/blog
33
TWITTER @SpringCloudOSS
DZONES GUIDE TO MODERN JAVA
WEBSITE cloud.spring.io
Java's impact on the world is very far-reaching. It may not be new to the programming language game, but it is still very
much present in the modern world. According to GitHub stats, Java has been the most popular programming language
since 2005. Since it has been the predominant language for so long, almost every major industry has a major investment
in Java. Here, we've illustrated where Java is all around us, how many Java developer jobs are listed in that industry
based on a LinkedIn Jobs search, and what it's used for in a wide array of industries.
SPACE
NASA uses Java to simulate physics in space.
MOBILE TECHNOLOGIES
HOSPITALS
CITY INFRASTRUCTURE
MILITARY
GAMING
Java has moved beyond what XCode can do in creating virtual and
augmented reality games.
BANKS
Use Tomcat - an open source version of Java web service
technologies for their APIs and web apps.
CONSUMER
ELECTRONICS & IoT
100% of Blu-Ray players ship with Java.
Minecraft was written in Java, which has over 24 million in sales and
was acquired by Microsoft for 2.5 billion dollars.
AUTOMOTIVE
Responsible for operating the accelerometer, thermal sensors for tires and breaks, in-car heart rate monitors, and touchscreen controls.
Java and JavaFX are responsible for collecting and visualizing data such as GPS, engine load, fuel pressure, air intake temp.
DZONE.COM/GUIDES
QUICK VIEW
A Planners Guide
to Migration
BY BEN WILSON
SENIOR CONSULTANT AT VAADIN
36
01
02
Establish a common
understanding between IT and
users on the modernization drivers
and their priorities.
03
04
05
Invest adequately in
understanding the existing
codebase
DZONE.COM/GUIDES
37
CONCLUSION
Migration projects are daunting, especially when applications
are large. Companies used to typical software maintenance
scenarios are not used to scoping and executing these kinds of
projects and many fail. APM, the appropriate reuse of existing
code, and incremental approaches, improve the chances of
success significantly. Getting help from software companies with
experience in migrations is always a good idea if migrations are
unprecedented for the organizations taking the step.
BE N W I L S ON is a senior software professional with over
ten years specialized experience automating the modernization
of large mission-critical enterprise applications, with a focus
on UI modernization. Ben has worked on numerous projects in
the banking, telecoms, government, automotive, and aerospace
sectors, and currently works at Vaadin as a senior consultant.
DZONE.COM/GUIDES
38
SPONSORED OPINION
One Microservice
Is No Microservice.
They Come in Systems.
Individual microservices are comparatively easy to design
and implement; however, learning from Carl Hewitt, just one
microservice is no microservice at allthey come in systems.
Service discovery
Coordination
Security
Replication
Data consistency
Deployment orchestration
Resilience (i.e. failover)
Integration with other systems
PARTNER SPOTLIGHT
NEW RELEASES
OPEN SOURCE
STRENGTHS
Microservices
Framework
Multiple times
per year
Yes
CASE STUDY
Hootsuite is the world's most widely used social media platform
with more than 10 million users, and 744 of the Fortune
1000. Amidst incredible growth, Hootsuite was challenged by
diminishing returns of engineering pouring time into scaling
their legacy PHP and MySQL stack, which was suffering from
performance and scalability issues. Hootsuite decomposed their
legacy monolith into microservices with Lightbend technologies,
creating a faster and leaner platform with asynchronous,
message-driven communication among clusters. Hootsuites new
system handles orders of magnitude more requests per second
than the previous stack, and is so resource efficient that they were
able to reduce Amazon Web Services infrastructure costs by 80%.
BLOG lagomframework.com/blog
39
Hootsuite
Zalando
Samsung
UniCredit Group
iHeart
TWITTER @lagom
DZONES GUIDE TO MODERN JAVA
WEBSITE lagomframework.com
DZONE.COM/GUIDES
How to Implement
a Bi-Directional
Hash Table in Java
QUICK VIEW
01
02
Misunderstanding
mutability can cause
objects stored in a
hash table to become
irretrievable and
essentially disappear.
03
It is possible to implement
hash tables where any
object no matter how
complex or mutable can
be used as a key.
BY WAYNE CITRIN
CTO AT JNBRIDGE
40
For any given object, the hashCode() method must return the
IMPLEMENTATION ASSUMPTIONS
So, what does this mean when forward/reverse map pairs must be
implemented? Lets start with some assumptions:
DZONE.COM/GUIDES
The forward map maps from keys to values. The keys are a
to keys.
mutableUserDefinedObject.modify();
IN CONCLUSION
41
DZONE.COM/GUIDES
QUICK VIEW
Executive Insights
on the State of the
Java Ecosystem
BY TOM SMITH
01
Java continues to be an
important element of
enterprise IT given the
breadth, depth, longevity, and
diversity of the ecosystem.
02
03
of searching.
vendors like Red Hat and the Open Source community have
42
KEY FINDINGS
The JVM platform runs on all machines and the cloud. The
DZONE.COM/GUIDES
going anywhere for the next five to 10 years since its the
given the situation with Oracle and their desire to milk Java
term but diminishing over the long term (10+ years). Even
with all of the new languages being developed, Javas not
43
flexible?
Why arent more companies making contributions to
DZONE.COM/GUIDES
Events
Health Rule Violations Started
IIS
Internet
Information
Services
Device
Java
Java
Transaction Scorecard
Java
Normal
Java
83.1%
0.3%
Very Slow
1.3%
15
Stall
Errors
0.2%
15.1%
175
Shipments DB
Java
44
963
Slow
SPONSORED OPINION
PARTNER SPOTLIGHT
CATEGORY
NEW RELEASES
OPEN SOURCE
Application Performance
Management
Bi-Yearly
No
STRENGTHS
Application Performance Management is a
technology solution that provides end-to-end
business transaction-centric management of the
most complex and distributed applications. Auto-
CASE STUDY
"AppDynamics has enabled us to move towards datadriven troubleshooting rather than gut-feels. The
solution gives us the application intelligence to know
BLOG
45
blog.appdynamics.com
NASDAQ
eHarmony
DIRECTV
Cisco
Citrix
Hallmark
TWITTER @AppDynamics
WEBSITE appdynamics.com
DZONE.COM/GUIDES
Solutions Directory
Java gets even greater when you have the right tools to back you up. This directory contains libraries,
frameworks, IDEs, and more to help you with everything from database connection to release automation,
from code review to application monitoring, from microservice architectures to memory management. Amp
up your Java development with these solutions to make your life easier and your application more powerful.
46
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Akka
Lightbend
Open Source
akka.io
AngularFaces
AngularJS + JSF
Open Source
angularfaces.com
Ansible
Red Hat
Open Source
ansible.com
ANTLR
Open Source
antlr3.org
AnyPoint Platform
MuleSoft
Free Trial
mulesoft.com/platform/
enterprise-integration
Apache Ant
Apache Software
Foundation
Open Source
ant.apache.org
Apache Camel
Apache Software
Foundation
Open Source
camel.apache.org
Apache Commons
Apache Software
Foundation
Open Source
commons.apache.org/
components.html
Apache Commons
DBCP
Apache Software
Foundation
Open Source
commons.apache.org/proper/
commons-dbcp
Apache Commons
IO
Apache Software
Foundation
Open Source
commons.apache.org/proper/
commons-io
Apache CXF
Apache Software
Foundation
Open Source
cxf.apache.org
Apache DeltaSpike
Apache Software
Foundation
Open Source
deltaspike.apache.org
Apache Ignite
Apache Software
Foundation
Open Source
ignite.apache.org
Apache Ivy
Apache Software
Foundation
Open Source
ant.apache.org/ivy
Apache Kafka
Apache Software
Foundation
Open Source
kafka.apache.org
Apache Log4j
Apache Software
Foundation
Open Source
logging.apache.org/log4j/2.x
Apache Lucene
Apache Software
Foundation
Open Source
lucene.apache.org/core
Apache Maven
Apache Software
Foundation
Open Source
maven.apache.org
Apache Mesos
Apache Software
Foundation
Open Source
mesos.apache.org
DZONE.COM/GUIDES
47
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Apache MyFaces
Apache Software
Foundation
Open Source
myfaces.apache.org
Apache OpenNLP
Apache Software
Foundation
Open Source
opennlp.apache.org
Apache POI
Apache Software
Foundation
Open Source
poi.apache.org
Apache Shiro
Apache Software
Foundation
Open Source
shiro.apache.org
Apache Struts
Apache Software
Foundation
Open Source
struts.apache.org
Apache Tapestry
Apache Software
Foundation
Open Source
tapestry.apache.org
Apache Tomcat
Apache Software
Foundation
Open Source
tomcat.apache.org
Apache TomEE
Apache Software
Foundation (esp.
Tomitribe)
Apache Tomcat + Java EE features (CDI, EJB, JPA, JSF, JSP, more)
Open Source
tomee.apache.org
Apache Wicket
Apache Software
Foundation
Simple web app framework (pure Java + HTML with Ajax output)
Open Source
wicket.apache.org
Apache Xerces2
Apache Software
Foundation
Open Source
xerces.apache.org/xerces2-j
AppDynamics
AppDynamics *
appdynamics.com
Artifactory
JFrog
Open Source
jfrog.com/artifactory
ASM
OW2 Consortium
Open Source
asm.ow2.org
AssertJ
Open Source
joel-costigliola.github.io/assertj
AutoPilot
Nastel
APM
Freemium
nastel.com
AWS ECS
Amazon Web
Services
aws.amazon.com/ecs
BigMemory Max
Terracotta
90 Days
terracotta.org/products/
bigmemory
Bintray
JFrog
Open Source
bintray.com
Black Duck
Software
blackducksoftware.com
BlueMix
IBM
ibm.com/bluemix
BouncyCastle
Open Source
bouncycastle.org
CA Application
Monitoring
CA Technologies *
30 Days
ca.com
Cask
Cask
Open Source
cask.co/
Catchpoint
Catchpoint
Free Trial
catchpoint.com
Censum
jClarity
GC log analysis
7 Days
jclarity.com
CGLIB
Raphael
Winterhalter
Open Source
github.com/cglib/cglib
CheckStyle
Open Source
checkstyle.sourceforge.net
DZONE.COM/GUIDES
48
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Chef
Chef Software
Open Source
chef.io/chef/
Cloudbees Jenkins
Platform
Cloudbees
2 Weeks
cloudbees.com
Clover
Atlassian
30 days
atlassian.com/software/clover/
pricing
Codenvy IDE
Codenvy
codenvy.com
Couchbase
Couchbase
Document-oriented DBMS
Open Source
couchbase.com
Coverity
Synopsys
C3P0
Open Source
mchange.com/projects/c3p0
CUBA Platform
Haulmont
cuba-platform.com
Cucumber
Cucumber
cucumber.io
Dagger
Square
Open Source
square.github.io/dagger
DataDirect
Progress Software
Free Trial
progress.com/jdbc
Derby
Apache Software
Foundation
Open Source
db.apache.org/derby
Docker
Docker
Containerization platform
Open Source
docker.com
Dolphin Platform
Canoo
Open Source
dolphin-platform.io
DripStat
Chronon Systems
dripstat.com
Drools
Red Hat
Open Source
drools.org
Dropwizard
Open Source
dropwizard.io
Dynatrace
Application
Monitoring
Dynatrace
APM
30 Days
dynatrace.com
Dynatrace
(formerly Ruxit)
APM
30 Days
dynatrace.com/platform/
offerings/ruxit
EasyMock
Open Source
easymock.org
Eclipse
Eclipse Foundation
IDE (plugin-happy)
Open Source
eclipse.org
Eclipse Che
Eclipse Foundation
Open Source
eclipse.org/che
Eclipse Collections
Eclipse Foundation
Open Source
eclipse.org/collections
EclipseLink
Eclipse Foundation
JPA+MOXx(JAXB) implementation
Open Source
eclipse.org/eclipselink
EHCache
Terracotta
JCache implementation
Open Source
ehcache.org
ElasticSearch
Elastic
Open Source
elastic.co
ElectricFlow
Electric Cloud
Release automation
Free Version
Available
electric-cloud.com
Elide
Open Source
elide.io
DZONE.COM/GUIDES
49
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Finagle
Finatra
Open Source
twitter.github.io/finatra
FlexJSON
JSON serialization
Open Source
flexjson.sourceforge.net
FreeMarker
Apache Software
Foundation
Open Source
freemarker.org
FusionReactor
Integral
Free Trial
fusion-reactor.com
GemFire
Pivotal
Open Source
pivotal.io/big-data/pivotalgemfire
GlassFish
Oracle
Open Source
glassfish.java.net
Go
ThoughtWorks
Open Source
go.cd
Java->Ajax
Open Source
gwtproject.org
Gradle
Gradle
Open Source
gradle.org
Grails
Open Source
grails.org
GridGain
GridGain Systems
gridgain.com
GSON
JSON serialization
Open Source
github.com/google/gson
Guava
Open Source
github.com/google/guava
Guice
Open Source
github.com/google/guice
H2
Open Source
h2database.com
Hazelcast Enterprise
Platform
Hazelcast *
30 Days
hazelcast.com
Heroku Platform
Salesforce *
PaaS
heroku.com
Hibernate ORM
Open Source
hibernate.org/orm
Hibernate Search
Open Source
hibernate.org/search
Hoplon
Open Source
hoplon.io
HyperForm
HyperGrid
(formerly DCHQ)
dchq.io
Hystrix
Netflix
Open Source
github.com/Netflix/Hystrix
IceFaces
IceSoft
JSF framework
Open Source
icesoft.org
Illuminate
jClarity
14 Days
jclarity.com
Immunio
Immunio
30 days
immun.io
Infinispan
Red Hat
Open Source
infinispan.org
DZONE.COM/GUIDES
50
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Informatica
Informatica
informatica.com
IntelliJ IDEA
JetBrains *
IDE
jetbrains.com/idea
iText
iText Group
Open Source
itextpdf.com
ItsNat
Open Source
itsnat.sourceforge.net
Jackson
JSON processing
Open Source
wiki.fasterxml.com/
JacksonHome
Jahia Platform
Jahia Solutions
Group
open-source
version available
jahia.com/home.html
Janino
Open Source
janino-compiler.github.io/janino
JavaFX
Oracle
Open Source
docs.oracle.com/javase/8/
javase-clienttechnologies.htm
JavaServer Faces
Oracle
Open Source
oracle.com
JAX-RS
Oracle
Open Source
jax-rs-spec.java.net
Red Hat
redhat.com
JBoss EAP
Red Hat
Java EE 7 platform
Open Source
developers.redhat.com/
products/eap/overviewith
JD
Java decompiler
Open Source
jd.benow.ca
jDBI
Open Source
jdbi.org
JDeveloper
Oracle
IDE
Freeware
oracle.com
JDOM
Open Source
jdom.org
Jelastic
Jelastic
jelastic.com
Jenkins
Cloudbees
CI server
Open Source
jenkins.io
Jersey
Oracle
Open Source
jersey.java.net
Jetty
Eclipse Foundation
Open Source
eclipse.org/jetty
JFreeChart
Object Refinery
Limited
Open Source
jfree.org/jfreechart
JGroups
Red Hat
Open Source
jgroups.org
jHiccup
Azul Systems
Open Source
azulsystems.com
JNBridge
30 Days
jnbridge.com/software/jmsadapter-for-biztalk/overview
JNBridgePro
JNBridge
30 Days
jnbridge.com/software/
jnbridgepro/overview
Joda
Open Source
joda.org/joda-time
jOOQ
Data Geekery
Open Source
jooq.org
jOOL
Data Geekery
Open Source
github.com/jOOQ/jOOL
DZONE.COM/GUIDES
51
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
Joyent
Joyent
joyent.com
JProfiler
EJ Technologies
Java profiling
ej-technologies.com/products/
jprofiler/overview.html
JRebel
ZeroTurnaround *
Free Trial
zeroturnaround.com/software/jrebel
JReport
Jinfonet
Free Trial
jinfonet.com
JSF
Oracle
Open Source
javaserverfaces.java.net
JSP
Oracle
Open Source
jsp.java.net
JUnit
Open Source
junit.org
Kubernetes
Container orchestration
Open Source
kubernetes.io
Lagom
Lightbend
Open Source
lightbend.com/lagom
LaunchDarkly
Catamorphic
30 days
launchdarkly.com
Liferay Digital
Experience Platform
Liferay
Enterprise CMS/portal
Open Source
Version Available
liferay.com
Lift
Open Source
liftweb.net
Lightbend Reactive
Platform
Lightbend
Open Source
lightbend.com/platform
Logback
QOS.ch
Open Source
logback.qos.ch
MarkLogic 8
MarkLogic
Free Developer
Version
marklogic.com
Mendix Platform
Mendix
Enterprise aPaaS
Free Trial
mendix.com/applicationplatform-as-a-service/
Mockito
Open Source
mockito.org
MongoDB
MongoDB
Document-oriented DBMS
Open Source
mongodb.com
MyBatis
Open Source
mybatis.org/mybatis-3
MyEclipse
Genuitec
30 Days
genuitec.com/products/
myeclipse
NetBeans
Oracle
IDE
Open Source
netbeans.org
Netty
Open Source
netty.io
New Relic
New Relic
14 Days
newrelic.com
Nexus Repository
Sonatype
Binary/artifact Repository
Open Source
sonatype.org/nexus
NGINX
NGINX
Open Source
nginx.com
Ninja Framework
Nuxeo Platform
Nuxeo
ninjaframework.org
30 days
nuxeo.com
DZONE.COM/GUIDES
52
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
OmniFaces
Open Source
omnifaces.org
OpenCV
Open Source
opencv.org
Oracle Coherence
Oracle
Open Source
oracle.com
Oracle
Relational DBMS
oracle.com/technetwork/
database/index.html
OSGi
OSGi Alliance
osgi.org
OutSystems
OutSystems
outsystems.com
OverOps
OverOps (formerly
Takipi)
overops.com
Palamida
Palamida
palamida.com
Payara Server
Payara
Open Source
payara.fish/home
Pedestal
Open Source
github.com/pedestal/pedestal
Percona Server
Percona
Open Source
percona.com
Play
Lightbend
Open Source
playframework.com
Plumbr
Plumbr
14 days
plumbr.eu
Predix
GE Software
ge.com/digital/predix
PrimeFaces
PrimeTek
Open Source
primefaces.org
Project Reactor
Pivotal
Open Source
projectreactor.io
PubNub
PubNub
pubnub.com
Puppet
Puppet Labs
Open Source
puppet.com
Push Technology
Push Technology
pushtechnology.com
Qoppa
demos available
qoppa.com
QueryDSL
Mysema
Open Source
querydsl.com
Race Catcher
Thinking Software
7 days
thinkingsoftware.com
Redis
Redis Labs
Open Source
redis.io
Rhino
Mozilla
Open Source
developer.mozilla.org/en-US/
docs/Mozilla/Projects/Rhino
Ribbon
Netflix
Open Source
github.com/Netflix/ribbon
RichFaces
Red Hat
Open Source
richfaces.jboss.org
Ring
Open Source
github.com/ring-clojure/ring
DZONE.COM/GUIDES
53
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
RxJava
Netflix
Open Source
github.com/ReactiveX/RxJava
Salesforce App
Cloud
Salesforce
free developer
instance
developer.salesforce.com
Sauce Labs
Automated Testing
Platform
Sauce Labs
Open Source
saucelabs.com/open-source
Lightbend
Build tool for Scala and Java (with build scripting in Scala DSL)
Scalatra
Open Source
scalatra.org
Selenide
Codeborne
Open Source
selenide.org
Selenium
Open Source
seleniumhq.org
Site24x7
Zoho
30 days
site24x7.com
Sl4j
QOS.ch
Open Source
slf4j.org
SmartGWT
Isomorphic
Software
60 Days
smartclient.com
SonarQube
SonarSource
Open Source
sonarqube.org
Spark Framework
Open Source
sparkjava.com
Split
Split Software
Free Trial
split.io
Spock
Open Source
spockframework.org
Spray
Lightbend
Open Source
spray.io
Spring Boot
Pivotal
Open Source
projects.spring.io/spring-boot
Spring Cloud
Pivotal
Open Source
cloud.spring.io
Spring Framework
Pivotal
Enterpise Java platform (large family of (convention-overconfiguration) services, including dependency injection, MVC,
messaging, testing, AOP, data access, distributed computing
services, etc.)
Spring MVC
Pivotal
Open Source
docs.spring.io/spring/docs/
current/spring-frameworkreference/html/mvc.html
SteelCentral
Riverbed
APM
30-90 days
riverbed.com
Stormpath
Stormpath *
Free Version
Available
stormpath.com
SWT
Eclipse Foundation
Open Source
eclipse.org/swt
Sysdig
Draios
Container monitoring
Open Source
sysdig.com
Tasktop Dev
Tasktop
30 Days
tasktop.com/tasktop-dev
TayzGrid
Alachisoft
Open Source
tayzgrid.com
Teradata
Teradata
Free Developer
Version
teradata.com
projects.spring.io/springframework
DZONE.COM/GUIDES
54
PRODUCT
COMPANY
TYPE
FREE TRIAL
WEBSITE
TestNG
Open Source
testng.org
ThingWorx
PTC
Free Trial
developer.thingworx.com
Thymeleaf
Thymeleaf
Open Source
thymeleaf.org
TrueSight Pulse
BMC
Infrastructure monitoring
14 Days
bmc.com/truesightpulse
Twilio
Twilio
twilio.com
Upsource
JetBrains *
Code review
jetbrains.com/upsource
Vaadin
Vaadin
Server-side Java->HTML5
Open Source
vaadin.com
Vert.x
Open Source
vertx.io
Visual COBOL
Microfocus *
30 Days
microfocus.com/products/
visual-cobol
VisualVM
Oracle
JVM Monitoring
Open Source
visualvm.java.net
vmlens
vmlens
Free Trial
vmlens.com
Waratek
Waratek
30 days
waratek.com
WebLogic
Oracle
oracle.com/middleware/
weblogic/index.html
WebSphere
Application Server
IBM
www-03.ibm.com/software/
products/en/appserv-was
WebSphere eXtreme
Scale
IBM
Free Trial
ibm.com
WildFly
Red Hat
Open Source
wildfly.org
WildFly Swarm
Red Hat
Open Source
wildfly.org/swarm
Wiremock
HTTP mocking
Open Source
wiremock.org
WSO2 Application
Server
WSO2
Open Source
wso2.com/products/applicationserver/
WSO2 Microservices
Framework for Java
WSO2
Open Source
wso2.com/products/
microservices-framework-for-java
XebiaLabs XL
XebiaLabs
Free Trial
xebialabs.com
XRebel
ZeroTurnaround *
14 Days
zeroturnaround.com
Xstream
XML serialization
Open Source
x-stream.github.io
YourKit
15 Days
yourkit.com
Zing
Azul Systems
azul.com/products/zing
ZK Framework
Zkoss
Open Source
zkoss.org
Zulu
Azul Systems
Open Source
azul.com/products/zulu
DZONE.COM/GUIDES
GLOSSARY
12-FACTOR APP A set of guidelines
for building hosted applications that
focus on scalability, automation, and
compatibility with cloud platforms.
APPLICATION PROGRAM
INTERFACE (API) A set of tools
for determining how software
components should act within an
application.
ARRAY An object that contains a
fixed number of variables, the number
of which are established when the
array is created.
ATTRIBUTE A particular characteristic
of an object, which is defined by that
object's class.
CLASS A blueprint used to create
objects by establishing what
attributes are shared between each
object in that class.
CLOUD PLATFORM A service offered
by a third party that deploys and
hosts applications on their hardware.
COMPILER A program that
transforms programming language
code to machine-readable bytecode
so that it can be read and executed by
a computer.
CONCURRENCY The ability to run
several applications, or several parts
of an application, at the same time.
CONSTRUCTOR A subroutine within
a class that is called in order to create
an object from that class.
CONSTRUCTOR CHAINING The act
of calling a constructor to create an
object by using another constructor
from the same class.
CONTINUOUS INTEGRATION The
process of combining and testing
55
EXCEPTION HANDLING A
programming practice to ensure that
any exceptions do not cause the
program to stop running.
HASH FUNCTION A way to create a
simplified representation of a large
amount of data to make it easily and
quickly searchable, such as assigning
objects to integers.
IMMUTABLE OBJECT Any object that
cannot be modified once it has been
created.
JAVA An object-oriented
programming language that can be
deployed on a variety of platforms,
developed by Sun Microsystems and
now under the stewardship of Oracle.
JAVA ARCHIVE (JAR) A file used to
aggregate several Java classes and
resources into one file in order to
easily distribute those classes for use
on the Java platform.
JAVA DEVELOPMENT KIT (JDK) A
free set of tools, including a compiler,
provided by Oracle, the owners of Java.
MICROSERVICES ARCHITECTURE
An architecture for an application
that is built with several modular
pieces, which are deployed
separately and communicate with
each other, rather than deploying
one single piece of software.
OBJECTS An instance of a class,
which has different attribute values
than other objects in its class.
POLYMORPHISM A condition
in which objects can take on
several forms in an application.
All objects in Java are considered
polymorphic since all objects are all
implementations of classes.
REPOSITORY A data structure
where directories, files, and metadata
can be stored and managed.
SPRING FRAMEWORK An opensource collection of tools for building
web applications in Java.
STREAM A sequence of data that is
read from a source and then written
to a new destination.
SYNCHRONIZATION A condition
in which multiple threads that share
crucial resources run at the same
time.