Maybe we should set a Java requirement for Jxpath 1.4? I would just use Java 6 as a min for now. Or why not 7?
Gary On Sep 14, 2013, at 5:17, sebb <[email protected]> wrote: > Tests OK for me as well using Java 1.5. > [I no longer have 1.3 or 1.4 installed] > > BTW, the pom does not have any compiler source or target settings so > defaults to 1.3 (which is why it uses JUnit 3.8.1). > > On 14 September 2013 03:04, Gary Gregory <[email protected]> wrote: >> Weird, now it works. >> >> G >> >> >> On Fri, Sep 13, 2013 at 5:36 PM, Gary Gregory <[email protected]>wrote: >> >>> Hm... when I build trunk with Maven 3 "mvn clean test" and Java 7 on >>> Windows I get: >>> >>> testLazyProperty(org.apache.commons.jxpath.ri.model.dynabeans.LazyDynaBeanTest) >>> Time elapsed: 0.004 sec <<< ERROR! >>> org.apache.commons.jxpath.JXPathNotFoundException: No value for xpath: >>> /nosuch >>> at >>> org.apache.commons.jxpath.ri.model.NodePointer.verify(NodePointer.java:937) >>> at >>> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:374) >>> at >>> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:315) >>> at >>> org.apache.commons.jxpath.ri.model.dynabeans.LazyDynaBeanTest.testLazyProperty(LazyDynaBeanTest.java:34) >>> >>> Gary >>> >>> >>> On Fri, Sep 13, 2013 at 5:28 PM, Gary Gregory <[email protected]>wrote: >>> >>>> On Fri, Sep 13, 2013 at 4:27 PM, sebb <[email protected]> wrote: >>>> >>>>> On 13 September 2013 19:06, Gary Gregory <[email protected]> wrote: >>>>>> Hello David, >>>>>> >>>>>> Can you test with the 1.4-SNAPSHOT code from trunk? (You'll have to >>>>> check >>>>>> it out and build it). >>>>> >>>>> The method JXPathContextReferenceImpl.getNodePointerFactories() is not >>>>> synchronized in trunk either, and the static field is not volatile. >>>>> Furthermore, the method returns the array without copying it, so >>>>> callers can change entries in it. >>>>> >>>>> Also the field is created with a lock on the class, but is set to null >>>>> with a lock on the static feld nodeFactories. >>>>> And of course read with no lock at all. >>>>> >>>>> Not good; safe publication requires that reader and writer lock the >>>>> same object. And writers must use the same object for mutual >>>>> exclusion. >>>>> >>>>> The code is extremely fragile. >>>>> >>>>>> In trunk, NodePointer.java:80) is: >>>>>> >>>>>> pointer = new NullPointer(name, locale); >>>>>> >>>>>> which can't throw an NPE. >>>>> >>>>> 1.3 has the following code: >>>>> >>>>> NodePointerFactory[] factories = >>>>> JXPathContextReferenceImpl.getNodePointerFactories(); >>>>> for (int i = 0; i < factories.length; i++) { // <= line 80 >>>>> >>>>> The for loop is at line 86 in trunk. >>>>> >>>>>> I have not looked at this code in a while, now that multi-core CPUs are >>>>>> common place I am not surprised to see issues like this. >>>>>> >>>>>> I am not even sure why the statics in JXPathContext are lazy loaded (at >>>>>> least they are volatile). It would simplify the code to just init the >>>>>> statics in-line. >>>>> >>>>> Mutable static fields are generally very bad for thread-safety. >>>> >>>> I was not clear: The JXPathContext statics are only writing to by the >>>> getters for lazy-init. Why not init them in the decl and make them final? >>>> >>>> Gary >>>> >>>>> >>>>>> Thank you, >>>>>> Gary >>>>>> >>>>>> >>>>>> On Thu, Sep 12, 2013 at 10:11 PM, David Ferry <[email protected]> >>>>> wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> We're using Apache JXPath 1.3. We have multi-threaded code running >>>>>>> JXPathContext.newContext >>>>>>> >>>>>>> We're having an occasional NullPointerException coming out of >>>>>>> NodePointer.newNodePointer >>>>>>> >>>>>>> We've had a look at the code for this class, and wonder if >>>>>>> getNodePointerFactories is not synchronising correctly. >>>>>>> >>>>>>> Other operations that read or write the attribute nodeFactoryArray ... >>>>>>> synchronize on nodeFactories. >>>>>>> >>>>>>> But in getNodePointerFactories() ... it just returns the variable >>>>> without >>>>>>> locking. >>>>>>> This makes us think that there is no happens-before in the >>>>>>> getNodePointerFactories() method. >>>>>>> >>>>>>> I've put a snippet of the stack trace below. >>>>>>> >>>>>>> Apologies if this has come up before, I didn't manage to find it >>>>> after a >>>>>>> while searching. >>>>>>> >>>>>>> Regards, >>>>>>> -David >>>>>>> >>>>>>> java.lang.NullPointerException >>>>>>> at >>>>> org.apache.commons.jxpath.ri.model.NodePointer.newNodePointer(NodePointer.java:80) >>>>>>> at >>>>> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.<init>(JXPathContextReferenceImpl.java:193) >>>>>>> at >>>>> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.<init>(JXPathContextReferenceImpl.java:167) >>>>>>> at >>>>> org.apache.commons.jxpath.ri.JXPathContextFactoryReferenceImpl.newContext(JXPathContextFactoryReferenceImpl.java:39) >>>>>>> at >>>>> org.apache.commons.jxpath.JXPathContext.newContext(JXPathContext.java:416) >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> E-Mail: [email protected] | [email protected] >>>>>> Java Persistence with Hibernate, Second Edition< >>>>> http://www.manning.com/bauer3/> >>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>>> Blog: http://garygregory.wordpress.com >>>>>> Home: http://garygregory.com/ >>>>>> Tweet! http://twitter.com/GaryGregory >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [email protected] >>>>> For additional commands, e-mail: [email protected] >>>> >>>> >>>> -- >>>> E-Mail: [email protected] | [email protected] >>>> Java Persistence with Hibernate, Second >>>> Edition<http://www.manning.com/bauer3/> >>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>> Spring Batch in Action <http://www.manning.com/templier/> >>>> >>>> Blog: http://garygregory.wordpress.com >>>> Home: http://garygregory.com/ >>>> Tweet! http://twitter.com/GaryGregory >>> >>> >>> >>> -- >>> E-Mail: [email protected] | [email protected] >>> Java Persistence with Hibernate, Second >>> Edition<http://www.manning.com/bauer3/> >>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>> Spring Batch in Action <http://www.manning.com/templier/> >>> Blog: http://garygregory.wordpress.com >>> Home: http://garygregory.com/ >>> Tweet! http://twitter.com/GaryGregory >> >> >> >> -- >> E-Mail: [email protected] | [email protected] >> Java Persistence with Hibernate, Second >> Edition<http://www.manning.com/bauer3/> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >> Spring Batch in Action <http://www.manning.com/templier/> >> Blog: http://garygregory.wordpress.com >> Home: http://garygregory.com/ >> Tweet! http://twitter.com/GaryGregory > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
