harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Zhang" <zhanghuang...@gmail.com>
Subject Re: [classlib] imcompatible with RI?
Date Thu, 27 Jul 2006 10:14:55 GMT
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

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