A couple of years ago, continuous integration in the JVM ecosystem meant Jenkins. Since that time, a lot of other tools have been made available. But new tools don’t mean new features, just new ways. Beside that, what about continuous deployment? There’s no tool that allows to deploy new versions of a JVM-based application without downtime. The only way to achieve zero downtime is to have multiple nodes deployed on a platform, and let that platform achieve that _e.g._ Kubernetes.
And yet, achieving true continuous deployment of bytecode on one single JVM instance is possible if one changes one’s way of looking at things. What if compilation could be seen as changes? What if those changes could be stored in a data store, and a listener on this data store could stream those changes to the running production JVM via the Attach API?
In that talk, I’ll demo exactly that using Hazelcast and Hazelcast Jet – but it’s possible to re-use the principles that will be shown using other streaming technologies.
2. @nicolas_frankel
Me, myself and I
§ Former developer, team lead, architect,
blah-blah
§ Developer Advocate
§ Lots of crazy creative ideas
3. @nicolas_frankel
Hazelcast
HAZELCAST IMDG is an operational, in-
memory, distributed computing platform
that manages data using
in-memory storage and performs parallel
execution for breakthrough application
speed and scale.
HAZELCAST JET is the ultra fast,
application embeddable, 3rd
generation stream processing
engine for low latency batch and
stream processing.
10. @nicolas_frankel
The Attach API
§ Allows to dynamically load an agent
inside another running JVM
• No need to run in debug
§ Requirements:
1. Need to run on the same system
2. Must know the PID of the JVM
24. @nicolas_frankel
Limitations of the demo
§ No tagging
§ No loading of new classes
§ redefineClasses() “must not add,
remove or rename fields or methods,
change the signatures of methods, or
change inheritance”