Dec 17


EJB, Java, Lightweight Containers, Tech 6 Comments »

After hearing more about EJB 3, and talking to various people, why are we putting dependency Injection semantics in an EJB spec?

I can see one reason: “Let’s just get EJB 3 done”

This is a reason for not splitting the persistence API into a truly seperate JSR (although it IS mean to be a seperate spec/tck/runtime).

Dependency injection is a very generic concern, and one that should be shared throughout a bunch of specs. One tiny JSR could flush out the semantics
of dependency injection, and end up with javax.dependency.*.

Then EJB 3 would specify that “When you @Inject a transaction manager…. you must do X”. A future Servlet spec could do the same thing for their resources, etc etc.

Also, lightweight containers would have the option of groking these annotations too, without needing some ejb.jar.

Wouldn’t that be nice?

Dec 17

Four airports to rule them all

British, Personal 1 Comment »

I am really experiencing London this winter season. In my time in europe, I will get to go to four airports in London:

  • Heathrow
  • Gatwick
  • Stanstead
  • London City

I fly into City airport this morning. If you need to be in the heart of London, there isn’t a better place to fly into than City airport. It is small too, so your bags beat you to the terminal (like Madison).

Belgium was great, but it is really nice to be back ‘home’ in England.

Dec 16 being too smart for its own good?

Google, Tech No Comments »

When I go to, I want to go to

Just because I happen to be in Belgium I don’t want to be sent to ;)

It would be really nice if I couple personalize my front page too. I do like how a search does an automatic search via google desktop.

Dec 16

ORM Vietnam is over? :)

Tech 7 Comments »

Ted Neward will be happy. It appears that the Vietnam that Ted thinks is ORM is coming to a close.

In Gavin’s talk about Hibernate 3 at JavaPolis:

There is talk that Hibernate 3 may be the last release.

He was relaying the message that he feels that most of the problems involved in ORM have been taken care of, and that there are other problems to move on to.

Is it the end of Vietnam? No more ORM innovation?

Dec 14

Rush and Wait, or 14 Again

Personal, Travel 130 Comments »

Part One: Getting to Chicago

I have tended to have a few ‘interesting’ travel ventures in my time. This one may take the biscuit.

Almost everyone has experienced the ‘rush and wait’ feeling that you have when you travel. You may worry about getting to the airport early enough, only to wait at the gate for a couple of hours. My trip was the extreme of this.

It started off innocently enough. I was ready to head to the in-laws, who were scheduled to take me to the airport. Then I realised something. My coat was in the back of my car. That wouldn’t be so bad, however, ‘my car’ was sitting at Emily’s school. So, my first ‘rush’ was to get over there, open the boot, and grab the coat, before sneaking over to the in-laws.

A minor issue. Not a big deal. I wished that would be the worst part of the trip. Of course I was very wrong :)

It turned out that my sister-in-law was able to take me to the airport, which gave us a bit of time to catch up which was nice. I was at the airport a couple of hours before my flight, which is especially plenty for the airport in Madison. You see, you could sneeze from where you pick up your tickets, and give the flu to the person at your gate.

Ahh, it is so nice to walk into the terminal and go straight up to the desk. Noone in line at all. What a pleasure. However, here the rushing commenced again. It turned out that Chicago was having trouble today… something to do with it being the windy city. My flight was delayed, enough to be in a situation where I would miss my flight to europe. Not good. There was some fortune however, in that an earlier flight was also delayed, and they were frantically calling the gate to see if they could wait for me to get on.

I quickly handed over my paper tickets (which is very strange. For some reason insisted). It took them awhile to realise what these were, but then I was on my way. I ran through security (again: no line at all) and headed to my gate. Noone was there. I knocked on the door. Nothing.

I then saw a glimpse of a cheese-head down the way, so I chased it. They came over to help, and talked on the walkie talkie for awhile, before letting me on the plane. When I was at the gate alone, I had actually felt tempted to take the walkie-talkie which was laying in front of me. It was so tempting :)

I got on the plane and smiled. I had made it. Just in time. Now there was time for some waiting. We sat on the tarmack for quite some time before the pilot kindly announced that we were going to have to wait 15 minutes for take-off. 15 minutes later. Nothing. “Sorry again folks. We will just have to sit here for another 30 minutes. No biggy”.

