openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Sutter (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OPENJPA-2442) java.lang.VerifyError in TestProxyManager when loading a dynamically created custom proxy class on Oracle Java 8
Date Thu, 10 Apr 2014 20:46:20 GMT

    [ 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)

Mime
View raw message