Skip to content

Commit

Permalink
[#8890] Temporary: forcefully bind Java9ClassLoader in System.bootLayer
Browse files Browse the repository at this point in the history
  • Loading branch information
youngjin.kim2 committed Jun 3, 2022
1 parent a9b7793 commit 971b7a8
Showing 1 changed file with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
Expand Down Expand Up @@ -45,6 +47,30 @@ public Java9ClassLoader(String name, URL[] urls, ClassLoader parent, List<String
Objects.requireNonNull(libClass, "libClass");

this.profilerLibClass = new ProfilerLibClass(libClass);

TEMPORARY_bindClassLoaderToBootLayerInOpenJ9(this);
}

/**
* It forcefully executes `System.bootLayer.bindToLoader(classLoader)` in openj9
* @param classLoader classLoader to bind to bootLayer
*/
private void TEMPORARY_bindClassLoaderToBootLayerInOpenJ9(ClassLoader classLoader) {
if (!System.getProperty("java.vm.name").toLowerCase().contains("openj9")) {
return;
}

try {
final ModuleLayer bootLayer = ModuleLayer.boot();

// Invoke ModuleLayer::bindToLoader
final Method bindToLoader = ModuleLayer.class.getDeclaredMethod("bindToLoader", ClassLoader.class);
bindToLoader.setAccessible(true);
bindToLoader.invoke(bootLayer, classLoader);
bindToLoader.setAccessible(false);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
Expand Down

0 comments on commit 971b7a8

Please sign in to comment.