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