Files
elink-test-master/src/main/java/com/eactive/testmaster/config/HazelcastJSBridge.java
T
2024-12-30 19:01:12 +09:00

79 lines
2.7 KiB
Java

package com.eactive.testmaster.config;
import static javax.script.ScriptContext.GLOBAL_SCOPE;
import com.hazelcast.collection.IQueue;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.scheduledexecutor.IScheduledExecutorService;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.SimpleBindings;
import org.apache.commons.lang3.function.TriFunction;
import org.springframework.stereotype.Service;
@Service
public class HazelcastJSBridge {
private final HazelcastInstance hazelcastInstance;
private final IScheduledExecutorService scheduledExecutor;
public HazelcastJSBridge(HazelcastInstance hazelcastInstance) {
this.hazelcastInstance = hazelcastInstance;
this.scheduledExecutor = hazelcastInstance.getScheduledExecutorService("delayed-queue-executor");
}
/**
* Creates bindings for Hazelcast operations that can be used in JavaScript
*/
public Bindings createHazelcastBindings() {
Bindings bindings = new SimpleBindings();
bindings.put("tmOfferToQueue", (java.util.function.BiFunction<String, Object, Boolean>)
(queueName, item) -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
return queue.offer(item);
});
bindings.put("tmPollFromQueue", (java.util.function.Function<String, Object>)
queueName -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
return queue.poll();
});
bindings.put("tmScheduleToQueue", (TriFunction<String, Object, Integer, Boolean>)
(queueName, item, delaySeconds) -> {
try {
scheduledExecutor.schedule(
() -> {
IQueue<Object> queue = hazelcastInstance.getQueue(queueName);
queue.offer(item);
},
delaySeconds,
TimeUnit.SECONDS
);
return true;
} catch (Exception e) {
return false;
}
});
// Utility operations
bindings.put("tmGetDistributedObjects",
(java.util.function.Supplier<Collection<?>>)
() -> hazelcastInstance.getDistributedObjects());
return bindings;
}
/**
* Enhances the JavaScript engine with Hazelcast capabilities
*/
public void enhanceEngine(ScriptEngine engine) {
engine.setBindings(createHazelcastBindings(), GLOBAL_SCOPE);
}
}