-
Bug
-
Resolution: Cannot Reproduce
-
Major
-
None
-
None
-
None
When a Camel route defined in Blueprint XML has an error handler defined, and the error handler is a bean held in the registry, then when the Camel route is shut down the error cannot be invoked, and an error message is shown.
A route that will show this problem is as follows:
<camel:camelContext errorHandlerRef="myErrorHandler" streamCache="true" trace="false"> ... <camel:errorHandler id="myErrorHandler" type="DefaultErrorHandler"> <camel:redeliveryPolicy maximumRedeliveries="3" redeliveryDelay="10000" retryAttemptedLogLevel="WARN" /> </camel:errorHandler>
where myErrorHandler is a registered bean.
The exception shown is:
2014-10-02 16:47:25,344 | WARN | loy-integrations | faultManagementLifecycleStrategy | 164 - org.apache.camel.camel-core - 2.12.0.redhat-610387 | Could not unregister error handler: org.apache.camel.management.mbean.ManagedErrorHandler@1751967 as ErrorHandler MBean.
org.apache.camel.NoSuchBeanException: No bean could be found in the registry for: myErrorHandler of type: org.apache.camel.builder.ErrorHandlerBuilder
at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:151)
at org.apache.camel.impl.DefaultRouteContext.mandatoryLookup(DefaultRouteContext.java:144)
at org.apache.camel.builder.ErrorHandlerBuilderRef.lookupErrorHandlerBuilder(ErrorHandlerBuilderRef.java:125)
at org.apache.camel.management.DefaultManagementNamingStrategy.getObjectNameForErrorHandler(DefaultManagementNamingStrategy.java:154)
at org.apache.camel.management.ManagedManagementStrategy.getManagedObjectName(ManagedManagementStrategy.java:104)
at org.apache.camel.management.ManagedManagementStrategy.unmanageObject(ManagedManagementStrategy.java:143)
at org.apache.camel.management.DefaultManagementLifecycleStrategy.unmanageObject(DefaultManagementLifecycleStrategy.java:823)
at org.apache.camel.management.DefaultManagementLifecycleStrategy.onErrorHandlerRemove(DefaultManagementLifecycleStrategy.java:622)
It seems that the CamelContext is shut down too late, after the bean registry has already been shut down.