10.7 Interaction with projects we depended on

I interacted more with the projects we depended on to build plug-in-demo than I interacted with other developers of DHIS 2. I had interaction with two external projects; JPF and Maven. In this section I will describe my interactions with this two projects.

The need to interact with the JPF developer came when I tried to integrate JPF and Spring. JPF is a small project with just one developer. I downloaded the source code of JPF and tried to figure out how to do the integration. It was not possible to do the integration without making significant changes. I could not do the integration by extending classes or implementing interfaces, in other words I could only change JPF not extend it. I saw three routes forward; I could ask the JPF developers to incorporate my code into the official release by providing a patch, I could make a fork of JPF and thereby missing out of further releases of JPF or I could ask the JPF developer to make some architectural changes to JPF to facilitate my extension.

I sent an e-mail to the JPF developer where I explained what I wanted to do. The JPF developer asked me to send him the code I was working on. I gave him some suggestions on how to make JPF extensible enough for my Spring integration code. I sent him the integration code I had made and two different patches to JPF, one for each of the strategies I suggested. The JPF developer took my suggestions into consideration and came up with an architecture quite different from what I had suggested. He had made quite large architectural changes. Using this new architecture I found it quite easy to integrate Spring and JPF by extending JPF. Having a concrete problem I wanted to solve, and some code and suggestions helped me to convince the JPF developer to change the JPF architecture. The JPF developer is also the developer of Emersion.

The DHIS 2 project changed from using Maven 1 as its build tool into using Maven 2. Maven 2 have deep differences from Maven 1, and uses a completely different architecture for plug-ins. For this reason I had to make a JPF plug-in for Maven 2 completely from scratch. I had made a JPF plug-in for Maven 1, but this could not be used. I read documentation on the Maven web site on how to make plug-ins for Maven 2 and started to code a JPF plug-in. Once again I came into architectural limitations. The Maven 2 built system had not been designed with application based on a pure plug-in framework in mind. I spent a lot of time reading documentation, and I downloaded the Maven 2 source code. I spent a lot of time searching in the Maven 2 source three to figure out how to make my JPF plug-in.

To get some help on how I could make my JPF plug-in I sent an e-mail to the Maven 2 user e-mail list. I got no answer on my e-mail. I asked in the wrong place, I had very peculiar needs for my JPF plug-in. After spending many ours on coding my JPF plug-in, reading the Maven 2 source code and testing possible solutions I found a way to bend Maven 2 into building my plug-in-demo prototype. It was an ugly hack, but it was the best I could do based on the existing architecture of Maven 2. I made some thoughts on how to change Maven 2 into supporting a JPF plug-in, and sent in two feature requests using the issue management system of Maven 2. Now I got some answers and I explained my need. This two feature requests are planned to be implemented by the 2.1 release of Maven 2. Having a concrete need again helped me in convincing that the changes was necessary.