Monthly archives "February 2015"

Introducing Décio Sousa

posted by Roberto Cortez on

Hi everyone! Until now, this blog has been written entirely by me, but today we have a new author: Décio Sousa. We have been working together for several years and I consider him one of my closest friends. For some time, I have been trying to involve other people in writing blog posts. Décio accepted the challenge and here is the result: REST API Evolution. An interesting post on how to evolve REST API’s, based on his current project.

Décio and Roberto

I would like to welcome Décio and to thank him for taking the time to write the post. I’m sure we are going to see more posts from him in the future.

I moved to Git SVN

posted by Roberto Cortez on
tags: ,

For the last couple of years, I’ve been working with a company that uses Subversion. Yes, you are probably pointing now that we should have migrated to Git by now. Let’s not discuss that. Until now, Subversion didn’t get much in my way while performing my development tasks, but that slowly started to change. Probably a lot of people went through this as well.

My SVN Problems

My main problems with Subversion at the moment are:

  • Working with multiple Subversion branches at the same time. I usually checkout each branch that I need in a separate folder. Yes, I could use svn switch, but it’s harder to isolate new feature development from bug fixing with only one source.
  • Our Subversion repository is quite big now. You feel the pain (slowness) when comparing files in the history or annotating a file.
  • Multiple commits relating to the same feature. I like to commit the several stages of a feature development. This helps to establish baselines on what’s working and what’s not in a timeline. But it’s a pain to look into the multiple commits of that feature when you are searching the history.


I’m also a Git user, and I know that Git solves these problems for me. Branches are cheap to create and you can stash your changes for easy switching between branches. Since you have a local copy of the repository, everything is faster. Using squash will combine all your feature development commits into a single commit for a cleaner history.

Instead of nagging the organization to move to Git (I’m doing that anyway), you can jump right away to Git, by using git svn. It ships with the standard Git installation and allows you to have a bidirectional connection between Git and Subversion.

This isn’t something new. It’s been around for a few years, but this is my first time using it. I have to say that it was not easy to setup thing the way I wanted. So I’m writing this post to remind myself of the steps I have followed in case I need them in the future. Of course, I also hope that these could help other people experiencing the same problems.


You’re mostly going to use the command:

git svn

Assuming the following information:

SVN Repository URLhttp://svn-repo/myProject
SVN Trunk URLhttp://svn-repo/myProject/trunk
SVN Branch URLhttp://svn-repo/myProject/branches

Init the Repository

Let’s start by creating our local repository. Type the following command:

git svn init --trunk=trunk http://svn-repo/myProject myProject

This will initialize a local Git repository. This command will not checkout anything yet. My Subversion repository follows a standard directory layout and I could use the -s argument instead of manually indicating the trunk. I choose to manually indicate the trunk with --trunk argument because I only want to check out the trunk. If you use the -s everything sitting on branches and tags will be checked out. In my case I want to control exactly which branches , or tags I’m checking out.

If we want to include branches we can type:

git svn init --trunk=trunk --branches=branches http://svn-repo/myProject myProject

Better yet, if we only want the branch B1 and the brach B2 we can do it like this:

git svn init --trunk=trunk --branches={B1,B2} http://svn-repo/myProject myProject

Now look into the .git folder and file config. It should look like this:

You can always change the settings by manually editing this file.

When fetching specific branches there is a trick here. Notice that the generated file has a * after the branches definition of {B1,B2}. This means, that git svn will fetch all subdirectories of the branches folder B1 and B2 and track each individual subdirectory as a remote branch. It’s a bit weird. Maybe I’m doing the original command wrong, but I had to manually remove the * to track the branches properly. Make sure that you have this in the file:

This Stackoverflow question: How do I tell git-svn about a remote branch created after I fetched the repo? explains in a more detailed manner how to deal with branches.

Fetch the Code

To actually fetch the code from the Subversion repository type:

git svn fetch --no-follow-parent

In same cases, Git can create additional branches with the format {B1}@-{0-9}. You usually don’t need this and you can prevent their creating by adding the --no-follow-parent parameter. For a full explanation please check this Stackoverflow question: git-svn clone | spurious branches.

