Claus Ibsen created CAMEL-10388:

             Summary: Dynamic update predicate/expression at runtime
                 Key: CAMEL-10388
             Project: Camel
          Issue Type: New Feature
          Components: camel-core
            Reporter: Claus Ibsen
             Fix For: Future

When using expression and predicates in your routes, then they are created once 
during startup of Camel.

It may be desirable to allow dynamic updating these at runtime based on a 
configuration parameter change configured from a property placeholder.

For example
<from ...>
    <to uri="{{auditUrl}}"/>

In this example the simple predicate in the filter should be automatic updated 
if the property placeholder value changes.

This requires

1. Properties component to support notification of value changes (SPI hook)
2. Predicate/Expression Factory in camel-core
3. Creating all expression/predicates using the factory
4. Option to turn this feature on (off by default)
5. If the option is on, then the factory creates the expression/predicate with 
a wrapper that hooks into the notification event and listen on changes. If a 
change happens, then expression/predicate is re-created and swapped out with 
the existing.

There should not be a global lock, so the changes happens as-is and they are 
not atomic. So end users should just beware, that if you do multiple property 
changes then depending on concurrency then at any given time some 
predicates/expression may be updated while others are still using old values.

We can optimize so they only update if the property placeholder key is used by 
the expression/predicate.

Notice that endpoints is not supported. For those to updates you would need to 
restart/re-create the route. Or use dynamic-to.

For the consumer we could consider a way for it to allow to auto restart by 
doing a route stop/update/start.

However this is a slipping stope. As having immutable containers and leaving 
updates to be done by a platform is better/safer.

This message was sent by Atlassian JIRA

Reply via email to