Now, I am not a huge fan of flying in the best of times, but I really hate NOT moving at all. It just feels wrong. I was especially happy to finally get in the air. I calculated that since I was on an early flight, even with the delays, I was looking good. I would have plenty of time to enjoy the splenders of Chicago O’Hare. This included getting a bite to eat, as I hadn’t had anything yet.

My throat felt like Ghandi’s flip flop (as a friend would say), so I looked forward to a drink coming down the aisle of the plane. Just as I was deciding between a Sprite and an Orange Juice, the flight attendent got on the blower to tell us that this was a NO service flight. SO WHAT IS SHE GETTING PAID TO DO. Oh, the security. This naturally made me more thirsty than ever.

Oh well, this is just a 30 minute flight anyway, so it isn’t like I will have to wait long. You guessed it, 30 minutes passed and as soon as I looked outside of the window, I gasped. I could still see Madison! Enter the pilot: “As you may have noticed, we have been circling for some time now. We expect to actually move in a straight line soon”.


Let’s skip ahead to landing in Chicago. Due to the whole paper ticket / international flight thing, I had to go to the international terminal (via a slow train) and re-check in. It was refreshing to get into the international terminal as it was so quiet. No lines anywhere. Until, I got to KLM. Here the line went around the building. It was longer than the line I was in to see Al Franken at the student union.

When waiting in these lines you are always in a frustrating position. How close do you stand to the person in front of you? I personally prefer to give them (and myself) a bit of room, however this always backfires via:

- Some idiot wanting to just jump in line
- One person every 2 minutes wanting to get through the line using your gap as the passage

So, I tried to dance the ‘not quite enough room here’ game, with varied results. It didn’t help that there was a family in front of me. There were parents, grandparents, cousins, uncles, and the paper boy there, all in line. Of course, only 2 people were ACTUALLY flying. The rest were there for the fun of it.

I got to the front of the line with about 30 minutes before my flight left. I got my ticket, and ran for the security line which had quadrupled in the time that I was there. Now, I was faced with another dilema. I hate to be a barger, but people on my flight kept jumping to the front of the line demanding to get through quick. It was working, so I decided I had to do the same else I wouldn’t move. I was told: “no”. I was going to miss my flight. In a nice change in fate, the lady then came up and said “oh go on then” and I jumped through.

Laptop out. Coat and shoes. Let’s go. I got through the metal detector to be stuck with a malfunction in the scanner machine for the person behind me. This meant that my belongings were also stuck, in site, but not through the machine. My foot tapping started as I eyed the clock. When my belongings finally made it through, I chucked on my shoes and made a run for it. The ‘last call’ was overhead as I reached the gate. I made it.

Little did I know that the worst part was to come.

Part Two: Teanage years

Although I was starving and thirsty (having had no time at all to grab anything), I was happy to be on board the KLM flight to Amsterdam. I was sitting next to a stereotpical young hippie, who seemed nice enough. He was in the middle seat, but I hoped that the window would remain free so he could move over and room could be had. When stuck in a trans-atlantic flight, it is nice to be able to flex a muscle here or there.

My luck held out. Every passenger who was even later than I, that came on, walked on past. I was holding my breath. But, the doors closed and I hinted that he bloody move over already.

I was ready to read a bit, watch the movie: “Deckchair Danny” (a real classic), and then try to fall asleep. It was all going nicely until the d00d next to me kept talking to the bird in the row behind me. She was dressed like a modern Janis Joplin, and was raving about how:

- She has been a veggie for almost a year
- She has taken up the guitar and plays all the time
- She loves pot
- She really loves pot
- And other drugs

This started a great yabbering between them as they talked vices. He happened to have some hash in his pocket and wondered if they should take some.

Then the inevitable happened:

“Hey, dood. Do you mind if she sits here?”

Before I could answer she was on top of me, falling into the seat in between us. I was edged out, and the beginning of the left-lean began. They started to talk more about Really Deep Shit ™. He was in a band. He would make it big. She thought: Rock On. I tried hard to turn up my headphones loud enough to drown them out, but it just wouldn’t happen.

Dinner came, which I ate with one hand (as that was all the room I had thanks to her huge coats). It was also quite hard to eat the chicken as they talked about how evil it was to eat meat. “I want to go vegan, man”. At least the crackers were top notch.

Before I got to the inevitable worst part, the ironic thing about me writing this is that I was reading Bill Bryson’s: The Lost Continent on the trip. That has rubbed off in such a way that I feel like I have to take the mickey out of travel.

Back to the nightmare. Have you guess it yet?

