<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I am attempting to get Janino 2.6.1 working with Logback 0.9.28 (or later, but that's the version we are using in Eclipse Virgo right now) - see [0] for background. Unfortunately Janino ends up using the thread context class loader as its "parent" class loader and fails with a runtime exception. I have discussed this ([1]) on the Janino mailing list and it seems that it is necessary to set the parent class loader in Janino. I am somewhat at the mercy of Logback here.</div><div><br></div><div>The surprising thing is that the code in Logback 0.9.24 looked pretty usable in this respect. JaninoEventEvaluator.start had the following sequence:</div><div><br>    ClassLoader cl = context.getClass().getClassLoader();<br>    ee = new ExpressionEvaluator(getDecoratedExpression(), EXPRESSION_TYPE,<br>        getParameterNames(), getParameterTypes(), THROWN_EXCEPTIONS, cl);<br><br>thus setting the parent class loader to a value which I could ensure would be capable of loading the necessary types.<br><br>In 0.9.28 this code has been replaced by:<br><br>    scriptEvaluator = new ScriptEvaluator(getDecoratedExpression(), EXPRESSION_TYPE,<br>    getParameterNames(), getParameterTypes(), THROWN_EXCEPTIONS);<br><br>which causes the current TCCL to be used as the parent class loader and ultimately results in Janino failing.</div><div><br></div><div>I can't control the TCCL that happens to be in use when start is called as that is driven out of a logging call which can come from an arbitrary thread.</div><div><br></div><div>I found the relevant commit ([2]), but I can't tell from that why this specific change was made.</div><div><br></div><div>If it is absolutely necessary to use ScriptEvaluator rather than ExpressionEvaluator, the following code sequence (based on a suggestion from Arno Unkrig) would reproduce the parent class loader behaviour of 0.9.24:</div><div><br></div><div> ClassLoader cl = context.getClass().getClassLoader();<br> scriptEvaluator = new ScriptEvaluator();<br> scriptEvaluator.setParentClassLoader(cl);</div><div> scriptEvaluator.setReturnType(EXPRESSION_TYPE);</div><div> scriptEvaluator.setParameterNames(getParameterNames());</div><div> scriptEvaluator.setParameterTypes(getParameterTypes());</div><div> scriptEvaluator.setThrownExceptions(THROWN_EXCEPTIONS);</div><div> scriptEvaluator.cook(getDecoratedExpression());</div><div><br></div><div>The alternative of using ExpressionEvaluator is much neater and seems to be close to the ScriptEvaluator variant since ExpressionEvaluator extends ScriptEvaluator.</div><div><br></div><div>Any suggestions gratefully received.</div><br><div apple-content-edited="true">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><font class="Apple-style-span" color="#010101">Regards,<br>Glyn</font></div></span></div></span></div></span>[0] <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333920">https://bugs.eclipse.org/bugs/show_bug.cgi?id=333920</a><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">[1] mailing list archive link currently broken - if I can get a link to it, I'll post this later</div>[2] <a href="https://github.com/ceki/logback/commit/06a5b692f14560636bd92d7bd7cf1f85830f4e55#diff-4">https://github.com/ceki/logback/commit/06a5b692f14560636bd92d7bd7cf1f85830f4e55#diff-4</a></div>
</div>
<br></body></html>