Image for post
Image for post

Gone are the times when developers’ jobs ended with the release of the application. Nowadays, developers care more and more about the operational side of IT: perhaps they operate applications themselves, but more probably, their organization fosters increased collaboration between Dev and Ops.

I started to become interested in the Ops side of software when I was still a consultant. When Spring Boot released the Actuator, I became excited. Via its convention-other-configuration nature, it was possible to add monitoring endpoints with just an additional dependency.

Since then, other frameworks have popped up. They also provide monitoring capabilities. …


Image for post
Image for post

When your application goes beyond a dozen of lines of code, you should probably split the code into multiple classes. At this point, the question is how to distribute them. In Java, the classical format is the Java ARchive, better known as the JAR. But real-world applications probably depend on other JARs.

This post aims to describe ways to create self-contained executable JARs, also known as uber-JARs or fat JARs.

What is an executable JAR?

A JAR is just a collection of class files. To be executable, its META-INF/MANIFEST.MF file should point to the class that implements the main() method. You do this with the…


Today, I’d like to offer an approach that will allow most organizations to proceed with zero-downtime deployments with help from the Hazelcast platform.

Applications are not stateless!

A couple of years ago, I became interested in Continuous Deployment as the natural extension of my deep interest in Continuous Integration. Among the CD patterns, Blue-Green deployment was the first. Here’s a sample architecture:

Image for post
Image for post

The idea is that a router component directs the requests to one environment; by convention blue. This environment contains all the necessary components for the application to achieve its task. Meanwhile, Ops can deploy a new version of the application in the…


Image for post
Image for post

This week, I learned about a nifty “new” feature of Optional that I want to share in this post. It's available since Java 9, so its novelty is relative.

Let’s start with the following sequence to compute the total price of an order:

public BigDecimal getOrderPrice(Long orderId) {
List<OrderLine> lines = orderRepository.findByOrderId(orderId);
BigDecimal price = BigDecimal.ZERO; // 1
for (OrderLine line : lines) {
price = price.add(line.getPrice()); // 2
}
return price;
}
  1. Provide an accumulator variable for the price
  2. Add each line’s price to the total price

Nowadays, it’s probably more adequate to use streams instead of iterations. …


Image for post
Image for post

The previous posts of this series focused on different frameworks to develop JVM-based applications.

This is the 6th post in the The state of JVM desktop frameworks focus series. Other posts include:

  1. The state of JVM desktop frameworks: introduction
  2. The state of JVM desktop frameworks: Swing
  3. The state of JVM desktop frameworks: SWT
  4. The state of JVM desktop frameworks: TornadoFX
  5. The state of JVM desktop frameworks: Jetpack Compose for Desktop

Distributing applications on a couple of computers inside the same company is not an issue. A lot of products are available for automating the pushing of files onto computers. …


Image for post
Image for post

The previous posts of this series were dedicated to frameworks that adopted the same traditional Object-Oriented-Programming approach. Components were modeled as classes. This week’s post is dedicated to Jet Compose for Desktop, the new kid on the block that offers a completely different approach.

This is the 5 thpost in the The state of JVM desktop frameworks focus series.Other posts include:

  1. The state of JVM desktop frameworks: introduction
  2. The state of JVM desktop frameworks: Swing
  3. The state of JVM desktop frameworks: SWT
  4. The state of JVM desktop frameworks: TornadoFX
  5. The state of JVM desktop frameworks: Jetpack Compose for Desktop (this…

Image for post
Image for post

In the first post of this series, we went through the rise and fall of some of the desktop frameworks, mainly Java ones. This post and the following will each focus on a single JVM framework. To compare between them, a baseline is in order. Thus, we will develop the same application using different frameworks. We will use the Kotlin language because some of the frameworks require Kotlin.

This is the 2nd post in the The state of JVM desktop frameworks focus series.Other posts include:

  1. The state of JVM desktop frameworks: introduction
  2. The state of JVM desktop frameworks: Swing (this…


Image for post
Image for post

I’m interested in GUI applications since I’ve starting coding. Building a back-end app that manages teraflops of operations is an impressive engineering feat. But the feedback cycle when developing a desktop app is much shorter. That makes it, at least for me, much more motivating. This is even truer for side-projects. In this focus, I’d like to assert the state of JVM desktop frameworks.

This first post is an introduction, framing the general background, and browsing through the frameworks I’ve encountered.

Background

Let’s face reality: in the fight of web apps vs. desktop apps, the former ones have won. It’s just…


Image for post
Image for post

One of my current talks is about creating a Kubernetes operator in Java. I demo it step by step. In the later steps, I’m using GraalVM native image to create a native executable. In that regard, some libraries are not compatible with the native image creation process. Several options are available to make them work anyway.

One of the options is to substitute incompatible code with compatible one. In the above post, I describe how to use those substitutions. I thought I had it right. I was wrong. The code didn’t work in my latest demos. …


Image for post
Image for post

Hazelcast is built on open source foundations. It’s part of our DNA, and we strive to uphold open source values in our day-to-day work. This commitment allows external contributors to make Hazelcast better so that the whole community can benefit from a collective effort.

No contribution is too small, but, indeed, some of our community members constantly go “above and beyond” to help us improve our software. For a long time, we wanted to find a way to show them how much we value their time and effort. …

Nicolas Fränkel

Dev Advocate @Hazelcast . Former developer and architect. Still teaching, learning and blogging.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store