Wednesday, November 21, 2012

DevNexus 2013 - Feb 18/19 - Registration is Open

The Atlanta Java Users Group is delighted to announce that registration for DevNexus 2013 is now open. In order to reserve your ticket, please go to:

DevNexus 2013 will be held on Monday, February 18th and Tuesday, February 19th at the Cobb Galleria Centre in Atlanta, GA. We have already confirmed many wonderful speakers, representing the who's who in our industry. They will be covering a wide array of crucial technology topics such as:
  • Java and JVM Languages (incl. Clojure + Scala)
  • Cloud, Big Data and NoSQL
  • Web (HTML5, JavaScript)
  • Mobile (Android, Hybrid, Mobile Web)
  • Methodologies, Architecture, Tools and Security
In addition to providing great content for Java/JVM developers, DevNexus is an awesome networking opportunity. This event attracts Java/JVM talent from diverse backgrounds, be it large corporations, consulting organizations or independent technology connoisseurs. You will have an opportunity to discover what other development teams are using as their favorite tools and practices.

Why should you attend DevNexus 2013:
  • Best Value$195 Early Bird price (until Jan 15) for two full days of technology immersion and camaraderie (group+student discounts available).
  • Ask questions to world-class experts and fellow developers
  • Learn how to move your applications into the cloud 
  • Learn Agile Best Practices & Tools 
  • Learn more about core Java topics as well as other languages on the JVM
  • Learn more about building rich (mobile) web-application applications using HTML5
  • Hear about the latest developments from JBoss, SpringSource and Typesafe
We have already lined-up some impressive speakers, with many more to be announced in the upcoming weeks:
  • Jeremy Deane
  • Hans Dockter
  • Ben Evans
  • Mark Fisher
  • Neil Ford
  • Andrew Fuqua
  • David Geary
  • Wesley Hales
  • Stuart Halloway
  • Ken Kousen
  • Josh Long
  • Matthew McCullough
  • Pratik Patel
  • Reza Rahman
  • Nate Schutta
  • Venkat Subramaniam
  • James Ward
Fore more details regarding speakers please visit:

We would like to welcome 2 new DevNexus sponsors

Silver Sponsors

- eHire Labs -
- AppDynamics -

Cocktail Hour Sponsor

- eHire Labs -

We also would like to thank our other AJUG/DevNexus sponsors for their support in making DevNexus a success. 
We hope to see you all at DevNexus, and please register as soon as possible for this incredibly valuable event at:

(We have sold out early in prior years)

Friday, October 5, 2012

What's New in Spring Integration 2.2 - JPA Support

I have just published a new blog posting, which introduces the new Java Persistence API (JPA) support that is provided with Spring Integration 2.2. This is the third part in a series of blog posts highlighting some of the new features available in Spring Integration 2.2 following the recent release of Release Candidate 1. Please head over to the SpringSource blog to get the details:

Thursday, August 23, 2012

Community-Driven Spring Integration Extensions

I just published a new blog posting over at the SpringSource blog. This blog posting announces the new Spring Integration Extensions repository and also describes the new Adapter Template for SpringSource Tool Suite (STS). Please check it out at:

Sunday, June 10, 2012

Password Security and Hash Slippage

The massive losses of password hashes at LinkedIn [1], eHarmony [2] and [3] are very concerning, to say the least. These are companies that are generally perceived as technology leaders, particularly LinkedIn. Also, as far as I now, eHarmony and LinkedIn are Java/JVM shops. Just some data that I gathered today regarding the scope of the issue:
  • - presumably up to 17 million lost hashes - Algorithm used: MD5 - Hashes were Not salted
  • eHarmony - 1.5 million hashes - MD5 - No salted - All upper-case-passwords
  • LinkedIn - 6.5 million hashes - SHA1 - Not salted
