-
Bug
-
Resolution: Fixed
-
P2
-
9
-
b169
-
generic
-
generic
-
Verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8180237 | 10 | Jan Lahoda | P2 | Resolved | Fixed | b08 |
When using something like Oracle Coherence to perform "remote lambda" execution with JShell, we hit an error where by Coherence can't introspect the remote lambda, possibly because it's "synthetically created"?
(Java HotSpot(TM) 64-Bit Server VM (build 9-ea+162, mixed mode)
eg:
jshell> people.computeIfPresent("Brian", (k, v) -> "Oliver");
| java.lang.IllegalStateException thrown: ClassFile for the remote
lambda could not be introspected.
jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getResource
<mailto:jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getresource>
<mailto:jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getresource>(REPL/$JShell$22.class)
unexpectedly returned null
| at RemotableSupport.createRemoteConstructor
(RemotableSupport.java:82)
| at Lambdas.ensureRemotable (Lambdas.java:205)
| at RemoteConstructor.<init> (RemoteConstructor.java:66)
| at RemotableSupport.createRemoteConstructor
(RemotableSupport.java:93)
| at Lambdas.ensureRemotable (Lambdas.java:205)
| at ExternalizableHelper.replace (ExternalizableHelper.java:4813)
| at ExternalizableHelper.serializeInternal
(ExternalizableHelper.java:2799)
| at ExternalizableHelper.toBinary (ExternalizableHelper.java:283)
| at PartitionedCache$ConverterValueToBinary.convert
(PartitionedCache.CDB:3)
| at PartitionedCache$ViewMap.toBinary (PartitionedCache.CDB:17)
| at PartitionedCache$ViewMap.invoke (PartitionedCache.CDB:31)
| at SafeNamedCache.invoke$Router (SafeNamedCache.CDB:1)
| at SafeNamedCache.invoke (SafeNamedCache.CDB:5)
| at NearCache.invoke (NearCache.java:465)
| at InvocableMap.computeIfPresent (InvocableMap.java:268)
| at SessionNamedCache.computeIfPresent
(SessionNamedCache.java:445)
| at (#11:1)
Here's the steps to reproduce:
Here's steps to reproduce.
1. Grab a copy of the most recent Coherence 12.2.1-2-0 release jar.
2. In a new terminal, start a Coherence Server using the jar (just one
server will do)
java -Djava.net.preferIPv4Stack=true -Dcoherence.localhost=127.0.0.1
-jar coherence-12.2.1-2-0.jar
3. In another terminal, start JShell
jshell -R-Djava.net.preferIPv4Stack=true
-R-Dcoherence.localhost=127.0.0.1 --class-path coherence-12.2.1-2-0.jar
4. Issue the following requests in JShell.
import com.tangosol.net
import com.tangosol.util.*;
Session session = Session.create();
NamedCache<String, String> people = session.getCache("people");
people.put("Brian", "Oliver");
people.get("Brian");
people.size();
people.clear();
people.size();
people.put("Brian", "Oliver");
people.put("Robert", "Field");
people.put("Mark", "Reinhold");
people.put("Brian", "Goetz");
people.forEach((k, v) -> System.out.println(v));
people.computeIfPresent("Brian", (k, v) -> "Oliver");
(Java HotSpot(TM) 64-Bit Server VM (build 9-ea+162, mixed mode)
eg:
jshell> people.computeIfPresent("Brian", (k, v) -> "Oliver");
| java.lang.IllegalStateException thrown: ClassFile for the remote
lambda could not be introspected.
jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getResource
<mailto:jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getresource>
<mailto:jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@91161c7.getresource>(REPL/$JShell$22.class)
unexpectedly returned null
| at RemotableSupport.createRemoteConstructor
(RemotableSupport.java:82)
| at Lambdas.ensureRemotable (Lambdas.java:205)
| at RemoteConstructor.<init> (RemoteConstructor.java:66)
| at RemotableSupport.createRemoteConstructor
(RemotableSupport.java:93)
| at Lambdas.ensureRemotable (Lambdas.java:205)
| at ExternalizableHelper.replace (ExternalizableHelper.java:4813)
| at ExternalizableHelper.serializeInternal
(ExternalizableHelper.java:2799)
| at ExternalizableHelper.toBinary (ExternalizableHelper.java:283)
| at PartitionedCache$ConverterValueToBinary.convert
(PartitionedCache.CDB:3)
| at PartitionedCache$ViewMap.toBinary (PartitionedCache.CDB:17)
| at PartitionedCache$ViewMap.invoke (PartitionedCache.CDB:31)
| at SafeNamedCache.invoke$Router (SafeNamedCache.CDB:1)
| at SafeNamedCache.invoke (SafeNamedCache.CDB:5)
| at NearCache.invoke (NearCache.java:465)
| at InvocableMap.computeIfPresent (InvocableMap.java:268)
| at SessionNamedCache.computeIfPresent
(SessionNamedCache.java:445)
| at (#11:1)
Here's the steps to reproduce:
Here's steps to reproduce.
1. Grab a copy of the most recent Coherence 12.2.1-2-0 release jar.
2. In a new terminal, start a Coherence Server using the jar (just one
server will do)
java -Djava.net.preferIPv4Stack=true -Dcoherence.localhost=127.0.0.1
-jar coherence-12.2.1-2-0.jar
3. In another terminal, start JShell
jshell -R-Djava.net.preferIPv4Stack=true
-R-Dcoherence.localhost=127.0.0.1 --class-path coherence-12.2.1-2-0.jar
4. Issue the following requests in JShell.
import com.tangosol.net
import com.tangosol.util.*;
Session session = Session.create();
NamedCache<String, String> people = session.getCache("people");
people.put("Brian", "Oliver");
people.get("Brian");
people.size();
people.clear();
people.size();
people.put("Brian", "Oliver");
people.put("Robert", "Field");
people.put("Mark", "Reinhold");
people.put("Brian", "Goetz");
people.forEach((k, v) -> System.out.println(v));
people.computeIfPresent("Brian", (k, v) -> "Oliver");
- backported by
-
JDK-8180237 JShell: fails to provide bytecode for dynamically created lambdas
-
- Resolved
-