Re: [Soa-tools-list] Versioning of projects and tools
by Max Rydahl Andersen
> Max and I had a good discussion at Neuchatel a couple of weeks back
> about the nightmares we continue to face with tooling and versioning
> of projects (e.g., where projects expect the tools to be specific to
> specific versions of the projects). Max, could you elaborate on this
> again, so we can get that discussion going between everyone on this
> list?
Sure, at least I can try and get the ball rolling ;)
btw. I cc'ed in jbosstools-dev too since it relates to tooling in general too.
The discussion we had is rooted in the realization that we live in a world where developers
will use multiple versions of our projects when developing. E.g. They do "SuperShopperApp v2.0"
using EAP 4.3, Hibernate 3.2, Drools 3 and JBPM 3, but last year they used JBoss AS 4.2, Hibernate 2.0.5,
Drools 2 and JBPM 3 in "SuperShopperApp v1.0" and next year they plan to use EAP 5, Hibernate 3.3 or maybe 4, Drools 5
and JBPM 4.
How would a developer expect these thing to work in their tooling environment ? (note: I'm explicitly ignoring the
build problem here e.g. how they handle different jars etc. I'm just talking about tooling).
I believe that they would expect to use the same IDE for browsing and using these customer projects, just like
you probably assume that you could develop both JDK 1.4, 5, 6 and maybe even 7 with the same IDE.
The tools does not have a bounded monolithic life cycle like frameworks has, frameworks normally need/tries to be 100% compatible
with it self betwen the micro version updates (2.1.2 to 2.1.3), mostly compatible between minor updates (2.1 to 2.2) but "nothing" is promised
between major versions (2 to 3). Tools does not have that freedom.
The comon way of solving that in IDE's is that the tool has a notion of runtimes and possibly also settings applicable to specific versions, e.g. in Eclipse you can setup a set of JDK's and where they are located plus you have a set of settings that can tweaked that might or might not apply to all versions of their runtimes. Look for Java Compiler settings and Installed JRE's in Eclipse preferences for examples.
Examples of tools in JBossTools that has this notion is JSF tooling JBoss AS, Seam tooling. They have the notion of JSF 1.1, JSF 1.2, AS 4.0.5, AS 4.2, AS 5, Seam 1.2 and Seam 2 etc.
Examples of tools that does not have this notion (to my knowledge) is Hibernate, jBPM and Drools.
For Hibernate it have not been a big issue since it targets Hibernate 3.x and the Hibernate project has always (except a few minor glitches) been backwards compatible and thus the input and output for Hibernate Tools have not been problematic. When Hibernate 3.3 and possibly Hibernate 4 comes out we will probably run into some problems that needs to get solved (luckily I know how for most of them ;)
jBPM is targeting jBPM 3.x and has also more or less been backwards compatible and there haven't been any 4.x (yet). Now 4.x is in the works then
the tooling should start adjusting for having to handle two different versions.
Drools has already had its share of problems ;), e.g. Drools 3, 4 and soon 5, and you cannot use the Drools 4 plugins with Drools 3 projects etc.
Or rather you can, but since the editor is highly coupled with the drools version we run into problems if the syntax changed too much between versions,
similar problems occur when using the debugger which assumes certain methods/structures exists in the remote debugged vm.
We have discussed some times before and I keep hearing that we have too few resources to handle this and it is not relevant to do for X project.
But I don't buy that argument ;) Sure we always will have too few resources, but this is relevant for any project that wants to be used over a long
period of time plus I believe it is a minimal effor that is required to handle it in *most* cases.
I'm not talking about being 100% compatible with everything you ever released - I'm just talking about having the notion of having multiple major versions and if necessary minor versions if your underlying framework is being evil and breaking things in minor releases.
/max
16 years, 8 months