Archive for June, 2006

Fun with testing

Friday, June 23rd, 2006

I will not talk about the need for unit tests. This I would say is common sense for a modern thinking developer. I recently had to do some small changes in a project. The main developer had already left the company and I got a brief introduction. They all felt very secure because there was a testcase for every single usecase, and also for every possible error. But these were integrationtests, they wrote something into a database, sent requests per URL and parsed the result with httpunit.

So far so good, everyone was happy, but me. Why that?

Of course because there were no unit tests at all. It took me about three days to get the tests running. They used real services instead of mocks, so the tests ran just on a dedicated machine, because of firewall restrictions. The logs where analysed to ensure proper behaviour, but because they where running on an external machine, there where some shell scripts to pipe the logs to a socket. I played around for a while, even tried to use logj4 SocketAppender but failed to get the whole thing running. God knows why. So I dropped that validation. The script to run the tests swallowed every exception. The tests were running about 30 minutes, so after reading the latest news you just saw that some of the tests failed but had no glue why.

That all pissed me of, so I started writing unit tests and mock objects. One of my first tests failed and I was wondering why. I discovered a bug where two flags from an external database had been read in the wrong order. You have to know these where not just two flags nobody cared. These had been two of five values these app was evaluating, one of the reasons why this service was written. To evaluate these and to redirect the user depending on the combination of these.

WTF?! But what about the integration tests? At least they ran without an error. So after looking at the testcode, I couldnt believe my eyes: the good old boy was reversing his error and exchanged the flags at initialization time, so everything was looking fine again. I can imagine the situation, maybe he was wondering why his tests failed and thought, oh I might have exchanged the flags. So after reversing them he got the green bar.

This app was in production state for about one year and everyone was happy, but me …..

SpringOne Conference in Antwerp

Tuesday, June 20th, 2006

It was my first conference since a long time and it was a real pleasure to be there. I do Spring development for over half a year right now and I was excited to see whats currently going on. There were about 410 attendees, and we could listen to 40 presentations. But we had to choose beween four parallel talks, which was a hard decision sometimes. The slides will be published on the SpringOne site at the end of June and the DVD will be available in September. 

The biggest news was Spring 2.0 is ready to use, the final is scheduled for July. Its fully compatible with Spring 1, so no changes for existing apps. Which is great I think, and shows the big advantage of working with POJOs and AOP with loose coupling in mind. You dont destroy old code if you add more. Most of the talks had a relation to the new features included in this new version. For a complete overview click here.

At the keynote Rod Johnson told how many professionals are using Spring, even in mission critical projects like in the banking sector. There were some case studies given, and the message was clear: Spring is not just production ready, every JEE project should switch. Spring is more, its an philosophy, a commitment to agile development, to simplicity, and more or less to test driven development, because its one of Springs key points, to hold your code testable. 

It was obvious that this conference was sponsored by at least two majors namely Oracle and BEA, they even had two talks together. Both are very into JPA, which is supported by Spring since 2.0. I for myself found it funny that Hibernate was mentioned very seldom at this conference ;-) JPA should be the new one and only persistence API in the future, say goodby to JDO. The Hibernate -API will be maintained in the future, but will not developed any further. But Hibernate is on their way to support the new JSR-220, so this should be no principal problem for Hibernate users, like myself. It was news for me that Kodo is bought by BEA and Opensource as well as the core engine of TopLink, TopLink Essentials. The latter is the reference implementation for the new Java persistence API. 

Both companys are very commited to Spring, they will support Springs way to a defacto standard for middleware apps. So Pitchfork is a co-production from BEA and Interface21, an add-on for the Spring Framework for Java EE 5. Spring should provide a foundation for serveral Java Enterprise Edition 5 key components, like EJB 3 interception. But it has more features (e.g. typesafety and pointcuts for interceptors) and is more flexible.

Which leads me to another main feature of Spring 2.0, better AspectJ integration and support. The merge of AspectJ and AspectWerks was a big step forward standardizing AOP, so its great that Spring is not further going their own way. 

