Hi Reto, if you make incompatible changes to an module than you need to adapt all dependent modules and update the dependency of them to the current version.
Normally the -provider-policy : ${range;[==,=+)} -consumer-policy : ${range;[==,+)} would ensure that release Bundles are not affected by that. This is also the reason why for an incompatible API change a major version increase is required. However for pre 1.0.0 versions this is not the case. best Rupert On Fri, Nov 23, 2012 at 11:10 AM, Reto Bachmann-Gmür <r...@apache.org> wrote: > Hi, > > The concrete problem: I've made changes to the WebFragment interface (in > org.apache.stanbol.commons.web.base). The classes implementing it no longer > compile if they have proper @Override annotations. Packages which used to > implement the old version should remove the method and move the templates > to another location. > > At runtime implementation of the old interface still work except that the > method is never invoked and the templates are looked up in the new > location. I've moved the templates to the new location in all modules and > I've removed the method in those modules dependeing on the trunk version. > The other modules are now in the state that they work only with the trunk > launchers but compile only with the dependency to the old comms.web.base. > If developer update the dependency version they'll have to find out why it > fails and what adaptations are needed. > > I think it would be much more efficient if the one that changes an > interface also changes all dependencies in trunk to compile with the new > version. Of course one could just update the modules depending on the > updated one to use the latest version. Howver I think it would be more > consistent to keep the reactor modules to depend on the latest versions, > this can be done running and needs no change to depenedency management: > > mvn org.codehaus.mojo:versions-maven-plugin:1.3.1:use-latest-versions > "-Dincludes=org.apache.stanbol:*:*:*" -DallowSnapshots=true > -DexcludeReactor=false > > For the following modules we have other modules depending of older versions > of them: > > org.apache.stanbol.commons.jsonld > org.apache.stanbol.commons.solr.core > org.apache.stanbol.commons.stanboltools.datafileprovider > org.apache.stanbol.commons.stanboltools.offline > org.apache.stanbol.commons.web.base > org.apache.stanbol.entityhub.core > org.apache.stanbol.entityhub.model.clerezza > org.apache.stanbol.entityhub.servicesapi > org.apache.stanbol.entityhub.yard.solr > > Given that in the launchers the reactor build they have to be compatible > with the latest versions anyway this seems inconsistent to me. > > For now I'll just update the modules to depend on the latest version of > org.apache.stanbol.commons.web.base. > > Cheers, > Reto > > > > > On Fri, Nov 23, 2012 at 9:15 AM, Fabian Christ <christ.fab...@googlemail.com >> wrote: > >> Hi, >> >> is there any concrete problem with this approach? I would like to live with >> it at least for some releases and then decide upon our experience if it >> fits. Otherwise it is just a meta-discussion. I see pros and cons on each >> side. >> >> Let's do a few releases and collect some evidence ;) >> >> >> 2012/11/22 Reto Bachmann-Gmür <r...@wymiwyg.com> >> >> > I agree that if integration offer full coverage the will fail when a >> > compatibility breaking change is introduced. However the advantage of >> > statically typed languages is that you can detect this problems already >> at >> > compile time. >> > >> > The two arguments you mention package split and interaction with host >> > environment are in fact arguments for having all modules depend on the >> same >> > versions of their dependencies. As in the trunk launchers we use the >> trunk >> > versions these modules should also depend exclusively of the trunk >> versions >> > of other stanbol modules. Embedding is an import usecase that should be >> > supported, the easiest way to address it is to have just one version of >> the >> > bundles and consistent dependencies. Backward compatibility (e.g. that >> > somebody wants to use an old version of an engine with a new enhancer) >> > seems less important and to provide this the current approach of having >> > engines compile but then fail at runtime doesn't seem a good approach >> > anyway. >> > >> > Cheers, >> > Reto >> > >> > On Wed, Nov 21, 2012 at 11:25 PM, Rupert Westenthaler < >> > rupert.westentha...@gmail.com> wrote: >> > >> > > > But I think they should nevertheless be kept up to date as >> > > > otherwise we have no compile time check that the module will indeed >> > work >> > > in >> > > > the trunk version of the launcher. So I think we should regularly >> run a >> > > >> > > UnitTest are executed using compile time dependencies >> > > Integration test do check the runtime dependencies. >> > > >> > > So I do not see a problem with that. >> > > >> > > In addition one has to consider that the OSGI dependency management is >> > > anyway different from the maven one. >> > > >> > > To give two examples (for details have a look at the Semantic >> > > Versioning Whitepaper [1]) >> > > >> > > 1. consumer and provider policy: Stanbol uses (since STANBOL-774) >> > > >> > > -provider-policy : ${range;[==,=+)} >> > > -consumer-policy : ${range;[==,+)} >> > > >> > > That means that by default dependencies do use a version range of >> > > [==,+). However this is not feasible for imported packages that are >> > > implemented by an module, as minor versions may e.g. extend an >> > > interface by an additional method. So for such cases the import needs >> > > to be marked with the provider-policy to ensure [==,=+). >> > > >> > > 2. Dependency management in maven is on module level where for OSGI >> > > uses a package level granularity. >> > > >> > > Depending on the latest version undermines version ranges (especially >> > > for consumer-policy dependencies) - [==,=+) where the left side is the >> > > most current version means basically that there is no version range at >> > > all. >> > > >> > > - - - >> > > >> > > While such things are not really visible as long as you run everything >> > > within the OSGI environment it starts really to hurt as soon as you >> > > want to access services form outside of OSGI (e.g. when you run >> > > Stanbol in an embedded OSGI environment). In such settings one needs >> > > to expose all packages of used interfaces via the system bundle and >> > > therefore you do not have the possibility to use different versions of >> > > the same class. >> > > >> > > But also within OSGI there are some disadvantages one might encounter. >> > > One example is a fragmentation of the service registry (basically a >> > > bundle may not use a service, because it's version of the Interface >> > > was loaded using a different classloader as the version of the >> > > Interface provided by the Service). If that happens ServiceTracker >> > > will not get notified for available services - because they would not >> > > be compatible. Debugging that is not fun and solving such issues is >> > > only possible by fixing version ranges. >> > > >> > > I agree that out of an maven and build perspective this might look >> > > like a bad choice, but from the OSGI perspective it is exactly how it >> > > should be done. >> > > >> > > I think the version number confusion of sling is caused by the fact >> > > the every single module can have totally different versions. I think >> > > in Stanbol this can be easily avoided by ensuring that all modules of >> > > a Stanbol component (enhancer, entityhub, ... ) are all within >> > > [==,=+). For the commons stuff we could use the same rule but one >> > > level below (e.g. that all commons.solr modules are within [==,=+)) >> > > >> > > best >> > > Rupert >> > > >> > > [1] http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf >> > > >> > > -- >> > > | Rupert Westenthaler rupert.westentha...@gmail.com >> > > | Bodenlehenstraße 11 ++43-699-11108907 >> > > | A-5500 Bischofshofen >> > > >> > >> >> >> >> -- >> Fabian >> http://twitter.com/fctwitt >> -- | Rupert Westenthaler rupert.westentha...@gmail.com | Bodenlehenstraße 11 ++43-699-11108907 | A-5500 Bischofshofen