Hi Jeff, Do we need to remove the final modifier if we are going to provide setters? And assuming you are using DummySession as a mock object, I'd suggest making AbstractIoSession.setScheduled...(...) protected and make them public in DummySession. WDYT?
Cheers, Trustin On Dec 28, 2007 8:19 AM, Jeff Genender <[EMAIL PROTECTED]> wrote: > Trustin (and others)...so how about these changes and additions to the > AbstractIoSession? This will allow the scheduledBytes/messages to be > overriden, and also allow someone to set them. > > Index: core/src/main/java/org/apache/mina/common/AbstractIoSession.java > =================================================================== > --- core/src/main/java/org/apache/mina/common/AbstractIoSession.java > (revision 607135) > +++ core/src/main/java/org/apache/mina/common/AbstractIoSession.java > (working copy) > @@ -488,14 +488,22 @@ > lastThroughputCalculationTime = currentTime; > } > > - public final long getScheduledWriteBytes() { > + public long getScheduledWriteBytes() { > return scheduledWriteBytes.get(); > } > > - public final int getScheduledWriteMessages() { > + public int getScheduledWriteMessages() { > return scheduledWriteMessages.get(); > } > > + public void setScheduledWriteBytes(long byteCount){ > + scheduledWriteBytes.set(byteCount); > + } > + > + public void setScheduledWriteMessages(int messages) { > + scheduledWriteMessages.set(messages); > + } > + > protected final void increaseReadBytes(long increment, long > currentTime) { > if (increment <= 0) { > return; > > > Thanks, > > Jeff > > > Trustin Lee wrote: > > Hi Jeff and Emmanuel, > > > > You can add some hook for IoSession.write() by inserting an IoFilter, > > so I am not sure about removing the final modifier from write(). > > > > Overriding getScheduledMessages and getScheduledBytes makes sense > > though because they will always be 0 because messageSent event will be > > always fired immediately. > > > > WDYT? > > > > Trustin > > > > On Dec 27, 2007 10:21 AM, Emmanuel Lecharny <[EMAIL PROTECTED]> wrote: > >> Jeff Genender wrote: > >>> What do *you* think? ;-) > >>> > >> Beside the assert, which was a side effect of my quick glance at the > >> method you want to override, I think that dooming the final is sane. > >> > >> If someone needs to protect this method, then the best solution would be > >> to define a super class with final methods calling the AbstractIoSession > >> non final methods. > >> > >> Another solution (puke....) would be to remove the > >> public/protected/private qualifier, and to add a MockIoSession in the > >> same package. Not very elegant, but does the job too... > >> > >> There are always tradeoff when you want to thoroughly unit-test some > >> code. When it comes to an API, it seems impossible to avoid those > >> tradeoff, IMHO. > >> > >> Any other opinion ? Trustin ? Julien ? > >> > >>> Jeff > >>> > >>> > >>> Emmanuel Lecharny wrote: > >>> > >>>> Jeff Genender wrote: > >>>> > >>>>> Hey guys, > >>>>> > >>>>> I was hoping to see if we could discuss some of the "final" qualifiers > >>>>> on some of the methods in the AbstractIOSession. The reason I ask is it > >>>>> would be cool to be able to override some of the methods such as: > >>>>> > >>>>> public WriteFuture write(Object message) > >>>>> public final int getScheduledWriteMessages() > >>>>> > >>>>> To be able to write MockObjects for unit tests of code. Any thoughts on > >>>>> making these protected instead of final? > >>>>> > >>>>> Thanks, > >>>>> > >>>>> Jeff > >>>>> > >>>>> > >>>>> > >>>> Hi, > >>>> > >>>> makes sense to me... Or we may have a AbstractMockIoSession implementing > >>>> the IoSession interface, for unit tests ? > >>>> > >>>> While looking at the abstract class, I found some methods with this kind > >>>> of code : > >>>> > >>>> public final WriteFuture write(Object message, SocketAddress > >>>> remoteAddress) { > >>>> if (message == null) { > >>>> throw new NullPointerException("message"); > >>>> } > >>>> ... > >>>> > >>>> Wouldn't be a perfect case for an assert ? Like : > >>>> > >>>> public final WriteFuture write(Object message, SocketAddress > >>>> remoteAddress) { > >>>> assert message != null : "Null messages are not allowed"; > >>>> ... > >>>> > >>>> wdyt ? > >>>> > >>>> > >>>> > >>>> > >>> > >> > >> > >> -- > >> -- > >> cordialement, regards, > >> Emmanuel Lécharny > >> www.iktek.com > >> directory.apache.org > >> > >> > >> > > > > > > > -- what we call human nature is actually human habit -- http://gleamynode.net/ -- PGP Key ID: 0x0255ECA6