[ 
https://issues.apache.org/jira/browse/OPENJPA-304?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kevin Sutter closed OPENJPA-304.
--------------------------------


> Problems with DepthFirstAnalysis and the IBM JDK
> ------------------------------------------------
>
>                 Key: OPENJPA-304
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-304
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: lib
>    Affects Versions: 0.9.7
>            Reporter: Kevin Sutter
>            Assignee: Kevin Sutter
>             Fix For: 1.0.0
>
>
> TestDepthFirstAnalysis was reporting two errors when running with the IBM 
> JDK.  The testcase ran just fine with the Sun JDK.  The error conditions were 
> NPE's in testBackEdges and testForwardEdges:
> testBackEdges(org.apache.openjpa.lib.graph.TestDepthFirstAnalysis)  Time 
> elapsed: 0 sec  <<< ERROR!
> java.lang.NullPointerException
>         at 
> org.apache.openjpa.lib.graph.DepthFirstAnalysis.visit(DepthFirstAnalysis.java:97)
>         at 
> org.apache.openjpa.lib.graph.DepthFirstAnalysis.<init>(DepthFirstAnalysis.java:74)
>         at org.apache.openjpa.lib.graph.TestDepthFirstAnalysis.setUpGraph2 
> (TestDepthFirstAnalysis.java:78)
>         at 
> org.apache.openjpa.lib.graph.TestDepthFirstAnalysis.testBackEdges(TestDepthFirstAnalysis.java:105)
>         :
> testForwardEdges(org.apache.openjpa.lib.graph.TestDepthFirstAnalysis)  Time 
> elapsed: 0 sec  <<< ERROR!
> java.lang.NullPointerException
>         at 
> org.apache.openjpa.lib.graph.DepthFirstAnalysis.visit(DepthFirstAnalysis.java:97)
>         at 
> org.apache.openjpa.lib.graph.DepthFirstAnalysis.<init>(DepthFirstAnalysis.java
>  :74)
>         at 
> org.apache.openjpa.lib.graph.TestDepthFirstAnalysis.setUpGraph2(TestDepthFirstAnalysis.java:78)
>         at 
> org.apache.openjpa.lib.graph.TestDepthFirstAnalysis.testForwardEdges(TestDepthFirstAnalysis.java
>  :129)
>         :
> Some debugging with the IBM JDK turned up a couple of problems:
> 1)  The code in DepthFirstAnalysis.java and Edges.java was using == for 
> equality testing instead of .equals().  It turns out that the IBM JDK has an 
> optimization when using Integer instances as keys to HashMaps and new copies 
> of the keys are created (vs using the input key objects directly).  Thus, the 
> == check was not sufficient to do the comparison testing.
> 2)  After performing those updates, there was yet another problem with the 
> order of the entries returned by the iterator() of the HashMap.  By 
> definition, the
> order is not guaranteed with a HashMap implementation.  In these particular 
> failing testcases, the Sun JDK was starting with node 2 via the Iterator, 
> while the IBM JDK was starting with node 5.  By changing the declaration of 
> this Graph._nodes structure to use a LinkedHashMap (instead of HashMap), we 
> can
> reliably determine the order of the iterator.  And, now both the Sun and IBM 
> JDK's produce the same results.
> Thanks,
> Kevin

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to