I guess the question is, why would different routes split over different
bundles want to write over the same header/property? What's the case here?
Surely it cannot be just to prevent accidents by developers because what
would be their reason to write over that header?

I think it is better to agree on a naming and some sort of other convention
and stick to that because I don't think there is a way to to make a header
immutable. I guess an ugly solution would be to save the header in a map
and give the key name something very unique.

On Tue, Jul 5, 2016 at 10:48 PM, Matt Sicker [via Camel] <
ml-node+s465427n578481...@n5.nabble.com> wrote:

> Please let me know if you think of anything!
>
> On 5 July 2016 at 15:16, Brad Johnson <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=0>> wrote:
>
> > I certainly understand the impulse and think it is spot on but can't
> think
> > of how to do it with headers.  Claim checks might work but they are
> really
> > for reducing overhead of data and not for locking like that but that
> might
> > be a viable solution depending on the exact problem.
> >
> > Thanks Matt, this is going to be stuck in my head now.  I'll probably
> dream
> > of an answer of some sort tonight.
> >
> > Brad
> >
> > On Tue, Jul 5, 2016 at 3:02 PM, Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=1>> wrote:
> >
> > > My use case is basically to help prevent bugs where a header or
> exchange
> > > property gets modified. Some of my routes in question branch out into
> > > several different bundles, and it is difficult to enforce contracts
> that
> > > way amongst several developers with varying levels of Camel expertise.
> > > Similar to how one might use final variables to prevent people from
> > > reassigning them, this could be a final header that prevents people
> from
> > > reusing them for things.
> > >
> > > On 5 July 2016 at 14:22, Brad Johnson <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=2>>
> > > wrote:
> > >
> > > > That's what I figured.  I'd have to look at the Map implementation
> of
> > the
> > > > exchange but as far as I know there isn't a way to make it a write
> once
> > > > only operation.  It's just a map of some sort.  There might be a way
> to
> > > do
> > > > it with transactions but I'm not an expert there.  I generally use
> > > headers
> > > > but in reality should probably be using exchange properties more
> often.
> > > >
> > > >
> > > >
> > >
> >
> http://stackoverflow.com/questions/10330998/passing-values-between-processors-in-apache-camel
> > > >
> > > > Almost any mechanism I can think of off the top of my head could be
> > > > subverted by someone who wanted to or who didn't understand that the
> > > value
> > > > associated with the bean shouldn't be modified.  For example, you
> could
> > > > create a bean that you associate with your header that stores data
> but
> > > also
> > > > returns a UUID.  That UUID could be stored in another header and
> > sometime
> > > > later in the routes you could verify that the bean stored under your
> > key
> > > > returns the same UUID as the header indicates.  But that wouldn't
> stop
> > > > someone from changing the bean stored to the key and it wouldn't
> > prevent
> > > > them from updating the UUID to a new bean they might create.
> > > >
> > > > On Tue, Jul 5, 2016 at 1:49 PM, Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=3>> wrote:
> > > >
> > > > > I'm thinking of an idea to prevent a header from being modified by
> > > other
> > > > > parts of the route. A sort of contract if you will.
> > > > >
> > > > > On 5 July 2016 at 13:01, Brad Johnson <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=4>>
> > > > > wrote:
> > > > >
> > > > > > Is there another part of your process that is specifically
> changing
> > > the
> > > > > > header or are you more concerned about it being consistently
> there
> > > > across
> > > > > > routes?  Nothing will change it automatically if it is your
> header.
> > > I
> > > > > > don't remember the actual implementation but conceptually it is
> > just
> > > a
> > > > > > hastable/map with key/values.  If you set header with some
> specific
> > > key
> > > > > > then nothing else will change it.
> > > > > >
> > > > > > As an example, I use a camel splitter and then set a header with
> > the
> > > > > > splitter index so that I can use it in another route later to
> > > > reassemble
> > > > > > with the resequencer.
> > > > > >
> > > > > > <split>
> > > > > > <simple>${body}</simple>
> > > > > > <setHeader headerName="seqnum">
> > > > > > <simple>exchangeProperty.CamelSplitIndex</simple>
> > > > > > </setHeader>
> > > > > > ...
> > > > > >
> > > > > > The "seqnum" is just a key that I'm defining.  I could obviously
> > call
> > > > it
> > > > > > anything "sequenceNumber" or whatever but when I access it later
> > that
> > > > > > header is available on the exchange. If I explicitly change what
> > the
> > > > map
> > > > > is
> > > > > > storing for "seqnum" then it will be different because I can't
> make
> > > the
> > > > > > header map itself immutable.
> > > > > >
> > > > > >
> > > > > > On Tue, Jul 5, 2016 at 10:33 AM, Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=5>>
> > > wrote:
> > > > > >
> > > > > > > As in once I set the header, nothing can change the header
> during
> > > the
> > > > > > > lifecycle of the message during a route. Same for an exchange
> > > > property.
> > > > > > >
> > > > > > > --
> > > > > > > Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=6>>
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=7>>
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=8>>
> > >
> >
>
>
>
> --
> Matt Sicker <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=5784811&i=9>>
>
>
> ------------------------------
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://camel.465427.n5.nabble.com/Is-it-possible-to-make-a-message-header-or-property-immutable-tp5784800p5784811.html
> To start a new topic under Camel - Users, email
> ml-node+s465427n465428...@n5.nabble.com
> To unsubscribe from Camel - Users, click here
> <http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=465428&code=c291Y2lhbmNlLmVxZGFtLnJhc2h0aUBnbWFpbC5jb218NDY1NDI4fDE1MzI5MTE2NTY=>
> .
> NAML
> <http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>




--
View this message in context: 
http://camel.465427.n5.nabble.com/Is-it-possible-to-make-a-message-header-or-property-immutable-tp5784800p5784812.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to