This article is about a real problem I faced where the timezone on a Java application server (in my case it was JBoss) changed unexpectedly during the run time of the server. It was hard to find any pattern or the reason for the change, as it was triggered by a HTTP request. To debug this scenario, I used the Byteman tool and injected the script into the JVM. This helped me to identify the root cause of the issue and come up with a few Do’s and Don’ts for a shared JVM (like on Java application servers).
Any application server is considered a shared JVM. There are multiple applications deployed on the JVM and they share the same resources. In such a scenario, there are some precautions which need to be taken care of. One of them is dealing with the JVM’s timezone.
Byteman is a tool that makes it easy to trace, monitor, and test the behavior of Java applications and the JDK runtime code. It injects Java code into your application APIs or into Java runtime methods without the need for you to recompile, repackage, or even redeploy your application. Injection can be performed at startup or in running code.
Continue reading “Using Byteman to Find Out Why the TimeZone Changed on a Java App Server”
Last week I presented a talk on the subject of Java Class Metadata at FOSDEM 2018 in the Free Java Room. In my presentation I explained:
- What Java Class Metadata is
- Why it helps to know about it
- What you might do to measure it and reduce the impact of the metadata’s footprint on your Java application
Continue reading “Java Class Metadata: A User Guide”
Object-Oriented Primitives (in-process primitives)
As a Java developer, I’m well familiar with object-oriented concepts such as class, object, inheritance, encapsulation, polymorphism, etc. In addition to the object-oriented concepts, I’m also well familiar with the Java runtime, what features it provides, how it manages my applications, what would be the life cycle of my object and the application as a whole, etc.
And for over a decade, I’ve used all the primary tools, primitives, and building blocks as a developer to create applications. In my mental model, I would use classes as components, which would give birth to objects that are managed by the JVM. But that model has started to change recently.
Continue reading “New Distributed Primitives for Developers”
What can be done to help the OpenJDK JVM play well in the world of Linux Containers?
I thought I’d start tackling this issue by answering some frequently asked questions:
Why is it when I specify -Xmx=1g my JVM uses up more memory than 1gb of memory?
Specifying -Xmx=1g is telling the JVM to allocate a 1gb heap. It’s not telling the JVM to limit its entire memory usage to 1gb. There are card tables, code caches, and all sorts of other off heap data structures. The parameter you use to specify total memory usage is -XX:MaxRAM. Be aware that with -XX:MaxRam=500m your heap will be approximately 250mb.
Continue reading “OpenJDK and Containers”
Enabling SSL/TLS in a Fabric is slightly more complex than securing a jetty in a standalone Karaf container. In the following article, we are providing feedback on the overall process. For clarity and simplification, the article will be divided into two parts.
Part1: The Management Console
Part2: Securing Web Service:including gateway-http
For the purpose of this PoC, the following environment will be used.
Continue reading “Securing Fuse 6.3 Fabric Cluster Management Console with SSL/TLS”
Omair Majid, a Red Hat Senior Software Engineer, addressed the primordial issue of performance on the Java Virtual Machine. Performance issues of OS, CPU, Memory, and IO origins plague modern systems and present a complex issue to developers so the Thermostat tool focuses on alleviating and easing serviceability while enhancing monitoring of the JVM.
Continue reading DevNation Live Blog: Analyzing Java applications using Thermostat
At Red Hat, we all love playing with new technologies, and sometimes we find gaps that haven’t yet been filled. I want to take a few minutes to share a personal project I’ve been working on in my spare time. It is a native C++11 add-on that allows you to run a JVM in Node.js, giving access to the mature Java ecosystem of libraries and frameworks.
I just wanted some mature PDF library in Node.js, like iText, PDFBox . Those libraries are very mature, for example it took PDFBox 3 years to get to version 2.0 from version 1.8, so I realized that it would be easier to look for a way to use those existing Java libraries, rather than reproduce the effort in Node.js.
Continue reading “Node.js – Harnessing the power of Java (for PDF generation and more)”
The .NET framework is a relatively young technology when compared to the rest of computer science history, but as it turns fourteen this year, we can look back and see a long-standing record of innovation, developer productivity, and more recently a refreshing open-source mentality from Microsoft that has resulted in the first ever release of (the official) .NET framework in a Linux distribution.
.NET is a development platform that includes several programming languages, notably C# and Visual Basic, and the .NET web framework. Microsoft Visual Studio itself is built on .NET, along with numerous open-source applications including the notable Gnome-Do (a quick-launch utility similar to the Windows key quick-launch) and KeePass (a password manager).
Continue reading “Origins of .NET on Linux: An explanation for Java Developers”
Abstract: Properly freeing external resources such as files and connections in a garbage collected environment requires care. The JVM’s finalize() and PhantomReference features provide APIs and JVM targetted languages a way to handle the common case of a forgotten close. Unfortunately these capabilities are deeply flawed, and require specialized techniques to use correctly. This session will dive deeply into the problem, showing how the JVM can get it wrong. It will offer useful tips on how developers can safely manage their resources, and never forgot to close. In addition, API and language designers will gain more insight into the inner-workings of the JVM, and how they can safely avoid the peril of JVM finalization.
Continue reading “DevNation 2014 – Jason Greene – JVM Finalize Pitfalls: How to Avoid the Danger”