Trustin Lee trustin@apache.org http://people.apache.org/~trustin/ Introduction to MINA Trustin Lee trustin@apache.org http://people.apache.org/~trustin/
Agenda Overview In-depth View Implementation Demo Future Conclusion December 13, 2005 ApacheCon US 2005
A Multipurpose Infrastructure for Network Applications Overview A Multipurpose Infrastructure for Network Applications
What is MINA? An acronym for A network application framework Overview What is MINA? An acronym for A Multipurpose Infrastructure For Network Applications A network application framework A subproject of the Apache Directory Project December 13, 2005 ApacheCon US 2005
Features Unified API Easy Event-driven Overview Features Unified API Easy Event-driven Abstracted from existing I/O APIs Elegant application design December 13, 2005 ApacheCon US 2005
Supported Transport Layers Overview Supported Transport Layers Out-of-the-box Based on Java NIO (New I/O) Socket (TCP/IP) Datagram (UDP/IP) In-VM pipe Pending: Multicast Serial and parallel port <your favorite one> December 13, 2005 ApacheCon US 2005
Elegant Application Design Overview Elegant Application Design Unit test friendly The Abstract API lets you test your application without a real client or server via mock objects. Extensible Runtime modification of application behavior using ‘filters’ Maintainable and Reusable Separation of networking code (MINA), protocol codec, and business logic December 13, 2005 ApacheCon US 2005 With High Productivity
Who Uses MINA? The Apache Directory Project Overview Who Uses MINA? The Apache Directory Project QuickFIX – QuickFIXEngine.org Financial Information eXchange Protocol RED5 Server – OSFlash.org Macromedia Flash Media RTMP JStyx – JStyx.sf.net Styx, a file sharing NFS-like protocol Proprietary SMPP / SMS servers LDAP Kerberos DNS NTP December 13, 2005 ApacheCon US 2005
A Multipurpose Infrastructure for Network Applications In-depth View A Multipurpose Infrastructure for Network Applications
At the First Glance IoSessionManager IoFilters IoHandler IoSession In-depth At the First Glance IoSessionManager Where real I/O occurs Generates I/O events Processes I/O requests IoFilters Filters I/O events and requests IoHandler <Your protocol logic> IoSession Represents a connection December 13, 2005 ApacheCon US 2005
And their implementations In-depth IoSessionManagers Server-side: Accepts clients Client-side: Connects to a server And their implementations December 13, 2005 ApacheCon US 2005
IoSession A connection between an IoHandler and a remote peer In-depth IoSession A connection between an IoHandler and a remote peer Provides ways to send an I/O request Write a message Close the current connection State information Idleness Last I/O time Transport layer parameters Attributes: Protocol-specific data storage December 13, 2005 ApacheCon US 2005
IoHandler Where you implement your network application In-depth December 13, 2005 ApacheCon US 2005
IoFilter A reusable event & request interceptor Scope: Hot-deployable In-depth IoFilter A reusable event & request interceptor Hot-deployable Scope: An IoSession or an IoSessionManager December 13, 2005 ApacheCon US 2005
IoFilter (Cont’d) Out-of-the box filters: Pending filters: SSL / TLS In-depth IoFilter (Cont’d) Out-of-the box filters: SSL / TLS Remote peer blacklisting Thread pool Logger Pending filters: Profiler Traffic throttle Lightweight firewall Overload prevention December 13, 2005 ApacheCon US 2005
Thread Pooling with IoFilter In-depth Thread Pooling with IoFilter December 13, 2005 ApacheCon US 2005
Protocol Codec By default, ProtocolCodecFilter is an IoFilter In-depth Protocol Codec By default, IoHandler uses a ByteBuffer to do I/O Tight coupling of protocol codec and business logic :( ProtocolCodecFilter is an IoFilter Performs transformation between a ByteBuffer and a POJO (Plain Old Java Object) Clear separation December 13, 2005 ApacheCon US 2005
Protocol Codec (Cont’d) In-depth Protocol Codec (Cont’d) December 13, 2005 ApacheCon US 2005
In-VM Pipe Transport Type In-depth In-VM Pipe Transport Type A virtual pipe Requires no protocol codec I/O events and requests are converted into direct method invocations. Two MINA servers in the same VM Can bypass: Protocol codec Network latency December 13, 2005 ApacheCon US 2005
A Multipurpose Infrastructure for Network Applications Implementation Demo A Multipurpose Infrastructure for Network Applications
More Complex Examples Realistic examples: Demo More Complex Examples Realistic examples: Visit Here: http://directory.apache.org /subprojects/network/getting_started.html December 13, 2005 ApacheCon US 2005
A Multipurpose Infrastructure for Network Applications Future A Multipurpose Infrastructure for Network Applications
MINA as a Platform Integration with Apache ASN.1 for complex protocols Future MINA as a Platform Integration with Apache ASN.1 for complex protocols Users can build customized servers with ready-made protocol codecs. Just like drawing an ER Diagrams! December 13, 2005 ApacheCon US 2005
Real-Time Management System Future Real-Time Management System A universal management view JMX console and Web browser Real time access Server traffic IoFilter Hot-deploy Which client is sending what message now? Which message takes toolong to process? And <what you want to monitor> December 13, 2005 ApacheCon US 2005
We Need Your Participation! Future We Need Your Participation! Sounds exciting? Please help MINA team! Try MINA Ask questions Criticize Report bugs Benchmark Contribute code Contribute a tutorial December 13, 2005 ApacheCon US 2005
A Multipurpose Infrastructure for Network Applications Conclusion A Multipurpose Infrastructure for Network Applications
Conclusion Conclusion MINA is an extensible network application framework that helps you implement your network application elegantly without compromising productivity. MINA can be a complete network application development & management platform if we get our effort together. December 13, 2005 ApacheCon US 2005
Resources Homepage Mailing List http://directory.apache.org/subprojects/network/ Mailing List dev@directory.apache.org (Please use ‘[mina] prefix) December 13, 2005 ApacheCon US 2005
Thank You! Q & A