2011 Technology short list

To structure the technologies I definitely need to have a closer look at  and to boost my blog productivity I wrote down small list. The basic idea is to write a blog about one of the topics below every month.

  • Apache Karaf
  • Terracotta / Gemfire
  • CQRS
  • Groovy (GPars, GContracts)
  • Scala (Akka)
  • Git / Social coding
  • DSL’s
  • Gradle / Maven 3
  • NoSQL
  • HTML 5
  • Cloud (vmForce /  database.com / fabrics / GAE)
  • AMPQ

Please let me know if you think I should extend my list with other cool stuff.

Grtz

From "scrum but" to SCRUM

We’re using SCRUM for our development process for about three years now, at least we thought so. Almost a year ago I attended a SCRUM Master training hosted by Jeff Sutherland. When he showed us the the Nokia test (http://jeffsutherland.com/scrum/nokiatest.pdf) and hearing him talk about organizations implementing “scrum but”, the essence of SCRUM became clear to me. Returning from the training with a big list of improvements for our SCRUM we started to implement a real SCRUM.

Basically a good SCRUM can be implemented by implementing the following image:


Copyright: Jeff Sutherland 1993-2009 (http://jeffsutherland.com/scrum/PracticalRoadmapMunich20091020.pdf)

Ready
Start with a good product owner who is able to get user stories in ready state. For more info on user stories: http://en.wikipedia.org/wiki/User_story. A user story will help you to cut functionality in small pieces enabling both developers and customers to talk about the same information, without big requirements documents which will give developers a hard time reading it and product owners a hard time maintaining it.

A user story should be small so they can be completed within one or two days (preferably) and should contain acceptance criteria so both developer, QA guy and customer know when a user story is finished.

Next to a well defined user story it is really important to size the user stories. Please don’t size based on hours as this is way to precise and can be different per developer. And SCRUM is all about a team commitment. But is really important to measure the number of user stories a team can do in a sprint so some measurement is needed. We use planning poker in combination with the well known Fibonacce range: http://en.wikipedia.org/wiki/Planning_poker

So a user story is basically ready when it is well described with acceptance criteria and sized. When having a set of ready user stories they should be prioritized on the backlog to allow the team simply moving to the next user story from to to bottom.

Team and impedements
The primary goal of the team is basically three things: helping the product owner to get the user stories ready, implementing user stories and identifying and removing impedements. If an impedement cannot be removed by the team the SCRUM Master will try to get the right people to get it fixed.

Done

A user story is done when it meets both the acceptance criteria and the more general definitions of done. The acceptance criteria will define how the functionality works and the definition of done will cover a more general acceptance criteria, i.e.: code conventions, unit tests, performance requirements, db scripts, etc..

Make sure the user story is tested by a QA guy on a deployed environment and not on a developers machine. Our test will be deployed every night automatically and if necessary upon request after every continuous build.

Burn down on user stories only, to make sure that your really have built some real value. No customer will be happy with a set of domain objects only, its about the full stack.

Velocity
When everything mentioned above is in place focus on velocity. This the best measurement on how the team is performing. Ask yourself everyday about the thing that can be blocking for reaching a higher velocity. This can be as simple as having slow development hardware but can me more complex as having a backlog which is not in ready state. The more a team performs the more it will face issues which will block its performance so focus on every minor detail!

Finally
So SCRUM is actualy quite simple: A ready backlog, a team focusing on implementing the backlog and removing its impedements and a QA guy assuring a done user story. Of course this is only a summary and much more can be said on every topic but I do like it to have an overview in my mind an now on my blog. Thats why I really like the image above.

I didn’t talk that much on retrospectives, sprint planning and review. Maybe in a next post.

DM Server update and OSGi bundle structure

Now 8 months after my last post where having our DM Server project live! Currently running DM server 1.02 on four application servers in a cluster. The only remaining currently is the boot sequence of the bundles. However this will be fixed in DM Server 2.0 as they will introduce
support plans: https://issuetracker.springsource.com/secure/IssueNavigator.jspa?reset=true&customfield_10020=plans which will allow you to define all the bundles you need at runtime and much more.

The other decision we made is to split our domain objects, UI and web services in seperate bundles. In the beginning we where afraid for an explosion of bundles but it really helps in defining clear boundaries between the bundles.

The domain bundle contains all our domain objects, repositories and services and other domain related classes. Services also define the transaction boundary and will be exposed as OSGi service. The other bundles speak for their own. One important aspect is that both UI and web services use the same services as available in the domain bundle. This enables maximum reuse.

As I’m not a frequent blogger check www.twitter.com/vincentkok for more regular updates.

Grtz…

DDD, OSGi and Spring DM (an update)

It took me some time to write a new post. A lot of work has been done since the last post. First our experiences with building OSGi based applications. I can tell its hard when you start but it certainly pays back.

The biggest issue we had is how to deal a depencies you have within an application to 3rd party libraries like Hibernate and Spring. The strange thing with OSGi for example that it doens’t help with the startup sequence, furthermore how setup a productive code/debug environment without a large number of open projects in Eclipse.

The best answer we found so far is the combination of Spring DM Server and the Spring DM server Eclipse plugin. It really helps you on managing your bundles currently working and your binary dependencies. The plugin isn’t totally flawless, we moved to some nightly builds to get rid of some nasty issue.

In short, Spring DM helps to keep OSGi projects with a 100+ bundles in control, espacially the support for getting the right start sequence and of course the combination with Eclipse.

More to come.

Grtz..

Attach source files to OSGI bundles in Eclipse

While getting more and more familiar with OSGi and Spring DM I really had an issue attaching sources to third party bundles in my OSGi target platform (check http://springosgi.googlepages.com/ on how to setup such an environment). Eclipse normally has the possibility to attach the source code to a .class file directly. However when I tried to open classes from binary bundles Eclipse gave the following message: The JAR of this class file belongs to container ‘Plug-in Dependencies’ which does not allow modifications to source attachments on its entries.

The message is quite clear but nowhere (at least I couldn’t find it) a hint on how to attach the source. It took me a while before I figured out how to do it. It wasn’t that hard after all and maybe there are more options (please let me now!) but it didn’t felt logic to me.

Perform the following steps to attach the sources:

  • Open the view Plug-ins
  • Right-click the bundle you would like to debug
  • Choose Import > As Binary Project
  • A project will be created linked for this bundle

The next time you will hit a .class file, the good old “Attach source…” button will be available again. IMHO this approach is still a bit cumbersome but I couldn’t find another way to do it. So if anyone has a better approach please leave a comment.

The next time more on Spring Security and Wicket Integration, Domain Driven Design in real life and ofcourse more on Spring DM.

Grtz..

Domain Driven Design in Java

While reading Eric Evans book on Domain Driven Design (DDD) (quite a useful piece of work) I started to wonder about the actual implementation in code. Bringing the book in practice actually has two challenges.

The first one is the modeling (more about that in coming posts) the second one is converting it into code. An excellent piece of work in this is POJO’s in Action by Chris Richardson. What I really like is removing all techy stuff like transactions and security out of the domain model. So we :) as developers can totally focus on the domain logic and its unit tests and worry about the rest later. Another and not the least advantage is that the code really reflects the model as designed on the white board.

So how do we structure the code.

  nl.vincentkok.package.
   component.
    domain.
     service (domain services)
     repository
     factory
     (domain objects here…)
    facade
     (pojo facade on top of the domain services)
    webservices
     (webservices on top of the pojo facade here)

The POJO facade is responsible for the all the transactions and security and implements by Spring interceptors. Webservices are implemented on top of the facade with contract first webservices..

The POJO facade will be exposed as OSGi service so it can be consumed by other bundles.

What I really like about this is keeping the domain model clean! Next time more on repositories and their role in the domain. And why we don’t want to call them DAO’s.

Grtz..

Running a Spring DM (OSGi) application with eclipse

As we are refactoring our application to OSGi (one big monolithic bundle to start with and of course a beautiful separated service based application to end with) I’m currently starting to get up to speed with Spring DM which combines the nice world of beans together with OSGi which is IMHO a real powerful combination.

The first pitfall is the lack of documentation to get a development project started within Eclipse. After all it’s not hard to do but it took me some googling on the web to get all settings right.

I did found one nice site we’re they explained it quite well. So have fun using it: http://swissdev.blogspot.com/2008/06/eclipse-rcp-application-using-spring-dm.html

Grtz..

Who is Vincent (and why he’s blogging)

I’m a blogger member for almost two years now and the only entries I have written till now are maybe two posts about my lovely holiday with about three unique visitors.

While thinking about what to do with this blog I realized that sharing my explorations in the Java Enterprise World might be more useful. And maybe I will reach even more than two unique visitors the coming month :)

To reach this goal (I will keep you posted on the progress) I will try to write down the things learned on an average day of work.

So what do I do and what do I learn on an average day? As a developer/architect of a software package for the educational market (www.educator.eu) we’re currently in the process of redesigning our application and transforming it to Spring and OSGi, Hibernate, GWT based application. Next to that we’re trying to improve our development process by working harder on our Domain and Test Driven development in combination with already existing SCRUM.

As we’re in the middle of this exiting process I would like to share our experiences of bringing all those nicely written books in practice. Furthermore it’s good to do something back for the open source community even as it is as little as maintaining a blog.

Please contact me or post a comment if you agree or, even better, totally disagree so we can have interesting discussions on the interesting world of Enterprise Java.

Grtz..

Follow

Get every new post delivered to your Inbox.