Technology weblog

Saturday Aug 13, 2016

Published articles at Baeldung part 2

As technical editor at Baeldung I have edited the following articles this week:

  1. Hibernate second-level cache.
  2. A Guide to Apache CXF with Spring.

Friday Jul 15, 2016

Published articles at Baeldung part 1

As technical editor at Baeldung I have edited the following 4 articles this week:

  1. Spring Rest API with Binary Data Formats.
  2. A Guide to Spring in Eclipse.
  3. Introduction to Apache CXF.
  4. A Guide to Redis with Java.

Sunday Jul 10, 2016

The death of continuous delivery and object orientation?

I found the following articles to be very interesting:

Friday May 02, 2014

Feature teams versus component teams

In the book "Scaling lean and agile development" by Craig Larman and Bas Vodde, chapter 7 is devoted to the explanation why scaling up with feature teams is to be preferred over scaling up with component teams. In case you are stuck with the latter and cannot change to feature teams, this writing on explains how to cope with the latter situation.

Link to a successful GIT branching model

Here at, we are using this branching model, which is a must read, as far as I'm concerned! As far as GIT rebasing is concerned (which is assumed a prerequisite in the former article), this page explains it well.

Thursday Jul 19, 2012

Nifty SSH2 library for Java

I was looking for a library to transfer files in a secure way from within Java, and see:!

Wednesday Jul 18, 2012

CQRS white paper

Together with Koen Molkenboer, I have written a white paper, titled "A radically different approach to enterprise web application development". In this paper we assert that the reason that the development of enterprise web applications often exceeds both time and budget limits is often two-fold: on the one hand layered web application architectures often pose developers as well as architects many technical challenges, on the other hand a proper implementation of an iterative development methodology often fails since a lack of communication frequently hampers an optimal cooperation between business and IT. In this paper we propose a radically different approach to traditional web application development and the n-layered architecture that is often unconditionally associated with it, as well as the well-known gap between business and IT. The technical part of our alternative approach is based on a comprehensive domain-driven design that is fully persistence ignorant. This is realized by an implementation of an architectural pattern: command query responsibility segregation (CQRS). An improved communication and subsequent improved collaboration between business and IT is established by the development of a ubiquitous language, which in turn is enabled by the aforementioned domain-driven design.

Thursday Jan 05, 2012

A collection of useful FIX protocol links

This post summarizes some useful links I have collected during my experiences with QuickFix/J:

Creating a FIX market data request message

This post details the composition of a FIX 4.4 market data request message using the QuickFix/J framework (MsgType.MARKET_DATA_REQUEST), which entails the composition of repeated groups. In this example we illustrate this with the implementation of a method that requests market data for a list of instruments:

private static final MessageFactory messageFactory = new quickfix.fix44.MessageFactory();

private Message createMarketDataRequest(SessionID sessionIds, List symbols, String exchange) { 
  Message request = messageFactory.create("FIX.4.4", messageType);

  request.setField(new MarketDepth(1)); // Top of book
  request.setField(new MDReqID(UUID.randomUUID().toString()));
  request.setChar(SubscriptionRequestType.FIELD, SubscriptionRequestType.SNAPSHOT);

  Group entryTypeGroup = 
    messageFactory.create("FIX.4.4", MsgType.MARKET_DATA_REQUEST, NoMDEntryTypes.FIELD);
  entryTypeGroup.setField(new MDEntryType(MDEntryType.BID));
  entryTypeGroup.setField(new MDEntryType(MDEntryType.OFFER));

  int numSymbols = symbols.size();
  if (numSymbols == 0) {
    request.setInt(NoRelatedSym.FIELD, numSymbols);
  for (final String symbol : symbols) {
    if (StringUtils.isNotBlank(symbol)) {
      Group symbolGroup = 
        messageFactory.create("FIX.4.4", MsgType.MARKET_DATA_REQUEST, NoRelatedSym.FIELD);
      symbolGroup.setField(new Symbol(symbol));
      if (StringUtils.isNotBlank(exchange)) {
        symbolGroup.setField(new SecurityExchange(exchange));
  return request;

Reading repeating groups in FIX market data reponse

This short post details how to read out repeating groups in a FIX 4.4 MsgType.MARKET_DATA_SNAPSHOT_FULL_REFRESH message using QuickFix/J. In the example below I have requested the bid and offer prices, which implies that I get returned two repeating groups. First all groups are retrieved, and then we loop through the groups to extract the subsequent fields:

final String symbol = message.getString(Symbol.FIELD);

final List<Group> groups = message.getGroups(NoMDEntries.FIELD);
BigDecimal bidPrice = null;
BigDecimal offerPrice = null;
BigDecimal bidSize = null;
BigDecimal offerSize = null;
for (final Group oneGroup : groups) {
  final char type = oneGroup.getChar(MDEntryType.FIELD);
  if (type == MDEntryType.OFFER) {
    offerPrice = oneGroup.getDecimal(MDEntryPx.FIELD);
    offerSize = oneGroup.getDecimal(MDEntrySize.FIELD);
  } else if (type == MDEntryType.BID) {
    bidPrice = oneGroup.getDecimal(MDEntryPx.FIELD);
    bidSize = oneGroup.getDecimal(MDEntrySize.FIELD);

Hire us