Well, “Deckchair Danny” started up. It is a harmless, goofy, Aussie movie about a bloke who floats out of town and becomes a hero. Corny, but for some reason I couldn’t sleep anyway. As soon as the lights went dim, the new couple got comfy. This is where I felt like being a kid again. When I was ~14 I frequented a certain ice rink in Romford (for a few weeks). For some boys who went to an all lads school, this was a place where we could see some ladies. And, some of us actually pulled. The sad part was that one time I ended up at the local cinema with two mates, and two birds. My friend, Elliott, leaned over to tell me “Sorry mate” as he then leaned the other way and started to get hold of the Essex girl to his right.

History was repeating itself again, but now I was nearing 30, and I didn’t bloody know the people who 5 cms from me were going at it.

It was a long. long. long. long. flight.

Part Three: Finally there, now for the last leg

I was out of the plane in a flash. Now I had to find a ‘Transfer Desk’ in the Amsterdam airport, to get my boarding pass for Antwerp. I got to the desk, and soon the one person helping me became two. They had never seen a situation like mine. It turned out that I was not getting a flight to Antwerp, but a train. KLM had a fake flight number for a train transfer. Oh well, so I will see some sites on the way. Not so bad!

The problem was that this had also confused the great minds of American Airlines in Madison. They had checked my luggage to Antwerp, even though there was no way it could get there. I had to run down to the baggage department to see if they could dig up my bags.

The kind lady there was very helpful. She got me my ‘boarding pass’ of sorts for the train, and called in the problem. An hour went by and they couldn’t find the bags. I had to fill out a form, and they would hopefully get me my bags tomorrow morning at the earliest. They did kindly give me some toiletries to get me by!

I went off to find out where the hell to go: train wise, and to finally get some brekkie + more liquids. I worked it all out, and the train was delayed for 15 minutes. For some reason, I thought I should ‘check back’ on the baggage situation. Loe and behold, the words I wanted to hear: ‘WE FOUND IT’. I was rushed to the delayed baggage department, grabbed my bags, and just made it in time for my train ride.

That is where I am right now. I just passed the Feyernood football stadium. It was hard to see as it is so foggy here you can barely see your hand in front of your face.

Anyway, hopefully I will pull into Antwerp station in about an hour, and then I can get a cab to the hotel. Hopefully the JavaPolis chaps have got the rooms all setup. I am going to need one pretty quickly.

Dec 12

Spring 1.1.3 Release

Tech 3 Comments »

The Spring point releases keep flowing. Maybe one more before Spring 1.2?

I will have to tweak one of my maven project.xml’s to 1.1.3 and see if all of the tests are happy :)

I’m pleased to announce that Spring 1.1.3 has just been released. This is a bugfix and minor enhancement release in the 1.1 series; most importantly, JDK 1.3 compatibility is fully restored. Among the new features in this release are:

* added “setResourceLoader” method to GenericApplicationContext, for overriding the default resource loading strategy
* added FileSystemResourceLoader, resolving paths as file system resources rather than as class path resources
* BeanWrapperImpl automatically registers a default ResourceArrayPropertyEditor
* added CustomCollectionEditor, by default registered to convert between Set, SortedSet and List (when necessary)
* added “fileEncoding” and “propertiesPersister” properties to PropertyResourceConfigurer
* reworked DefaultListableBeanFactory’s “getBeansOfType” to return FactoryBean instances when passed a FactoryBean type
* DefaultXmlBeanDefinitionParser resolves “set” tag as LinkedHashSet on JDK 1.4, falling back to HashSet on JDK 1.3
* factored out AbstractRefreshableApplicationContext as base class of AbstractXmlApplicationContext
* added “setIgnoreUnknownFields” method to DataBinder, enforcing request parameters to match fields when turned “false”

* added “execute(ConnectionCallback)” method to JdbcTemplate, allowing any kind of operation on a given Connection
* added DB2SequenceMaxValueIncrementer, implementing the DataFieldMaxValueIncrementer interface for a DB2 sequence
* fixed Hibernate/JTA synchronization to also work with EJB remote transaction propagation (with >1 thread involved)
* added “transactionConfigClass” and “transactionConfigProperties” customization properties to SqlMapClientFactoryBean

* added optional “proxyInterface” property to JndiObjectFactoryBean, for exposing a proxy rather than the plain object
* added “lookupOnStartup” and “cache” properties to JndiObjectFactoryBean, allowing for lazy lookup on first access etc
* added “codebaseUrl” property to HttpInvokerClientInterceptor, specifying a URL for dynamic class download
* added support for dynamic class downloading to AbstractHttpInvokerRequestExecutor and its subclasses

