David, Niklas, thank you for your replies. Reassuring to find that I was roughly on the right track.

David Latorre wrote:

My first question is whether there is actually valid set of properties file entries that would work with the first version of ftpserver.xml (the one
using the http://mina.apache.org/ftpserver/spring/v1 schema)?

I don't know Spring myself but it's my understanding that adding a
factory.getBeanDefinitionNames() to your example above should print
all the bean names which are available. There are only a few of them
(i'd say you cannot see inner beans) so I don't know if this approach
is suitable for you ( Let's wait to Nilklas response but I think that
inner beans are not supported by PropertyOverrideConfigurer, you might
ask in their mailing list )


That's useful - I hadn't spotted that method.

My second question (assuming the answer to the first is 'no'), is how to
reference a bean with a dot in its name from a properties file?

By default, PropertyOverrideConfigurer takes the right part of the
first dot as the bean name (
'ftpserver.connection.maxLogins' would mean that the bean name is 'ftpserver'

You can change the bean Name separator with
PropertyOverrideConfigurer.setBeanNameSeparator(String
beanNameSeparator) so you can do something like this:

poc.setBeanNameSeparator(":");

ftpserver.connection:maxLogins = 5;

I haven't  checked if the  ':' character would be accepted though.



poc.setBeanNameSeparator(String beanNameSeparator) worked as advertised. However, the ':' character did cause problems as it's one of the key-value separators in Java properties, so it must be escaped with a backslash. For that reason I'll probably choose a different separator, but the following worked perfectly:

ftpserver.connection\:maxLogins=5


Incidentally, the following worked when using the custom schema (pointless, unfortunately, because of the other issues you both mentioned):

org.apache.ftpserver.listener.ListenerFactory#0\:serverAddress=4.3.2.1

"org.apache.ftpserver.listener.ListenerFactory#0" came from factory.getBeanDefinitionNames(), and poc.setBeanNameSeparator(String beanNameSeparator) was required again because of the dots in the bean name.



David Latorre wrote:

Yeah it's a same that because of different issues none of them,
PropertyPlaceholder nor PropertyOverriden will work :-S



2009/5/31 Niklas Gustavsson <[email protected]>:
On Sun, May 31, 2009 at 12:06 AM, Niklas Gustavsson
<[email protected]> wrote:
On Fri, May 29, 2009 at 7:17 PM, Roger Marshall
<[email protected]> wrote:
My first question is whether there is actually valid set of properties file entries that would work with the first version of ftpserver.xml (the one
using the http://mina.apache.org/ftpserver/spring/v1 schema)?

We do not currently support property based configuration (I personally
find this a major gap since I'm a big user of property replacement
with Spring). However, there is an issue reported
(https://issues.apache.org/jira/browse/FTPSERVER-282) that we plan on fixing for 1.1. Not waiting for 1.1, I think your solution is the best available. I'm not very familiar with the problem your having so I do not have any more input than the excellent reply you already received
from David.

I should also have noted that you can used a
.PropertyPlaceholderConfigurer in which case you can choose the
property name yourself. However, as FTPSERVER-282 points out, if using
our custom schema, you will not be able to use this for numeric
values, instead you would have to use the standard Spring <bean> tags.

/niklas




With the old properties-based configuration, we were able to introduce properties at deployment time without ever having referenced those properties in our application code. I was aware of the existence of PropertyPlaceholderConfigurer, but I had avoided it because it looked like I would have to create placeholders for every settable property if I wanted to retain that flexibility. (And I wasn't sure whether I would also be compelled to specify values for every defined placeholder.)

--
Roger Marshall

Reply via email to