Re: Opinion Poll: - JDOM2 and minimum-required Java - Java5 or Java6

Rolf <[email protected]>
Newsgroups gmane.comp.java.jdom.general
Message-ID <[email protected]>
Hi all.

As a further update, I have completed the Java5 compatibility for the 
code in it's current state.

In order to make the process work I had to make some decisions about 
language levels and compile levels. I discovered that my personal coding 
style has become fairly Java6 centric especially with respect to 
@Override annotations. To make the code fully Java5 compatible I would 
have to make code changes to almost every file. I thus took the decision 
to maintain Java6 code style which implies the code has to be compiled 
with Java6 JDK, but with the bytecode-target of Java5.

I have thus compiled JDOM2 with JDK6 to a JDK5-level byte-code, and then 
run that bytecode through the JUnit test harness using Java5, 6, and 7 
runtimes. All tests that are expected to pass did (I expect some 
Jaxen-related tests to fail). Interestingly, the Jaxen tests that fail 
in Java5 and 6 now pass in Java7 ... ;-)

The bottom line is that we can make JDOM2 run in Java5. To make it 
compile with Java5 will take more work.

To re-iterate the changes I have had to make because they indicate the 
sorts of limitations that we may run in to if we officially support Java5.

1. DescendantIterator uses ArrayDeque - fixed with ListIterator
2. Lots of places use Arrays.copyOf(...) - created a new ArrayCopy 
utility class
3. XMLConstants.W3C_XML_SCHEMA_NS_URI - does not exist in Java5 - 
hard-code it (but issue #38 comes to mind)
4. XMLConstants.FEATURE_SECURE_PROCESSING missing - had-coded it.
5. StAX does not support Source-based input in Java5, need to use 
Streams or Readers only - replaced all Sources with Readers in the test 
harness. http://java.net/jira/browse/SJSXP-38
6. Java5 has a major bug in org.xml.sax. 
https://issues.apache.org/bugzilla/show_bug.cgi?id=38316 and 
https://issues.apache.org/jira/browse/XERCESJ-1261 which basically meant 
that I had to write my own implementation of Attributes2 to get some 
tests to run in the SAXHandler.

To make the code compile cleanly with Java5 would be a bigger exercise, 
I think.

Now that I have done this work I think I am more comfortable saying we 
can keep JDOM2 running on Java5 without too much effort, but, I still do 
not want to say we officially support Java5. I think we can put together 
a how-to on making it all work.

Since I was going through the code versions I thought it would be 
interesting to run the performance benchmark against the various 
combinations of code compliance and runtime version. I have put together 
a web-page for it: 
http://hunterhacker.github.com/jdom/jdom2/performanceJDK.html

It is very interesting for a number of reasons:
1. Java5 is much slower.
2. I realized that I have been running the perf tests using Java7 
runtime for a while... because XPath with Java7 is 3 more than twice as 
fast as Java6... which makes my other performance page a little useless 
now...
3. There are other minor discrepancies that are interesting none-the-less.

In light of the current state of the code and the results I have, I 
think I am comfortable that we can make a good decision about supported 
JDKs.

Given that I set tomorrow as a decision deadline though, and that the 
ramifications are not going to be massive from a design perspective, I 
think I should extend the deadline a little further... perhaps next 
Friday, the 25th.

Rolf

On 17/11/2011 1:39 AM, Rolf wrote:
> I have been looking in to the implications of supporting Java5.
>
> Here is a list of changes I have had to make to get the support in:
>
> 1. DescendantIterator uses ArrayDeque - easy fix.
> 2. Lots of places use Arrays.copyOf(...) - created a new ArrayCopy
> utility class - an OK fix.
> 3. XMLConstants.W3C_XML_SCHEMA_NS_URI - does not exist in Java5 - easy
> fix... hard-code it
> 4. XMLConstants.FEATURE_SECURE_PROCESSING missing
>
>
> StAX has proven to be the real problem. Specifically, the stand-alone
> (pre Java6) StAX library is only specified to have optional support for
> the method I use to load up files. It's not a train-smash, there's an
> alternative way.... I just have to change all the JUnit tests from
> loading from a 'Source' to loading from a FileReader
>
>
> I think, all being said and done, that the code will work in Java5. The
> option of supporting Java6 officially, but having good instructions for
> making everything work in Java5 is realistic.
>
> Currently the instructions would be something like:
> 1. everything except StAX will work just fine.
> ...
>
> If you want StAX, it comes in two parts, the official API, and an
> implementation.
>
> The API is available in two places, either the official JSR at
> http://sjsxp.java.net/#downloads or alternatively the xml-apis.jar which
> is part of apache (and is part of the JDOM2 repository)
>
> The reference implementation of StAX is available from
> http://sjsxp.java.net/#downloads as well. You have to download and run a
> single .class file SJSXP.class.
>
> Alternatively, download the woodstox StAX implementation.
>
>
>
>
> Conclusion, it all seems to be quite reasonable to make Java5 work. I
> still am reluctant to make it officially supported. I think though with
> some disciplined development the compatibility can be established, and
> maintained.
>
> I don't particularly like having to re-create the java.util.Arrays
> functionality, but its not a deal-breaker.
>
> I think I will commit the code changes though, even if it is just to get
> them 'on record' (and clear them out of my development environment so I
> can do other things). Committing the code change is not intended to be
> an endorsement of Java5 support though! It is a big commit.
>
> I think that's enough investigation to make a more informed decision
> about Java5 support. Currently using Java5 about 250 test cases are
> failing, but those I believe will pass again if/when I change the tests
> to use a FileReader for StAX (instead of the unsupported Source).
>
> Rolf
>
>

_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.