I may bring nothing new (the last Adrian's email explain well most of my 
views), 
but I would like to summarize what I think are the most important points:

* We are not replacing existing technology. We are enabling a
   functionality bundled in Java 6. This is equivalent to adding
   "implements java.io.Serializable" to existing classes.

* Enabling JAXB in Java 6 does not introduce any new dependencies
   and have absolutly no impact on public API. It does not even
   appears in the javadoc - it is really invisible.

* While it work well with Maven and NetBeans, Justin and Jody have
   reported problems with Eclipse. I'm ready to accept as a failure
   the attempt to make JAXB invisible to the Java 5 build. So we are
   looking for way to remove JAXB annotations from SVN trunk and keep
   them on a Java 6 "branch" (I said "branch" but I'm actually thinking
   to something along the line of "Mercurial repository clone" - it
   still need to be investigated).

* Justin worries about the philosophical implication of forcing a
   technology. I disagree: we are not forcing it, we are enabling
   it. To make a comparaison with Java I/O, declaring a class as
   Serializable does not force anyone to use Java serialization
   mechanism. Again I repeat: it is totally invisible in the API,
   so it even does not put any conceptual weight on user side.

* Why enabling JAXB and not Hibernate? Because JAXB is bundled
   in Java 6 and used by other Sun technologies around Glassfish,
   while Hibernate annotations would introduce a new dependency.

* Adding JAXB annotations do not prevent you in any way to add
   Hibernate annotations if you wish. Annotations from different
   packages can live together no matter their name. So we are
   not blocking usage of any other technology.

* Simone worries about the confusion that could brings the mix
   of JAXB and Hibernate annotations in the same class. Avoiding
   messy code is a strong goal for me. But in this case, I see
   this issue in the same way than a big method: when a method
   is big, we use comments for separating logical blocks in the
   code. Same applies to annotations: "// JAXB annotations", the
   annotations, "// Hibernate annotations" (or whatever comment
   introduce a clear visual separation), the Hibernate annotations.
   We can avoid messy code if we comment it well.

* Except for the problems in Java 5 build (to be resolved by removing
   annotations from that build), the only real inconvenient I can see
   is the increase in size. But if size was a major issue, we should
   already be using PACK200. Nevertheless I understand that the GeoTools
   project is big and I don't think that "one size fit all". So to repeat
   myself again: I want to setup an ecosystem with different flavors of
   GeoTools releases: "Java 5 vs Java 6", "full featured vs lightweight",
   "all referencing in one JAR", etc. May sound scary, but my understanding
   is that distributed versioning systems is opening opportunities that
   we didn't had before.

        Martin

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to