A not so spectacular but I think very usefull new feature is custom namespaces in Spring configurations. My last several projects were a typical SOA landscape with many small services. We had some naming conflicts in our configurations, and custom namespace is an solution. On the other hand your configuration gets more readable and less error prone if you define your own types. There are small restrictions though like just singletons are supported (which will change asap). 

The DWR Framework, an Ajax protocol layer for Java, which was presented at the very beginning, is one of the early implementers of this feature. It really does make sense to have more context aware tag- and attributenames. And with schemas you can define possible enumeration-values for instance. So your IDE shows immediatly the read line for wrong values. 

Juergen Hoeller presented the JMS support by Spring, of course including the new features like asynchronous JMS and the task executers, which can work like message driven beans in non managed environments. I dont want to go too much into detail here, but he brought some gotchas and best practices with sending JMS. The new thing is the ability to receive messages in a typical spring way. He used a SessionAwareMessageListener to send a reply message, which is a Spring style MDB. It can participate in transactions and so one. The only thing missing here is a connection pool, this you get from your JMS provider. 

The last talk I listened to was about the new Spring-WS framework, an Spring add-on. First off all, why another Webservice framework? Its key points are of course  ease-of-use and excellent Spring integration, but it focuses on document driven Webservices and contract first WSDL development. Thats a difference to XFire for instance. So you work more with XML, but its the payload XML without the SOAP stuff. To the contrary, with XFire you expose your objects. You get Marshallers and Unmarshallers of course, to parse the XML. But XML is the first thing you have got in your hand with Spring-WS. 

As I said many talks were in parallel so I missed some of them, like the clustering solution from terracota, some in depth talks about JPA, domain driven development and so on. 

Despite the landing of the new version, there are many ideas where to go in the future. Simplier configuration and better production support, like profiling and tuning and more use of JMX are some ideas. But it also depends on the community. Everyone who is interested in or even working with Spring, should regularly check and better post to the forums

One Month on Rails

Thursday, June 15th, 2006

The last weeks have been rather exciting for me. Got to work a lot on a Rails project, and if it’s possible, got to love Rails even more. Got to play with a lot of its features, and there’s more to come. RJS templates are especially great things. Having the client-side code on the server-side in the server’s language is excellent stuff. O’Reilly just published a nice PDF book about RJS. Good stuff and well worth checking out.

Testing with Rails rocks. It takes some coding before I even turn to the browser for testing the GUI stuff, and then mostly to test the interaction of the implemented things. The rest is nicely implemented as tests.

Anyway, it’s been a lot of fun, and it’ll keep me busy for some time still. I don’t miss Java at all, implementing stuff in Rails is way more helping in focussing on the future in general. It’s great to do something completely different from what I did for the last two and a half years. Not that I completely dislike Java now, but it’s just great to completely delve into something new to learn it as best as possible. Having good Rails experience might turn out to be a good investment ;)

So far, freelancing has been sweet for me. Got my own office, and summer’s finally arrived in Germany. Which is all not to say that freelancing might turn out bad, I’m very aware of that, but so far I still think it was the right thing to do for me.

What sucks is that my MacBook Pro 17″ arrived last Friday and was only 10 minutes after unpacking ready to be declared DOA (dead on arrival). New one’s been ordered, but hopefully I don’t have to wait for another four weeks. I got to play with it for some time, and it just kicks butt. Spring builds in seconds, Eclipse starts in seconds, too. Just awesome. Amazing display, great sound, screaming fast. Oh, well.

Technorati Tags:
, , , ,

Celebrating the Day of Satan

Tuesday, June 6th, 2006

In case you didn’t notice, today’s National Day of Slayer, the 6/6/06. So you might wanna put on some life-negating music (Slayer, of course), and listen to it loudly and proudly all day long. And I’ll just sit here waiting for Satan himself to deliver my MacBook Pro ;).