Java Addon V8
The integration of V8 into Java is achieved via the Java Native Interface (JNI). V8 is a C++ based engine; therefore, a bridge layer is required to translate Java objects into C++ structures that V8 can manipulate, and vice versa.
Created by the Eclipse Foundation, J2V8 is the most mature, pure-V8 solution. It wraps Google’s V8 via JNI and provides a relatively low-level, but powerful, API.
Pros:
Cons:
// Initialize V8 instance
V8 v8 = V8.createV8Runtime();
// Execute simple script
int result = v8.executeIntegerScript("const x = 10; const y = 20; x + y;");
System.out.println("Result: " + result); // Output: 30
// Bridge Java objects to JS
V8Object javaObject = new V8Object(v8);
javaObject.add("name", "Report Generator");
v8.add("javaContext", javaObject);
// Execute JS interacting with Java object
String output = v8.executeStringScript("javaContext.name + ' Complete';");
System.out.println(output); // Output: Report Generator Complete
// Critical: Release resources
javaObject.release();
v8.release();
The real power comes when you expose Java logic to JavaScript. You can register Java methods that JavaScript can call. Java Addon V8
v8.registerJavaMethod(new V8JavaCallback() @Override public Object invoke(V8Object receiver, V8Array parameters) String name = parameters.getString(0); return "Welcome, " + name; , "greetUser");
String response = v8.executeStringScript("greetUser('Developer');"); System.out.println(response); // Output: Welcome, Developer
This allows you to write "glue code" where JavaScript handles the logic and data manipulation, while Java handles the heavy lifting of system resources, databases, and enterprise integration.
public void registerCallback() runtime.registerJavaMethod((v8Object, v8Array) -> System.out.println("JavaScript called Java method!");// Access parameters if (v8Array.length() > 0) String param = v8Array.getString(0); System.out.println("Parameter: " + param); return "Response from Java"; , "javaCallback"); // Call from JS runtime.executeVoidScript("javaCallback('Hello from JS');");