Hi Frédéric Brégier,

On Dec 11, 2007 12:09 AM, Frédéric Brégier <[EMAIL PROTECTED]> wrote:
> Hi Trustin,
> Don't be sorry ! I completely understand the time this mailing
> list takes for you, and I really appreciate all the advices you give !!!
> I hope that you still have some night for you and your family...

Thanks for your understanding.  I really appreciate it.  :)

> Now back on the question :
> I understand better now the way it does with your answear.
> In my case, I probably can continue with only DemuxingIoHandler
> implements the global stuff since it is the same on every message
> (or almost, since I free some data specific to each message).
>
> I am not sure (I'm not such an expert) that splitting MessageHandler
> or making catch-all handler is better than now.
> For now, it was just a matter to know how to do it correctly,
> and your answear is just fine. Perhaps a short note in the API
> would be enough to be clear between those two ways.

I've made more change to MessageHandler and DemuxingIoHandler to fix
the API design issue you raised.  Please take a look at the following
change log.  The code will explain everything:

    http://svn.apache.org/viewvc?view=rev&revision=603158

> Now next question (one answear sometimes brings another question)
> is that are you sure DemuxingIoHandler should throw an exception
> on messageSent when there is no messageHandler for it ?
> I look at the code in MINA, and it seems so.
> In my code, I have one particular message that the server will never
> receive but always anwear (written), so there is no messageHandler for it.
> As I overload the messageSent() function in my deumxingIoHandler,
> it never raised the exception since, if I am understanding clearly,
> mine overloading will never try to find the appropriate messageHandler
> (no call to handler.messageSent()).

You could simply register MessageHandler.NOOP to that type of message,
no?  If you want to ignore all messageSent events, then you can even
do the following:

    handler.addSentMessageHandler(MessageHandler.NOOP);

Especially with the change I've just made, I think all the concerns
you raised have been resolved.  Please let me know if there's any case
that I missed out.

> If I am correct, in my case, it is therefore necessary to keep both ways
> as possible in MINA.
> Except perhaps I break the logic of Min by doing this ?

The possibility of overriding
DemuxingIoHandler.messageReceived/messageSent/exceptionCaught/findReceivedMessageHandler/findSentMessageHandler/findExceptionHandler
means that anyone who extends DemuxingIoHandler can break the existing
logic of DemuxingIoHandler.  We could make all these methods final and
provide a kind of hook methods whose access modifier is 'protected'.
Assuming my recent change has resolved all the issues you raised, we
could do that.  WDYT?

> Should I register those written only MessageHandler even if I never received 
> one of them ?
> Perhaps it is related more to your question on splitting MessageHandler ?
> I don't like to make the API growing more and more, but you probably know 
> better
> than me what it is better ot not in this case.

Yes, you have to register MessageHandler.NOOP at least to avoid an
exception.  I think it's mandatory to prevent any mistake that a user
might forget to register a required handler.

> Perhaps my way (overloading DemuxingIoHandler, just an hypothesis)
> could be related to the other problem of 0 value for messages in statistics ?

No.  It's not related.  Let me respond in the other thread.

Cheers,
Trustin
-- 
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6

Reply via email to