You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2004/12/29 10:16:59 UTC

svn commit: r123611 - in incubator/directory/network/trunk/mina: src/examples/org/apache/mina/examples/tennis src/examples/org/apache/mina/examples/vmpipe src/java/org/apache/mina/io src/java/org/apache/mina/protocol/vmpipe xdocs

Author: trustin
Date: Wed Dec 29 01:16:58 2004
New Revision: 123611

URL: http://svn.apache.org/viewcvs?view=rev&rev=123611
Log:
Added documentation for in-VM pipe support
Added:
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/
      - copied from r123602, incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/package.html   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/package.html   (contents, props changed)
Removed:
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/
Modified:
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/Main.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisBall.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
   incubator/directory/network/trunk/mina/xdocs/index.xml

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/Main.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/Main.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java&r1=123602&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/Main.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/Main.java	Wed Dec 29 01:16:58 2004
@@ -1,9 +1,7 @@
 /*
  * @(#) $Id$
  */
-package org.apache.mina.examples.vmpipe;
-
-import java.io.IOException;
+package org.apache.mina.examples.tennis;
 
 import org.apache.mina.protocol.ProtocolSession;
 import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
@@ -12,7 +10,15 @@
 import org.apache.mina.protocol.vmpipe.VmPipeConnector;
 
 /**
- * TODO Document me.
+ * (<b>Entry point</b>) An 'in-VM pipe' example which simulates a tennis game
+ * between client and server.
+ * <ol>
+ *   <li>Client connects to server</li>
+ *   <li>At first, client sends {@link TennisBall} with TTL value '10'.</li>
+ *   <li>Received side (either server or client) decreases the TTL value of the
+ *     received ball, and returns it to remote peer.</li>
+ *   <li>Who gets the ball with 0 TTL loses.</li>
+ * </ol> 
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
@@ -20,7 +26,7 @@
 public class Main
 {
 
-    public static void main( String[] args ) throws IOException
+    public static void main( String[] args ) throws Exception
     {
         VmPipeAddress address = new VmPipeAddress( 8080 );
 
@@ -28,16 +34,26 @@
         ProtocolThreadPoolFilter threadPool = new ProtocolThreadPoolFilter();
         threadPool.start();
 
-        // set up server
+        // Set up server
         VmPipeAcceptor acceptor = new VmPipeAcceptor();
         acceptor.bind( address, new TennisPlayer() );
         acceptor.addFilter( 0, threadPool );
 
-        // send ping message
+        // Connect to the server.
         VmPipeConnector connector = new VmPipeConnector();
         ProtocolSession session = connector.connect( address,
                                                      new TennisPlayer() );
 
+        // Send the first ping message
         session.write( new TennisBall( 10 ) );
+
+        // Wait until the match ends.
+        while( session.isConnected() )
+        {
+            Thread.sleep( 100 );
+        }
+
+        // Stop the thread pool
+        threadPool.stop();
     }
 }

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisBall.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisBall.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java&r1=123602&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisBall.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisBall.java	Wed Dec 29 01:16:58 2004
@@ -1,10 +1,11 @@
 /*
  * @(#) $Id$
  */
-package org.apache.mina.examples.vmpipe;
+package org.apache.mina.examples.tennis;
 
 /**
- * TODO Document me.
+ * A tennis ball which has TTL value and state whose value is one of 'PING' and
+ * 'PONG'.
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
@@ -15,27 +16,44 @@
 
     private final int ttl;
 
+    /**
+     * Creates a new ball with the specified TTL (Time To Live) value.
+     */
     public TennisBall( int ttl )
     {
         this( ttl, true );
     }
 
+    /**
+     * Creates a new ball with the specified TTL value and PING/PONG state.
+     */
     private TennisBall( int ttl, boolean ping )
     {
         this.ttl = ttl;
         this.ping = ping;
     }
 
+    /**
+     * Returns the TTL value of this ball.
+     */
     public int getTTL()
     {
         return ttl;
     }
 
+    /**
+     * Returns the ball after {@link TennisPlayer}'s stroke.
+     * The returned ball has decreased TTL value and switched PING/PONG state.
+     */
     public TennisBall stroke()
     {
         return new TennisBall( ttl - 1, !ping );
     }
 