* DispatcherServlet by default cleans up request attributes after include request (configurable via “cleanupOnInclude”)
* UrlBasedViewResolver supports a “forward:” prefix too, for forwards to other controllers through special view names
* added “attributes” (Properties) and “attributesMap” (Map) properties to UrlBasedViewResolver, for static attributes
* InternalResourceView performs an include if the response has already been committed (-> forward not possible anymore)
* JstlView and TilesJstlView respect a JSTL “localizationContext” config in web.xml, checking those messages first
* added overloaded “createVelocityContext” and “exposeHelpers” methods to VelocityView, with passed-in servlet response
* added “toolAttributes” property to VelocityView, taking attribute name / tool class name pairs for tools to expose
* added JasperReportsXxxView to allow for convenient rendering of CSV/HTML/PDF/XLS web views with Jasper Reports
* added MappingDispatchActionSupport class, as convenience subclass of Struts 1.2’s MappingDispatchAction

Have a look at the changelog for details.


Dec 12

Grrr. Trying to turn off logging messages :)

Tech No Comments »

I am running a bunch of tests, and logging messages are spewing all over. Some are annoying INFO messages that I don’t care about.

Everything is plugged into commons-logging -> log4j.

I have the log level turned up for the package that is spewing this information. What is up?

  • I make sure that commons logging is being found in the right classloader. I had a problem where it was loaded in a parent classloader, and hence couldn’t Classloader.getResource*(”log4j.xml”) to get the right file (another annoying problem to hunt down).
  • That wasn’t the problem, so I make sure that the log4j.xml was being found
  • Yup it was happy. Hmm. So why is it logging an element from FooBar.class even though it was in a package that I have told not to log that level?
  • It turned out that the class in question was an abstract base class, which had a getClass() call, when it got the logger object. So, although it looks like that package/class was doing the dead, it was really MY class which inherited from it.
  • I turned the log level up for my own package, and it went away. I wish I could get the source for the offending package and not make it log in that way ;)

Another hour wasted!

Dec 11

Google Suggest

Google, Tech 91 Comments »

Brian M pointed me to Google Suggest.

It is actually kinda fun to put in some combinations and see what shows up. It really shows you what people are searching for at the moment :)

It is also impressive to see how fast the suggestions come back, even though it talks back to Google for that nice little packet.

It would be interesting for it to get smarter and offer suggestions based on ME, not based on the fact that lots of 13 year olds watch THE O.C. ;)

Dec 10

Lucene in Action eBook

Open Source, Tech 4 Comments »

Lucene is in my top list of open source projects. It is quality.

Erik Hatcher and Otis have done a great job on the Manning book, and it was good to hear that it is now available.

I even have a case study on how TheServerSide integrated Lucene in there.

The Lucene in Action e-book is now available at Manning’s site:

Manning also put lots of other goodies there, the table of contents, “about this book”, preface, the foreward from Doug Cutting himself (thanks Doug!!!), and a couple of sample chapters. The complete source code is there as well.

Now comes the exciting part to find out what others think of the work Otis and I spent 14+ months of our lives on.


Dec 10

AspectJ 5 M1 Released :)

Tech 1 Comment »

The AspectJ team wished us a merry xmas with:

I’m pleased to announce an early christmas present for AspectJ users – the first milestone build of AspectJ 5 is now available.

You can download it from:

or the mirror at:

See the README linked from the AspectJ home page
( for an overview of this release, or the AspectJ 5 Developer’s Notebook (also linked) for full details of the language and tools changes. This release provides support for binary weaving of Java 5 classes generated by a Java 5 (javac) compiler.

Some of you may recall we set out a plan to deliver Java 5 support in AspectJ in three phases (see below). We’re actually a little ahead of plan, because the M1 release also contains full support for pointcut matching with annotations. For example:

before() : call(@RestrictedAccess **.(..)) {

In addition to matching annotations with the existing pointcut designators, we also support several new annotation-matching designators.

Please try it out and let us know what you think. We reserve the right to continue revising the language definition between milestone releases based on user feedback, and will stabilize with the release of the first AspectJ
5 release candidate.

Thanks to Ramnivas Laddad, Ron Bodkin, and the ABC team for their input into the AspectJ 5 language design.

– The AspectJ Team