Add thread safe wrapper for Invocable

This commit is contained in:
P0nk
2021-05-20 21:00:48 +02:00
parent 3cda07db52
commit 2ce6041ef8
2 changed files with 44 additions and 0 deletions

View File

@@ -41,6 +41,11 @@
<artifactId>yamlbeans</artifactId>
<version>1.15</version>
</dependency>
<dependency>
<groupId>net.jcip</groupId>
<artifactId>jcip-annotations</artifactId>
<version>1.0</version>
</dependency>
<!-- Logging -->
<dependency>

View File

@@ -0,0 +1,39 @@
package scripting;
import net.jcip.annotations.ThreadSafe;
import javax.script.Invocable;
import javax.script.ScriptException;
/**
* Thread safe wrapper around Invocable.
* Thread safety is achieved by synchronizing all methods.
*/
@ThreadSafe
public class SynchronizedInvocable implements Invocable {
private final Invocable invocable;
public SynchronizedInvocable(Invocable invocable) {
this.invocable = invocable;
}
@Override
public synchronized Object invokeMethod(Object thiz, String name, Object... args) throws ScriptException, NoSuchMethodException {
return invocable.invokeMethod(thiz, name, args);
}
@Override
public synchronized Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException {
return invocable.invokeFunction(name, args);
}
@Override
public synchronized <T> T getInterface(Class<T> clasz) {
return invocable.getInterface(clasz);
}
@Override
public synchronized <T> T getInterface(Object thiz, Class<T> clasz) {
return invocable.getInterface(thiz, clasz);
}
}