Java

Switching from Essentials4J to Kotlin

At work we have a project that used Essentials4J, and its predecessor Rapidoid Fluent, to simplify some stream/collection APIs. We have been converting this project to Kotlin, and no longer need that library. The conversion was very simple. It highlights some of the things you can do with collections with Kotlin’s standard library. Do.group(…).by(…) Do.map(…).to(…) …

Switching from Essentials4J to Kotlin Read More »

Postal Code Voroni Diagram

The links in this article point to a free Heroku instance, which can shut down due to inactivity. It may take a few seconds for the instance to start up. I’ve uploaded a little experiment to Heroku, showing something I toyed around with a couple years ago. Would it be possible to approximate a map …

Postal Code Voroni Diagram Read More »

Using Consumer in Spring Validator to validate nested collections

In one of my projects I have a custom Spring Validator that validates a nested object structure, and adds per-field error messages. As an example, a field nested inside an array might produce an error like the following: array[0].field must be a valid value The Errors object works as a stack, so field names have to …

Using Consumer in Spring Validator to validate nested collections Read More »

Hibernate Logging Options

For years I have relied on a simple property “show-sql=true” to see Hibernate’s generated SQL. This option is fairly limited: it bypasses the logging framework in the rest of my apps (SLF4J) it doesnt show parameters, just question marks it doesn’t show any timing information Frustrated at these limitations, I set out to understand all …

Hibernate Logging Options Read More »

Java 8: Optional

A fellow developer today asked me a question about the Optional interface in Java 8. My team is still working on a Java 6 stack, but his team is blazing the trail to Java 8. I’ve used Optional a little bit in some side work, and I am a little more familiar with Guava’s version. His use case …

Java 8: Optional Read More »

Mockito AdditionalAnswers

Sometimes you use a framework for years, and then discover something new that it can do. I had one of those moments today with Mockito. I have an API that I am mocking, where I need to capture the argument passed in for further testing, that had a line that ended up looking something like this: …

Mockito AdditionalAnswers Read More »

Full Spring 3.1 Config

Someone asked for my full Spring 3.1 annotation configuration. I’ve stripped all domain-specific information, but the overall structure is intact. SpringConfig.java – this is the top level class, is empty except for @ComponentScan and @Import statements. The web.xml references this. SpringMvcConfiguration – Any MVC related configuration DatabaseConfiguration @Configuration @ComponentScan(basePackageClasses = { SpringConfig.class}) @Import({ SpringMvcConfiguration.class, DatabaseConfiguration.class}) …

Full Spring 3.1 Config Read More »

Spring 3.1, No-XML, Hibernate, Cglib, and PermGen errors

Lately I have been maintaining several Spring-MVC applications written from the ground up with Spring 3.1. They use the purely Java based configuration scheme that comes in version 3.1, Hibernate. The apps do not have the pattern of “an interface for every class” that some Spring apps have, so it proxies concrete classes using Cglib. …

Spring 3.1, No-XML, Hibernate, Cglib, and PermGen errors Read More »

Making Java, Coldfusion, Tomcat and PayflowPro Play Nicely

One of the more odd parts of our architecture at work involves a cluster of Tomcat instances running ColdFusion and Java services side by side. We are porting our existing ColdFusion services over to Java/SpringMVC applications, and during the transition they are being served up by the same app servers. One of these services interacts …

Making Java, Coldfusion, Tomcat and PayflowPro Play Nicely Read More »

Google GSON and Thread Safety

At work we are using gson to do some soft serialization between some applications. Our production application started to throw some errors this afternoon, and after looking into the problem it would appear that gson has a static reference to SimpleDateFormat (or, more correctly, a static member that was constructed with DateFormat.getDateTimeInstance(), which returns a …

Google GSON and Thread Safety Read More »