Dzone Researchguide Java2019 PDF
Dzone Researchguide Java2019 PDF
Dzone Researchguide Java2019 PDF
DZONE.COM/GUIDES
Along with changes in pricing, the adjusted release cycle offers a new version 11 How to Use Recent MicroProfile and JDK Features to
of the JDK every six months. And, JDK 11, released in October 2018, is the most Scale Your Apps in the Cloud
BY BRIAN BENZ
recent long-term support version, and best option for developers who want to
upgrade from Java 8. 16 MicroProfile: What You Need to Know
BY REZA RAHMAN
But, according to the 2018 JVM Ecosystem Survey, more than 88 percent of
developers continue to use Java 8, despite newer versions. Many developers 20 Beyond Java 8
are hesitant about switching to Java 9 or higher due to fear of breaking existing BY TRISHA GEE
The existence of multiple Java versions and open-source movements have DZone is...
paved the way for new languages, tools, and platforms to emerge. Kotlin and BUSINESS & PRODUCT MARKETING EDITORIAL
Matt Tormollen Susan Wall Matt Werner
Clojure, for example, are the second most popular JVM languages, after Java, CEO CMO Publications Coordinator
and are being successfully implemented across a wide range of applications. Matt Schmidt Aaron Tull Sarah Davis
President Dir. of Demand Gen. Publications Associate
Terry Waters Waynette Tubbs Mike Gates
Based on the report, “Exactly 9 in 10 JVM users are using Java for their main Interim General Manager Dir. of Marketing Comm. Content Team Lead
applications. While many projects today are defined as multi-language or Jesse Davis Ashley Slate Kara Phelps
EVP, Technology Sr. Design Specialist Content & Comm. Manager
polyglot, the part on the JVM primarily runs Java.”
Colin Bish Tom Smith
Kellet Atkinson Member Marketing Spec. Research Analyst
Media Product Manager
In this guide, we focus on the latest tools and features in the JVM and how to Suha Shim Jordan Baker
Acquisition Marketing Mgr. Content Coordinator
best implement them in your existing Java projects. Open-source Java tools SALES
Kendra Williams Cathy Traugot
Andre Lee-Moye
such as MicroProfile, which provides various microservices features to Java EE, Sr. Director of Media Sales Content Marketing Mgr.
Content Coordinator
and scaling apps in the cloud are some of the more exciting, and challenging, Chris Brumfield Lauren Ferrell
Sales Manager Content Coordinator
new ways to build upon your existing Java code. Jim Dyer Lindsay Smith
Sr. Account Executive Content Coordinator
Java is still free and continues to be the trusted language by developers all over Tevano Green
Sarah Sinning
Sr. Account Executive
PRODUCTION Staff Writer
the world — Java is not going anywhere. The release cycle will simply provide Chris Smith
Brett Sayre
developers with faster updates and new features on a regular basis. And while Account Executive Director of Production
Executive
said they had no opinion. This year, 32 percent of respondents replied
“yes” to that question — decreasing from 44 percent who answered
“yes” last year.
Summary IMPLICATIONS
Interest in “new style” Java 10 features appears to be waning among
survey respondents. Of course, a year has now passed since the release
of Java 10, and we are now on to Java 12 (editor's note: Java 12 had
not been released at the time the survey was taken), but 58 percent of
BY KARA PHELPS CONTENT & COMMUNITY MANAGER, DEVADA
survey respondents reported that they are not currently writing code
in Java 10 or above. Improvements may get pushed out to developers
Despite the rise of languages like Kotlin and Clojure in recent years,
more quickly with the new six-month release cadence, but we may be
Java is still a powerhouse. It’s one of the most popular programming
seeing the beginning of “release fatigue.”
languages in the world, with more than 9 million developers over the
two decades and counting that it’s been publicly implemented. This
RECOMMENDATIONS
year, we asked 492 Java developers for their thoughts on the latest Old habits die hard (especially in the enterprise). It makes sense to
versions of the language, changing paradigms, the use of Java in their continue using the Java features that keep your legacy applications
organizations, and much more. running. 33 percent of survey respondents said they never mix “old
style” and “new style” Java. However, it may be worth checking out
JAVA 8 IS STILL THE FAVORITE newer features to solve stubborn issues. When asked where they mix
DATA “old” and “new,” 33 percent of respondents said they do so with APIs
While developers may use several versions of Java depending on their for creating unmodifiable collections. 32 percent said they did so using
organization or use case, 86 percent of survey respondents reported that the optional.orElseThrow() method, 30 percent said they remove
they use Java 8 to build new applications. 24 percent use Java 11, 10 deprecated methods, and 27 percent said they use the local variable
percent use Java 10, 9 percent use Java 9, 15 percent use Java 7, and 6 type inference.
percent use Java 6 or below. Similarly, 83 percent of respondents said
they use Java 8 in existing applications. Just 11 percent use Java 11, 5
REACTING TO ORACLE’S JDK CHANGES
percent use Java 10, and 7 percent use Java 9. 42 percent said they still
DATA
use Java 7 in existing applications, and 25 percent said they use Java 6 33 percent of survey respondents using Java 8 said they use Oracle’s
or below. JDK and have no plans to switch due to the change in long-term
support. Another 33 percent of Java 8 users said they are planning
IMPLICATIONS
to move to a different distribution of the JDK, and 21 percent said
Java 8 has now been out for five years, which has given enterprises
they are using a different distribution already. Among Java 11 users,
some time to adopt it. Java 8 also included updates to improve
4 percent said they use Oracle’s JDK and don’t plan to switch. 10
application performance, as well as to make functional programming
percent of these users plan to move to a different distribution, and 11
easier. Oracle released one last update to Java 8 in January 2019 and
percent are already using one. (Java 12 had not been released at the
will support the release through December 2020. Despite these end-of-
time of the survey.)
life preparations, though, developers still use Java 8 the most.
IMPLICATIONS
RECOMMENDATIONS Starting with the April 2019 update, Oracle JDK 8 will be restricted for
The wide use of Java 8 means that it’s probably a good time to learn
commercial use, but there are plenty of alternative options. Many other
how to take advantage of the functional programming options that
providers are offering free OpenJDK builds, and starting with Java 9,
Java 8 provides, if you aren’t already. 44 percent of survey respondents
Oracle has provided OpenJDK builds that are free for commercial use
said they and their teams are “comfortable” mixing object-oriented and
(although they’re only updated for six months). A higher percentage of
functional paradigms. 34 percent of respondents said they were
Java 8 users seem to know how they’ll be managing the transition.
“somewhat” to “very” uncomfortable, however.
RECOMMENDATIONS
OLD SCHOOL VS. NEW SCHOOL “Java is still free,” according to a prominently shared Google doc by
DATA the Java Champions describing Oracle’s changes in long-term support
61 percent of survey respondents said they have no opinion as for its JDK. They’re right — the open-source options for Java 8 and
to whether the “new style” Java 10 features make it more fun to 11 have full capabilities for commercial use, and personal use will
program in Java. That’s an increase from last year, when 49 percent continue to be free as well.
Key Research
–– 42% work as developers/engineers
–– 24% work as developer team leads
–– 19% work as architects
SURVEY RESPONSES
What versions of Java are being used at your organization when What versions of Java are being used in existing apps at your
building new apps? organization?
web and enterprise business applications, we see a similar trend appears that respondents’ comfort level in mixing object-oriented
to that reported above. Among respondents working to develop and functional programming varied by the types of applications
web applications, 87% use Java 8 to create their new apps, with they develop. Among those respondents working on web
24% use Java 11, 10% use Java 10, and 10% use Java 9. For those applications, 45% reported feeling comfortable mixing the object-
respondents working to develop enterprise business apps, we oriented and functional paradigms, while 9% said they were very
found that 90% use Java 8 in the building of new applications, while, comfortable. Additionally, 21% of respondents working as web
again, 24% use Java 11, 10% use Java 10, and only 7% use Java 9. app developers told us there were “somewhat uncomfortable”
mixing these two paradigms, while 4% reported being “very
Even with the extreme popularity of Java 8, one would expect the
uncomfortable.” But among those respondents developing
newer versions of the language (i.e. Java 10 and 11 as well as the
enterprise business applications, 35% reported feeling comfortable
soon-to-be-released Java 12) to garner some excitement from a
mixing object-oriented and functional coding paradigms, while 5%
developer community that’s so interested in Java. Yet, a majority
reported feeling very comfortable. On the other side of the coin,
of respondents seemed to be lukewarm in their opinions of the
28% of these respondents said they feel somewhat uncomfortable
newer versions of Java and the features these versions brought with
in this practice, while 10% feel very uncomfortable. One reason for
them. When we asked respondents what they thought constituted
enterprise business app devs’ reluctance to mix coding paradigms
the most important new feature introduced in Java 10, well over half
could come from the fact they work with massive code bases filled
(70%) reported that they had no opinion on the matter. We also asked
with legacy code that takes advantage of older coding paradigms.
survey-takers which features of Java 11 they were using, and five Thus, introducing object-oriented or functional paradigms (or a mix
features of Java 11 (Epislon, ZGC, Flight Recorder, readString() and of the two) could result in a need for large refactoring projects.
writeString(), and the new HTTP client) all had non-adoption rates
(i.e. are not being used) of 80% or higher. And finally, when asked When it comes to development practices specific to the Java
about the new features in Java 12 for which they were excited, 53% of language, however, a greater level of parity appears among the
respondents reported “none of the above.” responses. When asked how they mix “old” and “new” style Java
code, 33% reported using APIs for creating unmodifiable collections,
Despite this general lack of enthusiasm around the newer versions
another 33% said they never mix “old” and “new” Java, and 32%
of Java, over 60% of survey-takers seem excited for the future of the
said they continue to use the optional.orElseThrow() method in
language. 43% told us they feel fairly optimistic about Java’s future,
their code. Additionally, 30% of respondents told us they mix “old”
and another 29% feel very optimistic.
and “new” style Java while working on the removal of deprecated
methods. This widespread mixing of “old” Java standards makes
Development Practices and Coding Paradigms sense given the continued dominance of Java 8.
Object-oriented and functional programming represent two of the
more popular coding paradigms in use today. This is reflected in The JDK, no matter the provider, has become an integral part to
that fact that 44% of respondents reported feeling “comfortable” any Java developer's work. It’s interesting to see that the JDK
using and mixing these two paradigms and another 8% asserted developers use seems to be dependent on the version of Java
feeling “very comfortable” with this practice. Interestingly, it they’re currently working with. We asked respondents if they were
SURVEY RESPONSES
How comfortable are you and your team at mixing object- Which of the following platforms/runtimes/operating systems do
oriented and functional paradigms? you primarily develop on?
SURVEY RESPONSES
Are you planning to stop using Oracle's JDK due to the change in Which of the following API quality attributes are most important
Oracle's JDK long-term support? for you (for any API, not just web APIs)?
Diving
Zone provides news and tutorials on Java tools, performance tricks, and
new standards and strategies that keep your skills razor-sharp.
Microservices dzone.com/microservices
Deeper
The Microservices Zone will take you through breaking down the
monolith step-by-step and designing microservices architecture
from scratch. It covers everything from scalability to patterns and
anti-patterns. It digs deeper than just containers to give you practical
Into Java
applications and business use cases.
Twitter Refcardz
Java Application Vulnerabilities
@trisha_gee @rafabene Java applications, like any other, are susceptible to gaps in security.
This Refcard focuses on the top vulnerabilities that can affect Java
applications and how to combat them.
@brunoborges @dianecraigdavis
Java Containerization
@jessitron @sugrue This Refcard focuses on the design, deployment, service discovery, and
management of Java applications on the open-source project called
Docker so that you can get your Java application up and running inside
@danielbryantuk @mon_beck a Docker-deployed Linux container.
Books Podcasts
Effective Java Java Pub House
Learn about the latest language and library features that Java has to offer, Learn about real issues that developers face when programming
get insight into Java subtleties, and see how modern Java supports multiple Java, like O/R setups, threading, troubleshooting, and more.
paradigms.
The Changelog
Java Concurrency in Practice Through conversations with hackers, leaders, and innovators, learn
Dive into basic concepts of concurrency and thread safety, techniques for about OSS code, service meshes, cloud-enabled apps, and more.
building and composing thread-safe classes, using concurrency building
Software Defined Talk
blocks, and more.
Dive into various topics of interest to Java developers, like Kubernetes,
serverless, cloud, DevOps, and coding.
Modern Java in Action
Explore the new features of Java 9 like support for reactive programming and
learn how to build on your existing Java skills with the newest techniques.
QUICK VIEW
Java Garbage
collectors that can help you test and run
your code
Collection
with no garbage collector.
BY ERIC GOEBELBECKER
SERVER-SIDE SOFTWARE ENGINEER
Java manages heap memory for you. You run your application inside HOW TO USE EPSILON
a virtual machine (JVM). The JVM does the work of allocating space COMMAND LINE OPTIONS NOTES
when necessary and freeing it when it is no longer needed. The garbage Unlock Java experimental
-XX:+UnlockExperimentalVMOptions
collector (GC) is what does this work for you. options.
Java 11 introduced Epsilon and the Z garbage collector (ZGC). Epsilon WH Y USE A NO - OP GC ?
is the "no-op" garbage collector. It allocates new memory but never A no-op garbage collector is useful for measuring and managing
recycles it. ZGC promises to manage vast amounts of memory with high application performance. Active garbage collectors are complex
throughput and short pause times. programs that run inside the JVM alongside your application. They incur
overhead that can cause latency and reduce throughput.
Java 12 adds the Shenandoah Garbage Collector. Like ZGC, it manages
large heaps with short pause times but uses a very different approach. Epsilon removes the impact GC has on performance. There are no GC
cycles or read or write barriers. When using the Epsilon GC, your code
Epsilon Garbage Collector runs in isolation. You can use it to see how garbage collection affects
WH AT IS EPSILON? your app's performance and what your memory threshold is since it'll
Epsilon is a passive or "no-op" GC. It handles memory allocation but tell you when it runs out. If you think you only need four gigabytes of
doesn't recycle it when objects are no longer used. When your application memory, run it with -Xmx4g and see if you're right. If you're wrong,
exhausts the Java heap, the JVM shuts down. In other words, Epsilon will rerun it with XX:HeapDumpOnOutOfMemoryError enabled and take a
allow your application to run out of memory and crash. look at the heap dump to see where you're wrong.
If you need to squeeze every bit of performance out of your application, very important. The heap must be large enough to accommodate your
Epsilon might be your best option for a GC. But you need to have a application but also needs extra headroom so Z can meet new requests
complete understanding of how your code uses memory. If it creates while relocating active objects. The amount of headroom you need
almost no garbage or you know exactly how much memory it uses for depends on how quickly your application requests new memory.
the period it runs in, Epsilon is a viable option.
ZGC will try to set the number of threads itself, and it's usually right. But
The Z Garbage Collector if ZGC has too many threads, it will starve your application. If it doesn't
WH AT IS THE Z G ARB AGE COLLEC TOR? have enough, you'll create garbage faster than the GC can collect it.
ZGC is a low-latency GC designed to work well with huge amounts of
memory. The Oracle documentation refers to multi-terabyte heaps in WH Y USE ZGC ?
its description of Z. Oracle introduced ZGC in Java 11. In Java 12, Oracle ZGC's design works well with applications large heap sizes. It manages
added performance fixes and class unloading even though Z is still in these heaps with pause times under 10ms and little impact on
experimental status. It's only available on 64-bit Linux. throughput. These times are better than G1's.
ZGC does its marking in three phases. The first is a short stop-the-world
HOW DOES ZGC WORK?
phase. It examines the GC roots, local variables that point to the rest
ZGC works concurrently with your application, performing all its work
of the heap. The total number of these roots is usually minimal and
in its threads. It uses load barriers for heap references. Load barriers
doesn't scale with the size of the load, so ZGC's pauses are very short
cause fewer delays than those imposed by the G1 collector's pre- and
post-write barriers. and don't increase as your heap grows.
When your application loads a reference from the heap, ZGC checks
the extra bits. If it needs to do any extra work (e.g. getting a remapped Shenandoah
WH AT IS SHEN ANDOAH?
instance), it handles it in the load barrier. It only has to do this once,
Shenandoah is another garbage collector with low pause times. These
when it loads the reference. This sets it apart from the write barriers
times are short and predictable, regardless of the size of the heap.
used by mainline garbage collectors like G1.
Shenandoah was developed at Red Hat and has been around for several
The Z garbage collector performs its cycles in its threads. It pauses years. It's now part of the Java 12 release.
the application for an average of 1 ms. The G1 and Parallel collectors
Like ZGC, Shenandoah does most of its work in parallel with the
average roughly 200 ms.
running application. But its approach to garbage collection is
HOW TO USE ZGC different. Shenandoah uses memory regions to manage which objects
COMMAND LINE OPTIONS NOTES are no longer in use and which are live and ready for compression.
Shenandoah also adds a forwarding pointer to every heap object and
-XX:+UnlockExperimen-
Unlock Java experimental options. uses it to control access to the object.
talVMOptions
-XX:ConcGCThreads=X Set number of GC threads. move objects, but the aggressive moves mean Shenandoah uses more
memory and requires more parallel work than other GCs. But it does the
ZGC is a concurrent garbage collector, so setting the right heap size is extra work with very brief stop-the-world pauses.
SHEN ANDOAH PH A SES of heap allocated since the last cycle. This heuristic incurs
Shenandoah processes the heap in many small phases, most of which throughput overhead but provides the best space reclamation.
are concurrent with the application. This design makes it possible for
the GC to manage a large heap efficiently. FAILURE MODES
Shenandoah needs to collect heap faster than the application it's
The first phase contains the first stop-the-world pause in the cycle. It serving allocates it. If the allocation pressure is too high and there's not
prepares the heap for concurrent marking and scans the root set. Like enough space for new allocations, there will be a failure. Shenandoah
ZGC, the length of this pause corresponds to the size of the root set,
has configurable mechanisms for this situation.
not the heap. Next, a concurrent phase walks the heap and identifies
reachable and unreachable objects. • Pacing: If Shenandoah starts to fall behind the rate of
allocation, it will stall allocation threads to catch up. The stalls
The third finishes the process of marking by draining pending heap
are usually enough for mild allocation spikes. Shenandoah
updates and re-scanning the root set. This phase triggers the second
stop-the-world pause in the cycle. The number of pending updates and introduces delays of 10ms or less. If pacing fails, Shenandoah
size of the root set determine how long the pause is. will move to the next step: degenerated GC.
-XX:+UnlockExperimen- Unlock Java experimental different heuristics may be a good fit. Its pause times might not be as
talVMOptions options. brief as ZGC's, but they're more predictable.
-XX:+UseShenanodoahC Use Shenandoah GC. While Shenandoah was not made available as part of Java until version
12, it's been around longer than ZGC. It's seen more testing and is even
-XmxXg Set heap size.
available as a backport for both Java 8 and 10.
MicroProfile and JDK HTTP to client help you build Java into
your cloud applications.
BY BRIAN BENZ
SENIOR CLOUD DEVELOPER ADVOCATE AT MICROSOFT
Managing a potentially unlimited number of autonomous, loose- with microservices, and makes things simple and easy to follow.
ly coupled, and frequently updated microservices on top of a
The ability to launch single-file programs enables quick, local
flexible cloud infrastructure creates new challenges for develop-
testing of a developer's code and can also greatly simplify the
ers. This article outlines features of recent JDK and MicroProfile
instructions needed to run the code in a container-based environ-
updates for reliably deploying and scaling cloud applications
ment. Note this sentence in the motivation section of JEP 330:
while continuously integrating network and service updates.
We'll also cover tips for enabling documentation, authentication, "Single-file programs — where the whole program fits in a single
and managing decoupled application dependencies, resources, source file — are common in the early stages of learning Java and
and configuration. when writing small utility programs."
Adding Notable JDK Updates to Your Of course, microservices could be described as small utility
Microservices programs. And you can create a container to load a JDK image
The latest JDK release has an interesting collection of new features in this context. Then, you just add a COPY to load the file into the
that can help with building microservice-based applications. container and a CMD to get it started in your Dockerfile:
JDK 11 has been generally available since September 2018 and
FROM adoptopenjdk/openjdk11:latest
is the first long-term support version after Java 8. As always,
COPY mymicroservice.java / mymicroservice.java
features and scheduled releases of the latest JDKs are managed
CMD ["java", "mymicroservice.java"]
via the JDK Enhancement Proposal (JEP) Process. I've included
the JEP release numbers and links as a handy reference to the full Now, imagine how this simplifies testing. Instead of building/
details of each new feature. compiling and running your code in a container, you can run it in
different JVM and OS versions by simply changing the `FROM`
Launching Single-File Source Code Programs and line in your Dockerfile!
a Standard HTTP Client
The ability to launch single-file source code programs (JEP 330), Next up in your single-file microservice, you'll likely need to speak
and the new standard HTTP Client (JEP 321), goes hand-in-hand to other microservices, with at least a call and response, probably
using HTTP. To accomplish this in a very simple and readable way, Flight Recorder (JEP 328) takes the analysis one step further and
implement the new standard HTTP Client (JEP 321) as part of your dials into the JVM to track performance bottlenecks and errors in
microservice. An HttpClient object sends requests via asynchro- the running code.
nous requests, HTTP/2, and web sockets. An HttpRequest object
From the JEP 328 document:
contains a request method and headers, and an HttpResponse
object returns information from the target. Here's a great exam- "Flight Recorder records events originating from applications, the
ple of a simple HTTP client implementation from Anthony Bruno JVM, and the OS. Events are stored in a single file that can be attached
with a comparison of the URLConection object it replaces. to bug reports and examined by support engineers, allowing after-
the-fact analysis of issues in the period leading up to a problem. Tools
Working Around the Removal of XML APIs When can use an API to extract information from recording files."
Working With MicroProfile and Spring Apps
Unfortunately, JEP 320 removes some handy XML processing Flight Recorder is great in dev and test to manage the performance
classes as part of the removal of older Java EE and CORBA Mod- and reliability of the code. Distributed tracing is great to keep
ules, specifically JAX-WS (Java API for XML-Based Web Services) an eye on deployed microservices to see where bottlenecks are
and JAXB (Java Architecture for XML Binding), which are com- occurring across distributed microservices.
mon for reading and managing XML configuration files, among
other functions.
Of course, you can build and/or refactor your apps to satisfy the
Java world's current YAML fetish if that's your thing, but if you
want to keep your applications as-is and use the latest JDK, the It’s truly amazing to see all of the
reference implementations of JAX-WS and JAXB are available as
Maven artifacts: community effort that has gone
• com.sun.xml.ws: jaxws-ri (JAX-WS, plus SAAJ and Web
into the JEP process and the
Services Metadata)
• com.sun.xml.bind : jaxb-ri (JAXB) Eclipse MicroProfile project.
There are also Maven artifacts for tools and APIs; check the JEP
320 doc for full details and links.
Use Flight Recorder and Distributed Tracing to Using MicroProfile to Manage Your Microservices
Collect and Analyze Telemetry in Your Microservices
MicroProfile has been rapidly evolving as a great way to manage
Two recent developments can greatly help you plan and manage
microservices with a few basic components that most micros-
deployments in the cloud.
ervices need. It's an Eclipse project based on Java EE 8 and has
Distributed tracing can help manage and track microservice participation from major cloud vendors, IT organizations, and indi-
performance as well as the interactions between microser- viduals. You can get more information on the MicroProfile project,
vices. Distributed traces help manage and identify bottlenecks components, and participants at microprofile.io. Also, check out
in your cloud applications, even if they're not all running on the the new MicroProfile starter page here.
same cloud, with minimal overhead and open-source visualiza-
tion offerings. Manage MicroProfile Configurations at Build and
Runtime
From OpenTracing.io: One of the great features of MicroProfile is the configuration
options. MicroProfile Config enables configurations externally
OpenTracing is comprised of an API specification, frameworks, and
and at runtime, meaning you can manage and even change some
libraries that have implemented the specification and documenta-
behaviors of an application based on the application environment
tion for the project. OpenTracing allows developers to add instru-
without any changes to the application code.
mentation to their application code using APIs that do not lock them
into any one particular product or vendor. You can use a pom.xml file to specify and transport configurations,
or it can be specified or overridden at runtime. System properties code and testing, things can still go wrong in production. For those
are evaluated first, then environment variables, then the pom. rare cases, you want to have easy ways to shut down and redeploy
xml or project-defaults.yml files on the classpath. This enables not apps in a container environment. You also want to use similar
only flexible runtime environments but also easy testing of differ- features to help with scale by monitoring application load and
ent configuration options via ENV vars and system properties. adjusting the number of containers available based on user needs.
For example, distributed tracing is one of the key components Health checks are used to check if a specific microservice is
built into MicroProfile applications. To include Jaeger, an Open- healthy before engaging it via another microservice or pro-
Tracing implementation and visualization tool in your applica- cess. Fault tolerance is a way to manage what happens if a
tions, you just add this dependency to your pom.xml: microservice is failing inside a larger infrastructure of multiple
processes and microservices, and what automated action to take
<dependency>
<groupId>io.thorntail</groupId> based on predetermined rules.
<artifactId>jaeger</artifactId>
</dependency> The good news is that, with MicroProfile, fault tolerance and
health checks can be built into your application with no changes
If you want to create a custom name for the service, you can add it to the code whatsoever.
in the project-defaults.yml files on the classpath like this:
For example, to enable health checks in a MicroProfile app, just
swarm.jaeger.-jaeger-example
add this segment to the configuration section of the application's
pom.xml file:
You can also set the name as an environment variable:
<config>
export -jaeger-example
<thorntail-v2-health-check>
<path>/health</path>
If you're running a MicroProfile application with Java -jar , you
</thorntail-v2-health-check>
can also specify settings via parameters on the command line:
</config>
Conclusion
We live in interesting times! It's truly amazing to see all of the com-
munity effort that has gone into the JEP process and the Eclipse
MicroProfile project. Most of the work represents amazing innova-
tions in managing cloud-based microservices. If I've inspired you
or you have any questions, please let me know — I love hearing
from readers!
'-' WhiteSource
Reported Java
Open Source
Vulnerabilities More
Than Doubled in 2018
The good news here is that the jump in the number of known
vulnerabilities is due to the open source community doing a stellar job
of finding and reporting these vulnerabilities, sharing their knowledge
Source Vulnerabilities scouring the NVD, security advisories, and other publicly available
resources for intel on how to exploit these highly reusable open-source
software components.
PARTNER SPOTLIGHT
WhiteSource
Helps you find and fix open source vulnerabilities in your code by fully integrating into your
software development lifecycle.
Category Application Security | Software Composition New Release Continuous Open Source? Yes
Analysis | DevOps | Secure Coding
“With open source software, usually the source code environments (incl. containers)
is available for all to see, including hackers,” explained • Pinpoint Accuracy: Proprietary algorithms guarantee no false positives
Code Clinic Lead, Neil Langmead. In order to avoid costly • Automated Workflow: Enforce policies automatically at all stages of the SDLC
mistakes that can result from vulnerable or risky open
• Easy Remediation: Pinpoints vulnerable methods affecting your products
source components being added to their products, Siemens
Healthineers turned to WhiteSource.
Notable Customers
Website
“We chose WhiteSource because of its ease of use, its excellent • Microsoft
whitesourcesoftware.com
data, and for the in-depth security vulnerability information that • Comcast
comes with the reporting engine.” With WhiteSource, Siemens • EllieMae Twitter
was offered the widest coverage of plugins and languages that • IGT @WhiteSourceSoft
they needed, as well as the continuous monitoring and policy • Spotify
Blog
enforcement safeguards they required in order to allow their
resources.whitesourcesoftware.com
team to code with confidence. Read more here
QUICK VIEW
Need to Know
include Open Tracing, JAX-RS, Fault
Tolerance, and more.
BY REZA RAHMAN
PRINCIPAL PROGRAM MANAGER FOR JAVA ON AZURE, MICROSOFT
MicroProfile is an open-source specification that brings a number This article is a brief look at the current state of MicroProfile.
of microservices-centric features to the Java EE ecosystem. It was This includes history, latest changes, road map, and a code
born out of the need to accelerate Java EE innovation at a time example-driven look at features.
when Oracle appeared to stop all Java EE 8 development. Micro-
Profile is already part of the Eclipse Foundation and very likely History
serves as an incubator to eventual standardization via Jakarta One of the key tenets of MicroProfile has been rapid release
EE proper (Oracle donated Java EE to the Eclipse Foundation as cycles, especially as compared with Java EE in recent years. The
Jakarta EE shortly after Java EE 8 was released). following chart shows the MicroProfile release history:
The graphic below shows current MicroProfile technologies. VERSION DATE CHANGES
JSON-B 1.0 (parts of Java EE 8).
2.1 October, 2018 Updating to Open Tracing 1.2.
Updating to Open Tracing 1.3,
2.2. February, 2019 Open API 1.1., REST client 1.2,
and Fault Tolerance 2.0.
Most Recent Developments
As the version increment indicates, MicroProfile 2.2 is mostly a
minor update of interest to existing adopters. Below are some The topics currently actively under discussion in the MicroPro-
significant changes: file forums include the following.
• Open Tracing 1.3 improves integration with MicroProfile • Long Running Actions (LRA)
• GraphQL
• Open API 1.1 adds support for the JAX-RS 2.1 PATCH method
• Concurrency
and improves integration with MicroProfile Rest Clients.
• Reactive Relational Database Access
• Rest Client 1.2 improves support for HTTP headers, • Event Data
especially via the new @ClientHeaderParam annotation. • Service Meshes
A beta release of the MicroProfile Starter was just made Services Description Language) for REST. The feature is enabled
available. This is an online project generation tool that makes it by default in all MicroProfile applications and automatically
a lot easier to get started with MicroProfile projects. generates API documentation for JAX-RS endpoints.
@GET cated user principal. The code above checks that the principal
@Operation(description="Get all current includes the "admin" role before allowing access.
memberships")
@APIResponses({ Configuration Java EE has always included the ability to con-
@APIResponse(responseCode="200", figure applications. However, such configuration is mostly static
description="Successful, returning
after deployment. In a cloud environment, it should be possible
memberships"),
to modify configuration values from outside an application
... at runtime so that the application itself does not need to be
}) repackaged. MicroProfile Configuration makes it possible to
public List<Membership> getAllMemberships() {
read configuration values from various sources such as property
files, system properties and environment variables. It is even
The Open API @Operation and @APIResponses annotations
possible to read configuration values from sources such as the
provide overrides for what MicroProfile would automatically
secure configuration store of the cloud provider (such as the
generate by scanning JAX-RS annotations.
Azure Key Vault). The client code for MicroProfile configuration
is quite simple:
Open Tracing
MicroProfile Open Tracing provides a Java binding for the Open @Inject
Tracing specification. Tracing the flow of a request in a distribut- @ConfigProperty(name="host.name",
defaultValue="localhost")
ed environment has always been challenging. The Open Tracing
private String hostname;
specification solves this problem by providing a standard for
instrumenting microservices for distributed tracing in a technol- The @ConfigProperty annotation injects the "host.name"
ogy agnostic manner. One way to think of the concept is that it value from somewhere in the environment. If it is not found, the
is a stack trace for REST services. Tools that support the concept default value of "localhost" is injected.
include Jaeger and Zipkin.
@GET
Rest Client
@Path("{id}") JAX-RS provides a powerful client API, but it can be hard to
use and not really type safe. Several JAX-RS implementations
@Traced(operationName="GetMembershipById",
support the ability to take an interface definition (typically for a
value=true)
JAX-RS endpoint) and create a JAX-RS client proxy from it. This
public Membership getMembership(
@NotNull @PathParam(value="id") int id) {
is very similar to how JAX-WS/SOAP clients work. MicroProfile
Rest Client standardizes this capability:
The Open Tracing @Traced annotation in the code example as-
String apiUrl = "http://localhost:9080/
signs a more meaningful name to the method being traced and
movieReviewService";
specifies that call values should be traced. MovieReviewService reviewService =
RestClientBuilder.newBuilder()
JWT Propagation MicroProfile JWT Propagation provides a .baseUrl(apiUrl)
Java binding for the JWT (JSON Web Token) specification. REST .build(MovieReviewService.class);
services are usually stateless, and any security state associated Review review = new Review(3 /*stars*/, "Good
with a client is sent to the target service on every request in or- Movie.");
reviewService.submitReview(movie, review);
der to allow services to re-create a security context for the caller
and perform both authentication and authorization checks. This The MovieReviewService in the code example is a generated
is basically what OAuth2, OpenID Connect, and JWT do. It could proxy client (from a JAX-RS server-side endpoint) that is hydrat-
be thought of as SAML for REST.
ed using the RestClientBuilder factory.
@GET
Health Check Health checks probe the state of a computing
@RolesAllowed({"admin"})
node from another machine (such as the Azure Kubernetes
public List<Membership> getAllMemberships() {
Service controller) in order to facilitate things like monitoring
MicroProfile detects the presence of a JWT token in the inbound dashboards and auto-restarts/self-healing. MicroProfile Health
client request and translates it under the hood to an authenti- Check allows the publishing of health data in a standard way
using a convenient API: mon failure-handling patterns via annotations. Without these
annotations, you would wind up with convoluted if-then-else
@Health
@ApplicationScoped statements in your business logic. Retries, timeouts, bulkheads,
fallbacks, and circuit breakers are some of the common patterns
public class CheckDiskSpace implements HealthCheck
that the API supports.
{
... @GET
public HealthCheckResponse call() { @Path("{id}")
...
@CircuitBreaker(failOn=RuntimeException.class,
}
requestVolumeThreshold=1,
}
failureRatio=1, delay=10, delayUnit=ChronoUnit.
SECONDS)
The MicroProfile @Health annotation publishes health informa-
@Timeout(value=3, unit=ChronoUnit.SECONDS)
tion using a standard format at a standard URL. The returned
@Bulkhead(2)
HealthCheckResponse includes a field to indicate if a service
public Membership getMembership(
is up or down. You can also add arbitrary metadata that might @NotNull @PathParam(value = "id") int id) {
be helpful to understanding service health (such as perhaps
remaining free space in our case). There are simple factories in In the code example, the @Timeout annotation causes the
the API to easily create and populate a HealthCheckResponse . method call to fail unless it executes within three seconds. The @
Bulkhead annotation limits concurrent requests to two. Finally,
In the code example, two application specific metrics are added. REZA RAHMAN is a Principal Program Manager for Java on
@Timed measures the average time required to get all member- Azure at Microsoft. He works to make sure Java developers
are first class citizens at Microsoft, and Microsoft is a first-
ships while @Counted measures how many new memberships
class citizen of the Java ecosystem. Reza has long been a frequent
were added. Other such MicroProfile Metrics annotations speaker at Java User Groups and conferences worldwide including
include @Gauge and @Metered. JavaOne and Devoxx. He has been working with Java EE technology
since its inception, developing on almost every major application
platform ranging from Tomcat to JBoss, GlassFish, WebSphere, and
Fault Tolerance WebLogic. Reza has developed enterprise systems for well-known
Microservices, especially running on the cloud, are inherently companies like eBay, Motorola, Comcast, Nokia, Prudential, Guardian
unreliable. MicroProfile Fault Tolerance makes dealing with Life, USAA, Independence Blue Cross, Anthem, CapitalOne, and AAA
using Java EE and Spring. LinkedIn Twitter
this unreliability a little easier by standardizing a set of com-
QUICK VIEW
Beyond Java 8
be a LTS (Long Term Support) release,
which will be supported for at least
three years.
If recent surveys are to be believed (including DZone read- for our language to evolve much faster than every three years.
ers, see page 3), most developers are still using Java 8 for the The new release cadence means that instead of getting huge,
majority of their application. Before Java 8, uptake of a new feature-packed releases dumped on us every few years, with
version of Java was quite slow, particularly in enterprises where the associated risks of such a big upgrade, we get much smaller
it can be difficult to get a new version of Java accepted for releases on predictable dates. These releases have far fewer
production. Java 8, with the introduction of lambda expressions features of course, but there are several benefits to this model:
and streams, was an appealing choice for many developers.
1. Easier to plan for. The predictable release cadence makes
The adoption of microservices, continuous delivery practices,
it easier not only for language developers to plan for, but
and better automated testing also makes it easier to use a new
also to plan our upgrades.
version of a language with far less risk than in the past.
2. Higher quality. Frequent releases mean that if a feature
So, given this, why is it that developers are "stuck" on Java 8, isn't ready for this version of Java, it won't be long until
despite the fact that since Java 9 we now have two releases of the next release. This means far less pressure on language
Java a year? Java 12 is now the most recent version, and yet few developers to rush to complete something, and therefore
people have made the leap to 9, 10, 11 or 12. higher quality releases.
Six Monthly Release Cadence The potential downside of moving to such a rapid release
Since Java 9 (released September 2017), Oracle has been cadence is that many organizations simply can't keep up with
releasing a new JDK every six months, in March and Septem- upgrading every six months. This has been fully considered, not
ber every year. In a continuous delivery world, it makes sense least of all because Oracle too will be impacted by this.
Long Term Support Releases This explains this pattern of adoption — generally people will
Oracle doesn't want to support every release for three (or more) not be on Java 9 or 10. If they were using it at any stage, they
years the way they used to support the previous releases. This should have moved on to at least Java 11.
would be a huge cost to them.
With the combination of short-term releases that one should
migrate from as soon as a new release is out, and long-term re-
leases that are supported for at least three years, there are now
potentially two main approaches to upgrading:
Figure 3: When developers upgrade from Java 8, they generally License Changes
upgrade all the way to Java 11. There is a caveat to these long-term support releases. Oracle's
position is that if you want support and updates for three years, OpenJDK build from AdoptOpenJDK. This JDK is compatible
you should be prepared to pay for them. So, if you want to use with the Oracle JDK, you can get builds for the major operating
an LTS and get updates for three years, you will need to pay systems and platforms, you can choose from two different JVMs
Oracle for their commercial JDK. (Hotspot and OpenJ9), they have committed to providing builds
for the LTS releases for at least 4 years, and you have the option
However, Oracle recognizes that not everyone wants to do
to purchase commercial support.
this, and that many people want to work in an open-source-
friendly way, so they now have two versions of their JDK (both Since this topic can be quite complex, I highly recommend
functionally the same) with two different licenses. They have reading the Java Is Still Free document produced by the Java
their commercial JDK, which is free to use in development and Champions for more in depth information.
testing but you need to pay to use it in production; and they
have a zero cost OpenJDK build. The latter has an open source
GPLv2+CPE licence, but will only be updated within six months In Summary
of this release lifespan. Lots of things have changed since Java 8's release: we get
releases every six months; the licensing, update, and support
models have changed; and where we get our JDK from may
have changed. On top of that, there were language changes,
including the major changes that went into Java 9.
In a continuous delivery While all of these changes may seem daunting, their goal is to
provide high quality, frequent, and predictable updates to one
world, it makes sense for of the most popular languages in the world, in a way that is
sustainable to those who work on and support the language.
our language to evolve It's worth understanding the impact these changes may have
on your application and organization, because working out how
much faster than every to embrace them will ultimately allow you to make use of the
improvements that have already gone into the language since
three years. Java 8, and will continue to evolve and improve the language
every six months.
time from the Oracle JDKs. This document lists these different communities and sharing ideas help us to learn from mistakes
and build on successes. As a Developer Advocate for JetBrains,
options, separating those that are free to download and use
she gets to share all the interesting things she’s constantly
from those that have a commercial model. If this all seems a discovering. LinkedIn Twitter
little overwhelming, a good starting point is to download your
QUICK VIEW
Executive Insights on
the ecosystem continue to be Oracle,
the Eclipse Foundation, and the
members of the community.
BY TOM SMITH
RESEARCH ANALYST, DZONE
To understand the current and future state of the Java frameworks, and toolsets. Java is available on all laptops,
Ecosystem, we reached out to our community for their insights. desktops, servers, cloud systems, and some embedded devices
Unlike other topics like containers and security, there are far and mobile phones. This is invaluable since code is compatible
fewer people willing to share their thoughts on the current and doesn’t need to be continually recompiled or changed.
and future state of Java. This appears to be a function of its
maturity relative to other technologies. 2. The most important players in the ecosystems continue to
be Oracle and the community with many significant members
We are grateful to our three contributors who all have of the community stepping up. IBM and Red Hat have made
significant experience with Java: significant contributions in the language space while Amazon
will have a significant impact through its default choices and
• Anders Wallgren
the new Corretto OpenJDK distribution. Pivotal is also crucial
CTO, Electric Cloud
thanks to frameworks like Spring and Spring Boot, while the
• Erik Costlow Eclipse Foundation maintains Java EE.
Principal Product Evangelist, Contrast Security
• Mark Little
V.P. Middleware Engineering, Red Hat
Having to change from the
JRE hurts adoption. It’s not
Key Findings
1. The most important elements of the Java ecosystem are
just a question of the language,
Oracle, the Eclipse Foundation, and the members of the
it’s also the tooling and the
community that ensure pervasiveness and compatibility.
There is huge community adoption, low barrier to entry, nice frameworks.
3. The most significant changes in the past year is the investment they’ve made in Java. Languages are hard to change.
abandonment of the JRE. It overshadows all of the good things It will be interesting to see if other languages begin to use the
like the consistent feature release cadence. This is delaying the Java Virtual Machine. There have been niche solutions for this in
adoption of Java past Java 8. There’s a lot of good stuff in Java the JRE like JRuby, Nashorn, and Jython.
11, but people are delaying adoption of the new features by six
months to a year to move to another JRE.
4. Things Oracle and the community can do to encourage As long as large enterprises are
organizations to upgrade past Java 8 is to make it easy to do
so. Promote Adopt OpenJDK, keep coming out with compelling
able to evolve beyond Java 8
improvements that make developers lives simpler and easier,
and keep licensing straightforward.
and Java becomes more cloud-
Adopt OpenJDK is a one-stop shop for developers to get access
native, it will continue to be a
to different JDK builds from different vendors. The community predominant language.
helps people who are having problems moving from version 8 to
later versions.
Apache Software
Apache Ignite In-memory data grid Open source ignite.apache.org
Foundation
Apache Software
Apache Log4j 2 Logging for Java Open source logging.apache.org/log4j/2.x
Foundation
Apache Software
Apache Lucene Search engine in Java Open source lucene.apache.org/core
Foundation
Apache Software
Apache Mesos Distributed systems kernel Open source mesos.apache.org
Foundation
Apache Software
Apache Struts Web framework (servlet & MVC) Open source struts.apache.org
Foundation
Apache Software
Apache Xerces2 XML parser for Java Open source xerces.apache.org/xerces2-j
Foundation
Apache Software
Derby Java SQL database engine Open source db.apache.org/derby
Foundation
atlassian.com/software/
Atlassian Clover Code coverage analysis tool Open source
clover
Free tier
Atomist Atomist Self-service software delivery atomist.com
available
Free tier
Azul Systems Zing JVM w/unique pauseless GC azul.com/products/zing
available
bmc.com/it-solutions/
BMC TrueSight Infrastructure monitoring 14 days
truesight.html
Bouncy Castle Bouncy Castle Java & C# cryptography libraries Open source bouncycastle.org
CA Application ca.com/us/products/ca-
CA Technologies Performance APM w/Java agent 30 days application-performance-
Management management.html
Available by
CData CData Data integration & connectivity cdata.com
request
Infrastructure automation/
Chef Software Chef Open source chef.io/chef
configuration mgmt
Open source
Data Geekery jOOQ Non-ORM SQL in Java version jooq.org
available
Open source
Draios Sysdig Container monitoring versions sysdig.com
available
Dynatrace Application
Dynatrace APM 15 days dynatrace.com
Monitoring
Eclipse Foundation Eclipse Collections Java Collections framework Open source eclipse.org/collections
Eclipse Foundation EclipseLink JPA & MOXx (JAXB) implementation Open source eclipse.org/eclipselink
ej-technologies.com/
Free tier
EJ Technologies JProfiler Java profiling products/jprofiler/overview.
available
html
Free version
Electric Cloud ElectricFlow Release automation electric-cloud.com
available
Elide Elide JSON <- JPA web service library Open source elide.io
Demo
IIoT platform w/Java SDK (on Cloud
GE Digital Predix available by ge.com/digital/iiot-platform
Foundry)
request
genuitec.com/products/
Genuitec MyEclipse IDE (Java EE & web) 30 days
myeclipse
Free tier
IBM IBM Cloud PaaS w/extensive Java support ibm.com/cloud
available
WebSphere ibm.com/cloud/websphere-
IBM Java application server 60 days
Application Server application-platform
icesoft.org/java/projects/
IceSoft IceFaces JSF framework Open source
ICEfaces/overview.jsf
Open-source
iText Group iText 7 PDF manipulation from Java version itextpdf.com
available
github.com/FasterXML/
Jackson Jackson JSON processing Open source
jackson
Open-source
Jahia Solutions Enterprise CMS/portal (Jackrabbit
Jahia Platform version jahia.com
Group compliant)
available
janino-compiler.github.io/
Janino Compiler JANINO Lightweight Java compiler Open source
janino
Available by
jClarity Censum GC log analysis jclarity.com/censum
request
Available by
Jelastic Jelastic Multi-cloud PaaS (w/Java support) jelastic.com
request
Free 10-user
JetBrains Upsource Code review jetbrains.com/upsource
plan
Open-source
JetBrains IntelliJ IDEA IDE version jetbrains.com/idea
available
30 days for on-
JFrog Artifactory Binary/artifact repository manager prem, 14 days jfrog.com/artifactory
for cloud
Open-source
Package hosting & distribution
JFrog Bintray version bintray.com
infrastructure
available
jnbridge.com/software/
JNBridge JNBridgePro Java & .NET interoperability 30 days
jnbridgepro/overview
Container-native infrastructure w/
Joyent Triton Open source joyent.com/triton/compute
Java images
Liferay Digital
Liferay Enterprise CMS/portal 30 days liferay.com
Experience Platform
The Linux
Kubernetes Container orchestration Open source kubernetes.io
Foundation
Available by mendix.com/application-
Mendix Mendix Platform Enterprise aPaaS
request platform-as-a-service
developer.mozilla.org/en-
JavaScript implemention in Java
Mozilla Rhino Open source US/docs/Mozilla/Projects/
(for embedded JS)
Rhino
Available by mulesoft.com/platform/
MuleSoft AnyPoint Platform Hybrid integration platform
request enterprise-integration
Free tiers
Nastel AutoPilot APM nastel.com
available
Netflix Hystrix Latency & fault tolerance library Open source github.com/Netflix/hystrix
Ninja Framework Ninja Framework Full-stack web framework for Java Open source ninjaframework.org
Demo
Structured & rich content mgmt
Nuxeo Nuxeo Platform available by nuxeo.com
platform
request
Object Refinery
JFreeChart Java charting library Open source jfree.org/jfreechart
Limited
javaee.github.io/glassfish/
Oracle GlassFish 5 Java application server Open source
download
docs.oracle.com/javase/8/
Oracle JavaFX Java GUI library Open source javase-clienttechnologies.
htm
download.oracle.com/
Oracle JAX-RS REST spec for Java Open source otndocs/jcp/jaxrs-2_0-fr-
eval-spec
oracle.com/technetwork/
Oracle JDeveloper IDE Open source developer-tools/jdev/
overview
oracle.com/technetwork/
Java spec for server-side
Oracle JavaServer Faces Open source java/javaee/
component-based UI
javaserverfaces-139869.html
oracle.com/technetwork/
Oracle Oracle Coherence In-memory ditributed data grid Open source middleware/coherence/
overview
oracle.com/database/
Oracle Oracle Database 19c Relational DBMS N/A
technologies
oracle.com/middleware/
Oracle WebLogic Java application server N/A
weblogic
Demo
Rapid application development
OutSystems OutSystems available by outsystems.com
platform
request
github.com/pedestal/
Pedestal Pedestal Clojure web framework Open source
pedestal
docs.spring.io/spring/docs/
Pivotal Spring MVC Server-side web framework Open source current/spring-framework-
reference/web.html
Free tier
PubNub PubNub Real-time mobile, web, & IoT APIs pubnub.com
available
Open-source
Infrastructure automation/
Puppet Labs Puppet versions puppet.com
configuration mgmt
available
Free tier
Push Technology Diffusion Real-time messaging (web, mobile, IoT) pushtechnology.com
available
Free tier
Qoppa Software Qoppa PDF Studio PDF manipulation from Java qoppa.com
available
Raphael
CGLIB Byte code generation library Open source github.com/cglib/cglib
Winterhalter
Red Hat Drools Business rules mgmt system Open source drools.org
Red Hat Hibernate ORM Java ORM w/JPA & native APIs Open source hibernate.org/orm
developers.redhat.com/
Red Hat JBoss EAP Java EE 7 platform Open source
products/eap/overview
Red Hat JGroups Java multicast messaging library Open source jgroups.org
Available by
Riverbed SteelCentral APM riverbed.com
request
Free tier
Salesforce Heroku Platform PaaS heroku.com
available
Free developer
Salesforce Salesforce App Cloud PaaS w/app marketplace developer.salesforce.com
version
Available by sonatype.com/nexus-
Sonatype Nexus Repository Binary/artifact repository
request repository-sonatype
Thinking Software,
Race Catcher Dynamic race detection N/A thinkingsoftware.com
Inc.
Available by
Twilio Twilio Messaging APIs (text, voice, VoIP) twilio.com
request
Open-source
Vaadin Vaadin Server-side Java -> HTML5 version vaadin.com
available
Open-source
vmlens vmlens Java race condition catcher version vmlens.com
available
Demo
Java security (runtime application
Waratek Waratek available by waratek.com
self-protection)
request
Open-source
Whitesource Whitesource OSS component security version whitesourcesoftware.com
available
wso2.com/products/
WSO2 Microservices
WSO2 Microservices framework for Java Open source microservices-framework-
Framework for Java
for-java
Free developer
YourKit YourKit Java Profiler Java CPU & memory profiler yourkit.com
version
Available by zeroturnaround.com/
ZeroTurnaround JRebel Class hot-loading (in running JVM)
request software/jrebel
zeroturnaround.com/
ZeroTurnaround XRebel Java web app profiler 10 days
software/xrebel
INTRODUCING THE
Java Zone
Java remains the most popular programming language even as it continuously
evolves. From updated APIs to new JDK 11 and JDK 12 features, there’s plenty to
unpack in the current Java ecosystem.