2009/11/28 Phil Steitz <phil.ste...@gmail.com>: > Niall Pemberton wrote: >> 2009/11/27 Phil Steitz <phil.ste...@gmail.com>: >>> Niall Pemberton wrote: >>>> 2009/11/27 Phil Steitz <phil.ste...@gmail.com>: >>>>> Niall Pemberton wrote: >>>>>> On Fri, Nov 27, 2009 at 8:47 AM, Jörg Schaible <joerg.schai...@gmx.de> >>>>>> wrote: >>>>>>> Hi Grzegorz, >>>>>>> >>>>>>> Grzegorz Słowikowski wrote at Freitag, 27. November 2009 09:04: >>>>>>> >>>>>>>> Phil Steitz wrote: >>>>>>>>> Niall Pemberton wrote: >>>>>>>>> >>>>>>>> ... >>>>>>>>> Good points - so what is your recommendation? >>>>>>>>> >>>>>>>>> org.apache.commons:commons-dbcp4:1.3 >>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>> >>>>>>>>> or >>>>>>>>> >>>>>>>>> org.apache.commons:commons-dbcp:1.3 >>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>> >>>>>>>>> or >>>>>>>>> >>>>>>>>> org.apache.commons:commons-dbcp:1.4 >>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>> >>>>>>>>> or? >>>>>>>>> >>>>>>>>> >>>>>>>>> Phil >>>>>>>>> >>>>>>>> ... >>>>>>>> Think about war files, what you will have in WEB-INF/lib. You CANNOT >>>>>>>> have (accidentally, >>>>>>>> from transitive dependencies) commons-dbcp and commond-dbcp4 together >>>>>>>> in >>>>>>>> the class path, >>>>>>>> so the first proposal is not good. >>>>>>> This can happen for all three proposals. Since the groupId is different >>>>>>> Maven handles the two artifacts in all three cases as unrelated. If the >>>>>>> artifact name for two distinct artifacts clash, it will automatically >>>>>>> prepend the groupId for such cases like the war plugin. >>>>>>> >>>>>>> >>>>>>>> If you release jdbc3 and jdbc4 artifacts from the same release process >>>>>>>> (some code commented for >>>>>>>> jdbc3 version) - this is one release for me, so the version numbers >>>>>>>> should be identical. >>>>>>> Actually we have two incompatible versions. If someone depends (by >>>>>>> transitive deps or directly) on both versions, he has always a problem. >>>>>>> Changing the groupId for one will simply expose the problem more >>>>>>> obviously, >>>>>>> because both jars will end up in the dependencies - otherwise Maven >>>>>>> version >>>>>>> resolution will silently chose one of them and drop the other one. >>>>>>> >>>>>>>> But I see you will probably prefer releasing separately and creating >>>>>>>> branch for 1.3.x patch releases. >>>>>>>> I would prefer this way too. In this situation we have version 1.3 >>>>>>>> backward compatible and version >>>>>>>> 1.4 not compatible. Because incompatibility comes not from your API >>>>>>>> changes but from changes >>>>>>>> inside Java API, then I say you don't have to change version numbering >>>>>>>> to 2.x.x (change on the >>>>>>>> first position). >>>>>>>> I don't remember what's going on inside Maven build of war artifact if >>>>>>>> you have two dependencies >>>>>>>> with different group ids and the same artifact ids. They are different >>>>>>>> artifacts and there is no >>>>>>>> version resolution between them. Maven war plugin prepares war content >>>>>>>> in "target/{artifactId}-{version}" directory before creating war file, >>>>>>>> so one of these files will >>>>>>>> overwrite the other I think. >>>>>>> As explained - no. >>>>>>> >>>>>>>> If some other build tool would create war archive on the fly, both >>>>>>>> files >>>>>>>> could be packaged >>>>>>>> because there are no constraints on unique file names inside jars/wars >>>>>>>> and this would be very bad! >>>>>>> Therefore we want to change the version for the JDBC version4, so we >>>>>>> end up >>>>>>> for those tools with two distinguishable names: commons-dbcp-1.3.jar and >>>>>>> commons-dbcp-1.4.jar >>>>>>> >>>>>>>> Additionally I remember some discussions on Maven lists against >>>>>>>> relocations (some Apache >>>>>>>> Commons project changed its groupId to "org.apache.commons", and >>>>>>>> reverted this change very >>>>>>>> soon), but I don't remember the exact problem. Maybe you could ask >>>>>>>> Brett >>>>>>>> Porter or Jason val Zyl. >>>>>>> No relocations involved here. >>>>>>> >>>>>>>> IMHO the safest and most conservative naming convention would be: >>>>>>>> >>>>>>>> commons-dbcp:commons-dbcp:1.4 >>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>> No, because this would actually make the JDBC4 version available as an >>>>>>> upgrade for the JDBC3 one. This is the scenario we have to avoid. >>>>>> I really don't understand this - this is exactly the scenario we want. >>>>>> Doing it this way DBCP 1.4 will just be an upgrade for DBCP 1.3 with >>>>>> the additional methods introduced by JDBC 4. How is this any different >>>>>> from any later version of a component that adds additional methods and >>>>>> relies on the API of a later version of the JDK? >>>>> The problem is that it is not backward compatible. You can see this >>>>> using the test-jar.xml ant build in trunk. Build a jar using JDK >>>>> 1.6 and then try to build the tests and execute them against this >>>> I did, with the source/target set to JDK 1.6 - so the minimum JDK for >>>> DBCP 1.4 is JDK 1.6. That way anyone who wants to depend on DBCP 1.4 >>>> will have to be on JDK 1.6. The mistake IMO is to build DBCP 1.4 using >>>> JDK 1.6 while setting the source/traget JDK to < JDK 1.6 >>>> >>> Agreed, but those on 1.4 or 1.5 will still get runtime errors if >>> they inadvertently get "upgraded" unless I am missing something >>> here. Running against the 1.4 jar you posted, I now get bad class >>> file errors. >> >> For a project to depend on DBCP 1.4 then they will have to require JDK >> 1.6. Anyone who depends on that project will also therefore have to >> require JDK 1.6. I guess its probably possible to have a project built >> on JDK 1.6, but with a source/target set to a previous JDK and a >> dependency on DBCP 1.4 - but this is broken since with DBCP 1.4 it >> will (as you say) only ever run on JDK 1.6. >> >> Anyway, this is just a build issue that someone will have to sort out. >> If that could happen (which tbh I doubt) then they will just have to >> revert back to DBCP 1.3. This is true of any of our components that >> have "upgraded" their minimum JDK requirements. In this scenario >> though its not an issue because we will be providing a DBCP 1.3 >> solution that they can revert to that has all the fixes of DBCP 1.4, >> just without the JDBC 4 features. >> > > Thanks, Niall. Sorry I was not clear and a little slow to come > around to seeing the full picture here. I now understand and agree > with the approach - including not changing the groupId - that you > have proposed. I have a couple of small things to fix and then I > will cut RCs for both 1.3 and 1.4.
Great, let me know if theres anything you want me to do to help. When I created a test branch I added the following step to the ant build file to update the sources in place: http://tinyurl.com/ykhafzb Should we add this to build.xml in trunk? Niall > Phil > >>> Phil >>> >>> >>>> Niall >>>> >>>>> jar using 1.4 or 1.5 and you will get runtime errors. Sebb chased >>>>> >>>>> at least one of these down as being due to an import >>>>> (SQLClientInfoException) in the jdbc4 code. >>>>> >>>>> That is the reason I proposed changing the groupId, because I did >>>>> not want client apps to blow up with runtime errors when "latest >>>>> version" resolution of range specifiers grab 1.4 for them when they >>>>> are running jdk 1.4 or 1.5. >>>>> >>>>> Phil >>>>>> Niall >>>>>> >>>>>>>> In this situation JDBC4 version always wins. It means you know what >>>>>>>> version will land in your >>>>>>>> war file if you have both dependencies in your project and don't >>>>>>>> specify >>>>>>>> your preferred version >>>>>>>> in the pom.xml file. >>>>>>> No, if you know what you need, you can adjust the groupId for the JDBC4 >>>>>>> version. If your dependencies still contains the other one, you have a >>>>>>> problem anyway. >>>>>>> >>>>>>> - Jörg --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org