+100 for me

Lovely the reduction in code complexity to favour maintainabiliity: just
well done!

Il giorno dom 5 apr 2020 alle ore 17:28 Justin Bertram <[email protected]>
ha scritto:

> In theory, creating a queue in Artemis is pretty straightforward. If you're
> on a client you can use:
>
>  - org.apache.activemq.artemis.api.core.client.ClientSession
>
> If you're on the broker then you could use:
>
>  - org.apache.activemq.artemis.core.server.ServerSession (e.g. if you're
> creating a queue on behalf of a client)
>  - org.apache.activemq.artemis.core.server.impl.ActiveMQServer (e.g. if
> you're creating a queue for the broker's internal use or for a test)
>
> In Artemis 1.0 there were a handful of methods on each of these classes to
> create queues with different configurations. Here's the breakdown of the
> number of overloaded methods:
>
>  - org.apache.activemq.artemis.api.core.client.ClientSession
>     - createQueue: 6
>     - createSharedQueue: 4
>     - createTemporaryQueue: 2
>  - org.apache.activemq.artemis.core.server.ServerSession
>     - createQueue: 1
>     - createSharedQueue: 1
>  - org.apache.activemq.artemis.core.server.impl.ActiveMQServer
>     - createQueue: 3
>     - createSharedQueue: 1
>     - deployQueue: 1
>     - updateQueue: 0
>
> Here's a breakdown of those same methods in 2.11.0 (i.e. the latest
> release):
>
>  - org.apache.activemq.artemis.api.core.client.ClientSession (over 200%
> increase)
>     - createQueue: 21
>     - createSharedQueue: 6
>     - createTemporaryQueue: 10
>  - org.apache.activemq.artemis.core.server.ServerSession (700% increase)
>     - createQueue: 11
>     - createSharedQueue: 5
>  - org.apache.activemq.artemis.core.server.impl.ActiveMQServer (500%
> increase)
>     - createQueue: 18
>     - createSharedQueue: 4
>     - deployQueue: 2
>     - updateQueue: 6
>
> Almost every time a new queue parameter was added then a collection of
> corresponding overloaded methods were added as well to support the new
> parameter. As the number of parameters in these methods has increased the
> usability has decreased. For example, if you wanted to create a queue with
> all the default parameters but with a custom ring-size then you would have
> to call a createQueue method with *26* parameters.
>
> Furthermore, there are multiple places in the code-base where all the queue
> configuration parameters are encapsulated:
>
>  - org.apache.activemq.artemis.api.core.QueueAttributes
>  - org.apache.activemq.artemis.core.server.QueueConfig
>  - org.apache.activemq.artemis.core.server.QueueConfig.Builder
>  - org.apache.activemq.artemis.core.config.CoreQueueConfiguration
>
> When a new parameter is added then all of these objects need to be updated
> as well.
>
> In short, maintainability here is a bit of a nightmare.
>
> I've sent a PR [1] to address these usability and maintainability issues.
> The PR itself describes the solution(s) so I won't repeat that information
> here.
>
> There's no rush on merging this except that I think it should be merged
> with plenty of time before 3.0 (whenever that will be) so users can migrate
> from the deprecated methods before they are removed completely.
>
>
> Justin
>
> [1] https://github.com/apache/activemq-artemis/pull/3063
>

Reply via email to