[jboss-jira] [JBoss JIRA] (WFLY-1364) Numerical properties of @DataSourceDefinition not correctly processed.

Stuart Douglas (JIRA) jira-events at lists.jboss.org
Sun May 19 20:16:07 EDT 2013


     [ https://issues.jboss.org/browse/WFLY-1364?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stuart Douglas reassigned WFLY-1364:
------------------------------------

    Assignee: Stuart Douglas  (was: David Lloyd)

    
> Numerical properties of @DataSourceDefinition not correctly processed.
> ----------------------------------------------------------------------
>
>                 Key: WFLY-1364
>                 URL: https://issues.jboss.org/browse/WFLY-1364
>             Project: WildFly
>          Issue Type: Bug
>          Components: EE
>            Reporter: arjan tijms
>            Assignee: Stuart Douglas
>
> When using the {{<data-source>}} element in e.g. {{web.xml}} or {{application.xml}}, numerical properties (such as {{<port-number>}}) are not processed correctly.
> With many data sources, e.g. the one from the Postgres JDBC driver, those properties are not set at all.
> The problem seems to be with {{org.jboss.as.connector.deployers.datasource.DirectDataSourceInjectionSource}}. In the method {{populateProperties}} those values are passed as an {{Integer}}:
> {code}
> setProperty(
>     deploymentReflectionIndex, dataSourceClass, properties, 
>     PORT_NUMBER_PROP, Integer.valueOf(portNumber)
> );
> {code}
> The type of this value is subsequently used to locate a setter method for the corresponding property from the data source:
> {code}
> // [...]
> String methodName = builder.toString();
> Class<?> paramType = value.getClass();
> MethodIdentifier methodIdentifier = MethodIdentifier.getIdentifier(void.class, methodName, paramType);
> Method setterMethod = ClassReflectionIndexUtil.findMethod(deploymentReflectionIndex, dataSourceClass, methodIdentifier);
> if (setterMethod != null) {
>     properties.put(name, value.toString());
> }
> {code}
> The problem is that many data source implementations have a setter that takes a primitive int, and not an {{Integer}}. There will thus be no setter method found that takes an {{Integer}}. This code will then skip the property.
> Down the line, when it's time to actually set the properties on the data source instance the code is written in such a way that the int/Integer distinction wouldn't matter anymore:
> XAManagedConnectionFactory#createXaDataSource
> {code}
> Method getter = clazz.getMethod("get" + name, noClasses);
> type = getter.getReturnType();
> // [...]
> Method setter = clazz.getMethod("set" + name, new Class<?>[]{type});
> PropertyEditor editor = PropertyEditorManager.findEditor(type);
> // [..]
> editor.setAsText(value);
> setter.invoke(xads, new Object[]{editor.getValue()});
> {code}
> However, at that point the numerical properties have already been removed from the properties collection because of the failing test shown above.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list