Some of the leaks supposedly happened as far back as 2011. Here is some further background information: 
What is quite amazing to me, is that the basic measures that would prevent the cracking of the hashes, like better hash algorithms, salting, re-hashing are not rocket science. There is even a very nice library [4] out there that does it for you and it even hooks into e.g. Spring Security [5] - Not even Java coding is necessary.

I just wonder how the hackers got access to the hashes in the first place...I could not find any information on that, yet. Maybe another juicy story...

Monday, April 9, 2012

Create Spring Integration Projects using STS

I finally published my blog post on how to create Spring Integration projects using Spring Templates in STS. You can find the post over at:

I also created a corresponding screencast, which was posted to the SpringSourceDev YouTube channel.

Wednesday, February 15, 2012

DevNexus 2012 - March 21-22 - Schedule Published

DevNexus 2012 is only 5 weeks away and will take place March 21-22. As of late, we have been super-busy organizing and confirming the best minds of our industry. We are happy to announce the preliminary schedule at

Again, this year will mark our biggest DevNexus conference event, yet! Compared to last year, we added 2 more tracks to the conference, bringing the total to 6 tracks. 30+ speakers will deliver 48 sessions equipping you with the critical knowledge to take your career to the next level. And if this is not enough, we have 3 wonderful keynote speakers as well:

  • Patrick Curran, Chair of the Java Community Process organization will present "Java User Groups and the Java Community Process: a winning combination"
  • Barry Hawkins, a veteran in our industry will present "How We Got Here, And What To Do About It", and we also are delighted to have
  • Ben Galbraith, founder of and now running mobile architecture and engineering at

This year we will have an incredible breadth of topics. Besides covering core Java topics (e.g. Java 7+8, Joda Time, Guava) as well as JVM Languages (Groovy and Scala), we will also extensively cover Mobile topics (including HTML5). Furthermore, we will dive into Cloud related topics, covering Platform as a service (PaaS) providers such as Cloud Foundry, Google App Engine and Heroku. Here is a more comprehensive list of covered topics:

  • Core Java (Java 7+8, Joda-Time, Guava)
  • Spring (Spring 3.1, Spring MVC 3.1, Spring Integration)
  • JBoss (DeltaSpike)
  • Mobile (jQuery Mobile, PhoneGap, Android, Appcelerator Titanium)
  • HTML5
  • JavaScript (Node.js, jQuery), 
  • Cloud (Heroku, Cloud Foundry, Google App Engine)
  • Gradle
  • Groovy
  • Git
  • Scala
  • NoSQL (Neo4J, Cassandra)
  • Play Framework
  • Caching (EhCache  and JSR107)
  • REST
  • Continuous deployment
  • Talks on Agile Methodologies and Architecture

With this session line-up on the horizon, attending DevNexus should be a priority - This is also the South-East’s best, yet affordable, developer's conference!

We, the volunteers from the Atlanta Java Users Group would be delighted to see you all at DevNexus! Learn, network and have fun -

Please register today at:

We would like to thank our Sponsors that help us greatly to keep DevNexus super-affordable ($185 group-ticket / $200 regular ticket). We also welcome two new DevNexus Gold Sponsors:

  • SpringSource, a division of VMware
  • GCA Technology Services and Oracle University 

GCA Technology Services and Oracle University are thrilled to be sponsors of AJUG again this year. GCA specializes in Identity and Access Management (IAM) consulting and education. We partner with Oracle to provide industry leading solutions for user provisioning, role management, rights management, single sign-on, multi-factor authentication, governance and compliance. We deliver training for Oracle Solaris, Java, Oracle Identity and Access Management as well as other Oracle Applications and technologies. We believe that the blended approach by providing expert consultants who also educate our customers in the products we implement, allows us to achieve consistently positive results. Oracle's Java based IAM solutions lead the industry. Let us work with your team to create a training and IAM consulting solution that gets the results you want. Contact us at or 770-643-0443. We look forward to seeing everyone at Devnexus!

