Nifi ExecuteGroovyScript-已在另一个类加载器中加载的类 [英] Nifi ExecuteGroovyScript - class already loaded in another classloader

查看:327
本文介绍了Nifi ExecuteGroovyScript-已在另一个类加载器中加载的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到了带有ExecuteGroovyScript处理器的流文件,其中包含一些自定义代码. 效果很好:

I get a flowfile with ExecuteGroovyScript processor with some custom code in it. and it work well :

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

but if I stop it and change the code in i get this error:

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) 在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 在java.lang.Runtime.loadLibrary0(Runtime.java:870) 在java.lang.System.loadLibrary(System.java:1122) 在fr.cnam.p7.pseudo.jni.PseudoJNI.(PseudoJNI.java:6) 在java.lang.Class.forName0(本地方法) 在java.lang.Class.forName(Class.java:348) 在org.codehaus.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.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:65) 在org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:162) 在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) 在Scriptffffffffc26c8c01.run(Scriptffffffffc26c8c01.groovy:26) 在org.apache.nifi.processors.groovyx.ExecuteGroovyScript.onTrigger(ExecuteGroovyScript.java:438) 在org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) 在org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1122) 在org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147) 在org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) 在org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run(TimerDrivenSchedulingAgent.java:128) 在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)

java.lang.UnsatisfiedLinkError: Native Library /data/nifi_flow/dec-enr/pseudo/lib/libpseudojni.so already loaded in another classloader: java.lang.UnsatisfiedLinkError: Native Library /data/nifi_flow/dec-enr/pseudo/lib/libpseudojni.so already loaded in another classloader java.lang.UnsatisfiedLinkError: Native Library /data/nifi_flow/dec-enr/pseudo/lib/libpseudojni.so already loaded in another classloader at 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 fr.cnam.p7.pseudo.jni.PseudoJNI.(PseudoJNI.java:6) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:68) at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:65) at java.security.AccessController.doPrivileged(Native Method) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:65) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:162) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) at Scriptffffffffc26c8c01.run(Scriptffffffffc26c8c01.groovy:26) at org.apache.nifi.processors.groovyx.ExecuteGroovyScript.onTrigger(ExecuteGroovyScript.java:438) at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1122) at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147) at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:128) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

重新启动nifi后,处理器将恢复正常并再次正常工作.

After restarting nifi the processor is back to normal and work well again.

推荐答案

根据stacktrace

according to the stacktrace

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)尝试加载本机库

the class (PseudoJNI) you are loading from script tries to load native library

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

each time you change the groovy script or other parameters the new classloader used because @Grab or added classpath could be used for your script.

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

calling System.loadLibrary() from the second classloader triggers an error. you could try to put the library that contains PseudoJNI class into nifi/lib directory.

这篇关于Nifi ExecuteGroovyScript-已在另一个类加载器中加载的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