<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on Reflectoring - Where the HOW meets the WHY</title><link>https://reflectoring.io/categories/java/</link><description>Recent content in Java on Reflectoring - Where the HOW meets the WHY</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 12 Jul 2024 00:00:00 +1100</lastBuildDate><atom:link href="https://reflectoring.io/categories/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Guide to JUnit 5 Functional Interfaces</title><link>https://reflectoring.io/junit5-functional-interfaces/</link><pubDate>Fri, 12 Jul 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/junit5-functional-interfaces/</guid><description>In this article, we will get familiar with JUnit 5 functional interfaces. JUnit 5 significantly advanced from its predecessors. Features like functional interfaces can greatly simplify our work once we grasp their functionality.</description></item><item><title>Offloading File Transfers with Amazon S3 Presigned URLs in Spring Boot</title><link>https://reflectoring.io/offloading-file-transfers-with-amazon-s3-presigned-urls-in-spring-boot/</link><pubDate>Sat, 15 Jun 2024 00:00:00 +0530</pubDate><guid>https://reflectoring.io/offloading-file-transfers-with-amazon-s3-presigned-urls-in-spring-boot/</guid><description>When building web applications that involve file uploads or downloads, a common approach is to have the files pass through an application server.</description></item><item><title>One Stop Guide to Java Functional Interfaces</title><link>https://reflectoring.io/one-stop-guide-to-java-functional-interfaces/</link><pubDate>Tue, 11 Jun 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/one-stop-guide-to-java-functional-interfaces/</guid><description>Introduction to Functional Programming Functional programming is a paradigm that focuses on the use of functions to create clear and concise code.</description></item><item><title>Apache HttpClient Configuration</title><link>https://reflectoring.io/apache-http-client-config/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-config/</guid><description>Configuring Apache HttpClient is essential for tailoring its behavior to meet specific requirements and optimize performance. From setting connection timeouts to defining proxy settings, configuration options allow developers to fine-tune the client&amp;rsquo;s behavior according to the needs of their application.</description></item><item><title>Async APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-async-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-async-apis/</guid><description>In this article, we are going to learn about the async APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient enables developers to send and receive data over the internet in asynchronous mode.</description></item><item><title>Classic APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-classic-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-classic-apis/</guid><description>In this article, we are going to learn about the classic APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient helps us to send and receive data over the internet in classic (synchronous) mode.</description></item><item><title>Create a HTTP Client with Apache HttpClient</title><link>https://reflectoring.io/create-a-http-client-with-apache-http-client/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/create-a-http-client-with-apache-http-client/</guid><description>In this article series, we&amp;rsquo;re going to explore Apache HTTPClient APIs. We&amp;rsquo;ll get familiar with the different ways Apache HttpClient enables developers to send and receive data over the internet.</description></item><item><title>Reactive APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-reactive-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-reactive-apis/</guid><description>In this article, we are going to learn about reactive APIs offered by Apache HttpClient APIs. We are going to explore how to use reactive, full-duplex HTTP/1.</description></item><item><title>Integrating Amazon S3 with Spring Boot Using Spring Cloud AWS</title><link>https://reflectoring.io/integrating-amazon-s3-with-spring-boot-using-spring-cloud-aws/</link><pubDate>Mon, 27 May 2024 00:00:00 +0530</pubDate><guid>https://reflectoring.io/integrating-amazon-s3-with-spring-boot-using-spring-cloud-aws/</guid><description>In modern web applications, storing and retrieving files has become a common requirement. Whether it is user uploaded content like images and documents or application generated logs and reports, having a reliable and scalable storage solution is crucial.</description></item><item><title>Publisher-Subscriber Pattern Using AWS SNS and SQS in Spring Boot</title><link>https://reflectoring.io/publisher-subscriber-pattern-using-aws-sns-and-sqs-in-spring-boot/</link><pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate><guid>https://reflectoring.io/publisher-subscriber-pattern-using-aws-sns-and-sqs-in-spring-boot/</guid><description>In an event-driven architecture where multiple microservices need to communicate with each other, the publisher-subscriber pattern provides an asynchronous communication model to achieve this.</description></item><item><title>Use Cases for Java Records</title><link>https://reflectoring.io/beginner-friendly-guide-to-java-records/</link><pubDate>Sun, 11 Feb 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/beginner-friendly-guide-to-java-records/</guid><description>Java Records introduce a simple syntax for creating data-centric classes, making our code more concise, expressive, and maintainable.
In this guide, we&amp;rsquo;ll explore the key concepts and practical applications of Java Records, providing a step-by-step guide to creating records and sharing best practices for using them effectively in projects.</description></item><item><title>Don't Use Checked Exceptions</title><link>https://reflectoring.io/do-not-use-checked-exceptions/</link><pubDate>Tue, 26 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/do-not-use-checked-exceptions/</guid><description>Introduction Java is the only (mainstream) programming language to implement the concept of checked exceptions. Ever since, checked exceptions have been the subject of controversy.</description></item><item><title>Create an HTTP Client with OpenFeign</title><link>https://reflectoring.io/create-openfeign-http-client/</link><pubDate>Sat, 14 Oct 2023 00:00:00 +0530</pubDate><guid>https://reflectoring.io/create-openfeign-http-client/</guid><description>Feign is an open-source Java library that simplifies the process of making web requests. It streamlines the implementation of RESTful web services by providing a higher-level abstraction.</description></item><item><title>Enforcing Your Architecture with ArchUnit</title><link>https://reflectoring.io/enforce-architecture-with-arch-unit/</link><pubDate>Sun, 25 Jun 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/enforce-architecture-with-arch-unit/</guid><description>ArchUnit is a Java library to validate your software architecture. The library is well described in its documentation and as its fluent API is pure Java, it&amp;rsquo;s easy to explore using the code completion in the IDE.</description></item><item><title>JUnit 5 Parameterized Tests</title><link>https://reflectoring.io/tutorial-JUnit5-parameterized-tests/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-JUnit5-parameterized-tests/</guid><description>If you’re reading this article, it means you’re already well-versed with JUnit.
Let me give you a summary of JUnit - In software development, we developers write code which does something simple as designing a person’s profile or as complex as making a payment (in a banking system).</description></item><item><title>JUnit 5 by Examples</title><link>https://reflectoring.io/junit5/</link><pubDate>Sun, 11 Sep 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/junit5/</guid><description>In software development, unit testing means writing tests to verify that our code is working as logical units.
Different people tend to think of a &amp;ldquo;logical unit&amp;rdquo; in different ways.</description></item><item><title>Testing Feature Flags</title><link>https://reflectoring.io/testing-feature-flags/</link><pubDate>Sat, 20 Aug 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/testing-feature-flags/</guid><description>Putting your code behind a feature flag means that you can deploy unfinished changes. As long as the feature flag is disabled, the changes are not having an effect.</description></item><item><title>All You Need To Know About JSON Parsing With Jackson</title><link>https://reflectoring.io/jackson/</link><pubDate>Fri, 15 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/jackson/</guid><description>Most of the web today exchanges data in JSON format. Web servers, web and mobile applications, even IoT devices all talk with each other using JSON.</description></item><item><title>Run Your Gradle Build Anywhere with the Gradle Wrapper</title><link>https://reflectoring.io/gradle-wrapper/</link><pubDate>Mon, 04 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/gradle-wrapper/</guid><description>Gradle is a build automation tool that supports multi-language development. It is helpful to build, test, publish, and deploy software on any platform.</description></item><item><title>One-Stop Guide to Mapping with MapStruct</title><link>https://reflectoring.io/java-mapping-with-mapstruct/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-mapping-with-mapstruct/</guid><description>When we define multi-layered architectures, we often tend to represent data differently at each layer. The interactions between each layer become quite tedious and cumbersome.</description></item><item><title>Typesafe HTTP Clients with OkHttp and Retrofit</title><link>https://reflectoring.io/okhttp-retrofit/</link><pubDate>Tue, 17 May 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/okhttp-retrofit/</guid><description>Developers use HTTP Clients to communicate with other applications over the network. Over the years, multiple HTTP Clients have been developed to suit various application needs.</description></item><item><title>Comprehensive Guide to Java Streams</title><link>https://reflectoring.io/comprehensive-guide-to-java-streams/</link><pubDate>Thu, 05 May 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/comprehensive-guide-to-java-streams/</guid><description>A stream is a sequence of elements on which we can perform different kinds of sequential and parallel operations. The Stream API was introduced in Java 8 and is used to process collections of objects.</description></item><item><title>When Should I Use Project Lombok?</title><link>https://reflectoring.io/when-to-use-lombok/</link><pubDate>Sun, 10 Apr 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/when-to-use-lombok/</guid><description>Project Lombok is a popular library that helps us to write clear, concise, and less repetitive Java code. However, among the developer community, it has been both embraced and criticized for reasons I would like to elaborate here.</description></item><item><title>Improving Performance with Java's CompletableFuture</title><link>https://reflectoring.io/java-completablefuture/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-completablefuture/</guid><description>In this article, we will learn how to use CompletableFuture to increase the performance of our application. We&amp;rsquo;ll start with looking at the Future interface and its limitations and then will discuss how we can instead use the CompletableFuture class to overcome these limitations.</description></item><item><title>An Introduction to Annotations and Annotation Processing in Java</title><link>https://reflectoring.io/java-annotation-processing/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-annotation-processing/</guid><description>An annotation is a construct associated with Java source code elements such as classes, methods, and variables. Annotations provide information to a program at compile time or at runtime based on which the program can take further action.</description></item><item><title>Complete Guide to the Immutables Java Library</title><link>https://reflectoring.io/immutables-library/</link><pubDate>Mon, 17 Jan 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/immutables-library/</guid><description>Immutability means that an object&amp;rsquo;s state is constant after the initialization. It cannot change afterward.
When we pass an object into a method, we pass the reference to that object.</description></item><item><title>Common Operations on Java Collections</title><link>https://reflectoring.io/common-operations-on-java-collections/</link><pubDate>Sat, 15 Jan 2022 06:00:00 +1000</pubDate><guid>https://reflectoring.io/common-operations-on-java-collections/</guid><description>Collections are containers to group multiple items in a single unit. For example, a collection can represent a stack of books, products of a category, a queue of text messages, etc.</description></item><item><title>Java Features from Java 8 to Java 17</title><link>https://reflectoring.io/java-release-notes/</link><pubDate>Mon, 29 Nov 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/java-release-notes/</guid><description>A lot has changed in Java from its beginnings in 1995 until today. Java 8 was a revolutionary release that put Java back on the pedestal of the best programming languages.</description></item><item><title>Creating Hashes in Java</title><link>https://reflectoring.io/creating-hashes-in-java/</link><pubDate>Sun, 21 Nov 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/creating-hashes-in-java/</guid><description>A hash is a piece of text computed with a cryptographic hashing function. It is used for various purposes mainly in the security realm like securely storing sensitive information and safeguarding data integrity.</description></item><item><title>Comparison of Java HTTP Clients</title><link>https://reflectoring.io/comparison-of-java-http-clients/</link><pubDate>Tue, 09 Nov 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/comparison-of-java-http-clients/</guid><description>Hypertext Transfer Protocol (HTTP) is an application-layer protocol for transmitting hypermedia documents, such as HTML, and API payloads in a standard format like JSON and XML.</description></item><item><title>Timeouts with Spring Boot and Resilience4j</title><link>https://reflectoring.io/time-limiting-with-springboot-resilience4j/</link><pubDate>Sun, 24 Oct 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/time-limiting-with-springboot-resilience4j/</guid><description>In this series so far, we have learned how to use the Resilience4j Retry, RateLimiter, TimeLimiter, Bulkhead, Circuitbreaker core modules and also seen its Spring Boot support for the Retry and the RateLimiter modules.</description></item><item><title>Asserting Lists with AssertJ</title><link>https://reflectoring.io/assertj-lists/</link><pubDate>Mon, 04 Oct 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/assertj-lists/</guid><description>In tests, we need to add assertions to make sure that a result is the expected result. For this, we can make use of the AssertJ assertion library.</description></item><item><title>Per-Environment Logging with Plain Java and Spring Boot</title><link>https://reflectoring.io/profile-specific-logging-spring-boot/</link><pubDate>Wed, 21 Jul 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/profile-specific-logging-spring-boot/</guid><description>Application logs are the most important resource when it comes to investigating issues and incidents. Imagine something goes wrong during your on-call rotation and you don&amp;rsquo;t have any logs!</description></item><item><title>Feature Flags in Java with Togglz and LaunchDarkly</title><link>https://reflectoring.io/java-feature-flags/</link><pubDate>Sat, 17 Jul 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/java-feature-flags/</guid><description>With feature flags, we can reduce the risk of rolling out software changes to a minimum. We deploy the software with the changes, but the changes are behind a deactivated feature flag.</description></item><item><title>Creating and Analyzing Thread Dumps</title><link>https://reflectoring.io/analyzing-thread-dumps/</link><pubDate>Wed, 05 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/analyzing-thread-dumps/</guid><description>A thread is a basic path of execution in a program. Most of the applications we build today execute in a multi-threaded environment.</description></item><item><title>Designing an AWS CDK Project with Java</title><link>https://reflectoring.io/designing-a-aws-cdk-project/</link><pubDate>Mon, 03 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/designing-a-aws-cdk-project/</guid><description>In the article &amp;ldquo;Getting Started with AWS CDK&amp;rdquo;, we have already deployed a Spring Boot application to AWS with the CDK.</description></item><item><title>Clean Unit Tests with Mockito</title><link>https://reflectoring.io/clean-unit-tests-with-mockito/</link><pubDate>Sun, 25 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/clean-unit-tests-with-mockito/</guid><description>In this article we will learn how to mock objects with Mockito. We&amp;rsquo;ll first talk about what test doubles are and then how we can use them to create meaningful and tailored unit tests.</description></item><item><title>Getting Started With Java: Build a Robot Arena</title><link>https://reflectoring.io/first-java-program-robot-arena/</link><pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/first-java-program-robot-arena/</guid><description>You are just beginning your programming career? Or you have dabbled a bit in programming but want to get into Java?</description></item><item><title>Using Maven's Bill of Materials (BOM)</title><link>https://reflectoring.io/maven-bom/</link><pubDate>Sat, 10 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-bom/</guid><description>As Java developers, we may maintain many applications using Maven for their dependency management. These applications need upgrades from time to time to be up to date and to add new features or security updates.</description></item><item><title>Implementing Plugins with Java's Service Provider Interface</title><link>https://reflectoring.io/service-provider-interface/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/service-provider-interface/</guid><description>In this article, we are going to talk about Java&amp;rsquo;s Service Provider Interface (SPI). We will have a short overview of what the SPI is and describe some cases where we can use it.</description></item><item><title>Deploying a Spring Boot App with the AWS CDK</title><link>https://reflectoring.io/deploy-spring-boot-app-with-aws-cdk/</link><pubDate>Sat, 06 Mar 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/deploy-spring-boot-app-with-aws-cdk/</guid><description>In the article &amp;ldquo;Getting Started with AWS CloudFormation&amp;rdquo;, we have already played around a bit with AWS CloudFormation. We have deployed a network stack that provides the network infrastructure we need, and a service stack that deploys a Docker image with our Spring Boot application into that network.</description></item><item><title>Creating and Analyzing Java Heap Dumps</title><link>https://reflectoring.io/create-analyze-heapdump/</link><pubDate>Mon, 01 Mar 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/create-analyze-heapdump/</guid><description>As Java developers, we are familiar with our applications throwing OutOfMemoryErrors or our server monitoring tools throwing alerts and complaining about high JVM memory utilization.</description></item><item><title>Painless Code Formatting with EditorConfig</title><link>https://reflectoring.io/painless-code-formatting-with-editor-config/</link><pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/painless-code-formatting-with-editor-config/</guid><description>Are you working on a project with other developers where reading code is not as fun as you would want because of inconsistent coding styles?</description></item><item><title>Implementing a Circuit Breaker with Resilience4j</title><link>https://reflectoring.io/circuitbreaker-with-resilience4j/</link><pubDate>Mon, 21 Dec 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/circuitbreaker-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry, RateLimiter, TimeLimiter, and Bulkhead modules. In this article, we will explore the CircuitBreaker module.</description></item><item><title>Managing Multiple JDK Installations With SDKMAN!</title><link>https://reflectoring.io/manage-jdks-with-sdkman/</link><pubDate>Sat, 07 Nov 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/manage-jdks-with-sdkman/</guid><description>In the world of microservices and the 6-month release cycle of Java, we often have to change between Java versions multiple times a day.</description></item><item><title>Managing Multiple JDK Installations With jEnv</title><link>https://reflectoring.io/manage-jdks-with-jenv/</link><pubDate>Sat, 24 Oct 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/manage-jdks-with-jenv/</guid><description>As developers, we&amp;rsquo;re often working on different codebases at the same time. Especially in environments with microservices, we may be switching codebases multiple times a day.</description></item><item><title>Processing Files With Java 8 Streams</title><link>https://reflectoring.io/processing-files-using-java-8-streams/</link><pubDate>Wed, 30 Sep 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/processing-files-using-java-8-streams/</guid><description>Streams, introduced in Java 8, use functional-style operations to process data declaratively. The elements of streams are consumed from data sources such as collections, arrays, or I/O resources like files.</description></item><item><title>Implementing Bulkhead with Resilience4j</title><link>https://reflectoring.io/bulkhead-with-resilience4j/</link><pubDate>Thu, 17 Sep 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/bulkhead-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry, RateLimiter, and TimeLimiter modules. In this article, we will explore the Bulkhead module.</description></item><item><title>Implementing Timeouts with Resilience4j</title><link>https://reflectoring.io/time-limiting-with-resilience4j/</link><pubDate>Tue, 18 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/time-limiting-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry and RateLimiter modules. In this article, we will continue exploring Resilience4j with a look into the TimeLimiter.</description></item><item><title>Optimize Your Dev Loop with Spring Boot Dev Tools</title><link>https://reflectoring.io/spring-boot-dev-tools/</link><pubDate>Thu, 13 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-dev-tools/</guid><description>What are you doing when you&amp;rsquo;ve made a change to a Spring Boot app and want to test it?
You probably restart it and go get a coffee or swipe through your Twitter feed until it&amp;rsquo;s up and running again.</description></item><item><title>Implementing Rate Limiting with Resilience4j</title><link>https://reflectoring.io/rate-limiting-with-resilience4j/</link><pubDate>Wed, 05 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/rate-limiting-with-resilience4j/</guid><description>In the previous article in this series, we learned about Resilience4j and how to use its Retry module. Let&amp;rsquo;s now learn about the RateLimiter - what it is, when and how to use it, and what to watch out for when implementing rate limiting (or &amp;ldquo;throttling&amp;rdquo;, as it&amp;rsquo;s also called).</description></item><item><title>Run Your Maven Build Anywhere with the Maven Wrapper</title><link>https://reflectoring.io/maven-wrapper/</link><pubDate>Wed, 29 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-wrapper/</guid><description>In this article, we&amp;rsquo;ll learn about the Maven Wrapper - what problem it solves, how to set it up, and how it works.</description></item><item><title>Implementing Retry with Resilience4j</title><link>https://reflectoring.io/retry-with-resilience4j/</link><pubDate>Thu, 16 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/retry-with-resilience4j/</guid><description>In this article, we&amp;rsquo;ll start with a quick intro to Resilience4j and then deep dive into its Retry module. We&amp;rsquo;ll learn when and how to use it, and what features it provides.</description></item><item><title>Reactive Multi-Threading with RxJava - Pitfalls and Solutions</title><link>https://reflectoring.io/rxjava-reactive-batch-processing/</link><pubDate>Mon, 03 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/rxjava-reactive-batch-processing/</guid><description>I recently had a rough time refactoring a multi-threaded, reactive message processor. It just didn&amp;rsquo;t seem to be working the way I expected.</description></item><item><title>Hexagonal Architecture with Java and Spring</title><link>https://reflectoring.io/spring-hexagonal/</link><pubDate>Sun, 03 Nov 2019 10:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-hexagonal/</guid><description>The term &amp;ldquo;Hexagonal Architecture&amp;rdquo; has been around for a long time. Long enough that the primary source on this topic has been offline for a while and has only recently been rescued from the archives.</description></item><item><title>Immutables in Java - Are Setters Allowed?</title><link>https://reflectoring.io/java-immutables/</link><pubDate>Wed, 25 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/java-immutables/</guid><description>In short, no. Feel free to jump right ahead to the section on bad practices. If you want to read a bit more on the why and how of immutables, have a look at the rest of this article.</description></item><item><title>Mocking with (and without) Spring Boot</title><link>https://reflectoring.io/spring-boot-mock/</link><pubDate>Wed, 18 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-mock/</guid><description>Mockito is a very popular library to support testing. It allows us to replace real objects with &amp;ldquo;mocks&amp;rdquo;, i.e. with objects that are not the real thing and whose behavior we can control within our test.</description></item><item><title>Bean Validation Anti-Patterns</title><link>https://reflectoring.io/bean-validation-anti-patterns/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/bean-validation-anti-patterns/</guid><description>Bean Validation is the de-facto standard for implementing validation logic in the Java ecosystem and it&amp;rsquo;s a great tool to have around.</description></item><item><title>Pollution-Free Dependency Management with Gradle</title><link>https://reflectoring.io/gradle-pollution-free-dependencies/</link><pubDate>Sun, 28 Jul 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/gradle-pollution-free-dependencies/</guid><description>Remember the days when we had to manually download every single JAR file that our project needed to run? And not only the JAR files we directly depended upon, mind you, but even those JAR files that our dependencies and our dependencies' dependencies needed to work!</description></item><item><title>Maven Scopes and Gradle Configurations Explained</title><link>https://reflectoring.io/maven-scopes-gradle-configurations/</link><pubDate>Wed, 24 Jul 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-scopes-gradle-configurations/</guid><description>table th:first-of-type { width: 40%; } One of the key features of a build tool for Java is dependency management.</description></item><item><title>5 Reasons Why Business Exceptions Are a Bad Idea</title><link>https://reflectoring.io/business-exceptions/</link><pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/business-exceptions/</guid><description>I recently had a conversation about exception handling. I argued that business exceptions are a good thing because they clearly mark the possible failures of a business method.</description></item><item><title>3 Steps to Fix NoSuchMethodErrors and NoSuchMethodExceptions</title><link>https://reflectoring.io/nosuchmethod/</link><pubDate>Mon, 08 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/nosuchmethod/</guid><description>A NoSuchMethodError occurs when we&amp;rsquo;re calling a method that does not exist at runtime.
The method must have existed at compile time, since otherwise the compiler would have refused to compile the class calling that method with an error: cannot find symbol.</description></item><item><title>Definitive Guide to the JaCoCo Gradle Plugin</title><link>https://reflectoring.io/jacoco/</link><pubDate>Fri, 05 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/jacoco/</guid><description>As discussed in my article about 100% Code Coverage*, a code coverage tool should provide the means not only to measure code coverage, but also to enforce it.</description></item><item><title>Combining Object Mother and Fluent Builder for the Ultimate Test Data Factory</title><link>https://reflectoring.io/objectmother-fluent-builder/</link><pubDate>Fri, 31 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/objectmother-fluent-builder/</guid><description>To test our business code we always need some kind of test data. This tutorial explains how to do just that with the Object Mother pattern and why we should combine it with a Fluent Builder to create test data factories that are fun to work with.</description></item><item><title>How to Configure a Human-Readable Logging Format with Logback and Descriptive Logger</title><link>https://reflectoring.io/logging-format-logback/</link><pubDate>Sat, 11 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/logging-format-logback/</guid><description>In a previous Tip, I proposed to use a human-readable logging format so that we can quickly scan a log to find the information we need.</description></item><item><title>A Fully Automated Open Source Release Chain with Gradle and Travis CI</title><link>https://reflectoring.io/fully-automated-open-source-release-chain/</link><pubDate>Fri, 29 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/fully-automated-open-source-release-chain/</guid><description>&amp;ldquo;Release early, release often&amp;rdquo;. This philosophy should be a goal for every software project. Users can only give quality feedback when they have early access to a software release.</description></item><item><title>Publishing Open Source Snapshots with Gradle</title><link>https://reflectoring.io/publish-snapshots-with-gradle/</link><pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/publish-snapshots-with-gradle/</guid><description>One of the most fulfilling things in developing an open source project is getting feedback from the users of your project.</description></item><item><title>Publishing Open Source Releases with Gradle</title><link>https://reflectoring.io/guide-publishing-to-bintray-with-gradle/</link><pubDate>Mon, 04 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/guide-publishing-to-bintray-with-gradle/</guid><description>When working on an open source Java project, you always come to the point where you want to share your work with the developer community (at least that should be the goal).</description></item><item><title>Lazy Evaluation of Gradle Properties</title><link>https://reflectoring.io/gradle-lazy-property-evaluation/</link><pubDate>Tue, 14 Nov 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/gradle-lazy-property-evaluation/</guid><description>Writing Gradle build tasks is often easy and straight forward, but as soon as you start to write more generic tasks for multiple modules or projects it can get a little tricky.</description></item><item><title>Assumptions and Conditional Test Execution with JUnit 4 and 5</title><link>https://reflectoring.io/conditional-junit4-junit5-tests/</link><pubDate>Tue, 10 Oct 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/conditional-junit4-junit5-tests/</guid><description>Sometimes, a test should only be run under certain conditions. One such case are integration tests which depend on a certain external system.</description></item><item><title>Robust Java Object Mapping With Minimal Testing Overhead Using reMap</title><link>https://reflectoring.io/autotmatic-refactoring-safe-java-mapping/</link><pubDate>Sun, 01 Oct 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/autotmatic-refactoring-safe-java-mapping/</guid><description>Object mapping is a necessary and often unloved evil in software development projects. To communicate between layers of your application, you have to create and test mappers between a multitude of types, which can be a very cumbersome task, depending on the mapper library that is used.</description></item><item><title>A Guide to Formatting Code Snippets in Javadoc</title><link>https://reflectoring.io/howto-format-code-snippets-in-javadoc/</link><pubDate>Mon, 14 Aug 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/howto-format-code-snippets-in-javadoc/</guid><description>Sometimes you want to add code snippets to our Javadoc comments, especially when developing an API of some kind. But how do you mark the code snippet so that it will be rendered correctly in the final Javadoc HTML, especially when special characters like '&amp;lt;', '&amp;gt;' and '@' are involved?</description></item><item><title>Tool-based Database Refactoring: Flyway vs. Liquibase</title><link>https://reflectoring.io/database-refactoring-flyway-vs-liquibase/</link><pubDate>Sun, 14 May 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/database-refactoring-flyway-vs-liquibase/</guid><description>In a previous blog post I discussed the term &amp;ldquo;database refactoring&amp;rdquo; and some concepts that allow database refactoring to be supported by tools with the result of having a database schema that is versioned just like your software is.</description></item><item><title>Digital Signature in Java</title><link>https://reflectoring.io/How%20to%20sign/</link><pubDate>Fri, 14 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/How%20to%20sign/</guid><description>Often you come across the requirement to validate integrity and authenticity of data that was sent digitally. Digital signatures are the solution to this requirement.</description></item><item><title>A Random Pitfall</title><link>https://reflectoring.io/how-to-random/</link><pubDate>Thu, 16 Feb 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/how-to-random/</guid><description>From time to time we need a randomly generated Number in Java. In this case we are normally using java.util.Random which provides a stream of pseudo generated Numbers.</description></item><item><title>Getting the current Subversion Revision Number in Gradle</title><link>https://reflectoring.io/getting-svn-revision-in-gradle/</link><pubDate>Sat, 26 Nov 2016 00:00:00 +0000</pubDate><guid>https://reflectoring.io/getting-svn-revision-in-gradle/</guid><description>A common use case for build tools like Ant, Maven or Gradle is to retrieve the current revision number of the project sources in the Version Control System (VCS), in many cases Subversion (SVN).</description></item></channel></rss>