The DevNexus Gold Sponsors:

  • Terracotta
  • IntercontinentalExchange (ICE)
  • JBoss
  • The Intersect Group
  • GCA Technology Services and Oracle University
  • SpringSource, a division of VMware

Silver Sponsors:

  • Apex Systems
  • Anteo Group
  • 4t Networks

Cocktail Hour Sponsor:

  • MATRIX Resources

We are looking forward seeing you all in March!!!


Gunnar Hillert
President, Atlanta Java Users Group (AJUG)


If you have any question let us know at info at and please follows us
on Twitter at for news and updates.

Monday, January 30, 2012

DevNexus 2012 Early Bird Ends in 48 Hours!

This is a friendly reminder that the Early Bird pricing for DevNexus 2012 ends in 48 hours on February 1 at 11:59pm. Therefore, please register for DevNexus at in order to secure your ticket for this wonderful conference at the low price of $185.

Date: March 21-22, 2012
Place: Cobb Galleria, Atlanta, GA
Cost: $185 (early bird price), $200 after February 1st.

DevNexus is the South-East's biggest conference for Java developers! We provide the best software professional development content at the lowest possible
price, bringing some of the world's best speakers & most interesting topics to Atlanta!

For 2012, we have an amazing line-up of speakers and sessions. Here is what you can expect:
  • 2 days
  • 6 tracks (2 more than last year!!)
  • 48 sessions
  • 3 keynote presentations
  • Food and beverages will be provided 
  • Cocktail-hour with free sponsored drinks at the end of the first day
  • Raffles and give-aways (e.g. books)
  • Great networking opportunities
  • Ridiculously cost-effective value
  • DevNexus is organized by community volunteers (pro-bono) for the community!
Here is a list of topics that we will cover:
  • Core Java (Java 7+8, Joda-Time, Guava)
  • Mobile (PhoneGap, Android, Titanium Mobile)
  • HTML5
  • JavaScript (Node.js, jQuery)
  • Spring (Spring 3.1, Spring MVC 3.1, Spring Integration)
  • JBoss (Delta Spike, JBoss 7)
  • Cloud (Heroku, Cloud Foundry, Google App Engine)
  • Gradle
  • Groovy
  • Git
  • Scala
  • NoSQL (Neo4J, Cassandra)
  • Play Framework
  • EhCache
  • REST
  • Continuous deployment
  • Talks on Agile Methodologies and Architecture
The DevNexus website already contains 32 session abstracts which you can browse at:

More presentation abstracts will be added shortly. We are also super-excited to offer 3 keynote presentations at DevNexus 2012. The opening keynote presenter will be Patrick Curran, Chair of the Java Community Process organization (JCP):

"Java User Groups and the Java Community Process: a winning combination"

Our second keynote presenter will be our very own Barry Hawkins, a veteran in our industry as speaker, developer, and agile coach and mentor.

"How We Got Here, And What To Do About It"

Please find more information about our keynote speakers, including keynote details, on our website at:

This is THE conference you must not miss. Therefore, come join us for this incredible event.

Don't hesitate, sign up for DevNexus 2012 today at:

We would also like to thank our Sponsors that greatly help us to keep DevNexus so affordable:

Gold Sponsors:
  • Terracotta
  • IntercontinentalExchange (ICE)
  • JBoss
  • The Intersect Group
Silver Sponsors:
  • Apex Systems
  • Anteo Group
Lastly, please feel free to send this note to your present & past co-workers in the local software development community. Group discounts of 5 or more apply.

If you have any questions please contact us at:

info at ajug dot org

See you all at DevNexus 2012!!!!

Friday, January 13, 2012

Sonar and Gradle Multi-Module Projects

