camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fernando Racca (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAMEL-3277) Threading issue which lets converter loading abort
Date Sun, 22 May 2011 17:03:47 GMT

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

Fernando Racca commented on CAMEL-3277:
---------------------------------------

Managed to reproduce this issue with Camel 2.7.0

A simple HTTP request followed by an XPath expression in a bean.


public class PricesParser {

    public static void main(String args[]) throws Exception {
        // create CamelContext
        CamelContext context = new DefaultCamelContext();

        // add our route to the CamelContext
        context.addRoutes(new RouteBuilder() {
            public void configure() {

        from("http://url").bean(new MyBean()).to("file:target/prices");

        // start the route and let it do its work
        context.start();
        Thread.sleep(3000);

        // stop the CamelContext
        context.stop();
}

public static class MyBean {
	public String parse(@XPath("//div[@id='prices']") String prices)  {
		return prices;
	}
}

However, all converters seem to have loaded:

.........


[                          main] AnnotationTypeConverterLoader  INFO  Found 4 packages with
15 @Converter classes to load
[                          main] DefaultTypeConverter           INFO  Loaded 157 type converters
in 0.515 seconds

main] DefaultCamelContext            INFO  Route: route1 started and consuming from: Endpoint[http://url]
[                          main] DefaultCamelContext            INFO  Total 1 routes, of which
1 is started.
[                          main] DefaultCamelContext            INFO  Apache Camel 2.7.0 (CamelContext:
camel-1) started in 1.914 seconds
[url] route1                         INFO  before
[                          main] DefaultCamelContext            INFO  Apache Camel 2.7.0 (CamelContext:camel-1)
is shutting down
[                          main] DefaultShutdownStrategy        INFO  Starting to graceful
shutdown 1 routes (timeout 300 seconds)
[                          main] DefaultExecutorServiceStrategy DEBUG Created new single thread
pool for source: org.apache.camel.impl.DefaultShutdownStrategy@64c5e2cf with name: ShutdownTask.
-> java.util.concurrent.Executors$FinalizableDelegatedExecutorService@95d0a50
[el-1) thread #1 - ShutdownTask] DefaultShutdownStrategy        DEBUG There are 1 routes to
shutdown
[el-1) thread #1 - ShutdownTask] DefaultShutdownStrategy        DEBUG Suspend complete for:
Consumer[http://url]
[el-1) thread #1 - ShutdownTask] DefaultShutdownStrategy        INFO  Route: route1 suspended
and shutdown deferred, was consuming from: Endpoint[http://url]


Unit tests that don't read from that http url seem to work fine.

Should i open a new jira for this?

> Threading issue which lets converter loading abort
> --------------------------------------------------
>
>                 Key: CAMEL-3277
>                 URL: https://issues.apache.org/jira/browse/CAMEL-3277
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.4.0
>         Environment: SMX 4
>            Reporter: Lars Heinemann
>            Assignee: Claus Ibsen
>             Fix For: 2.6.0
>
>         Attachments: patch.diff
>
>
> The type converter loading is not threadsafe and fails sometimes. That will end up with
around 17 type converters loaded only which will probably let your camel routes fail with
conversion errors like:
> {noformat}
> 07:04:31,112 | ERROR | qtp25205731-2783 | DefaultErrorHandler | rg.apache.camel.processor.Logger
248 | 68 - org.apache.camel.camel-core - 2.4.0.fuse-00-00 | Failed delivery for exchangeId:
53e23457-5551-4487-9fc4-87dd33687f0b. Exhausted after delivery attempt: 1 caught: java.lang.ClassCastException:
org.apache.camel.converter.stream.InputStreamCache cannot be cast to org.w3c.dom.Node
> java.lang.ClassCastException: org.apache.camel.converter.stream.InputStreamCache cannot
be cast to org.w3c.dom.Node
> at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:116)[:1.6.0_17]
> at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:98)[:1.6.0_17]
> at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:180)[:1.6.0_17]
> at org.apache.camel.builder.xml.XPathBuilder.doInEvaluateAs(XPathBuilder.java:598)[68:org.apache.camel.camel-core:2.4.0.fuse-00-00]
> at org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:570)[68:org.apache.camel.camel-core:2.4.0.fuse-00-00]
> at org.apache.camel.builder.xml.XPathBuilder.matches(XPathBuilder.java:122)[68:org.apache.camel.camel-core:2.4.0.fuse-00-00]
> {noformat}
> Tracking the issue down showed that several type converter loaders share the same registry
object and fail to load all converters every once a while. That can be fixed by making the
load method synchronized...see attached patch.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message