Does AsynchronousSocketChannel.read(ByteBuffer) throw ShutdownChannelGroupException?

Alan Bateman Alan.Bateman at Sun.COM
Thu Jun 25 02:43:15 PDT 2009


Gili wrote:
> AsynchronousSocketChannel.read(ByteBuffer) overrides
> AsynchronousByteChannel.read(ByteBuffer). The latter has no concept of
> ChannelGroups so it does not declare that the method may throw
> ShutdownChannelGroupException. AsynchronousSocketChannel, on the other hand,
> declares that all I/O operation will throw ShutdownChannelGroupException if
> the channel group is shut down in the middle of an operation.
>
> There seems to be a conflict of specifications. Doesn't Design by Contract
> specify that a subclass may throw less exceptions but it may not throw new
> exceptions? I know that technically speaking all methods throw
> RuntimeException but that's a little dirty. This exception does not indicate
> programming error and it is quite reasonable to expect that developers will
> want to catch it. At the very least,
> AsynchronousSocketChannel.read(ByteBuffer)'s documentation should address
> this more explicitly.
>   
It's just an oversight that the ShutdownChannelGroupException is missing 
from the list of possible exceptions - I'll fix that thanks!

As regards shutdown while there are I/O operations outstanding - it 
depends on if you use the shutdown or shutdownNow methods. The shutdown 
method does a graceful shutdown and does not impact the outstanding I/O 
operations. The shutdowNow method is to do a forceful shutdown and this 
is specified to close all open channels in the group. This causes all 
outstanding I/O operations to fail with AsynchronousCloseException.

-Alan.



More information about the nio-discuss mailing list