Observability of the Java Virtual Machine

Image
The JVM is one of the most observable runtimes. It provides us lots of tools for troubleshooting a JVM application in production. 1. Thread observability Threads are how the JVM actually does work. When something is wrong in production, the symptom is almost always a thread: stopped, blocked, leaking etc. Thread dumps work on any JVM with no  instrumentation, no agents, no restarts. <Example project link with /threaddump endpoint>         // (1) Deadlock — two threads grab the same pair of locks in opposite order.         new Thread(() -> grab(LOCK_A, LOCK_B), "deadlock-A-then-B").start();         new Thread(() -> grab(LOCK_B, LOCK_A), "deadlock-B-then-A").start(); http://localhost:8080/actuator/threaddump To list the JVMS, we can use the command below. PS C:\observe-jvm> jps -lv 25296 jdk.jcmd/sun.tools.jps.Jps -Dapplication.home=C:\Program Files\Microsoft\jdk-21.0.3.9-hotspot -Xms8m -Djdk.module.main=...

Real life TestDrivenDevelopment benefit: Tests as Documentation

I ve been working on an integration component that listens to LDAP server and notifies applications about changes on LDAP entries. My component searches for LDAP change logs. And a change log has the "targetdn" attribute.

Example:
targetDn:
uid=ND2392,ou=Users,dc=MyCompany

There is a business rule about notification process:
If Organization Unit is “Special Users”, skip the notification for that change.

Example:
targetDn:
uid=ND2392,ou=Special Users,dc=MyCompany
 
This changeLog should be skipped because it is about "Special Users" organization unit.

I am using a regular expression to parse the targetdn.
I isolated the code that does parsing and wrote unit tests for many inputs. Of course I added a unit test for the Business Rule mentioned above.

At a point, I thought my regular expression is not good enough and changed it:

Old regex:
[oO][uU]=[^,]*

New regex:
[oO][uU]=[^,\s]*

I was getting prepared to commit my code to Clearcase but I said:
“Just a minute! Lets run all unit tests first..”

After running all tests, I saw that 1 test failed. The test about the business rule failed!
That failure informed me that changing the regex was not a good idea. IT REMINDED ME ABOUT THE BUSINESS RULE. IT SERVED AS DOCUMENTATION.
I love this kind of documentation that not just sits there but helps :)

Comments

Popular posts from this blog

The WeakReference class, monitoring memory leak and garbage collection in a Java application

Simplescalar Simulator - Part 2: sim-outorder.c

Notes on Java Performance