You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi. I was trying Quasar and was wondering why the examples are not working if I use Groovy and FiberAsync. Here is a slightly modified example code taken from FiberAsyncTest.java but complied with Groovy in QuasarFiberAsyncTest.groovy. The behavior should be identical with the Java compiled version. But it either throws a TimeoutException or never returns from a fiber.join().
/*
* Quasar: lightweight threads and actors for the JVM.
* Copyright (c) 2013-2014, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 3.0
* as published by the Free Software Foundation.
*/
package com.anrisoftware.dwarfhustle.graph.janus.internal;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.junit.jupiter.api.Test;
import co.paralleluniverse.fibers.Fiber;
import co.paralleluniverse.fibers.FiberAsync;
import co.paralleluniverse.fibers.FiberForkJoinScheduler;
import co.paralleluniverse.fibers.SuspendExecution;
import co.paralleluniverse.strands.SuspendableRunnable;
/**
*
* @author pron
*/
public class QuasarFiberAsyncTest {
interface MyCallback {
void call(String str);
void fail(RuntimeException e);
}
interface Service {
void registerCallback(MyCallback callback);
}
static abstract class MyFiberAsync extends FiberAsync<String, RuntimeException> implements MyCallback {
private final Fiber fiber;
public MyFiberAsync() {
this.fiber = Fiber.currentFiber();
}
@Override
public void call(String str) {
super.asyncCompleted(str);
}
@Override
public void fail(RuntimeException e) {
super.asyncFailed(e);
}
}
static String callService(final Service service) throws SuspendExecution, InterruptedException {
println "callService"
return new MyFiberAsync() {
@Override
protected void requestAsync() {
println "requestAsync"
service.registerCallback(this);
}
}.run();
}
@Test
public void testSyncCallback() throws Exception {
FiberForkJoinScheduler scheduler = new FiberForkJoinScheduler("test", 4, null, false);
final Service syncService = new Service() {
@Override
public void registerCallback(MyCallback callback) {
callback.call("sync result!");
}
};
final Fiber fiber = new Fiber(scheduler) {
@Override
protected Object run() throws SuspendExecution, InterruptedException {
String res = callService(syncService);
System.out.println(res);
return res;
}
}.start();
// never returns
// fiber.join();
// throws TimeoutException
fiber.join(1, TimeUnit.SECONDS);
}
}
Console output:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/home/erwin/.m2/repository/org/codehaus/groovy/groovy/2.5.7/groovy-2.5.7.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
QUASAR WARNING: Assertions enabled. This may harm performance.
callService
requestAsync
callService
As you can see, callService is two times in the output. In the Java version the output is:
JRE Oracle Corporation/12.0.1 is not supported, advanced source lookup disabled.
QUASAR WARNING: Assertions enabled. This may harm performance.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access using Lookup on co.paralleluniverse.concurrent.util.ThreadAccess (file:/home/erwin/.m2/repository/co/paralleluniverse/quasar-core/0.8.0/quasar-core-0.8.0.jar) to class java.lang.Thread
WARNING: Please consider reporting this to the maintainers of co.paralleluniverse.concurrent.util.ThreadAccess
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
callService
requestAsync
sync result!
The text was updated successfully, but these errors were encountered:
Update: if I use Groovy groovy.transform.CompileStatic annotation then FiberAsync works like the Java version. It's an Ok workaround, but would be nice if Quasar could support dynamic Groovy.
Hi. I was trying Quasar and was wondering why the examples are not working if I use Groovy and FiberAsync. Here is a slightly modified example code taken from
FiberAsyncTest.java
but complied with Groovy inQuasarFiberAsyncTest.groovy
. The behavior should be identical with the Java compiled version. But it either throws a TimeoutException or never returns from afiber.join()
.Quasar: 0.8.0
Groovy: 2.5.7
Usage:
-ea -javaagent:${QUASAR_CORE_AGENT_JAR}
Console output:
As you can see, callService is two times in the output. In the Java version the output is:
The text was updated successfully, but these errors were encountered: