Hey Chris-

Thanks for taking the first pass in to the generator code. 

This got me thinking— Can we make a JDK and tools break to decouple the 
complexity that comes with dropping annogen AND trying to maintain JDK 8 
support?

We leveled ActiveMQ v6.x to JDK 17— keeping JDK 8 (language) support is two JDK 
LTS jumps back, and going to be increasingly difficult to maintain language AND 
tooling+dependency support going forward. Not to mention, being able to 
leverage JDK 17 text blocks might be super handy =)


Riffing here..

1. Create an activemq-openwire-jdk8 module (generate and ‘leave’ the classes 
and test code there — like you mentioned)

2. Modernize open wire-generator away from gram/groovy/annogen as needed, 
leverage text blocks where we can (license, headers, etc), and perhaps 
something like JavaPoet for java class generation.

Thoughts?

-Matt Pavlovich

> On Dec 5, 2023, at 6:44 AM, Christopher Shannon 
> <christopher.l.shan...@gmail.com> wrote:
> 
> I started looking at the Openwire generator issues and the biggest problem
> is the use of a super ancient library for things like javadoc parsing which
> no longer works on JDK 11+ https://github.com/codehaus/annogen
> 
> The entire doclet API was changed so we would need to update the openwire
> generator to replace that library which would require a substantial rewrite
> or we would need to fix that library. Based on what I am seeing I think
> fixing the Openwire generator code might be a longer term task depending on
> how bad the changes are.
> 
> The generator should still work with JDK 8 so if it's going to take a long
> time to fix we may need to generate a new Openwire version in an older 5.x
> branch using JDK 8 and then just copy the generated code to the new
> versions.
> 
> On Mon, Dec 4, 2023 at 1:51 PM Matt Pavlovich <mattr...@gmail.com> wrote:
> 
>> Hi Chris-
>> 
>> My comments in-line below. For the most part, I agree in full. Any of the
>> work that we can break up into minor or patch releases would be good from
>> the standpoint of getting some runtime of all the changes under our belt
>> before rolling out the major breaking change parts.
>> 
>>> On Dec 4, 2023, at 6:57 AM, Christopher Shannon <
>> christopher.l.shan...@gmail.com> wrote:
>>> 
>>> We can have a roadmap and targets for things but the main thing I'm
>> pushing
>>> back on is having firm dates as there is a lot of unknown. There is a lot
>>> of work left to do and it will take time to get things correct. We don't
>>> want to have a rushed/bad implementation that is buggy.
>> 
>> Agreed. I think getting the three other JMS 2.0 impl features are fairly
>> straight-forward, and getting those out would allow them to bake-in a bit
>> while we sort out Shared Durable Topic Subscription (SDTS) support.
>> 
>>> For one thing, if we are going to add support for shared subscriptions
>> and
>>> shared durables we need an actual design to implement it as there's more
>>> than one way it could be done.
>>> 
>>> One approach I have been thinking about is the following and some of the
>>> things off the top of my head that need to be done. There's probably a
>> lot
>>> more I'm not thinking of that would come up as working on it.
>>> 
>>>  1. New openwire version that supports new commands for a shared topic
>>>  consumer and shared durable consumer. We need to fix the openwire
>> generator
>>>  first and also fix the CVE in it for generated code.
>> 
>> Agree. We need to clean-up openwire generator (and probably re-home
>> kahadb-proto) for JDK, modernization and just ease of maintenance.
>> 
>>>  2. Client changes to support the new commands and properly creating
>>>  consumers
>> 
>> Yep.
>> 
>>>  3. Some way to map the shared subscriptions. As previously discussed,
>>>  since shared subs can be implemented with queues, we can leverage the
>> fact
>>>  that the broker already supports Virtual topics and composite
>> destinations.
>>>  I think a good approach would be to have a new VT namespace that is
>>>  dedicated just to shared subscriptions. When a user creates a shared
>> sub
>>>  with the new command we can then behind the scenes in the broker
>> generate a
>>>  virtual topic that maps to the new shared sub name and virtual topic
>> queue
>>>  using the namespace. Since it is a special namespace then on recovery
>> we
>>>  could detect the virtual topic is a shared subscription and recover
>> things
>>>  correctly.
>> 
>> The subName+clientId may be stored in the ‘id’ field of the Virtual Topic—
>> similar to how it’s done with the optional MQTT mapping. But yeah, a full
>> deep-dive and analysis is warranted.
>> 
>>>  4. We probably need to make some enhancements to virtual topic support.
>>>  It may work out of the box bu I'm not sure. The good news is we
>> shouldn't
>>>  need any other special stuff in KahaDB or elsewhere in the code if we
>> can
>>>  just re-use Virtual topics.
>> 
>> Yep, also— standardizing some of the Virtual Destination behaviors would
>> be good. For example, Composite Queue/Topic doesn’t support the transaction
>> fan-out when the ack mode is non-transacted.
>> 
>>>  5. All of the rules in the spec need to be validated
>>>  which will take work to get right. There are a lot of rules to enforce
>> with
>>>  the API that we will need to check broker side which is non trivial.
>> For
>>>  example, "A shared durable subscription and an unshared durable
>>>  subscription may not have the same name and client identifier (if
>> set). If
>>>  an unshared durable subscription already exists with the same name and
>>>  client identifier (if set) then a JMSRuntimeException is thrown."
>> 
>> Also— network consumers always throw topics for a curve.
>> 
>>>  6. We need to decide if other protocols will map as well...are we
>>>  supporting MQTT/AMQP/STOMP ? If so, how are they going to map shared
>> subs?
>> 
>> 
>>>  7. We probably need new metrics/monitoring of things.
>> 
>> Yes. +1
>> 
>>>  8. We of course will need a lot of testing to verify all the new
>>>  behavior works which will be a good amount of work.
>> 
>> Yep.
>> 
>> Thanks,
>> Matt
>> 
>> 
>>> On Mon, Dec 4, 2023 at 7:23 AM Jean-Baptiste Onofré <j...@nanthrax.net>
>> wrote:
>>> 
>>>> Ok. But in that case, can we target SMX 7 with full JMS 2 support ?
>>>> 
>>>> I think it’s important to have a kind of roadmap.
>>>> 
>>>> So let’s use 6.x for incremental work and 7 when complete (without
>> strong
>>>> commitment on date).
>>>> 
>>>> Regards
>>>> JB
>>>> 
>>>> Le lun. 4 déc. 2023 à 13:18, Christopher Shannon <
>>>> christopher.l.shan...@gmail.com> a écrit :
>>>> 
>>>>> I don't see how we can release shared subscription support for 6.1.0 at
>>>>> this point. We haven't even come up with a plan of how we are going to
>>>>> implement it. There's multiple ways it could be done and probably
>>>> requires
>>>>> protocol changes. We have to decide how much work is done by the broker
>>>> and
>>>>> where.
>>>>> 
>>>>> On Mon, Dec 4, 2023 at 2:18 AM Jean-Baptiste Onofré <j...@nanthrax.net>
>>>>> wrote:
>>>>> 
>>>>>> I think it would better to complete JMS 2 in 6.1.0 including shared
>>>> topic
>>>>>> subscriptions.
>>>>>> We already did 6.0.x with partial JMS 2 support, which is so so from
>>>> user
>>>>>> perspective.
>>>>>> 
>>>>>> I would prefer to wait few weeks for 6.1.0 to give us time to complete
>>>>> JMS
>>>>>> 2.
>>>>>> 
>>>>>> Regards
>>>>>> JB
>>>>>> 
>>>>>> Le lun. 4 déc. 2023 à 07:52, Matt Pavlovich <mattr...@gmail.com> a
>>>>> écrit :
>>>>>> 
>>>>>>> Hey JB --
>>>>>>> 
>>>>>>> These JMS 2.0 features are planned for v6.1.0:
>>>>>>> 
>>>>>>> AMQ-8464 PR #1046 6.1.0, 5.18.x  JMSConsumer .receiveBody(Class)
>>>>> methods
>>>>>>> AMQ-8320 PR #982   6.1.0, 5.18.x  Delivery Delay Support for Message
>>>>>>> DeliveryDelay feature
>>>>>>> AMQ-8324 PR #1045 6.1.0, 5.18.x  JMSProducer features Completion
>>>>> Listener
>>>>>>> async send support
>>>>>>> 
>>>>>>> This would just leave Shared Topic Subscriptions, which is currently
>>>>>>> planned for v6.2.0.
>>>>>>> 
>>>>>>> AMQ-8323  6.2.0, 5.18.x  Shared Topic Consumer Multi-consumer
>>>>>> (queue-like)
>>>>>>> consuming from topic subscriptions
>>>>>>> 
>>>>>>> Reference:
>>>>>>> https://activemq.apache.org/jms2
>>>>>>> 
>>>>>>> I think this would work well, since we have Virtual Topic support
>>>>> (which
>>>>>>> is better anyway).
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Matt
>>>>>>> 
>>>>>>> 
>>>>>>>> On Dec 2, 2023, at 11:00 PM, Jean-Baptiste Onofré <j...@nanthrax.net
>>>>> 
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Hi
>>>>>>>> 
>>>>>>>> I think it's really important to focus on JMS 2 complete impl for
>>>>>> 6.1.0.
>>>>>>>> That's the most important.
>>>>>>>> 
>>>>>>>> I started to work on some impl, a couple are a little longer to
>>>> impl,
>>>>>>>> require tests etc.
>>>>>>>> I don't think early January is reasonable. I would rather try at
>>>> the
>>>>>>>> end of January.
>>>>>>>> 
>>>>>>>> I would rather:
>>>>>>>> 1. Focus on 6.0.2 for fixes (I'm preparing 5.18.x/5.17.x too as
>>>> they
>>>>>>>> include fixes as well)
>>>>>>>> 2. Focus on 6.1.0 to complete JMS 2.x support. That's probably the
>>>>>>>> most important (honestly, I'm not a big fan of JMS 2.x support in
>>>>>>>> ActiveMQ 6.0.x, it could be confusing for users).
>>>>>>>> 
>>>>>>>> Regards
>>>>>>>> JB
>>>>>>>> 
>>>>>>>> On Sat, Dec 2, 2023 at 4:10 PM Matt Pavlovich <mattr...@gmail.com>
>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> All-
>>>>>>>>> 
>>>>>>>>> I’ve started organizing some JIRAs for v6.1.0. I’m thinking
>>>>>>> early-January for release target timeframe.
>>>>>>>>> 
>>>>>>>>> - Additional JMS 2.0 impls
>>>>>>>>> - New features for observability
>>>>>>>>> - Code base modernization
>>>>>>>>> 
>>>>>>>>> Thanks!
>>>>>>>>> Matt Pavlovich
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>> 
>> 

Reply via email to