import javax.script.*;
import java.util.Map;

public class Test {
   public static void main(String[] args) throws Exception {
       ScriptEngineManager m = new ScriptEngineManager();
       ScriptEngine scriptEngine = m.getEngineByName("nashorn");

       Bindings engineBindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE);
       scriptEngine.eval("function func(x) { print('I am func ' + x); }");

       // print stuff exposed in engineBindings
       for (Map.Entry<?,?> entry : engineBindings.entrySet()) {
           System.out.println(entry.getKey());
           System.out.println(entry.getValue());
       }

       Bindings localBindings = scriptEngine.createBindings();
       // copy all exposed from other bindings
       localBindings.putAll(engineBindings);
       // put additional variable
       localBindings.put("event", new Object());
       scriptEngine.setBindings(localBindings, ScriptContext.ENGINE_SCOPE);

       scriptEngine.eval("func(event)");
   }
}