+    /**
+     * Returns string representation of this message (<code>[PING|PONG]
+     * (TTL)</code>).
+     */
     public String toString()
     {
         if( ping )

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java&r1=123602&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java	Wed Dec 29 01:16:58 2004
@@ -1,13 +1,14 @@
 /*
  * @(#) $Id$
  */
-package org.apache.mina.examples.vmpipe;
+package org.apache.mina.examples.tennis;
 
+import org.apache.mina.protocol.ProtocolHandler;
 import org.apache.mina.protocol.ProtocolHandlerAdapter;
 import org.apache.mina.protocol.ProtocolSession;
 
 /**
- * TODO Document me.
+ * A {@link ProtocolHandler} implementation which plays a tennis game.
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
@@ -16,6 +17,7 @@
 {
     private static int nextId = 0;
 
+    /** Player ID **/
     private final int id = nextId++;
 
     public void sessionOpened( ProtocolSession session )
@@ -33,13 +35,18 @@
         System.out.println( "Player-" + id + ": RCVD " + message );
 
         TennisBall ball = ( TennisBall ) message;
+
+        // Stroke: TTL decreases and PING/PONG state changes.
         ball = ball.stroke();
+
         if( ball.getTTL() > 0 )
         {
+            // If the ball is still alive, pass it back to peer.
             session.write( ball );
         }
         else
         {
+            // If the ball is dead, this player loses.
             System.out.println( "Player-" + id + ": LOSE" );
             session.close();
         }

Added: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/package.html
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/package.html?view=auto&rev=123611
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/package.html	Wed Dec 29 01:16:58 2004
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+</head>
+<body>
+Two tennis players play a game.
+</body>
+</html>

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java	Wed Dec 29 01:16:58 2004
@@ -51,8 +51,8 @@
 {
     /**
      * Connects to the specified <code>address</code>.  If communication starts
-     * successfully, use the specified <code>defaultHandler</code>.  This method
-     * blocks.
+     * successfully, events are fired to the specified
+     * <code>defaultHandler</code>.  This method blocks.
      * 
      * @throws IOException if failed to connect
      */
@@ -61,7 +61,7 @@
 
     /**
      * Connects to the specified <code>address</code> with timeout.  If
-     * communication starts successfully, use the specified
+     * communication starts successfully, events are fired to the specified
      * <code>defaultHandler</code>.  This method blocks.
      * 
      * @throws IOException if failed to connect

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java	Wed Dec 29 01:16:58 2004
@@ -24,11 +24,20 @@
 
     private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
 
+    /**
+     * Creates a new instance.
+     */
     public VmPipeAcceptor()
     {
         filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
     }
 
+    /**
+     * Binds to the specified <code>address</code> and handles incoming
+     * connections with the specified <code>defaultHandler</code>.
+     * 
+     * @throws IOException if failed to bind
+     */
     public void bind( VmPipeAddress address, ProtocolHandler defaultHandler )
             throws IOException
     {
@@ -49,6 +58,9 @@
         }
     }
 
+    /**
+     * Unbinds from the specified <code>address</code>.
+     */
     public void unbind( VmPipeAddress address )
     {
         if( address == null )

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java	Wed Dec 29 01:16:58 2004
@@ -21,11 +21,19 @@
 {
     private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
 
+    /**
+     * Creates a new instance.
+     */
     public VmPipeConnector()
     {
         filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
     }
 
+    /**
+     * Connects to the specified <code>address</code>.  If communication starts
+     * successfully, events are fired to the specified
+     * <code>defaultHandler</code>.  This method blocks.
+     */
     public ProtocolSession connect( VmPipeAddress address,
                                    ProtocolHandler defaultHandler )
             throws IOException

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java	Wed Dec 29 01:16:58 2004
@@ -39,14 +39,4 @@
 
         nextHandler.messageSent( session, message );
     }
-
-    public void sessionClosed( ProtocolHandler nextHandler,
-                              ProtocolSession session )
-    {
-        VmPipeSession vps = ( VmPipeSession ) session;
-        nextHandler.sessionClosed( session );
-
-        if( vps.remoteSession.isConnected() )
-            vps.remoteFilterManager.fireSessionClosed( vps.remoteSession );
-    }
 }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java	Wed Dec 29 01:16:58 2004
@@ -39,6 +39,11 @@
 
     private class Worker extends Thread
     {
+        private Worker()
+        {
+            super( "VmPipeIdleStatusChecker" );
+            setDaemon( true );
+        }
 
         public void run()
         {

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java&r1=123610&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java	Wed Dec 29 01:16:58 2004
@@ -109,9 +109,11 @@
     {
         synchronized( lock )
         {
-            if( remoteSession.closed )
+            if( closed )
                 return;
-            remoteSession.closed = true;
+
+            closed = remoteSession.closed = true;
+            localFilterManager.fireSessionClosed( this );
             remoteFilterManager.fireSessionClosed( remoteSession );
         }
     }

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/package.html
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/package.html?view=auto&rev=123611
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/package.html	Wed Dec 29 01:16:58 2004
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+</head>
+<body>
+In-VM pipe support which removes the overhead of local loopback communication.
+
+<h1>What is 'in-VM pipe'?</h1>
+<p>
+    In-VM pipe is a direct event forwarding mechanism between two
+	<a href="ProtocolHandlder.html"><code>ProtocolHandler</code></a>s in the
+    same Java Virtual Machine.  Using in-VM pipe, you can remove the overhead
+    of encoding and decoding which is caused uselessly by local loopback
+    network communication.  Here are some useful situations possible:
+    <ul>
+        <li>SMTP server and SPAM filtering server,</li>
+        <li>web server and Servlet/JSP container.</li>
+    </ul>
+</p>
+<p>
+    Please refer to
+    <a href="../../../../../xref-examples/org/apache/mina/examples/tennis/Main.html">Tennis</a>
+    example.
+</p>
+</body>
+</html>

Modified: incubator/directory/network/trunk/mina/xdocs/index.xml
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/xdocs/index.xml?view=diff&rev=123611&p1=incubator/directory/network/trunk/mina/xdocs/index.xml&r1=123610&p2=incubator/directory/network/trunk/mina/xdocs/index.xml&r2=123611
==============================================================================
--- incubator/directory/network/trunk/mina/xdocs/index.xml	(original)
+++ incubator/directory/network/trunk/mina/xdocs/index.xml	Wed Dec 29 01:16:58 2004
@@ -1,39 +1,66 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <document>
-	<properties>
-		<author email="trustin@apache.org">Trustin Lee</author>
-		<title>Overview</title>
-	</properties>
+    <properties>
+        <author email="trustin@apache.org">Trustin Lee</author>
+        <title>Overview</title>
+    </properties>
 
-	<body>
-		<section name="Introduction">
-			<p>
-				MINA (Multipurpose Infrastructure for Network Applications) is a
-				network application framework which helps users develop high
-				performance and high scalability network applications easily.
-			</p>
-			<p>
-				MINA will be a simple yet full-featured network application which
-				provides:
-				<ul>
-					<li>Support for TCP and UDP transport types,</li>
-					<li>Support for both server (inetd-like) and client side,</li>
-					<li>Unit testability,</li>
-					<li>JMX managability,</li>
-					<li>Traffic throttling,</li>
-					<li>Overload shielding,</li>
-					<li>Integration with well known containers such as Spring and OSGi,
-						</li>
-				</ul>
-			</p>
-		</section>
+    <body>
+        <section name="Introduction">
+            <p>
+                MINA (Multipurpose Infrastructure for Network Applications) is a
+                network application framework which helps users develop high
+                performance and high scalability network applications easily.
+            </p>
+            <p>
+                MINA will be a simple yet full-featured network application which
+                provides:
+                <ul>
+                    <li>Support for TCP and UDP transport types,</li>
+                    <li>Support for both server (inetd-like) and client side,</li>
+                    <li>Unit testability,</li>
+                    <li>JMX managability,</li>
+                    <li>Traffic throttling,</li>
+                    <li>Overload shielding,</li>
+                    <li>Integration with well known containers such as Spring and OSGi,
+                        </li>
+                </ul>
+            </p>
+        </section>
 		
-		<section name="Getting Started">
-			<p>
-				Tutorial is under construction.  Please start from
-				<a href="xref-examples/index.html">examples</a> referring
-				to <a href="apidocs/index.html">JavaDocs</a>.
-			</p>
-		</section>
-	</body>
+        <section name="Getting Started">
+            <p>
+                Tutorial is under construction.  Please start from
+                <a href="xref-examples/index.html">examples</a> referring
+                to <a href="apidocs/index.html">JavaDocs</a>.
+                <table>
+                    <tr>
+                        <th>Name</th>
+                        <th>Feature it demonstrates</th>
+                        <th>Side</th>
+                    </tr>
+                    <tr>
+                        <td><a href="xref-examples/org/apache/mina/examples/reverser/index.html">Reverser</a></td>
+                        <td>High-level protocol layer</td>
+                        <td>Server</td>
+                    </tr>
+                    <tr>
+                        <td><a href="xref-examples/org/apache/mina/examples/echoserver/index.html">Echo server</a></td>
+                        <td>Low-level I/O layer</td>
+                        <td>Server</td>
+                    </tr>
+                    <tr>
+                        <td><a href="xref-examples/org/apache/mina/examples/netcat/index.html">NetCat</a></td>
+                        <td>Low-level I/O layer</td>
+                        <td>Client</td>
+                    </tr>
+                    <tr>
+                        <td><a href="xref-examples/org/apache/mina/examples/tennis/index.html">Tennis</a></td>
+                        <td>In-VM pipe support in protocol layer.</td>
+                        <td>Both</td>
+                    </tr>
+                </table>
+            </p>
+        </section>
+    </body>
 </document>