There are unforeseen consequences to making Avro an optional dependency.
By doing that, I must make the SerializerProvider build process lazy or tolerant at
Runtime if Avro is not here.
The problem with this approach is that if a user forgets to add Avro as a dependency, his
system will fail the first time a message ought to be (de)serialized *at runtime* as
opposed to fail at configuration time.
I was thinking of asking the backend if it needs a SerializationProvider and behave
accordingly but it's not enough. On the receiving end, ie JMS or JGroups master, we do
retrieve the index manager from the message (based on the index name) and then find the
appropriate SerializationProvider. In this case the underlying backend does not need a
SerializationProvider. It forces us to introduce an explicit flag to be set y the user to
know whether or not the SerializationProvider is required
I find that quite error prone and am inclined to think that leaving Avro a required
dependency is the less of two evils.
What do you think?
do you have an alternative approach that would work around the problem?