I love Sonar. It is a wonderful way to collect some metrics for your Java projects - hassle-free and wrapped in a sweet-looking UI.  For Maven-based projects Sonar literally works out of the box. Just start up your Sonar instance (assuming you are using the default settings running on localhost) and then you simply fire it off using:
$ mvn sonar:sonar 
A few moments later you should have the metrics available at:
Well, the past few days I was setting up a multi-module Gradle project for Sonar. Let me start by stating that Gradle is awesome. Having the ability to declare dependencies as one-liners and also being able to customize your scripts easily, yet having sensible defaults, is very nice. Kind of the best of both worlds.

Setting up Sonar for a multi module project, though, is unfortunately a bit more complicated, compared to what I am used to in the Maven world. It is not awfully complicated, but it took me a while to collect all the pieces of information.

Getting your Sonar plugin to just doing something is fairly simple. Just follow the basic steps outlined in the plugin documentation at:
One differentiator between the Sonar Plugin for Gradle and Maven is, that the Gradle version does not automatically run code coverage analysis. This needs to be manually setup. This is where the official doc just vaguely refers to Cobertura.

First, I tried using Cobertura for code coverage, but I seemed to run into difficulties for my multi-module projects. The Cobertura Plugin is here:
By chance I realized that the Sonar guys have a GitHub repository with samples on how to setup sonars for various build systems, including Gradle:
In their examples, they are using JaCoCo, which is not mentioned in the original Gradle docs and maybe I could have continued with Cobertura but it seemed that Sonar was preferring JaCoCo and thus I continued with that.

Some Gradle Sonar Plugin Limitations

The Gradle Sonar Plugin has an annoying limitation, where I can run it for the ROOT project OR for the sub-projects individually. See the following Gradle Jira ticket for details:
Furthermore, I hit the minor issue that I cannot set the links in the Sonar dashboard. This seems to be related to the following Sonar Jira issue:
The JaCoCo code coverage plugin is "slightly less" supported by the Gradle Sonar Plugin, e.g. the  Gradle Plugin does not have an explicit setter for the JacocoReportPath and it assumes the "target" folder as the build directory by default. Therefore you must set explicitly:
props["sonar.jacoco.reportPath"]  = "${buildDirName}/jacoco.exec"

Lastly, I deviated a bit from the SonarSource Gradle example, and instead of System properties, I wanted to use Gradle properties to allow for users to provide non-default Sonar configuration settings (databasem url, jdbc parameters etc.). Well, while setting that up I ran into yet another Gradle Jira issue:
But at the the end, I am happily able to run a multi-module Gradle project with Sonar and collecting Code Coverage statistics.  Here is the relavant code from my build.gradle file:

apply plugin: 'sonar'

sonar {

    if (rootProject.hasProperty('sonarHostUrl')) {
        server.url = rootProject.sonarHostUrl

    database {
        if (rootProject.hasProperty('sonarJdbcUrl')) {
            url = rootProject.sonarJdbcUrl
        if (rootProject.hasProperty('sonarJdbcDriver')) {
            driverClassName = rootProject.sonarJdbcDriver
        if (rootProject.hasProperty('sonarJdbcUsername')) {
            username = rootProject.sonarJdbcUsername
        if (rootProject.hasProperty('sonarJdbcPassword')) {
            password = rootProject.sonarJdbcPassword

    project {
        dynamicAnalysis  = "reuseReports"
        withProjectProperties { props ->
            props["sonar.core.codeCoveragePlugin"] = "jacoco"
            props["sonar.jacoco.reportPath"]       = "${buildDirName}/jacoco.exec"

    println("Sonar parameters used: server.url='${server.url}'; database.url='${database.url}'; database.driverClassName='${database.driverClassName}'; database.username='${database.username}'")


subprojects { subproject ->


    // See
    // and
    configurations {
        jacoco //Configuration Group used by Sonar to provide Code Coverage using JaCoCo

    // dependencies that are common across all java projects
    dependencies {
        jacoco group: "org.jacoco", name: "org.jacoco.agent", version: "", classifier: "runtime"

    test {
        jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.your.project.*"
I hope this is useful information for all Gradle users out there.