External Debugging Tools 3: JMXTerm

When tracking a bug we need to take a two pronged approach. Similar to tongs that wrap the buggy module from both sides and squeezes to find the problematic part. Up until now we discussed tools that are very low level. Some can be used to debug system level services. Today we’ll discuss the other side of the stack but …

Read More »

Google Remote Procedure Call (gRPC) Example in Payara Server

Google Remote Procedure Call, or gRPC, is an open source Remote Procedure Call (RPC) framework focused on high performance and is portable to any environment. It is an alternative to REST, deemed by many as more efficient. After one of our customers requested it, the extension became available in our April 2022 Payara Community and Enterprise releases: 5.2022.2 and 5.38.0.  …

Read More »

Using Git Interactive Rebase

This tutorial will cover how to clean up your Git commit history with Git interactive rebase, both via the IntelliJ IDEA UI and from the command line. Git interactive rebase allows you to change individual commits, squash commits together, drop commits or change the order of the commits. This allows you to clean up your Git commit history to make …

Read More »

Cassandra Performance: Throughput, Responsiveness, Capacity, and Cost

For scalable data workloads like Cassandra, performance and capacity are simply a matter of cost. JVM choice and configuration can dramatically impact that cost. The Azul Platform Prime JVM significantly improves Cassandra performance and reduces the cost of Cassandra clusters. Background We set off to characterize the impact of JVM choice and configuration on Cassandra load carrying capacity: the capacity …

Read More »

Confusing Java Strings

In this article, I would like to show you a couple of confusing things in connection with Java Strings. I would also like to give you a few suggestions to avoid issues with them. I also prepared a GitHub repo for you where you can find some code that you can use to try the examples out on your own: …

Read More »

Back to Basics: Accessing Kubernetes Pods

Kubernetes is a colossal beast. You need to understand many different concepts before it starts being useful. When everything is set up, you’ll probably want to expose some pods to the outside of the cluster. Kubernetes provides different ways to do it: I’ll describe them in this post. Setup For the sake of the demo, I’ll be using Kind: kind …

Read More »

Effectively Bridging the DevOps – R&D Gap without Sacrificing Reliability

DevOps culture revolutionized our industry. Continuous Delivery and Continuous Integration made six sigma reliability commonplace. 20 years ago we would kick the production servers and listen to the hard drive spin, that was observability. Today’s DevOps teams deploy monitoring tools that provide development teams with deep insight into the production environment. “O brave new world That has such people in’t!” …

Read More »

Faster Integration Tests with Reusable Testcontainers

In my job, I often need integration tests against a Neo4j database. My software is written in Java, and so is Neo4j. Neo4j is embeddable, too. So, in theory, I could just depend on the embedded version, open a connection, test my stuff and call it a day. It would not be a different engine, it would be – at …

Read More »

Java Bytecode Simplified: Journey to the Wonderland (Part 2)

Our previous article introduced Bytecode and discussed what it includes. This article will delve a bit deeper into ConstantPool. Highlights: Bytecode is a representation that is abstract in nature. They are fictitious codes for a fictitious machine known as the Java Virtual Machine. The Java virtual machine is a piece of software that interprets Bytecode. The JVM is a stack-based …

Read More »