May 22nd, 2007, 05:05 AM
Versioning spring services
We have many spring application that are communicating with each other using Spring remoting(HttpInvoker). DTOs are exchanged as the payload between the application. I am wondering what would be the best way to version these services. Which essentially means that the service provider has to be version aware and the DTOs need to be versioned as well. Has anyone tackled this problem.
May 22nd, 2007, 03:43 PM
I've tackled this, not with Spring involved, but something similar. We had multiple different services spread out over multiple nodes (i.e., multiple JVMs) and we needed versioning in order to manage upgrading the systems etc. Anyway, we used OSGi to solve versioning within the JVM, but we never managed to solve it efficiently between two nodes (we used RMI for communication, before Web Services was easy). We limited all parameters to use a set of interfaces that would hopefully be general enough never to change (bad idea in the long run). We then implemented the service endpoints so that it checked which class the parameter was and decided which version of the service implementation we should use. Works well in the short run, but it does suck the day you need to add something beyond the interface we defined in the beginning.
Versioning between Web Services is a bit easier today. There is a nice page about Web Services versioning at codehaus.org. Depending on what your focus is, one of those solutions might be what you need.
Anyway, I'd recommend using OSGi in either case, since you can easily do versioning within the JVM that way.