[AMQ-9485] Host activemq-protobuf modules for modernization
I'm not really sure I understand the benefit of pulling all of this back into the main repository. The code for generating protobuf should not change often and the protobuf classes themselves should not change often so it seems like a good candidate to be left as a separately maintained repository and only updated and released as needed and just used as a dependency.
I think the benefits are that it is versioned as the same with the broker. It is used to generate classes for KahaDB, so building utilities for working with KahaDB stores are wonky to follow-- v1.1 of activemq-protobuf for ActiveMQ 5.x and 6.x. Then when there is a change is it v1.2 or 2.0 for ActiveMQ 7.x, etc.
Also, when there are some minor changes (like I have tee'd up for compiler deprecation WARNs, etc) it is one less thing to vote on and go through all the release iterations when they can simply be rolled into the next ActiveMQ Classic release.
edit: Thirdly, there are a bunch of duplicated classes for things like Buffers, Input/OutputStream. All these classes would benefit from modernization -- try-with-resources, etc. There are several groups of these used activemq-client/hawtbuf, etc that are all candidates for a simplified activemq-model module (in 7.x) that covers data-related models and structures.
I don't think that there's any problem having different versions, we have a ton of dependencies, there's no reason we need to have the same version match.
It's also not a huge deal to go through the release process. I agree with you that if this was something that changed every release that would be fine, but it's not. This is the first time I can even remember needing to make changes to this project in my 10 years being around. If there are a bunch of duplicated classes we can just fix it up in the exist repo and main classic base to de-duplicate and modernize.
So I don't really think this is necessary, it's like the OpenWire generator now being separate. I view this code in the same way that it should not change often so I don't see a need to bring it into the main project because it's something that should almost never change.
@jbonofre - What do you think?
If we do bring this into the main project then maybe we should bring Openwire as well, it would just be nice to be consistent. I view this project in much the same was as the new Openwire generator where it's not going to change often but it's tied to the broker so I think we should either bring them both in or keep them both separate.
Originally, the reason to have this "outside" for the broker repo is to have a sharable artifact with its own release cycle. If the purpose here is to "align" the broker with protobuf module, it makes sense.
I think we should check on the dev mailing list if we don't have other "consumers" of protobuf.