Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Clone sample repository and move to the newly cloned directory.
  2. Make sure that JAVA_HOME points at a JDK11 (or later) export JAVA_HOME=/path/to/jdk11.
  3. Open VSCode with VSNetBeans installed.
  4. Go to File | Preferences and In VS Code, go to Preferences | Settings, search for netbeans.jdkhome jdkhome, and set it to to /path/to/jdk11 (or later).
  5. Open Folder with graal-js-jdk11-maven-demo in VSCode.
  6. Remove App.java and AppTest.java originally coming with the sample Maven project.

Development

  1. Into In main/java/com/mycompany/app, add a new file named PolyglotSample.java with the following code:

    Code Block
    languagejava
    titlePolyglotSample.java
    linenumberstrue
    collapsetrue
    package  com.mycompany.app;
    import org.graalvm.polyglot.Context;
    import org.graalvm.polyglot.Source;
    import org.graalvm.polyglot.Value;
    import java.net.URL;
    
    public class PolyglotSample {
        public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException {
            Context ctx = Context.create();
            URL fibUrl = PolyglotSample.class.getResource("fib.js");
            Source fibSrc = Source.newBuilder("js", fibUrl).build();
            Value fib = ctx.eval(fibSrc);
            for (int i = 0; i < 10; i++) {
                Value res = fib.execute(i);
                System.out.println("Polyglot with Graal.JS - fib(" + i + ") = " + res.asInt());
                Thread.sleep(500);
            }
        }
    }  


  2. In terminal or file explorer, create Create the following structure to store the JS source file, so that Java can find it, within the main folder: resources/com/mycompany/app
  3. Inside In this resources/com/mycompany/app folder, create a file named fib.js and paste in the following JS code:

    Code Block
    languagejs
    titlefib.js
    linenumberstrue
    collapsetrue
    (function(n) {
        function fib(x) {
            if (x <= 2) {
                return 1;
            }
            let fibX1 = fib(x - 1);
            let fibX2 = fib(x - 2);
            return fibX1 + fibX2;
        }
     
        let fibN = fib(n);
        print(`JavaScript computed that fib(${n}) is ${fibN}`);
     
        return fibN;
    })


  4. Save all files and invoke action from Command Palette: Java: Compile Workspace
    • this is the action provided by VSNetBeans which builds the project.
    • Project is normally built also when debugger start but it is worth for the 1st time see if maven build passes.

...