Hardcoded default providers for asynchronous channel and file system
Jonathan Lu
luchsh at linux.vnet.ibm.com
Mon Nov 21 00:24:08 PST 2011
Hello Alan, nio-dev,
Any comments on this patch?
Regards!
- Jonathan!
On 11/16/2011 06:31 PM, Jonathan Lu wrote:
> On 11/15/2011 03:09 AM, Alan Bateman wrote:
>> On 11/11/2011 08:48, Jonathan Lu wrote:
>>> :
>>>
>>>
>>> For DefaultFileSystemProvider, the logic for Linux and Solaris
>>> platforms are a bit different from Windows platform.
>>> Class.forName() and Class.newInstance() are used to create
>>> DefaultFileSystemProvider on Linux and Solaris, but only one simple
>>> new statement found for Windows platform. Is there any particular
>>> reason to place such a different logic here?
>>> I do not see any and think the same approach for
>>> DefaultAsynchronousChannelProvider can also be applied here, please
>>> fix me if incorrect.
>> The reason it was done this way was to avoid the static dependencies
>> as we don't want Solaris specific classes being compiled when doing
>> Linux builds and vice versa.
>>
>>
>>>
>>> Okay :)
>>> But for current layout if adopt this approach, there'll be total 9
>>> additional template files instead of 3 additional scripts. And the
>>> templates of the same provider for different platforms are almost
>>> the same.
>> Actually you could get away with 6 as this is only needed for
>> Solaris/Linux because they share the same directory.
>>
>>
>>> Yes, 2.6 or newer linux kernel should be the default assumption here
>>> just like what the LinuxFileSystem did. So EPollSelectorProvider
>>> will be the only result returned on Linux platform,
>>> PollSelectorProvider will not be used any more.
>> That's right although it may have to continue to be used on the Mac
>> until the kqueue based Selector passes all tests.
>>
>>
>>>
>>> But I do find a testcase jdk/test/sun/nio/ch/SelProvider.java which
>>> will test old Linux, I think it should be changed accordingly, right?
>> Good catch, this should be changed too.
>>
>>> :
>>>
>>> In order to split the complexity out of scripts, what would you
>>> think about composing a common template file for all providers and
>>> all the platforms?
>> That would be better, so it would be something like the following
>> invoked in the build:
>>
>> genProviderFactory \
>> sun.nio.ch.EPollSelectorProvider \
>> sun.nio.ch.LinuxAsynchronousChannelProvider \
>> sun.nio.fs.LinuxFileSystemProvider
>>
>> and it would generate something like sun.nio.ProviderFactory that
>> defines 3 static methods to create the providers.
>>
>> I think I could live with that.
>>
>> -Alan
>>
>>
> Hi Alan,
>
> Here's another patch which is similar to your approach, but the
> difference here is that it is trying to isolate the naming differences
> into one single script instead of introducing a factory class. I think
> if the logic is the same for all the platforms, it would be better if
> there is a map (the branch statements from the script) to link each
> provider name to the provider source.
>
> Several benefits of this patch,
> 1, Only several branch statements of one script file need to be
> adjusted if a new platform is going to be supported. And the script
> file is pretty clear to read.
> 2, Generated default providers only contains the code for target
> platform, no more os.name checking.
> 3, Unchanged default provider APIs for other parts of the class
> library, such as in
> java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java.
> 4, Compiling time complexity is reduced to only one simple shell
> script file.
>
> Any comments on this approach?
>
> - Jonathan
More information about the nio-dev
mailing list