Here a Codec interface proposal :
https://github.com/jvermillard/mina/tree/trunk/core/src/main/java/org/apache/mina/filter/codec

PS : I'm just toying around with github, don't worry I'm not making my own
fork :)


On Thu, Jan 3, 2013 at 10:20 AM, Arnaud bourree <[email protected]>wrote:

> You're right, in same time mina-http doesn't have HttpEntity equivalent.
> We could start without them and add them in second step
>
> 2013/1/3 Julien Vermillard <[email protected]>:
> > I think we agree here, I wouldn't touch the NIO part, but the interface
> for
> > the message are nice. The only issue is with the HttpEntity stuff, I like
> > the way contents are streamed in small chunk in the mina-http codec. I'm
> > not sure it's feasable without forking the http-core code.
> >
> >
> > On Wed, Jan 2, 2013 at 10:04 PM, Arnaud bourree <
> [email protected]>wrote:
> >
> >> My idea was to re-used http-core pojo classes like BasicHttpStatus,
> >> BasicHttpResponse, ... in mina-http codec.
> >> In other words don't re-defined Http pojo classes, just implement mina
> >> encoder/decoder
> >> IMO, http-core-nio looks more complex than existing mina-http and
> >> doesn't have clear split between pojo classes and parser we expect
> >>
> >> 2013/1/2 Julien Vermillard <[email protected]>:
> >> > Taking a look now. Looks like the code is not really commented :(
> >> >
> >> > On Wed, Jan 2, 2013 at 12:08 PM, Ashish <[email protected]>
> wrote:
> >> >
> >> >> hc has nio based implementation as well
> >> >>
> >>
> http://hc.apache.org/httpcomponents-core-ga/httpcore-nio/xref/index.html
> >> >> See nio.codecs package
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> On Tue, Jan 1, 2013 at 11:53 PM, Julien Vermillard <
> >> [email protected]
> >> >> >wrote:
> >> >>
> >> >> > Definitively should take a look.
> >> >> > The only tricky issue is streaming large content, because MINA
> have an
> >> >> > event based paradigm where H.C. have probably a stream based
> approach.
> >> >> >
> >> >> > Julien
> >> >> > Le 1 janv. 2013 16:33, "Arnaud bourree" <[email protected]>
> a
> >> >> > écrit :
> >> >> >
> >> >> > > Hi,
> >> >> > >
> >> >> > > Happy new year 2013.
> >> >> > >
> >> >> > > I'm strongly interested in HTTP codec: I used for one project I
> did
> >> >> > > for my company.
> >> >> > > Here there are my point of view:
> >> >> > > - share codec between MINA 2 and 3: I initially take MINA 3 as
> base
> >> to
> >> >> > > implement on MINA 2 and keep classes and package structure. BTW
> >> share
> >> >> > > should be easy to do, but when I did job, I made some change due
> to
> >> >> > > JDK version 5 for MINA 2 and 6 for MINA 3
> >> >> > > - codec independent from MINA: I take a look on the web to find
> HTTP
> >> >> > > API object to convert BB to, I find that Apache HTTP Client
> >> >> > > (http-core) feet what we need.
> >> >> > > What do you think to used http-core as API for Pojo object and
> write
> >> >> > > HTTP codec to encode/decode BB from/to http-core objects and on
> top
> >> a
> >> >> > > HTTP filter for MINA framework?
> >> >> > >
> >> >> > > Regrards,
> >> >> > >
> >> >> > > Arnaud.
> >> >> > >
> >> >> > > 2013/1/1 Julien Vermillard <[email protected]>:
> >> >> > > > Hi,
> >> >> > > > I wanted to sleep, by my son wasn't agreeing :) I will probably
> >> crash
> >> >> > > later.
> >> >> > > >
> >> >> > > > Yeah we could experiment with the HTTP codec, it's in pretty
> bad
> >> >> state
> >> >> > > for
> >> >> > > > now.
> >> >> > > > It would be nice to be able to share the codec code between
> MINA 2
> >> >> and
> >> >> > 3.
> >> >> > > > Julien
> >> >> > > >
> >> >> > > >
> >> >> > > > On Tue, Jan 1, 2013 at 9:45 AM, Emmanuel Lecharny <
> >> >> > [email protected]
> >> >> > > >wrote:
> >> >> > > >
> >> >> > > >> we should think of a codec as an independant module : it
> should
> >> be
> >> >> > > >> available for any java code that just needs suh a codec for
> its
> >> own
> >> >> > > >> purpose.
> >> >> > > >>
> >> >> > > >> such a need has already been expressed for http.
> >> >> > > >>
> >> >> > > >> imo, the current impl is over-ingeniered.
> >> >> > > >>
> >> >> > > >> Btw, it seems that we are up and running at 9am on jan.
> first...
> >> >> crazy
> >> >> > > open
> >> >> > > >> source developpers...
> >> >> > > >>
> >> >> > > >> happy new year !
> >> >> > > >>
> >> >> > > >> Le 1 janv. 2013 09:26, "Julien Vermillard" <
> >> [email protected]>
> >> >> a
> >> >> > > >> écrit :
> >> >> > > >> >
> >> >> > > >> > It's sure 10 year after SEDA is quite smelly :-)
> >> >> > > >> > In my mind the codec code should be used by a filter for
> >> >> > transforming
> >> >> > > the
> >> >> > > >> > bytes into pojos (like today) but really not dependent of
> MINA.
> >> >> > > >> > IMHO demux handler is a piece of s..t, you should use a
> visitor
> >> >> > > pattern.
> >> >> > > >> > Much more testable.
> >> >> > > >> >
> >> >> > > >> > I like the loop until it's decoded idea, it very simple to
> >> >> > understand.
> >> >> > > >> >  Le 31 déc. 2012 18:13, "Emmanuel Lécharny" <
> >> [email protected]>
> >> >> a
> >> >> > > >> écrit
> >> >> > > >> :
> >> >> > > >> >
> >> >> > > >> > > Le 12/31/12 7:55 AM, Julien Vermillard a écrit :
> >> >> > > >> > > > Hi,
> >> >> > > >> > > >
> >> >> > > >> > > > Since few year, I stopped to use the MINA
> >> ProtocolCodecFilter
> >> >> > and
> >> >> > > >> > > > associated stuff (CumulativeCodec..). for implementing
> my
> >> own
> >> >> > > codec
> >> >> > > >> > > > independent of MINA.
> >> >> > > >> > > >
> >> >> > > >> > > > it's just a service consuming ByteBuffer and pushing
> >> decoded
> >> >> > POJO
> >> >> > > in
> >> >> > > >> a
> >> >> > > >> > > > callback. The point is to be independent of MINA for
> >> example,
> >> >> > > parse &
> >> >> > > >> > > save
> >> >> > > >> > > > files using the codec, or simply implement an HTTP
> version
> >> of
> >> >> > the
> >> >> > > >> > > transport
> >> >> > > >> > > > using old style servlet.
> >> >> > > >> > > >
> >> >> > > >> > > > Basically a decoder looks like :
> >> >> > https://gist.github.com/4417934
> >> >> > > >> > > > One is instantiated by session.
> >> >> > > >> > > >
> >> >> > > >> > > > I'm quite happy with that and I think we should not port
> >> the
> >> >> old
> >> >> > > >> > > > ProtocolCodeFilter to MINA 3.0 and replace it with a
> >> >> independent
> >> >> > > MINA
> >> >> > > >> > > async
> >> >> > > >> > > > decoder framework (consuming BB, accumulating if needed
> and
> >> >> > > producing
> >> >> > > >> > > pojo).
> >> >> > > >> > > It sounds a reasonnable proposal.
> >> >> > > >> > >
> >> >> > > >> > > If we think about it, decoding is not part of a filter
> chain
> >> :
> >> >> it
> >> >> > > >> > > introduces a change of data type being passed from one
> >> filter to
> >> >> > the
> >> >> > > >> > > other, and if we have to cumulate data, we will just stop
> >> >> > processing
> >> >> > > >> the
> >> >> > > >> > > incomming data in the middle of the chain, the handler
> being
> >> >> > > unaware of
> >> >> > > >> > > this fact.
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > Julien's proposal seems way better : the Handler would
> have a
> >> >> > common
> >> >> > > >> > > interface for encoding and decoding, used as a service
> when a
> >> >> > > >> > > MessageReceived or a Write events are to be processed.
> This
> >> way,
> >> >> > the
> >> >> > > >> > > handler is fully in charge of all the aspects of the data
> >> >> > > processing,
> >> >> > > >> > > including the accumulation of data.
> >> >> > > >> > >
> >> >> > > >> > > It won't either eliminate the existence of pre-written
> codec,
> >> >> like
> >> >> > > the
> >> >> > > >> > > HttpCodec, or the Textline codec. We can even think about
> a
> >> >> chain
> >> >> > of
> >> >> > > >> > > codecs : one codec depends on the result of the previous
> >> codec.
> >> >> > > >> > >
> >> >> > > >> > > As far as I can tell, changing MINA this way will not
> impact
> >> >> > > ApacheDS,
> >> >> > > >> > > even if we are using a DemuxIoHandler (the handler called
> >> >> depends
> >> >> > on
> >> >> > > >> the
> >> >> > > >> > > received message) : I don't see such a handler as a
> >> >> simplification
> >> >> > > over
> >> >> > > >> > > a simple switch...
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > Keep in mind that the exisiting MINA logic depends on an
> idea
> >> >> > which
> >> >> > > is
> >> >> > > >> > > 10 years old : SEDA, and has not proven any advantage
> against
> >> >> > > simpler
> >> >> > > >> > > implementations. It's also important to notice that SEDA
> >> implies
> >> >> > > that
> >> >> > > >> > > each process part communicates with the next process
> (read :
> >> >> > > filter) by
> >> >> > > >> > > the use of queues. This is highly costly and memory
> >> consuming.
> >> >> I'm
> >> >> > > not
> >> >> > > >> > > sure that SEDA has anything to do with MINA implementation
> >> >> > anwyay...
> >> >> > > >> > >
> >> >> > > >> > > On more thing : the current codec supposes that we pass a
> >> >> callback
> >> >> > > >> which
> >> >> > > >> > > is called as soon as something has been decoded. This make
> >> the
> >> >> > code
> >> >> > > >> > > extremely complicated to debug. I'd rather have a system
> >> where
> >> >> we
> >> >> > > can
> >> >> > > >> > > loop on the decoder, until it produces nothing. In other
> >> words,
> >> >> > > instead
> >> >> > > >> > > of having something like :
> >> >> > > >> > >
> >> >> > > >> > > void myCallback( IoSession session, Object message ) {
> >> >> > > >> > >     // Do something
> >> >> > > >> > > }
> >> >> > > >> > >
> >> >> > > >> > > void decode( IoSession session, ByteBuffer buffer,
> callback
> >> ) {
> >> >> > > >> > >     // Decode and call the callback
> >> >> > > >> > > }
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > void messageReceived( IoSession session, ByteBuffer
> buffer )
> >> {
> >> >> > > >> > >     decode( session, myCalback );
> >> >> > > >> > >     ...
> >> >> > > >> > > }
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > I would prefer something like :
> >> >> > > >> > >
> >> >> > > >> > > Object decode( IoSession session, ByteBuffer buffer ) {
> >> >> > > >> > >     // Decode
> >> >> > > >> > >
> >> >> > > >> > >     return decoded;
> >> >> > > >> > > }
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > void messageReceived( IoSession session, ByteBuffer
> buffer )
> >> {
> >> >> > > >> > >     while ( ( Object decoded = decode( session ) ) !=
> null )
> >> {
> >> >> > > >> > >         // Do something
> >> >> > > >> > >     }
> >> >> > > >> > > }
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > >
> >> >> > > >> > > > Julien
> >> >> > > >> > > >
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >> > > --
> >> >> > > >> > > Regards,
> >> >> > > >> > > Cordialement,
> >> >> > > >> > > Emmanuel Lécharny
> >> >> > > >> > > www.iktek.com
> >> >> > > >> > >
> >> >> > > >> > >
> >> >> > > >>
> >> >> > >
> >> >> >
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> thanks
> >> >> ashish
> >> >>
> >> >> Blog: http://www.ashishpaliwal.com/blog
> >> >> My Photo Galleries: http://www.pbase.com/ashishpaliwal
> >> >>
> >>
>

Reply via email to