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]
