当前位置: 代码迷 >> java >> Nifi ExecuteGroovyScript-已在另一个类加载器中加载的类
  详细解决方案

Nifi ExecuteGroovyScript-已在另一个类加载器中加载的类

热度:68   发布时间:2023-07-25 19:05:25.0

我得到了带有ExecuteGroovyScript处理器的流文件,其中包含一些自定义代码。 它运作良好:

但是如果我停止它并更改代码,则会出现此错误:

java.lang.UnsatisfiedLinkError:本机库/data/nifi_flow/dec-enr/pseudo/lib/libpseudojni.so已加载到另一个类加载器中:java.lang.UnsatisfiedLinkError:本机库/ data / nifi_flow / dec-enr / pseudo / lib /libpseudojni.so已在另一个类加载器java.lang.UnsatisfiedLinkError中加载:本机库/data/nifi_flow/dec-enr/pseudo/lib/libpseudojni.so已在另一个类加载器中java.lang.ClassLoader.loadLibrary0(ClassLoader.java 1907)at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)at java.lang.Runtime.loadLibrary0(Runtime.java:870)at java.lang.System.loadLibrary(System.java:1122)at .cnam.p7.pseudo.jni.PseudoJNI。(PseudoJNI.java:6),位于org.codehaus的java.lang.Class.forName0(本机方法),位于java.lang.Class.forName(Class.java:348)。 groovy.runtime.callsite.CallSiteArray $ 1.run(CallSiteArray.java:68)在org.codehaus.groovy.runtime.callsite.CallSiteArray $ 1.run(CallSiteArray.java:65)在java.security.AccessController.doPrivileged(本机方法) ) 在org.codehaus.groovy.runtime的org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:162)的org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:65) org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java(113)处的org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite)处的.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) .java:117)位于org.apache.nifi.processors.groovyx.ExecuteGroovyScript.onTrigger(ExecuteGroovyScript.java:438)处Scriptffffffffc26c8c01.run(Scriptffffffffc26c8c01.groovy:26)处。 org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1122)的org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147)的AbstractProcessor.java:27) .nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTa sk.java:47),位于org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run(TimerDrivenSchedulingAgent.java:128),位于java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)

重新启动nifi后,处理器将恢复正常并可以正常工作。

根据堆栈跟踪

at java.lang.System.loadLibrary(System.java:1122) 
at fr.cnam.p7.pseudo.jni.PseudoJNI.(PseudoJNI.java:6) 
at Scriptffffffffc26c8c01.run(Scriptffffffffc26c8c01.groovy:26)

您从脚本加载的类(PseudoJNI)尝试加载本机库

每次更改groovy脚本或其他参数时,都会使用新的类加载器,因为@Grab或添加的类路径可用于您的脚本。

从第二个类加载器调用System.loadLibrary()会触发错误。 您可以尝试将包含PseudoJNI类的库放入nifi / lib目录。