I forgot to say I think we should go through the second option I listed and
that is a proper deprecation and removal cycle to give users notice the old
API will go away the next major version.

On Mon, Nov 25, 2024 at 3:01 PM Christopher Shannon <
christopher.l.shan...@gmail.com> wrote:

> I don't think the first two options are a good idea:
>
> 1) What you are calling deprecation is not actually deprecation as that is
> a breaking change. Deprecated features are meant to mean no longer
> recommended and may go away but shouldn't just fail with an exception.
> Throwing an exception is worse than just deleting it entirely because now
> you don't get an error until runtime instead of compile time.
> 2) Changing the existing behavior is also not great because it changes
> what users are expecting at runtime without a good indication you are doing
> so. Users are going to expect that something like that works a certain way
> and you've just changed it.
>
> So based on that I think there are 2 options that make sense:
>
> 1) Option 3 that you listed - We could just keep them both with the
> different interfaces/behavior going forward. However, this only really only
> makes sense to me if both interfaces are useful in different ways with
> different use cases but I'm not sure they are and could be confusing as you
> pointed out.
> 2) We could temporarily support both and go through a proper deprecation
> cycle and removal. In this case we would mark AyncCallback as deprecated
> but still support it with the current behavior, and then for the next major
> version (7.x) it would be removed entirely. When deprecating we can point
> users to the new API to use and explain the differences and recommend they
> migrate. This would give users a notice that it is going away and time to
> switch over to CompletionListener before it's gone. That means in version
> 6.x we'd end up supporting both until it was removed.
>
> On Mon, Nov 25, 2024 at 1:26 PM Ken Liao <kenlia...@gmail.com> wrote:
>
>> Hey dev community,
>>
>> Would like to get your opinion on this. To make ActiveMQ Classic fully
>> support JMS 2.0/Jakarta Messaging 3.1, it needs to support
>> CompletionListener interface for specifying callback once the asynchronous
>> send is completed. Currently, ActiveMQ Classic has its own public
>> interface
>> AsyncCallback for client applications to specify the callback. However,
>> the
>> behaviour of AsyncCallback is not JMS 2.0 compliant and it is specific to
>> ActiveMQ.
>>
>>  In my opinion, it will be a confusing experience for users because there
>> are two mechanisms for specifying callbacks and I wonder if there are any
>> advantages of using AsyncCallback over CompletionListener. Either:
>> 1. Deprecate AsyncCallback (throw exception) at the release where we
>> support CompletionListener.
>> 2. Change AsyncCallback behaviour to align with CompletionListener at that
>> release.
>> 3. Keep supporting these two different interfaces/behavior going forward.
>>
>> Personally I am advocating for 2 but would like to hear what the community
>> thinks and check if I am missing something.
>>
>> Thanks,
>> Ken
>>
>

Reply via email to