Ohhh, did you find a way to resolve

https://issues.apache.org/jira/browse/DIRMINA-375

?  That's exciting!  I'd love to see it in the sandbox.

Cheers,
Trustin


On 10/25/07, Niklas Therning <[EMAIL PROTECTED]> wrote:
> Hi guys,
>
> I've played around with combining commons-javaflow (continuations for
> Java) and MINA. The result is that I can do session.read() and wait for
> a new message without blocking the current thread. session.read() uses
> javaflow to suspend the current thread and save the call stack. Then
> when a new message arrives my code will be resumed right after the call
> to session.read(). session.write() and session.close() both work similarly.
>
> Here's a simple example I've been working on:
>
> public class Main {
>
>     public static void main(String[] args) {
>
>         BasicConfigurator.configure();
>
>         final NioSocketConnector connector = new NioSocketConnector();
>         connector.getFilterChain().addLast("pcf", new ProtocolCodecFilter(
>                 new TextLineCodecFactory(
>                         Charset.forName("ISO8859-1"),
>                         LineDelimiter.WINDOWS,
>                         LineDelimiter.WINDOWS)));
>         connector.getFilterChain().addLast("log", new LoggingFilter());
>         connector.setHandler(new ContinuationIoHandler(new
> ContinuableIoHandler() {
>
>             @Continuable
>             public void run(ContinuableIoSession session) {
>                 try {
>                     System.out.println(session.read());
>                     session.write("USER user");
>                     System.out.println(session.read());
>                     session.write("PASS qwerty");
>                     System.out.println(session.read());
>                     session.write("STAT");
>                     System.out.println(session.read());
>                     session.write("QUIT");
>                     System.out.println(session.read());
>                     session.close();
>                 } catch (IOException e) {
>                     e.printStackTrace();
>                 }
>             }
>
>             public void sessionCreated(IoSession session) {
>             }
>
>         }));
>         connector.connect(new InetSocketAddress("pop.example.com", 110));
>     }
> }
>
> This code will log in to a POP3 server and query it for the number of
> messages and then log out. The nice thing about this is that you get the
> best of two worlds: simple and readable code (blocking style) yet the
> scalability of non-blocking IO.
>
> If you find this interesting I'd be more than happy to put the code in
> my sandbox for you to play with. Please be aware that I've extended
> commons-javaflow slightly to be able to use Java5 instrumentation to do
> the byte-code modification. I've also added the @Continuable annotation
> which marks classes and methods which should be byte-code enhanced.
>
> --
> Niklas Therning
> www.spamdrain.net
>
>


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

Reply via email to