Netflix Nicobar поставляется с Groovy-компилятором и простым загрузчиком классов. В примере, представленном на Github, показано, как загрузить скрипты Groovy во время выполнения. В моем проекте у нас есть требование загружать файлы jar из разных подразделений во время выполнения, не создавая один жирный jar. Никобар, казалось, идеально подходил для моего требования. Но я не могу заставить Nicobar работать для загрузки файлов байт-кода.
Может кто-нибудь предложить, пожалуйста, как я могу это сделать.
я использую класс ниже для плагина байт-кода
public static final String BYTECODE_PLUGIN_CLASS = "com.netflix.nicobar.core.plugin.BytecodeLoadingPlugin";
ScriptModuleLoader moduleLoader1 = new ScriptModuleLoader.Builder()
.addPluginSpec(new ScriptCompilerPluginSpec.Builder("bytecode")
.addRuntimeResource(ExampleResourceLocator.getbyteCodePluginLocation()).build())
.addListener(new BaseScriptModuleListener() { // add an example listener for module updates
public void moduleUpdated(ScriptModule newScriptModule, ScriptModule oldScriptModule) {
System.out.printf("Received module update event. newModule: %s, oldModule: %s%n", newScriptModule, oldScriptModule);
}
})
.build();
269 [ArchiveRepositoryPoller-PollerThread] ОШИБКА com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller - Исключительная ситуация при попытке извлечь архивы для ID модуля: [HelloWorld]
java.lang.NullPointerException
в java.util.AbstractCollection.containsAll (AbstractCollection.java:317)
в java.util.Collections $ UnmodifiableCollection.containsAll (Collections.java:1062)
в com.netflix.nicobar.core.module.GraphUtils.swapVertices (GraphUtils.java:54)
в com.netflix.nicobar.core.module.ScriptModuleLoader.updateScriptArchives (ScriptModuleLoader.java:228)
в com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller.pollRepository (ArchiveRepositoryPoller.java:200)
в com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller $ 2.run (ArchiveRepositoryPoller.java:133)
в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511)
в java.util.concurrent.FutureTask.runAndReset (FutureTask.java:308)
в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java:180)
в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:294)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
at java.lang.Thread.run (Thread.java:748)