[
https://issues.apache.org/jira/browse/QPID-8045?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lorenz Quack updated QPID-8045:
-------------------------------
Attachment: QPID-8045_contextVars_WIP.tar.gz
This is an old attempt of mine at refactoring the context variables. The patch
has not been updated in a while.
General approach I took:
* Declare a getter method on the interface and annotate it.
* The annotation carries the default value, the name, and a description.
* Annotation processing then auto-generates a subclass with a variable for the
materialized value (the type can be deduced from the getter's return type), the
implementation of the getter, and a postResolve to materialize the context
variable.
* all code should be using the getter and not refer to the materialized value
directly nor use {{getContextValue()}}. This is why I chose to annotate getter
methods rather than the default value.
Some problems I encountered with the above approach and which have not been
addressed yet in the patch:
* The developer written implementation (as opposed to the auto generated one)
needs to have a stub for the method or be declare abstract.
* Since the materialization happens in the auto-generated subclasses the
dev-written implementations are not fully functional. This is mainly a problem
for testing. The tests would have to subclass the tests in question and mock
the getters for the context variables.
> [Broker-J] Refactor context variables
> -------------------------------------
>
> Key: QPID-8045
> URL: https://issues.apache.org/jira/browse/QPID-8045
> Project: Qpid
> Issue Type: Improvement
> Components: Broker-J
> Reporter: Lorenz Quack
> Attachments: QPID-8045_contextVars_WIP.tar.gz
>
>
> Context variables are heavily used in Qpid Broker-J.
> Over the years their implementation and use has grown organically.
> Maybe it is time they are refactored.
> Some reasons for considering a refactor:
> * boilerplate: Currently a context variable requires quite a lot of
> boilerplate code. A variable for the name and the {{\@ManagedContextDefault}}
> annotated default value, a {{\@DerivedAttribute}} annotated getter for the
> materialized value, a variable to hold the materialized value, the code to
> materialize the context variable.
> * inconsistency: Some context variables are materialized others aren't
> (i.e., change takes effect after restart vs immediately). The point of
> materialization is inconsistent (popular choices being {{onOpen}} and
> {{postResolve}}). Some expose the materialized value through a
> {{\@DerivedAttribute}} others do not. The names of the context variables are
> sometimes directly on the scattered around {{\@ManagedContextDefault}}
> sometimes on a separate variable.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]