You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Fernando Racca (JIRA)" <ji...@apache.org> on 2011/05/22 19:03:47 UTC
[jira] [Commented] (CAMEL-3277) Threading issue which lets
converter loading abort
[ 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