Ok guys,
Let’s do it again. I didn’t say we have to forbid the mutability I said we have at least
to explicitly write that it’s mutable and seriously think of having it immutable for event
fired asynchronously.
(Pete) I don’t think it’s specified. As objects are, by default in
Java, mutable, I would assume that payloads are implicitly mutable.
Sorry @Pete I don’t agree with your point. Yes, in Java object are mutable but firing an
event is not a standard Java feature : you send your object to a black box and let this
box dispatch your object to listeners transforming one call to multiple call : it’s far
from standard Java rules. Even if it’s not written it’s an observer pattern and there are
people out there thinking that introducing mutability in observer is an anti-pattern since
some listener will receive a different payload than the one that was sent to them.
It’s like making a method call and having no guarantee that the parameter received in the
callee has the same value that in the caller...
I won’t start discussion on bad practice or anti pattern as I also use mutability in
event but there as much reason for user to assume their payload will be mutable than the
other way around.
I can assure you that when I give a talk on CDI, this payload mutability is often a
surprise for attendees...
(Romain) why isn't it portable?
So yes @Romain it’s not portable (in theory of course, since both implementations support
mutability). Someone could write a CDI implementation with event payload immutability
without any issue with the spec and TCK.
Most of you are so dependent of this feature that you only reacted to the idea or
forbidding it (which wasn’t the content of my mail) ;). So we all agree that it’s an
important feature. Therefore what’s the issue to specify this mutability and add TCK test
for it ?
Now I don’t deal with that subject for nothing, we are planning to introduce Async events.
I think that it’ll bring extra complexity if we support mutability in async events. And
even if I’m wrong and we finally go for mutability in async events, this will lead to
possible side effect (lock) that could have impact on perf, so it should be explicitly
written IMO.
Antoine