A couple of weeks ago, my ever-active colleagues Marco Mulder and Serge Beaumont organised an nlscrum meetup about “Combining Scrum and Operations”, with presentations by Jeroen Bekaert and devopsdays organiser Patrick Debois.
Unfortunately, I was late and only managed to catch the tail end of Patrick’s well-delivered talk explaining how Dev/ops can become Devops. Thankfully, the lively open space discussions that followed provided plenty of interesting insights, comments and general food for thought.
One recurring theme that particularly struck me was the comment, uttered with regret by many in Operations, that they would very much like to help and coordinate with the development teams but inevitably were always too busy keeping the production environment up and running.
In other words, helping prepare for new releases might be desirable, but achieving the five nines, or whatever SLA Operations has committed to1, will always be paramount.
This is a fallacy! Indeed, one of the core realisations of the “Devops mindset”, to me, is that 99.999…% uptime is not an end in itself, but a means to an end: delivering the greatest business value possible. And aiming for the highest possible availability may not be the best way to go about it!2
Tags: agile operations, cloud, devops
Filed under Agile, Architecture, Middleware, Xebia Labs | 6 Comments »
Sometime in the bright future, you will be able to deploy the same virtual appliance containing your application to all your target environments without adjustments. For the time being, however, deployments to traditional DTAP1 landscapes almost always mean “tweaking” the application and associated configuration and resources to match the target environment – think endpoints, properties files or datasource usernames and passwords, to name but a few.
In the absence of any established standards or even guidelines in this area, many different solutions to this problem of deployment package customization have been employed, from fairly elegant approaches such as JMX to crude string search-and-replace.
Furthermore, different types of middleware platforms have varying degrees of support for customizations: typically, portals, ESBs and process servers offer some “native” solution to the problem, whereas application servers tend to leave users to fend for themselves.
More often than not, the result is a chaotic mix of customization approaches across projects, target platforms and departments2. Here, we’ll look at some of these approaches, classify them and examine some drawbacks and benefits. (more…)
Tags: customization, deployment package, DTAP
Filed under Deployment, Middleware, Xebia Labs | 3 Comments »
While recently fiddling with some more runtime generic type extraction for Deployit, I was caught out by some unexpected behaviour by the reflection API. A check of the Javadocs quickly revealed that I had once again been too hasty in relying on “common sense”. Still, the case seems sufficiently unintuitive to merit discussion. (more…)
Tags: Generics
Filed under Java | No Comments »
From Java EE to Google App Engine to GigaSpaces, the idea of developing against a middleware or “infrastructure” API is well established in the Java world.
But these are fixed environments. With the (re-)advent of virtualization, it is now becoming feasible to package and rapidly provision your own environment, custom-designed to meet your application’s needs.
As the big middleware vendors are realizing, it is not just possible to create such Virtual Appliances, but necessary: a production app’s setup inevitably includes more than just a couple of EARs.
Here, we’ll look at the current state of cloud and middleware deployment tooling, examine possible future developments and draw parallels between deployment and related processes.
(more…)
Tags: cloud, deployment automation, Oracle, virtual appliance, websphere
Filed under Deployment, Java, Middleware, Virtualization | 5 Comments »
In a recent post, XebiaLabs‘ CTO Vincent Partington discussed some important organizational topics you will want to address while introducing deployment automation using Deployit.
Preparing your organization is, of course, crucial to getting maximum possible benefits from deployment automation. A few technical considerations also apply when introducing Deployit, and here we’d like to go into these so that you can be sure your infrastructure is ready when it comes to carrying out your first fully automated deployment.
(more…)
Tags: Deployit
Filed under Deployment, Middleware, Process, Xebia Labs | No Comments »
Recently, I put together a Spring demonstration for jclouds, the Java cloud library. This quickly turned into unexpected multi-dimensional experiment in integrating Guice, Google App Engine and Spring, but after much trial-and-error I finally came across a configuration that does the trick – or at least works1 as well as seems possible on GAE. (more…)
Tags: Amazon Webservices, Frameworks, GAE, Google App Engine, Guice, Javaconfig, jclouds, Spring
Filed under Java | 4 Comments »
Static calls, final classes, objects created in test code: there are few things some of the current mocking frameworks cannot handle. Using powerful approaches like bytecode instrumentation or custom class loaders, these libraries make code that was previously a ‘no go’ area amenable to unit testing. This, moreover, in an elegant and convenient manner that will feel familiar to developers used to ‘standard’ mocking frameworks.
The question is: does such power perhaps come with hidden dangers? Might it be possible that the ability to test more could actually result in less code quality?
(more…)
Tags: mocking, TDD, testability
Filed under Java, Testing | 5 Comments »
Some while back I was preparing a presentation on mocking and testing frameworks for Java. As part of the aim was to demonstrate some real, running code, I ended up spending quite some time copying, pasting, extending and correcting various examples gleaned from readmes, Javadoc, Wiki pages and blog posts. Since then, this codebase has been extended with various new features I’ve come across, and I’ve often referred to it for experiments, as a helpful reference, and suchlike.
I imagine this kind of “live” reference could also be useful to others, so I thought I’d share it. (more…)
Tags: Frameworks, TDD
Filed under Java, Testing | 13 Comments »

I’ve just come back from Devoxx 09 in Antwerp, Belgium, a conference that will probably become known as the one in which closures sneaked back in to Java 7.
Whilst I didn’t feel any particular urge to return for the day 3, there was more than enough interesting material, both technical and abstract, in the first two days for me to chew on. Here some thoughts and comments on my personal “slice” of Devoxx.
(more…)
Tags: conference, devoxx
Filed under Java | 1 Comment »
In the careers of most Spring/Hibernate developers I know, there sooner or later comes a point of no escape…they have to write a Hibernate user type. The first one is usually of the copy’n'paste variety, and by and large works perfectly well.
But when things are no longer going quite as expected – Hibernate is ignoring changes to items managed by the user type, for instance – it often becomes apparent that one doesn’t sufficiently understand how these user type thingies are supposed to work. At least, that’s what happened to me.
In this post, we’ll be dissecting the Hibernate UserType interface, explaining the relationships between the various methods, and developing a set of base user types that capture common use cases. (more…)
Tags: Hibernate, Hibernate user type, JPA
Filed under Java | 16 Comments »