By the way this operation can be VERY VERY SLOW, depending on the size of your repository, it can take several hours to complete. If you are short on time, execute the commands before you go to sleep and you should have them ready when you wake up. To speed it up, you can use the parameter --revision and specify a Subversion revision number. The fetch will only be performed from that point forward. The downside is that you don’t have the historical data before the specified revision.

Update the Code

When you need to update your Git repository with the Subversion one, execute:

git svn rebase

Push the Code

You don’t use push to send your local changes to the Subversion repository, instead use:

git svn dcommit

Final Thoughts

You can now enjoy all the benefits of using Git even if you are stuck with a Subversion repository. There are also a few limitations, but you can work around them. You cannot directly map multiple Subversion repositories to a single Git repository. This may be relevant depending on your Subversion structure. Also, committing your changes to Subversion may be a bit slow.

Anyway, I’m happy with the change. I feel that it increased my productivity, but that’s something you have to figure out by yourself. Just give it a try and see if it works for you. If not, you can always use your old Subversion repository.

Jfokus 2015 and Voxxed Days Vienna

posted by Roberto Cortez on

I kicked off my conference year by attending during the last week Jfokus 2015 and the first edition ever of Voxxed Days held in Vienna. I was scheduled as a speaker for both conferences with my sessions about Java EE 7 Batch Processing in the Real World and The 5 People in your Organization that grow Legacy Code.


Jfokus LogoThis was Jfokus 9th edition, so we can expect a great celebration next year for the 10th anniversary edition. We are still one year away, but I already scheduled it in my calendar! The conference was 3 days long, with the first day dedicated to Tutorials and the next couple of days to conference sessions. The numbers are impressive. It had over 1700 attendees, making it one of the largest Java conferences in Europe.


Docker had been a hot topic over the last year. So, naturally we had a few sessions dedicated to Docker. I do recommend checking out the Docker Workshop from Ken Sipe. You can find it here. It also includes how to scale Docker using Apache Mesos. Apache Mesos is a distributed system kernel that abstracts CPU, memory, storage, and other resources away from machines so you can program against your datacenter like it’s a single pool of resources. Unfortunately, I think this tutorial session was not recorded. Only a few rooms had their sessions recorded.

These are my top 3 sessions (from the ones I have attended):

My Session

I had my session about Java EE Batch Processing in the Real World as a Lightning Talk. It was a bit hard to do it in only 15 minutes, since the session was originally planed for a full conference session of 50 minutes. Anyway, I was able to demo everything I wanted.

I also had the privilege to be a guest to the Live Nighthacking stream with Stephen Chin, where I talk about Java EE Batch in much more detail. Check it out:

And here are some slides. I didn’t use them all the Lighting session, since they are from my full session.

Jfokus Demogrounds

Voxxed Days Vienna

Voxxed Vienna LogoA new brand of smaller conferences was launched as Voxxed Days. These are one day tech events organised by local community groups and supported by the Voxxed and Devoxx team. I was happy enough to be part of the first edition ever and to be a speaker of course! We got the usual cinema like venue, which is to be expected from the Devoxx brand. There were probably around 200 attendees, or maybe a little more.


Since this was a one day only conference, there were not many sessions, but we had 4 full tracks worth of content to choose from. I recommend to check out Monadic Java by Mario Fusco with a very good way to explain Monads in Java to newbies. Also, Coding Culture by Sven Peters is a must. You will hear real life stories about how Atlassian evolved as a company and how they create awesome stuff. These sessions were recorded and should be available on Parleys very soon.

My Session

I had the session about The 5 People in your Organization that grow Legacy Code. I have presented the same session for the first time in Java One and the recording was released a few days before I delivered the session in Vienna. This was great, since it gave the change to check some of the mistakes I made and correct a few things. This one was also recorded. Let’s see if I improved a little bit. Thank you to Sven Peters, which provided me with a few pointers to improve my presentation stance.

Anyway, here is the full video (from JavaOne):

Final Words

It was an awesome week, but also very consuming. I was very tired at the end, but it was great to hook up with old friends. Thanks to Mattias Karlsson and Grzegorz Duda for having me in Jfokus 2015 and Voxxed Days Vienna.

I als have to mention Paulo Grácio. We worked together for 6 years and he was a mentor to me in the early stages of my career. Paulo is now working in Stockholm and we are far from each other, but I’m looking forward to work together again. Thanks for the hospitality!

Roberto and Paulo