[jboss-jira] [JBoss JIRA] Commented: (JGRP-1066) Introduce dependencies for @Property annotations
Richard Achmatowicz (JIRA)
jira-events at lists.jboss.org
Wed Sep 30 12:19:02 EDT 2009
[ https://jira.jboss.org/jira/browse/JGRP-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12487926#action_12487926 ]
Richard Achmatowicz commented on JGRP-1066:
-------------------------------------------
The modifications are in:
- Property.java (change to convert method signature)
- PropertyConverters.java (adding new PropertyConverter for InitialHosts)
- Configurator (adding in depenency processing method computePropertyDependencies which takes a Protocol and creates and ordered list of @Property annotated Field and Methods, ordered in such a way as to be consistent with depenencies specified. The ProrocolConfiguration.createLayer() went from this:
removeDeprecatedProperties(retval, properties);
resolveAndAssignFields(retval, properties) ;
resolveAndInvokeMethods(retval, properties)
to this:
removeDeprecatedProperties(retval, properties); // before processing Field and Method based properties, take dependencies specified with @Property.dependsUpon into account
AccessibleObject[] dependencyOrderedFieldsAndMethods = computePropertyDependencies(retval) ;
for(AccessibleObject ordered: dependencyOrderedFieldsAndMethods) {
if (ordered instanceof Field) {
resolveAndAssignField(retval, (Field)ordered, properties) ;
}
else if (ordered instanceof Method) {
resolveAndInvokePropertyMethod(retval, (Method)ordered, properties) ; }
}
I've left the processing of ConfigurableObjects without depenency processing, but the same lines of code can be used to implement it there too.
> Introduce dependencies for @Property annotations
> ------------------------------------------------
>
> Key: JGRP-1066
> URL: https://jira.jboss.org/jira/browse/JGRP-1066
> Project: JGroups
> Issue Type: Feature Request
> Affects Versions: 2.8
> Reporter: Richard Achmatowicz
> Assignee: Richard Achmatowicz
> Priority: Minor
> Fix For: 2.8
>
>
> When processing properties annotated by @Property in protocols, there is a need to reference one property when processing anoither; an example is that the setting of initial_hosts requires a list of host[port] entries, as well as a port_range value. Usually, this sort of property processing requirement forced delaying the processing of initial_hosts in the init() phase, after protocol property processing had completed.
> We introduce a dependency mechanism for @Property annotations:
> 1. @Properties have a name - it can either be explicitly specified in the annotation
> @Property(name=X)
> int i = 0 ;
> or it can default to the variable name of a Field
> @Property(desc=...)
> int Y = 0 ;
> ir it can default to the method name without the prefix set.
> @Property(desc=...)
> void setZ(int i)
> 2. You can specify a dependency on one or more properties (fields or methods) in the same protocol by specifying a comma separated list of @Property names in a dependsUpon attribte:
> @Property(name="X", desc=..., dependsUpon="Y,Z")
> int i = 0 ;
> This ensures that properties Y and Z will be processed by their converters (default or specified) before property X is processed.
> 3. Which leads to the main reason for introducing dependscies: in this way, the converter for property X may refer to the converters for property Y and Z in its processing.
> public static class InitialHosts implements PropertyConverter{
> public Object convert(Protocol protocol, Class<?> propertyFieldType, Properties props, String propertyValue) throws Exception {
> int port_range = getPortRange(protocol) ;
> List<IpAddress> addresses = Util.parseCommaDelimitedHosts(propertyValue, port_range) ; return addresses ;
> }
> private int getPortRange(Protocol protocol) {
> int port_range = 0 ; try {
> Field f = protocol.getClass().getDeclaredField("port_range") ;
> port_range = ((Integer) Configurator.getField(f,protocol)).intValue() ;
> }
> catch(NoSuchFieldException e) { System.out.println("InitialHosts: no such field: port_range");
> }
> return port_range ;
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list