harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Fursov" <mike.fur...@gmail.com>
Subject Re: [classlib] imcompatible with RI?
Date Thu, 27 Jul 2006 12:19:40 GMT
If API says (from the forst message message):
"If this channel was not created by the same provider as the given selector"
then the way you create the channel but not provider is important.
?

On 7/27/06, Andrew Zhang <zhanghuangzhu@gmail.com> wrote:
>
> On 7/27/06, Paulex Yang <paulex.yang@gmail.com> wrote:
> >
> > Andrew Zhang wrote:
> > > Seems strange.
> > >
> > > Following test fails against RI.
> > >
> > > The spec of SelectableChannel.register() says:
> "IllegalSelectorExceptoin
> > > -- If this channel was not created by the same provider as the given
> > > selector".
> > Same instance or same SelectorProvider subclass?
>
>
> I think it's same instance. As you may notice, I use "assertSame(
> channel.provider(), selector.provider());" in the test.
>
> RI passes this assert statement and fails at channel.register(...) because
> of IllegalSelectorException.
>
> That's why I think RI is illogical in this case.
>
> Any comments?
>
> >
> > > I suggest follow spec for this case. Thanks!
> > >
> > > public void test_channel() throws Exception {
> > >        SelectorProvider provider = SelectorProvider.provider();
> > >        Selector selector = Selector.open();
> > >        MockChannel channel = new MockChannel(provider);
> > >        channel.configureBlocking(false);
> > >        assertSame(channel.provider(), selector.provider());
> > > // test fails here against RI, IllegalSelectorException is thrown
> > >        channel.register(selector, SelectionKey.OP_READ);
> > >        selector.select();
> > >    }
> > >
> > > class MockChannel extends SocketChannel {
> > >
> > >    protected MockChannel(SelectorProvider arg0) {
> > >        super(arg0);
> > >    }
> > >
> > >    public Socket socket() {
> > >        return null;
> > >    }
> > >
> > >    public boolean isConnected() {
> > >        return false;
> > >    }
> > >
> > >    public boolean isConnectionPending() {
> > >        return false;
> > >    }
> > >
> > >    public boolean connect(SocketAddress arg0) throws IOException {
> > >        return false;
> > >    }
> > >
> > >    public boolean finishConnect() throws IOException {
> > >        return false;
> > >    }
> > >
> > >    public int read(ByteBuffer arg0) throws IOException {
> > >        return 0;
> > >    }
> > >
> > >    public long read(ByteBuffer[] arg0, int arg1, int arg2) throws
> > > IOException {
> > >        return 0;
> > >    }
> > >
> > >    public int write(ByteBuffer arg0) throws IOException {
> > >        return 0;
> > >    }
> > >
> > >    public long write(ByteBuffer[] arg0, int arg1, int arg2) throws
> > > IOException {
> > >        return 0;
> > >    }
> > >
> > >    protected void implCloseSelectableChannel() throws IOException {
> > >
> > >    }
> > >
> > >    protected void implConfigureBlocking(boolean arg0) throws
> > > IOException {
> > >
> > >    }
> > > }
> > >
> > >
> > >
> > > On 7/27/06, Jimmy, Jing Lv <firepure@gmail.com> wrote:
> > >>
> > >> Hi:
> > >>     I find that RI behaves strange in
> > >> java.nio.channels.SelectableChannel.register. in NIO, channels and
> > >> selector must be created by Provider. The doc reads: (Invoking
> > >> register() should throw) "IllegalSelectorException - If this channel
> > was
> > >> not created by the same provider as the given selector". To check if
> > the
> > >> two providers are the same, Harmony use
> > >> "if(selector.provider()==selector.provider)... ", however it seems
> not
> > >> correct.
> > >>     If we mock a channel extends SelectableChannel, put the same
> > >> provider of selector as its provider, and register this channel to
> > >> selector, RI fails with a IllegalSelectorException though two
> providers
> > >> are the same. I have no idea if how RI do without checking providers
> > are
> > >> the same?
> > >>     Another thing is that if a selector has no channels register on
> it,
> > >> invoke an operation of select() surely has nothing to do. In this
> way,
> > >> Harmony returns immediately even invoking a block select(), however
> RI
> > >> wait forever there, for nothing. I think Harmony's behavior is
> logical,
> > >> but not compatible with RI. It seems a bug of RI, I suggest keep it
> as
> > >> it is.
> > >>
> > >> --
> > >>
> > >> Best Regards!
> > >>
> > >> Jimmy, Jing Lv
> > >> China Software Development Lab, IBM
> > >>
> > >> ---------------------------------------------------------------------
> > >> Terms of use : http://incubator.apache.org/harmony/mailing.html
> > >> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> > >> For additional commands, e-mail:
> harmony-dev-help@incubator.apache.org
> > >>
> > >>
> > >
> > >
> >
> >
> > --
> > Paulex Yang
> > China Software Development Lab
> > IBM
> >
> >
> >
> > ---------------------------------------------------------------------
> > Terms of use : http://incubator.apache.org/harmony/mailing.html
> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>


-- 
Mikhail Fursov

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message