[ 
https://issues.apache.org/jira/browse/CAMEL-10829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15889783#comment-15889783
 ] 

Claus Ibsen commented on CAMEL-10829:
-------------------------------------

We should deprecate those script langauges like php, python, ruby etc and only 
support javascript from the JDK itself with nashhorn

> [jruby] Issue with multithreading and finalize()
> ------------------------------------------------
>
>                 Key: CAMEL-10829
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10829
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-script
>    Affects Versions: 2.18.2
>            Reporter: Paolo Antinori
>
> There is a rare to hit issue with {{camel-script}} component and {{jruby}}.
> {{camel-script}} passes through this method chain to create a {{jruby}} 
> {{ScriptEngine}}:
> https://github.com/apache/camel/blob/master/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java#L267-L269
> {code:java}
>     public static boolean supportScriptLanguage(String language) {
>         return createScriptEngine(language, true) != null;
> }
> {code}
> *The problem with that code is that it creates a Script Engine instance, but 
> it doesn't keep a reference to that  object.*
> JRuby gives a specialized behavior to {{finalize()}} method of its runtime:
> https://github.com/jruby/jruby/blob/jruby-1_7/core/src/main/java/org/jruby/embed/ScriptingContainer.java#L1907-L1929
> The combination of the 2 conditions is able to cause situation where the 
> {{gc()}} thread, reaps JRuby instances, triggering their clean up methods:
> https://github.com/jruby/jruby/blob/jruby-1_7/core/src/main/java/org/jruby/embed/ScriptingContainer.java#L1907-L1929t
> before Camel has really finished using it.
> This behavior can be noticed in 
> https://github.com/apache/camel/blob/master/components/camel-script/src/test/java/org/apache/camel/builder/script/JRubySingletonTest.java
>  failing every now and then. Event more frequent when we tried to upgrade to 
> jruby 1.7.26: 
> https://issues.apache.org/jira/browse/CAMEL-10477
> {code}
> "main@1" prio=5 tid=0x1 nid=NA runnable
>   java.lang.Thread.State: RUNNABLE
>         at 
> org.apache.camel.builder.script.ScriptBuilder.tryCreateScriptEngine(ScriptBuilder.java:359)
>         at 
> org.apache.camel.builder.script.ScriptBuilder.createScriptEngine(ScriptBuilder.java:336)
>         at 
> org.apache.camel.builder.script.ScriptBuilder.supportScriptLanguage(ScriptBuilder.java:268)
>         at 
> org.apache.camel.builder.script.ScriptLanguageResolver.resolveLanguage(ScriptLanguageResolver.java:30)
>         at 
> org.apache.camel.builder.script.RubyLanguage.createExpression(RubyLanguage.java:38)
>         at 
> org.apache.camel.component.language.LanguageEndpoint.createProducer(LanguageEndpoint.java:96)
>         at 
> org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:439)
>         - locked <0x1806> (a org.apache.camel.impl.ProducerCache)
>         at 
> org.apache.camel.impl.ProducerCache.acquireProducer(ProducerCache.java:160)
>         at 
> org.apache.camel.processor.SendProcessor.doStart(SendProcessor.java:243)
> {code}
> Now, I honestly don't know if this should be fixed on Camel side (and reason 
> if the scripting API needs to be changed for other runtimes too), or  this 
> should be handled on JRuby one.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to