[ 
https://issues.apache.org/jira/browse/OPENJPA-2442?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13965822#comment-13965822
 ] 

Kevin Sutter commented on OPENJPA-2442:
---------------------------------------

Okay, I couldn't resist...  I tried a quick hack and am making tremendous 
progress.  Since it looked like our ProxyConcurrentMaps interface was a close 
match, I decided to just force the use of that.  Since it extends ProxyMaps and 
it provides the remove(key, value) method, I figured it was a close match.

//        Class<? extends ProxyMaps> mapProxyClassType =
//            ConcurrentMap.class.isAssignableFrom(type) ? 
ProxyConcurrentMaps.class : ProxyMaps.class;
        Class<? extends ProxyMaps> mapProxyClassType = 
ProxyConcurrentMaps.class;  // KWS
        proxyRecognizedMethods(bc, type, mapProxyClassType, ProxyMap.class);

With that change, all of the tests in openjpa-kernel now succeed with Java 8.  
Here's the updated bytecodes for the remove(key, value) method.  They look 
much, much better with a matching before/after methods and proper processing of 
the return boolean value:

  public boolean remove(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Z
    flags: ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
         0: aload_0       
         1: aload_1       
         2: aload_2       
         3: invokestatic  #134                // Method 
org/apache/openjpa/util/ProxyConcurrentMaps.beforeRemove:(Lorg/apache/openjpa/util/ProxyMap;Ljava/lang/Object;Ljava/lang/Object;)Z
         6: istore_3      
         7: aload_0       
         8: aload_1       
         9: aload_2       
        10: invokespecial #136                // Method 
org/apache/openjpa/util/TestProxyManager$CustomMap.remove:(Ljava/lang/Object;Ljava/lang/Object;)Z
        13: istore        4
        15: aload_0       
        16: aload_1       
        17: aload_2       
        18: iload         4
        20: iload_3       
        21: invokestatic  #139                // Method 
org/apache/openjpa/util/ProxyConcurrentMaps.afterRemove:(Lorg/apache/openjpa/util/ProxyMap;Ljava/lang/Object;Ljava/lang/Object;ZZ)Z
        24: ireturn       

I'll do some more testing with this change, but so far it's looking pretty 
good...


> java.lang.VerifyError in TestProxyManager when loading a dynamically created 
> custom proxy class on Oracle Java 8
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2442
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2442
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.4.0
>         Environment: >java -version
> java version "1.8.0-ea"
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b109)
> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b51, mixed mode)
>            Reporter: Rick Curtis
>
> While testing with Java 8 I encountered the following error noted below[1]. 
> I'm opening this JIRA as I want to get all known issues documented.
> [1]
> <openjpa-2.3.0-SNAPSHOT-r422266:1532833M nonfatal general error> 
> org.apache.openjpa.util.GeneralException: 
> org.apache.openjpa.util.java$util$TreeMap$6$proxy
>       at 
> org.apache.openjpa.util.GeneratedClasses.loadBCClass(GeneratedClasses.java:71)
>       at 
> org.apache.openjpa.util.ProxyManagerImpl.getFactoryProxyMap(ProxyManagerImpl.java:407)
>       at 
> org.apache.openjpa.util.ProxyManagerImpl.copyMap(ProxyManagerImpl.java:222)
>       at 
> org.apache.openjpa.util.TestProxyManager.testCopySortedMaps(TestProxyManager.java:421)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:491)
>       at junit.framework.TestCase.runTest(TestCase.java:154)
>       at junit.framework.TestCase.runBare(TestCase.java:127)
>       at junit.framework.TestResult$1.protect(TestResult.java:106)
>       at junit.framework.TestResult.runProtected(TestResult.java:124)
>       at junit.framework.TestResult.run(TestResult.java:109)
>       at junit.framework.TestCase.run(TestCase.java:118)
>       at junit.framework.TestSuite.runTest(TestSuite.java:208)
>       at junit.framework.TestSuite.run(TestSuite.java:203)
>       at 
> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.lang.VerifyError: (class: 
> org/apache/openjpa/util/java$util$TreeMap$6$proxy, method: remove signature: 
> (Ljava/lang/Object;Ljava/lang/Object;)Z) Expecting to find integer on stack
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:339)
>       at 
> org.apache.openjpa.util.GeneratedClasses.loadBCClass(GeneratedClasses.java:67)
>       ... 21 more



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to