JUnit, 4, 5, Jupiter, Vintage | Mark As Read |
After JUnit 5 was released, a lot of developers just added this awesome new library to their projects, because unlike other versions, in this new version, it is not necessary to migrate from JUnit 4 to 5, you just need to include the new library in your project, and with all the engine of JUnit 5 you can do your new tests using JUnit 5, and the old...
Building a Performant Application Using Netty Framework in Java | Mark As Read |
Netty is a powerful, asynchronous, event-driven networking framework for building high-performance, scalable applications. It simplifies the development of network applications by providing an easy-to-use API and robust abstractions for handling various networking protocols and data formats. Key features and benefits of Netty include:
Optimizing Robotics Applications Performance | Mark As Read |
In this post, we would like to share our real-world experience in optimizing a Java application that was controlling the robots in a warehouse. This application would give instructions to the robots in the warehouse on what actions to perform. Based on those instructions, robots carry out their job in the warehouse. Occasionally, this application w...
Test Parameterization With JUnit 5.7: A Deep Dive Into @EnumSource | Mark As Read |
Parameterized tests allow developers to efficiently test their code with a range of input values. In the realm of JUnit testing, seasoned users have long grappled with the complexities of implementing these tests. But with the release of JUnit 5.7, a new era of test parameterization enters, offering developers first-class support and enhanced capab...
CRUDing NoSQL Data With Quarkus, Part Two: Elasticsearch | Mark As Read |
In Part 1 of this series, we looked at MongoDB, one of the most reliable and robust document-oriented NoSQL databases. Here in Part 2, we'll examine another quite unavoidable NoSQL database: Elasticsearch. More than just a popular and powerful open-source distributed NoSQL database, Elasticsearch is first of all a search and analytics engine. It is...
BFO PDF Library 2.28.4 - with PDF/UA-2 and WTPDF | Mark As Read |
This is the PDF/UA-2 release, and it also adds code for converting PDF to HTML. Read on for details.
Mastering Exception Handling in Java Lambda Expressions | Mark As Read |
Effective exception management is pivotal for maintaining the integrity and stability of software applications. Java's lambda expressions offer a concise means of expressing anonymous functions, yet handling exceptions within these constructs presents unique challenges. In this article, we'll delve into the nuances of managing exceptions within Jav...
Feature Flags and Canary Releases in Microservices | Mark As Read |
Feature flags are commonly used constructs and have been there for a while. But in the last few years, things have evolved and feature flags are playing a major role in delivering continuous risk-free releases. In general, when a new feature is not fully developed and we still want to branch off a release from the mainstream, we can hide our new fe...
COBOL to JOBOL? A Poor Choice for Modernization | Mark As Read |
The enduring prevalence of COBOL (Common Business-Oriented Language) in mission-critical applications poses a challenge for modernization efforts, particularly in the transition to Java. This paper explores the intricacies of converting COBOL to Java, emphasizing the avoidance of JOBOLa term coined for Java code that retains procedural characterist...
Streaming Real-Time Data From Kafka 3.7.0 to Flink 1.18.1 for Processing | Mark As Read |
Over the past few years, Apache Kafka has emerged as the leading standard for streaming data. Fast-forward to the present day: Kafka has achieved ubiquity, being adopted by at least 80% of the Fortune 100. This widespread adoption is attributed to Kafka's architecture, which goes far beyond basic messaging. Kafka's architecture versatility makes it...
Debugging Using JMX Revisited | Mark As Read |
Debugging effectively requires a nuanced approach, similar to using tongs that tightly grip the problem from both sides. While low-level tools have their place in system-level service debugging, today's focus shifts towards a more sophisticated segment of the development stack: advanced management tools. Understanding these tools is crucial for dev...
Harnessing the Power of SIMD With Java Vector API | Mark As Read |
In the world of high-performance computing, utilizing SIMD (Single Instruction, Multiple Data) instructions can significantly boost the performance of certain types of computations. SIMD enables processors to perform the same operation on multiple data points simultaneously, making it ideal for tasks like numerical computations, image processing, a...
Java Thread Dump Analysis | Mark As Read |
Thread dump analysis is a traditional approach followed to analyze the performance bottlenecks in Java-based applications. In the modern era, we have APM tools that provide various metrics and screens to drill down and identify performance issues, even at the code level. But for some of the performance issues or occasions, thread dump analysis stil...
Automatic Snapshots Using Snapshot Manager | Mark As Read |
Overview AWS has a Lambda function that can be leveraged to take automatic snapshots of the KDA (Kinesis Data Analytics) applications that are running in a specific region. Refer the Lambda function source code here. Users can modify the Lambda function to their needs. Note: As of August 30, 2023, Amazon Kinesis Data Analytics (KDA) has been rename...
Spring RestTemplate to WebClient Causes OutOfMemoryError | Mark As Read |
Spring Boot is a highly popular framework for Java enterprise applications. One common method of integration with internal or external applications is through HTTP REST connections. We were upgrading from RestTemplate to the Java NIO-based WebClient, which can significantly enhance application performance by allowing concurrency when calling REST s...
Journey Through Java Execution: From Loader to Memory Model | Mark As Read |
Ever wondered what happens behind the scenes when you hit that "run" button on your Java program? The process involves a series of complex steps, from compiling and loading the code into memory to managing data in data structures like the heap and stack. Here, we'll explore the steps of running a basic Java program, highlighting the roles of the lo...
Dapr For Java Developers | Mark As Read |
In this article, learn how the Dapr project can reduce the cognitive load on Java developers and decrease application dependencies. Coding Java applications for the cloud requires not only a deep understanding of distributed systems, cloud best practices, and common patterns but also an understanding of the Java ecosystem to know how to combine ma...
Foreign Function and Memory API: Modernizing Native Interfacing in Java 17 | Mark As Read |
Java 17 heralds a new era in Java's evolution, bringing forth the Foreign Function and Memory API as part of its feature set. This API, a cornerstone of Project Panama, is designed to revolutionize the way Java applications interact with native code and memory. Its introduction is a response to the long-standing complexities and inefficiencies asso...
Unlocking the Power of Oracle NoSQL With Quarkus: Seamless Integration for Cloud-Age Applications | Mark As Read |
In todays digital landscape, the demand for scalable, high-performance databases that can seamlessly integrate with modern application frameworks is ever-growing. While reliable, traditional relational databases often need help keeping pace with the dynamic requirements of cloud-native applications. It has led to the rise of NoSQL databases, offeri...
Code Complexity in Practice | Mark As Read |
Imagine entering a bustling workshop - not of whirring machines, but of minds collaborating. This is the true essence of software programming at its core: a collective effort where code serves not just as instructions for machines, but as a shared language among developers. However, unlike spoken languages, code can often become an obscure dialect,...
A Financial Anti-Fraud Solution Based on the Apache Doris Data Warehouse | Mark As Read |
Financial fraud prevention is a race against time. Implementation-wise, it relies heavily on the data processing power, especially under large datasets. Today, I'm going to share with you the use case of a retail bank with over 650 million individual customers. They have compared analytics components, including Apache Doris, ClickHouse, Greenplum, ...
Building up networks of zones on Tribblix | Mark As Read |
With OpenSolaris and derivatives such as illumos, we gained the ability to build a whole IT infrastructure in a single box, using virtualized networking (crossbow) to build the underlying network and then attaching virtualized systems (zones) atop virtualized storage (zfs).Some of this was present in Solaris 10, but it didn't have crossbow so the n...
The SunOS JDK builder | Mark As Read |
I've been building OpenJDK on Solaris and illumos for a while.This has been moderately successful; illumos distributions now have access to up to date LTS releases, most of which work well. (At least 11 and 17 are fine; 21 isn't quite right.)There are even some third-party collections of my patches, primarily for Solaris (as opposed to illumos) bui...
OWASP DependencyCheck returns 403 Forbidden accessing NVD API using API key | Mark As Read |
IntroductionRecently, the NVD (National Vulnerability Database) which the Owasp dependency check plugin uses to get its data from to check for vulnerabilities, has introduced the use of an API key. That's for them to better control access and throttling - imagine how many companies and organizations are using that API, each time a dependency check ...
Kotlin: how to mock a static Companion method using MockK | Mark As Read |
IntroductionHow do you mock a static companion method in Kotlin using MockK?I wanted to mock this (static) method in a companion object in Kotlin in class MyClass: companion object { fun isNegativeAndFromSavingsAccount(amount: BigDecimal, accountType: accountType) = amount < BigDecimal.ZERO && accountType == AccountType.SAVINGS } Tr...
2023 - A Year in Review | Mark As Read |
2023 started with a celebration of love in the Philippines. Trish and I traveled with friends to El Nido and Manila to celebrate their 25th wedding anniversary. It was a two-week trip that filled our souls with lasting memories. 2023 was a milestone year for our family. It's the year Jack graduated from high school! Then, the Den...
BFO PDF Library 2.28.3 is released | Mark As Read |
Release 2.28.3 of our PDF Library adds per-separation rendering for output preview, Factur-X, Document Parts and more.
Print-preview rendering | Mark As Read |
Creating a bitmap image from a PDF is normally done in RGB, but when that PDF contains overprinting or depends on CMYK blending, you need something more. This article tells you how.
Goodbye, DU House. Thanks for all the memories! | Mark As Read |
On the weekend before I joined Stormpath as a full-time employee in 2016, we bought a house in the countryside and moved out of the city. We'd been looking for a while and finally found a place we loved. Trish liked that it was rigged for horses, with two pastures, a barn, and an outdoor riding arena nearby. I was happy because it had six garages, ...
It seemed like a simple problem to fix | Mark As Read |
While a bit under the weather last week, I decided to try and fix what at first glance appears to be a simple problem:need to ship the manpage with exaNow, exa is a modern file lister, and the package on Tribblix doesn't ship a man page. The reason for that, it turns out, is that there isn't a man page in the source, but you can generate one.To bui...
Keeping python modules in check | Mark As Read |
Any operating system distribution - and Tribblix is no different - will have a bunch of packages for python modules.And one thing about python modules is that they tend to depend on other python modules. Sometimes a lot of python modules. Not only that, the dependency will be on a specific version - or range of versions - of particular modules.Whic...
MapStruct library: setting a field with an expression to a ZonedDateTime | Mark As Read |
IntroductionSetup:- Mapstruct 1.5.5- Kotlin 1.8- IntelliJ 2023.2.3 For a mapping between two classes, the source class did not have the mandatory (non-null, Kotlin!) target class field created. And I wanted to fill it with the current ZonedDateTime class, with the timezone of Amsterdam/Europe. And that specific ZoneId is a constant in my Applicati...
Happy Birthday, Abbie! | Mark As Read |
Our oldest child turned 21 today! She's a junior at the University of Colorado in Boulder, living in an apartment with three roommates. Abbie is a joy to be around because she's always smiling and cracking jokes. We journeyed up to Boulder this weekend to join her for the CU vs Oregon State game. We had a nice family dinner, celebrated the big e...
Summer 2023: Colorado, Montana, and Cape Cod | Mark As Read |
I've been remiss in writing about my month-long summer vacation. Mostly because life moves pretty fast with Jack heading off to college, things getting busy at work, and lots of wonderful weekends along the way. I'm finally looking around and sitting down to write this post at the end of October. Now is better than never! This year, I...
When zfs was young | Mark As Read |
On the Solaris 10 Platinum Beta program, one of the most exciting promised features was ZFS, the new file system.I was especially interested, given that I was in a data-heavy position at the time. The limits of UFS were painful, we had datasets into several terabytes already - and even the multiterabyte file system support that got added was actual...
SMF - part of the Solaris 10 legacy | Mark As Read |
The Service Management Facility, or SMF, integrated extremely late in the Solaris 10 release cycle. We only got one or two beta builds to test, which seemed highly risky for such a key feature.So there was very little time to gather feedback from users. And something that central really can't be modified once it's released. It had to work first tim...
SpringDoc OpenAPI Swagger generated Swagger API shows incorrect class with same name | Mark As Read |
IntroductionWhen you have multiple classes with the same name in your classpath, SpringDoc with Swagger API annotations potentially picks the wrong class with the same name when generating the Swagger UI documentation.Suppose you have these classes:org.example.BookDtoorg.example.domain.BookDto And you specified your endpoint like this, where you wa...
Too many open files in AWS Lambda serverless troubleshooting | Mark As Read |
IntroductionOne of my Kotlin lambdas was throwing Too many open files exceptions and thus logging errors, but only nightly, when it got bursts of SQS messages to process. To find out what was causing these errors, I followed these steps:Read up on what can be the causesDetermine what/where in the code is not closing the file descriptorsFind a solut...
Unknown application error occurred Runtime.Unknown - Startup issue AWS Serverless Lambda | Mark As Read |
IntroductionTrying to invoke a deployed AWS Serverless Lambda on AWS, I was getting this error CloudWatch when trying to invoke the lambda via an SQS event, published by another service in my landscape: 2023-08-15T15:20:44.047+02:00 START RequestId: ab924ff5-236c-5b09-8a29-12a0b9447e41 Version: $LATEST2023-08-15T15:20:45.223+02:00 Unknown applicati...
Static Site Generators | Mark As Read |
The current Tribblix website is a bit of a hack. Technically it's using a static site generator - a simple home-grown script that constructs pages from a bit of content and boilerplate - but I wanted to be able to go a bit further.I looked at a few options - and there are really a huge number of them - such as Hugo and Zola. (Both are packaged for ...
Remnants of closed code in illumos | Mark As Read |
One of the annoying issues with illumos has been the presence of a body of closed binaries - things that, for some reason or other, were never able to be open sourced as part of OpenSolaris.Generally the illumos project has had some success in replacing the closed pieces, but what's left isn't entirely zero.It took me a little while to work out wha...
Speed up zone installation with this one weird trick | Mark As Read |
Sadly, the trick described below won't work in current releases of Solaris, or any of the illumos distributions. But back in the day, it was pretty helpful.In Solaris 10, we had sparse root zones - which shared /usr with the global zone, which not only saved space because you didn't need a copy of all the files, but creating them was much quicker b...
Modernizing scripts in Tribblix | Mark As Read |
It's something I've been putting off for far too long, but it's about time to modernize all the shell scripts that Tribblix is built on.Part of the reason it's taken this long is the simple notion of, if it ain't broke, don't fix it.But some of the scripting was starting to look a bit ... old. Antiquated. Prehistoric, even.And there's a reason for ...
Retiring isaexec in Tribblix | Mark As Read |
One of the slightly unusual features in illumos, and Solaris because that's where it came from, is isaexec.This facility allows you to have multiple implementations of a binary, and then isaexec will select the best one (for some definition of best).The full implementation allows you to select from a wide range of architectures. On my machine it'll...
Happy Birthday, Jack! | Mark As Read |
Today is a monumental day in the life of Jack Raible. Not only is today his 19th birthday, but it's also his first day of classes at the University of Colorado. He moved in last week and had a week to settle into his new surroundings. He's been playing hoops for 1-2 hours a day on our basketball court for the last six months. We recently ask...
BFO Publisher 1.3 released | Mark As Read |
The first update to BFO Publisher for 2023 adds some new features.
Upgrading MATE on Tribblix | Mark As Read |
I spent a little time yesterday updating MATE on Tribblix, to version 1.26.This was supposed to be part of the "next" release, but we had to make an out of sequence release for an illumos security issue, so everything gets pushed back a bit.Updating MATE is actually fairly easy, though. The components in MATE are largely decoupled, so can be update...
Maintaining old software with no sign of retirement | Mark As Read |
There's a lot of really old software out there. Some of it has simply been abandoned; others have been replaced by new versions. But old software never really goes away, and we end up maintaining it.This is especially tricky when old software depends on other old software, and we have to support the entire dependency tree.There's always python2 and...
Zones, way back when | Mark As Read |
The original big ticket feature in Solaris 10 was Zones, a simple virtualization technology that allowed a set of processes to be put aside in a separate namespace and be under the illusion that this was a separate computer system, all under a single shared kernel.As a result of this sleight of hand, you could connect to a zone using ssh (or, remem...
- Welcome!
- OnlyJava aggregates blogs for the Java industry.
- Custom Feeds
- Add any RSS feed to the information you read daily.
- Blocked Feeds
- Block feeds to remove blogs you’re not interested in.
- Account Settings
- Customize the site by adding or removing feeds.
Don’t have an account yet?
- Customize your settings
- Edit how your blog displays
- Add or remove blogs you read. Sign Up.
About Us
OnlyJava is your source for all your Java news.
Know of a Java blog that we're missing? Let us know! |